Sha256: 9ee9b71d4f8caad50b62bf461945b0f8fc4088f8049652edeb4ef2e00fc6dce4
Contents?: true
Size: 908 Bytes
Versions: 1
Compression:
Stored size: 908 Bytes
Contents
module SearchObject class Search attr_reader :params class << self def build_for(config, options) scope = options.fetch(:scope) { config[:scope] && config[:scope].call } filters = Helper.stringify_keys(options.fetch(:filters, {})) params = config[:defaults].merge Helper.slice_keys(filters, config[:actions].keys) raise MissingScopeError unless scope new scope, params, config[:actions] end end def initialize(scope, params, actions) @scope = scope @actions = actions @params = params end def param(name) @params[name] end def query(context) @params.inject(@scope) do |scope, (name, value)| new_scope = context.instance_exec scope, value, &@actions[name] new_scope || scope end end def count(context) query(context).count end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
search_object-1.1.2 | lib/search_object/search.rb |