Class: Parascope::Query
- Inherits:
-
Object
- Object
- Parascope::Query
- Extended by:
- Forwardable, ApiMethods
- Defined in:
- lib/parascope/query.rb
Defined Under Namespace
Modules: ApiMethods Classes: ApiBlock
Constant Summary collapse
- UndefinedScopeError =
Class.new(StandardError)
- GuardViolationError =
Class.new(ArgumentError)
- UnpermittedError =
for backward-compatability
GuardViolationError
Instance Attribute Summary collapse
-
#params ⇒ Object
readonly
Returns the value of attribute params.
- #scope ⇒ Object readonly
Class Method Summary collapse
Instance Method Summary collapse
- #base_scope ⇒ Object
-
#initialize(params, scope: nil, **attrs) ⇒ Query
constructor
A new instance of Query.
- #klass ⇒ Object
- #resolved_scope(*args) ⇒ Object
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.
27 28 29 30 31 32 33 |
# File 'lib/parascope/query.rb', line 27 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.
16 17 18 |
# File 'lib/parascope/query.rb', line 16 def params @params end |
#scope ⇒ Object
35 36 37 |
# File 'lib/parascope/query.rb', line 35 def scope @scope ||= base_scope end |
Class Method Details
.inherited(subclass) ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/parascope/query.rb', line 19 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
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/parascope/query.rb', line 39 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
61 62 63 |
# File 'lib/parascope/query.rb', line 61 def klass sifted? ? singleton_class : self.class end |
#resolved_scope(*args) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/parascope/query.rb', line 54 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 |