Class: Advanced::Search

Inherits:
Pipey::Chain
  • Object
show all
Extended by:
Pipey::Extensions::IgnoreNil, Pipey::Extensions::RequiredKeys
Defined in:
lib/advanced/search.rb

Class Method Summary collapse

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

.definitionObject



12
13
14
# File 'lib/advanced/search.rb', line 12

def definition
  @definition ||= Definition.new
end

.parameter_namesObject



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