class GOA::RakeTasks
Attributes
application_config_database_environment[R]
engine_root[R]
engine_task_namespace[R]
schema_format[R]
Public Class Methods
new(engine_task_namespace = nil, options = {})
click to toggle source
# File lib/goa/rake_tasks.rb, line 22 def initialize(engine_task_namespace = nil, options = {}) @engine_task_namespace = engine_task_namespace || caller.first.match(/.*\/([^:.]+)/)[1] @engine_root = options[:engine_root] || File.join(caller.first.match(/(.*)\//)[1], '..', '..') @application_config_database_environment = options[:application_config_database_environment] @schema_format = options[:schema_format] end
Public Instance Methods
add_rake_tasks()
click to toggle source
# File lib/goa/rake_tasks.rb, line 29 def add_rake_tasks() extend Rake::DSL namespace engine_task_namespace do # https://gist.github.com/rafaelchiti/5575309 namespace(:db) do %w(drop create migrate rollback seed version schema:load schema:dump test:prepare).each do |name| desc "Run #{name} for #{engine_task_namespace} gem" task name do invoke_engine_task("db:#{name}") end end end task :startup do @orig_db = Rails.application.config.paths['db'] @orig_db_migrate = Rails.application.config.paths['db/migrate'] @orig_db_seeds = Rails.application.config.paths['db/seeds'] @orig_db_config = Rails.application.config.paths['config/database'] @orig_schema_format = ActiveRecord::Base.schema_format @orig_env_schema = ENV['SCHEMA'] @orig_env_structure = ENV['DB_STRUCTURE'] end task :setup do %w(db:load_config db:structure:load db:test:purge db:schema:load db:schema:dump db:test:load_structure db:test:clone_structure).each do |name| Rake::Task[name].reenable end { 'db' => 'db', 'db/migrate' => 'db/migrate', 'db/seeds' => 'db/seeds.rb', 'config/database' => database_config_file_path }.each do |key, value| Rails.application.config.paths[key] = [File.join(engine_root, value)] end ActiveRecord::Base.schema_format = schema_format if schema_format ENV['SCHEMA'] = File.join(engine_root, 'db', 'schema.rb') ENV['DB_STRUCTURE'] = File.join(engine_root, 'db', 'structure.sql') reset_current_config Rake::Task["db:load_config"].execute # load config after we made our changes @orig_connection_config = ActiveRecord::Base.connection_config if ActiveRecord::Base.connected? and @orig_connection_config.nil? ActiveRecord::Base.establish_connection(engine_database_config) end task :teardown do ActiveRecord::Base.establish_connection(@orig_connection_config) if @orig_connection_config { 'db' => @orig_db, 'db/migrate' => @orig_db_migrate, 'db/seeds' => @orig_db_seeds, 'config/database' => @orig_db_config }.each do |key, value| Rails.application.config.paths[key] = value end ActiveRecord::Base.schema_format = @orig_schema_format ENV['SCHEMA'] = @orig_env_schema ENV['DB_STRUCTURE'] = @orig_env_structure Rake::Task["db:load_config"].tap { |t| t.execute; t.reenable } # restore original config after done reset_current_config end end # Make tasks that invoke both supply client and bomb db tasks %w(db:drop db:create db:migrate db:rollback db:seed db:version db:schema:load db:schema:dump db:test:prepare).each do |name| desc "Run #{name} for app and model gems" task "app:#{name}" => ["#{engine_task_namespace}:#{name}", name] task "#{engine_task_namespace}:#{name}" => ["#{engine_task_namespace}:startup", "#{engine_task_namespace}:setup"] do Rake::Task["#{engine_task_namespace}:setup"].reenable Rake::Task["#{engine_task_namespace}:teardown"].execute end end end
Private Instance Methods
database_config_file_path()
click to toggle source
# File lib/goa/rake_tasks.rb, line 119 def database_config_file_path full_path = ::GOA::Config.database_config_file_path(engine_root) relative_path = full_path[engine_root.length..-1].gsub(/^\/?/, '') relative_path end
engine_database_config()
click to toggle source
# File lib/goa/rake_tasks.rb, line 115 def engine_database_config @database_config ||= ::GOA::Config.database_config(engine_root, application_config_database_environment) end
invoke_engine_task(name)
click to toggle source
# File lib/goa/rake_tasks.rb, line 127 def invoke_engine_task(name) already_invoked = Rake::Task[name].already_invoked? Rake::Task[name].execute # use execute to run even if run before Rake::Task[name].reenable unless already_invoked # reenable task if it wasn't run before our execute end