def apply_to paths, extension, method, klazz
RailsDbViews::Factory.clear! paths.each do |path| RailsDbViews::Factory.register_files klazz, Dir[File.join(path, extension)].map{|x| File.expand_path(x)} end RailsDbViews::Factory.send(method, klazz)
end
namespace :db do
desc "Create all the database views of the current project. Views are usually located in db/views" task :create_views => :environment do config = Rails.configuration.rails_db_views apply_to config.views_paths, config.views_extension, :create, RailsDbViews::View end desc "Drop all the database views of the current project" task :drop_views => :environment do config = Rails.configuration.rails_db_views apply_to config.views_paths, config.views_extension, :drop, RailsDbViews::View end desc "Create or replace all the functions" task :create_functions => :environment do adapter_type = ActiveRecord::Base.connection.adapter_name.downcase.to_sym config = Rails.configuration.rails_db_views if adapter_type != :sqlite apply_to config.functions_paths, config.functions_extension, :create, RailsDbViews::Function else if config.functions_paths.length>=1 || File.is_directory?(config.functions_paths.try(:first)) puts "Notice: db:create_functions will not trigger for sqlite." end end end desc "Remove all the functions (to use manually only)" task :drop_functions => :environment do config = Rails.configuration.rails_db_views apply_to config.functions_paths, config.functions_extension, :drop, RailsDbViews::Function end
end
require ‘rake/hooks’
before(“db:migrate”){ Rake::Task.invoke } before(“db:migrate”){ Rake::Task.invoke } after(“db:migrate”){ Rake::Task.invoke }
before(“db:rollback”){ Rake::Task.invoke } before(“db:rollback”){ Rake::Task.invoke } after(“db:rollback”){ Rake::Task.invoke }