module EsSearchable module Configurable def self.extended(base) base.const_set :SearchMethods, [:where, :like, :limit, :offset, :or, :not, :select, :and] base.const_set :DEFAULTS, { log: true, retry_on_failure: 5, async_callback: true, queue: 'elasticsearch', reload_on_failure: true, hosts: ['localhost:9200'], logger: defined?(Rails) ? Logger.new($stdout) : nil, } base.class_eval do DEFAULTS.each do |k, v| self.define_singleton_method "#{k}=" do |value| self.options.merge!(k => value) end self.define_singleton_method k do self.options[k] end end end end def configure yield self end def options @options ||= DEFAULTS.dup end def options=(opts) @options = opts end end end