Module: Beet::Rails
- Included in:
- Executor
- Defined in:
- lib/beet/rails.rb
Instance Method Summary collapse
-
#environment(data = nil, options = {}, &block) ⇒ Object
Adds a line inside the Initializer block for config/environment.rb.
-
#freeze!(args = {}) ⇒ Object
Add Rails to /vendor/rails.
-
#gem(name, options = {}) ⇒ Object
Adds an entry into config/environment.rb for the supplied gem :.
-
#generate(what, *args) ⇒ Object
Generate something using a generator from Rails or a plugin.
-
#initializer(filename, data = nil, &block) ⇒ Object
Create a new initializer with the provided code (either in a block or a string).
-
#plugin(name, options) ⇒ Object
Install a plugin.
-
#route(routing_code) ⇒ Object
Make an entry in Rails routing file conifg/routes.rb.
-
#vendor(filename, data = nil, &block) ⇒ Object
Create a new file in the vendor/ directory.
Instance Method Details
#environment(data = nil, options = {}, &block) ⇒ Object
Adds a line inside the Initializer block for config/environment.rb. Used by #gem If options :env is specified, the line is appended to the corresponding file in config/environments/#env.rb
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/beet/rails.rb', line 74 def environment(data = nil, = {}, &block) sentinel = 'Rails::Initializer.run do |config|' data = block.call if !data && block_given? in_root do if [:env].nil? gsub_file 'config/environment.rb', /(#{Regexp.escape(sentinel)})/mi do |match| "#{match}\n " << data end else Array.wrap([:env]).each do|env| append_file "config/environments/#{env}.rb", "\n#{data}" end end end end |
#freeze!(args = {}) ⇒ Object
Add Rails to /vendor/rails
Example
freeze!
26 27 28 29 |
# File 'lib/beet/rails.rb', line 26 def freeze!(args = {}) log 'vendor', 'rails edge' in_root { run('rake rails:freeze:edge', false) } end |
#gem(name, options = {}) ⇒ Object
Adds an entry into config/environment.rb for the supplied gem :
57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/beet/rails.rb', line 57 def gem(name, = {}) log 'gem', name env = .delete(:env) gems_code = "config.gem '#{name}'" if .any? opts = .inject([]) {|result, h| result << [":#{h[0]} => #{h[1].inspect.gsub('"',"'")}"] }.sort.join(", ") gems_code << ", #{opts}" end environment gems_code, :env => env end |
#generate(what, *args) ⇒ Object
Generate something using a generator from Rails or a plugin. The second parameter is the argument string that is passed to the generator or an Array that is joined.
Example
generate(:authenticated, "user session")
139 140 141 142 143 144 |
# File 'lib/beet/rails.rb', line 139 def generate(what, *args) log 'generating', what argument = args.map {|arg| arg.to_s }.flatten.join(" ") in_root { run_ruby_script("script/generate #{what} #{argument}", false) } end |
#initializer(filename, data = nil, &block) ⇒ Object
Create a new initializer with the provided code (either in a block or a string).
Examples
initializer("globals.rb") do
data = ""
['MY_WORK', 'ADMINS', 'BEST_COMPANY_EVAR'].each do
data << "#{const} = :entp"
end
data
end
initializer("api.rb", "API_KEY = '123456'")
126 127 128 129 |
# File 'lib/beet/rails.rb', line 126 def initializer(filename, data = nil, &block) log 'initializer', filename file("config/initializers/#{filename}", data, false, &block) end |
#plugin(name, options) ⇒ Object
Install a plugin. You must provide either a Subversion url or Git url. For a Git-hosted plugin, you can specify if it should be added as a submodule instead of cloned.
Examples
plugin 'restful-authentication', :git => 'git://github.com/technoweenie/restful-authentication.git'
plugin 'restful-authentication', :git => 'git://github.com/technoweenie/restful-authentication.git', :submodule => true
plugin 'restful-authentication', :svn => 'svn://svnhub.com/technoweenie/restful-authentication/trunk'
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/beet/rails.rb', line 40 def plugin(name, ) log 'plugin', name if [:git] && [:submodule] in_root do Git.run("submodule add #{[:git]} vendor/plugins/#{name}") end elsif [:git] || [:svn] in_root do run_ruby_script("script/plugin install #{[:svn] || [:git]}", false) end else log "! no git or svn provided for #{name}. skipping..." end end |
#route(routing_code) ⇒ Object
Make an entry in Rails routing file conifg/routes.rb
Example
route "map.root :controller => :welcome"
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/beet/rails.rb', line 9 def route(routing_code) log 'route', routing_code sentinel = 'ActionController::Routing::Routes.draw do |map|' in_root do gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match| "#{match}\n #{routing_code}\n" end end end |
#vendor(filename, data = nil, &block) ⇒ Object
Create a new file in the vendor/ directory. Code can be specified in a block or a data string can be given.
Examples
vendor("sekrit.rb") do
sekrit_salt = "#{Time.now}--#{3.years.ago}--#{rand}--"
"salt = '#{sekrit_salt}'"
end
vendor("foreign.rb", "# Foreign code is fun")
104 105 106 107 |
# File 'lib/beet/rails.rb', line 104 def vendor(filename, data = nil, &block) log 'vendoring', filename file("vendor/#{filename}", data, false, &block) end |