Sha256: 5cefc80ecfd73572e7dcf5609eddf025b1327354c395adc60aa8cfd0f3b83ee3
Contents?: true
Size: 1.45 KB
Versions: 3
Compression:
Stored size: 1.45 KB
Contents
module SearchObject module Base def self.included(base) base.extend ClassMethods base.instance_eval do @config = { defaults: {}, actions: {}, scope: nil } end end def initialize(options = {}) @search = Search.build_for self.class.config, options end def results @results ||= fetch_results end def results? results.any? end def count @count ||= @search.count self end def params(additions = {}) if additions.empty? @search.params else @search.params.merge Helper.stringify_keys(additions) end end private def fetch_results @search.query self end module ClassMethods attr_reader :config def inherited(base) base.instance_variable_set '@config', Helper.deep_copy(config) end def scope(&block) config[:scope] = block end def option(name, options = nil, &block) options = { default: options } unless options.is_a?(Hash) name = name.to_s default = options[:default] handler = options[:with] || block config[:defaults][name] = default unless default.nil? config[:actions][name] = Helper.normalize_search_handler(handler, name) define_method(name) { @search.param name } end def results(*args) new(*args).results end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
search_object-1.1.3 | lib/search_object/base.rb |
search_object-1.1.2 | lib/search_object/base.rb |
search_object-1.1.1 | lib/search_object/base.rb |