core/lib/generators/gaku/dummy/dummy_generator.rb
require 'rails/generators/rails/app/app_generator'
module Gaku
class DummyGenerator < Rails::Generators::Base
desc 'Creates blank Rails application, installs Gaku and all sample data'
class_option :lib_name, default: ''
def self.source_paths
paths = superclass.source_paths
paths << File.expand_path('../templates', __FILE__)
paths.flatten
end
def clean_up
remove_directory_if_exists(dummy_path)
end
PASSTHROUGH_OPTIONS = [
:skip_active_record, :skip_javascript, :javascript, :quiet, :pretend, :force, :skip
]
def generate_test_dummy
opts = (options || {}).slice(*PASSTHROUGH_OPTIONS)
opts[:force] = true
opts[:skip_bundle] = true
opts[:old_style_hash] = true
puts 'Generating dummy Rails application...'
invoke Rails::Generators::AppGenerator, [File.expand_path(dummy_path, destination_root)], opts
end
def test_dummy_config
@lib_name = options[:lib_name]
template 'rails/database.yml', "#{dummy_path}/config/database.yml", force: true
template 'rails/boot.rb', "#{dummy_path}/config/boot.rb", force: true
template 'rails/application.rb', "#{dummy_path}/config/application.rb", force: true
template 'rails/routes.rb', "#{dummy_path}/config/routes.rb", force: true
template 'rails/script/rails', "#{dummy_path}/spec/dummy/script/rails", force: true
end
def test_dummy_clean
inside dummy_path do
remove_file '.gitignore'
remove_file 'doc'
remove_file 'Gemfile'
remove_file 'lib/tasks'
remove_file 'app/assets/images/rails.png'
remove_file 'app/assets/javascripts/application.js'
remove_file 'public/index.html'
remove_file 'public/robots.txt'
remove_file 'README'
remove_file 'test'
remove_file 'vendor'
remove_file 'spec'
end
end
attr_reader :lib_name
protected
def dummy_path
ENV['DUMMY_PATH'] || 'spec/dummy'
end
def module_name
'Dummy'
end
def application_definition
@application_definition ||= begin
dummy_application_path = File.expand_path("#{dummy_path}/config/application.rb", destination_root)
unless options[:pretend] || !File.exist?(dummy_application_path)
contents = File.read(dummy_application_path)
contents[(contents.index("module #{module_name}"))..-1]
end
end
end
alias_method :store_application_definition!, :application_definition
def camelized
@camelized ||= name.gsub(/\W/, '_').squeeze('_').camelize
end
def remove_directory_if_exists(path)
remove_dir(path) if File.directory?(path)
end
def gemfile_path
version_file = File.expand_path('../../Versionfile', Dir.pwd)
if File.exist?(version_file)
'../../../../Gemfile'
else
'../../../../../Gemfile'
end
end
end
end