Class: Parascope::Query
Defined Under Namespace
Modules: ApiMethods
Classes: ApiBlock
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from ApiMethods
defaults, guard_blocks, query_blocks, query_by, sift_blocks, sift_by
Constructor Details
#initialize(params, scope: nil, **attrs) ⇒ Query
Returns a new instance of Query.
24
25
26
27
28
29
30
|
# File 'lib/parascope/query.rb', line 24
def initialize(params, scope: nil, **attrs)
@params = Hashie::Mash.new(klass.defaults).merge(params || {})
@scope = scope unless scope.nil?
@attrs = attrs.freeze
@base_params = @params
define_attr_readers
end
|
Instance Attribute Details
#params ⇒ Object
Returns the value of attribute params.
10
11
12
|
# File 'lib/parascope/query.rb', line 10
def params
@params
end
|
#scope ⇒ Object
32
33
34
|
# File 'lib/parascope/query.rb', line 32
def scope
@scope ||= base_scope
end
|
Class Method Details
.build(**attrs) ⇒ Object
20
21
22
|
# File 'lib/parascope/query.rb', line 20
def self.build(**attrs)
new({}, **attrs)
end
|
.inherited(subclass) ⇒ Object
12
13
14
15
16
17
18
|
# File 'lib/parascope/query.rb', line 12
def self.inherited(subclass)
subclass.query_blocks.replace query_blocks.dup
subclass.sift_blocks.replace sift_blocks.dup
subclass.guard_blocks.replace guard_blocks.dup
subclass.base_scope(&base_scope)
subclass.defaults defaults
end
|
Instance Method Details
#base_scope ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/parascope/query.rb', line 36
def base_scope
scope = klass.ancestors
.select{ |klass| klass < Query }
.reverse
.map(&:base_scope)
.compact
.reduce(nil){ |scope, block| instance_exec(scope, &block) }
if scope.nil?
fail UndefinedScopeError, "failed to build scope. Have you missed base_scope definition?"
end
scope
end
|
#klass ⇒ Object
58
59
60
|
# File 'lib/parascope/query.rb', line 58
def klass
sifted? ? singleton_class : self.class
end
|
#resolved_scope(*args) ⇒ Object
51
52
53
54
55
56
|
# File 'lib/parascope/query.rb', line 51
def resolved_scope(*args)
arg_params = args.pop if args.last.is_a?(Hash)
return sifted_instance.resolved_scope! if arg_params.nil? && args.empty?
clone_with_params(trues(args).merge(arg_params || {})).resolved_scope
end
|