2014-01-06 29 views
1

在一些教程的幫助下,我做了第一個簡單的寶石,它將Sass/CSS文件添加到應用程序的assets/stylesheets目錄。Rails:製作你自己的寶石

這很尷尬,但問題是我不知道如何在應用程序中運行我的寶石。

gemspec:

# coding: utf-8 
lib = File.expand_path('../lib', __FILE__) 
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 
require 'example/version' 

Gem::Specification.new do |spec| 
    spec.name   = "Example" 
    spec.version  = Example::VERSION 
    spec.authors  = ["***"] 
    spec.email   = ["***"] 
    spec.description = %q{Provide CSS styles} 
    spec.summary  = %q{Provide CSS styles} 
    spec.homepage  = "" 
    spec.license  = "MIT" 

    spec.files   = `git ls-files`.split($/) 
    spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 
    spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 
    spec.require_paths = ["lib"] 

    spec.add_development_dependency "bundler", "~> 1.3" 
    spec.add_development_dependency "rake" 
    spec.add_development_dependency "redcarpet", "~> 1.17" 
    spec.add_development_dependency "yard", "~> 0.7.5" 
end 

example.rb:

require "example/version" 

module Example 

    def self.install 
     original_dir = Dir["/lib/example/*.css.scss"] 
     original_dir.each do |f| 
      name = File.basename('main', '.css.scss') 
      destination_dir = "/app/assets/stylesheets/#{name}" 
      FileUtils.cp(main, destination_folder) 
     end 
    end 

end 

Rake文件:

require "bundler/gem_tasks" 
require 'yard' 
YARD::Rake::YardocTask.new 

我認爲我應該寫一些rake任務,但我不是很確定我該怎麼做。

謝謝!

+0

爲什麼你不知道嗎?將gem的鏈接添加到項目的使用gem的** Gemfile **中,如下所示:gem'youe_gem_name',:path =>'/ path/to/your/gem/root'。然後從其他項目文件夾發出'bundle install'。如果它是一個rails應用程序,只需運行rails。並從rails配置中調用'Example.install'。 –

+0

當然,我將它添加到Gemfile中。但正如你可以在'example.rb'看到的,我的gem正在將'main.css.scss'添加到'app/assets/stylesheets'。我安裝了寶石,但不知道如何使它工作 –

+0

我看到了兩個不一致:你評估destination_dir,但是然後使用destination_folder,然後你枚舉f,但是不要使用它。 –

回答

1

我學會了如何解決我的問題。從gem文件運行ruby代碼的最好方法是將其移動到rails generator。比如創建文件lib/generators/initializer_generator.rb其中包含你的代碼(我把爲例):

class InitializerGenerator < Rails::Generators::Base 
    def create_initializer_file 
    create_file "config/initializers/initializer.rb", "# Add initialization content here" 
    end 
end 

你的寶石再加入到Gemfile文件,安裝並運行rails g initializer