class Erd::GenaratorRunner

Public Class Methods

execute_generate_migration(name, options = nil) click to toggle source

runs `rails g migration [name]` @return generated migration filename

# File lib/erd/generator_runner.rb, line 17
def execute_generate_migration(name, options = nil)
  result = execute_generator 'migration', name, options
  result.last.last
end
execute_generate_model(name, options = nil) click to toggle source

runs `rails g model [name]` @return generated migration filename

# File lib/erd/generator_runner.rb, line 10
def execute_generate_model(name, options = nil)
  result = execute_generator 'model', name, options
  result.flatten.grep(%r(/db/migrate/.*\.rb))
end

Private Class Methods

execute_generator(type, name, options = nil) click to toggle source
# File lib/erd/generator_runner.rb, line 34
def execute_generator(type, name, options = nil)
  overwriting_argv([name, options]) do
    Rails::Generators.configure! Rails.application.config.generators
    result = Rails::Generators.invoke type, [name, options], :behavior => :invoke, :destination_root => Rails.root
    raise ::Erd::MigrationError, "#{name}#{"(#{options})" if options}" unless result
    result
  end
end
overwriting_argv(value, &block) click to toggle source

a dirty workaround to make rspec-rails run

# File lib/erd/generator_runner.rb, line 24
def overwriting_argv(value, &block)
  original_argv = ARGV.dup
  ARGV.clear
  ARGV.concat value
  block.call
ensure
  ARGV.clear
  ARGV.concat original_argv
end