- A
- E
- G
- I
- L
- O
- Q
- R
- V
- W
Instance Public methods
add_source(source, options = {}, &block) Link
Add the given source to Gemfile
If block is given, gem entries in block are wrapped into the source group.
add_source "http://gems.github.com/"
add_source "http://gems.github.com/" do
gem "rspec-rails"
end
# File railties/lib/rails/generators/actions.rb, line 94 def add_source(source, options = {}, &block) log :source, source in_root do if block append_file_with_newline "Gemfile", "\nsource #{quote(source)} do", force: true with_indentation(&block) append_file_with_newline "Gemfile", "end", force: true else prepend_file "Gemfile", "source #{quote(source)}\n", verbose: false end end end
environment(data = nil, options = {}) Link
Adds a line inside the Application
class for config/application.rb
.
If options :env
is specified, the line is appended to the corresponding file in config/environments
.
environment do
"config.asset_host = 'cdn.provider.com'"
end
environment(nil, env: "development") do
"config.asset_host = 'localhost:3000'"
end
# File railties/lib/rails/generators/actions.rb, line 120 def environment(data = nil, options = {}) sentinel = "class Application < Rails::Application\n" env_file_sentinel = "Rails.application.configure do\n" data ||= yield if block_given? in_root do if options[:env].nil? inject_into_file "config/application.rb", optimize_indentation(data, 4), after: sentinel, verbose: false else Array(options[:env]).each do |env| inject_into_file "config/environments/#{env}.rb", optimize_indentation(data, 2), after: env_file_sentinel, verbose: false end end end end
gem(*args) Link
Adds an entry into Gemfile
for the supplied gem.
gem "rspec", group: :test
gem "technoweenie-restful-authentication", lib: "restful-authentication", source: "http://gems.github.com/"
gem "rails", "3.0", git: "https://github.com/rails/rails"
gem "RedCloth", ">= 4.1.0", "< 4.2.0"
# File railties/lib/rails/generators/actions.rb, line 21 def gem(*args) options = args.extract_options! name, *versions = args # Set the message to be shown in logs. Uses the git repo if one is given, # otherwise use name (version). parts, message = [ quote(name) ], name.dup if versions = versions.any? ? versions : options.delete(:version) _versions = Array(versions) _versions.each do |version| parts << quote(version) end message << " (#{_versions.join(", ")})" end message = options[:git] if options[:git] log :gemfile, message parts << quote(options) unless options.empty? in_root do str = "gem #{parts.join(", ")}" str = indentation + str append_file_with_newline "Gemfile", str, verbose: false end end
gem_group(*names, &block) Link
Wraps gem entries inside a group.
gem_group :development, :test do
gem "rspec-rails"
end
# File railties/lib/rails/generators/actions.rb, line 54 def gem_group(*names, &block) options = names.extract_options! str = names.map(&:inspect) str << quote(options) unless options.empty? str = str.join(", ") log :gemfile, "group #{str}" in_root do append_file_with_newline "Gemfile", "\ngroup #{str} do", force: true with_indentation(&block) append_file_with_newline "Gemfile", "end", force: true end end
generate(what, *args) Link
git(commands = {}) Link
Run a command in git.
git :init
git add: "this.file that.rb"
git add: "onefile.rb", rm: "badfile.cxx"
github(repo, options = {}, &block) Link
# File railties/lib/rails/generators/actions.rb, line 68 def github(repo, options = {}, &block) str = [quote(repo)] str << quote(options) unless options.empty? str = str.join(", ") log :github, "github #{str}" in_root do if @indentation.zero? append_file_with_newline "Gemfile", "\ngithub #{str} do", force: true else append_file_with_newline "Gemfile", "#{indentation}github #{str} do", force: true end with_indentation(&block) append_file_with_newline "Gemfile", "#{indentation}end", force: true end end
initializer(filename, data = nil) Link
Create a new initializer with the provided code (either in a block or a string).
initializer("globals.rb") do
data = ""
['MY_WORK', 'ADMINS', 'BEST_COMPANY_EVAR'].each do |const|
data << "#{const} = :entp\n"
end
data
end
initializer("api.rb", "API_KEY = '123456'")
lib(filename, data = nil) Link
Create a new file in the lib/
directory. Code can be specified in a block or a data string can be given.
lib("crypto.rb") do
"crypted_special_value = '#{rand}--#{Time.now}--#{rand(1337)}--'"
end
lib("foreign.rb", "# Foreign code is fun")
rails_command(command, options = {}) Link
Runs the supplied rake task (invoked with 'rails …')
rails_command("db:migrate")
rails_command("db:migrate", env: "production")
rails_command("gems:install", sudo: true)
rails_command("gems:install", capture: true)
# File railties/lib/rails/generators/actions.rb, line 251 def rails_command(command, options = {}) if options[:inline] log :rails, command command, *args = Shellwords.split(command) in_root do silence_warnings do ::Rails::Command.invoke(command, args, **options) end end else execute_command :rails, command, options end end
rake(command, options = {}) Link
Runs the supplied rake task (invoked with 'rake …')
rake("db:migrate")
rake("db:migrate", env: "production")
rake("gems:install", sudo: true)
rake("gems:install", capture: true)
rakefile(filename, data = nil) Link
Create a new Rakefile
with the provided code (either in a block or a string).
rakefile("bootstrap.rake") do
project = ask("What is the UNIX name of your project?")
<<-TASK
namespace :#{project} do
task :bootstrap do
puts "I like boots!"
end
end
TASK
end
rakefile('seed.rake', 'puts "Planting seeds"')
readme(path) Link
Reads the given file at the source root and prints it in the console.
readme "README"
route(routing_code, namespace: nil) Link
Make an entry in Rails
routing file config/routes.rb
route "root 'welcome#index'"
route "root 'admin#index'", namespace: :admin
# File railties/lib/rails/generators/actions.rb, line 269 def route(routing_code, namespace: nil) routing_code = Array(namespace).reverse.reduce(routing_code) do |code, ns| "namespace :#{ns} do\n#{indent(code, 2)}\nend" end log :route, routing_code sentinel = /\.routes\.draw do\s*\n/m in_root do inject_into_file "config/routes.rb", optimize_indentation(routing_code, 2), after: sentinel, verbose: false, force: false end end
vendor(filename, data = nil) Link
Create a new file in the vendor/
directory. Code can be specified in a block or a data string can be given.
vendor("sekrit.rb") do
sekrit_salt = "#{Time.now}--#{3.years.ago}--#{rand}--"
"salt = '#{sekrit_salt}'"
end
vendor("foreign.rb", "# Foreign code is fun")
Instance Private methods
execute_command(executor, command, options = {}) Link
Runs the supplied command using either “rake …” or “rails …” based on the executor parameter provided.
# File railties/lib/rails/generators/actions.rb, line 304 def execute_command(executor, command, options = {}) # :doc: log executor, command sudo = options[:sudo] && !Gem.win_platform? ? "sudo " : "" config = { env: { "RAILS_ENV" => (options[:env] || ENV["RAILS_ENV"] || "development") }, verbose: false, capture: options[:capture], abort_on_failure: options[:abort_on_failure], } in_root { run("#{sudo}#{extify(executor)} #{command}", config) } end
extify(name) Link
Add an extension to the given name based on the platform.
indentation() Link
Indent the Gemfile
to the depth of @indentation
log(*args) Link
Define log for backwards compatibility. If just one argument is sent, invoke say, otherwise invoke say_status. Differently from say and similarly to say_status, this method respects the quiet? option given.
optimize_indentation(value, amount = 0) Link
Returns optimized string with indentation
quote(value) Link
Surround string with single quotes if there is no quotes. Otherwise fall back to double quotes
# File railties/lib/rails/generators/actions.rb, line 328 def quote(value) # :doc: if value.respond_to? :each_pair return value.map do |k, v| "#{k}: #{quote(v)}" end.join(", ") end return value.inspect unless value.is_a? String if value.include?("'") value.inspect else "'#{value}'" end end