Class: Advanced::Search
- Inherits:
-
Pipey::Chain
- Object
- Pipey::Chain
- Advanced::Search
- Extended by:
- Pipey::Extensions::IgnoreNil, Pipey::Extensions::RequiredKeys
- Defined in:
- lib/advanced/search.rb
Class Method Summary collapse
- .define_search(name, requirements = [], permits = [], &block) ⇒ Object
- .definition ⇒ Object
- .parameter_names ⇒ Object
- .scope(name = :search) ⇒ Object
- .use(other) ⇒ Object
Instance Method Summary collapse
Class Method Details
.define_search(name, requirements = [], permits = [], &block) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/advanced/search.rb', line 30 def define_search(name, requirements = [], permits = [], &block) definition.add(requirements) definition.add(permits) define_method "search_#{name}" do |**opts| if requirements.all? { |k| opts[k] } instance_exec( *opts.values_at(*requirements), *opts.values_at(*permits), &block ) end end end |
.definition ⇒ Object
12 13 14 |
# File 'lib/advanced/search.rb', line 12 def definition @definition ||= Definition.new end |
.parameter_names ⇒ Object
16 17 18 |
# File 'lib/advanced/search.rb', line 16 def parameter_names definition.parameter_names_for(self) end |
.scope(name = :search) ⇒ Object
26 27 28 |
# File 'lib/advanced/search.rb', line 26 def scope(name = :search) Builders::Scope.new(self, name) end |
.use(other) ⇒ Object
20 21 22 23 24 |
# File 'lib/advanced/search.rb', line 20 def use(other) define_method "search_#{other.name}" do |**opts| other.call(scope, **opts) end end |
Instance Method Details
#call(params = {}) ⇒ Object
48 49 50 |
# File 'lib/advanced/search.rb', line 48 def call(params = {}) super(params.to_h) end |