module Realm::Elasticsearch::RakeTasks

Public Class Methods

setup(engine_name, engine_root: nil, url: ENV['ELASTICSEARCH_URL']) click to toggle source
# File lib/realm/elasticsearch/rake_tasks.rb, line 9
def setup(engine_name, engine_root: nil, url: ENV['ELASTICSEARCH_URL'])
  return unless url

  client = ::Elasticsearch::Client.new(url: url)

  Rake.application.in_namespace(:es) do
    Rake::Task.define_task(:create_indexes) do
      with_definitions(engine_name, engine_root) do |index, config|
        client.indices.create(index: index, body: config) unless client.indices.exists(index: index)
      end
    end

    Rake::Task.define_task(:drop_indexes) do
      with_definitions(engine_name, engine_root) do |index, _config|
        client.indices.delete(index: index) if client.indices.exists(index: index)
      end
    end
  end
end

Private Class Methods

with_definitions(engine_name, engine_root) { |basename(path, '.yaml'), safe_load(read)| ... } click to toggle source
# File lib/realm/elasticsearch/rake_tasks.rb, line 31
def with_definitions(engine_name, engine_root)
  engine_root ||= Rails.root.join('engines', engine_name.to_s)
  Dir.glob(File.join(engine_root, 'elasticsearch/indexes/*.yaml')).each do |path|
    yield File.basename(path, '.yaml'), YAML.safe_load(File.read(path))
  end
end