- 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 106 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 132 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"
gem "rspec", comment: "Put this comment above the gem declaration"
# File railties/lib/rails/generators/actions.rb, line 22 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 # Output a comment above the gem declaration. comment = options.delete(:comment) 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 = [] if comment comment.each_line do |comment_line| str << indentation str << "# #{comment_line}" end str << "\n" end str << indentation str << "gem #{parts.join(", ")}" append_file_with_newline "Gemfile", str.join, 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 66 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 80 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 263 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 281 def route(routing_code, namespace: nil) namespace = Array(namespace) namespace_pattern = route_namespace_pattern(namespace) routing_code = namespace.reverse.reduce(routing_code) do |code, name| "namespace :#{name} do\n#{rebase_indentation(code, 2)}end" end log :route, routing_code in_root do if namespace_match = match_file("config/routes.rb", namespace_pattern) base_indent, *, existing_block_indent = namespace_match.captures.compact.map(&:length) existing_line_pattern = /^[ ]{,#{existing_block_indent}}\S.+\n?/ routing_code = rebase_indentation(routing_code, base_indent + 2).gsub(existing_line_pattern, "") namespace_pattern = /#{Regexp.escape namespace_match.to_s}/ end inject_into_file "config/routes.rb", routing_code, after: namespace_pattern, verbose: false, force: false if behavior == :revoke && namespace.any? && namespace_match empty_block_pattern = /(#{namespace_pattern})((?:\s*end\n){1,#{namespace.size}})/ gsub_file "config/routes.rb", empty_block_pattern, verbose: false, force: true do |matched| beginning, ending = empty_block_pattern.match(matched).captures ending.sub!(/\A\s*end\n/, "") while !ending.empty? && beginning.sub!(/^[ ]*namespace .+ do\n\s*\z/, "") beginning + ending end end 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 333 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
Always returns value in double quotes.