123456789_123456789_123456789_123456789_123456789_

Module: Rails::Generators::Testing::Behavior

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Defined in: railties/lib/rails/generators/testing/behavior.rb

Class Method Summary

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

append_features, prepend_features

Instance Attribute Summary

Instance Method Summary

DSL Calls

included

[ GitHub ]


18
19
20
21
22
23
24
25
# File 'railties/lib/rails/generators/testing/behavior.rb', line 18

included do
  # Generators frequently change the current path using FileUtils.cd.
  # So we need to store the path at file load and revert back to it after each test.
  class_attribute :current_path, default: File.expand_path(Dir.pwd)
  class_attribute :default_arguments, default: []
  class_attribute :destination_root
  class_attribute :generator_class
end

Instance Attribute Details

#destination_root_is_set?Boolean (readonly, private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 94

def destination_root_is_set?
  raise "You need to configure your Rails::Generators::TestCase destination root." unless destination_root
end

Instance Method Details

#create_generated_attribute(attribute_type, name = "test", index = nil)

Create a ::Rails::Generators::GeneratedAttribute by supplying the attribute type and, optionally, the attribute name:

create_generated_attribute(:string, "name")
[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 89

def create_generated_attribute(attribute_type, name = "test", index = nil)
  Rails::Generators::GeneratedAttribute.parse([name, attribute_type, index].compact.join(":"))
end

#ensure_current_path (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 98

def ensure_current_path
  cd current_path
end

#generator(args = default_arguments, options = {}, config = {})

Instantiate the generator.

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 81

def generator(args = default_arguments, options = {}, config = {})
  @generator ||= generator_class.new(args, options, config.reverse_merge(destination_root: destination_root))
end

#migration_file_name(relative) (private)

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 108

def migration_file_name(relative)
  absolute = File.expand_path(relative, destination_root)
  dirname, file_name = File.dirname(absolute), File.basename(absolute).delete_suffix(".rb")
  Dir.glob("#{dirname}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first
end

#prepare_destination (private)

Clears all files and directories in destination.

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 103

def prepare_destination # :doc:
  rm_rf(destination_root)
  mkdir_p(destination_root)
end

#run_generator(args = default_arguments, config = {})

Runs the generator configured for this class. The first argument is an array like command line arguments:

class AppGeneratorTest < Rails::Generators::TestCase
  tests AppGenerator
  destination File.expand_path("../tmp", __dir__)
  setup :prepare_destination

  test "database.yml is not created when skipping Active Record" do
    run_generator %w(myapp --skip-active-record)
    assert_no_file "config/database.yml"
  end
end

You can provide a configuration hash as second argument. This method returns the output printed by the generator.

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 67

def run_generator(args = default_arguments, config = {})
  args += ["--skip-bundle"] unless args.include?("--no-skip-bundle") || args.include?("--dev")
  args += ["--skip-bootsnap"] unless args.include?("--no-skip-bootsnap") || args.include?("--skip-bootsnap")

  if ENV["RAILS_LOG_TO_STDOUT"] == "true"
    generator_class.start(args, config.reverse_merge(destination_root: destination_root))
  else
    capture(:stdout) do
      generator_class.start(args, config.reverse_merge(destination_root: destination_root))
    end
  end
end