lib/tasks/db.rake
module Slices
module Tasks
def self.create_indexes
pattern = Rails.root.join('app/slices/**/*.rb')
Dir.glob(pattern).each do |file|
model = determine_model(file)
if model
model.create_indexes
Logger.new($stdout).info("Generated indexes for #{model}")
end
end
end
def self.determine_model(file)
segments = file[0 .. -4].split('/')
start = if segments.include?('slices')
segments.rindex('slices') + 2
else
segments.rindex('models') + 1
end
model_path = segments[start .. -1]
klass = model_path.map { |path| path.camelize }.join('::').constantize
if klass.ancestors.include?(::Mongoid::Document) && !klass.embedded
return klass
end
end
end
end
namespace :slices do
namespace :db do
desc "Create indexes for slices models"
task create_indexes: "db:mongoid:create_indexes" do
Slices::Tasks.create_indexes
end
end
namespace :migrate do
desc "Rename description field to meta_description"
task meta_description: :environment do
Page.collection.update({},
{'$rename' => {'description' => 'meta_description'}},
multi: true)
end
end
end