Class: Scopa::Base
- Inherits:
-
Object
- Object
- Scopa::Base
- Includes:
- ActiveModel::Attributes, ActiveModel::Model, ActiveModel::Validations
- Defined in:
- lib/scopa/base.rb
Instance Attribute Summary collapse
-
#scope ⇒ Object
readonly
Returns the value of attribute scope.
Class Method Summary collapse
- .call(scope: nil, **params) ⇒ Object
- .filter(name, if: nil, &block) ⇒ Object
- .inherited(subclass) ⇒ Object
- .model(klass = nil) ⇒ Object
- .on_invalid(behavior) ⇒ Object
- .parameter(name, type = nil, default: nil, optional: false) ⇒ Object
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(scope: nil, **params) ⇒ Base
constructor
A new instance of Base.
Constructor Details
#initialize(scope: nil, **params) ⇒ Base
Returns a new instance of Base.
63 64 65 66 |
# File 'lib/scopa/base.rb', line 63 def initialize(scope: nil, **params) @scope = scope super(**params) end |
Instance Attribute Details
#scope ⇒ Object (readonly)
Returns the value of attribute scope.
61 62 63 |
# File 'lib/scopa/base.rb', line 61 def scope @scope end |
Class Method Details
.call(scope: nil, **params) ⇒ Object
56 57 58 |
# File 'lib/scopa/base.rb', line 56 def call(scope: nil, **params) new(scope: scope, **params).call end |
.filter(name, if: nil, &block) ⇒ Object
48 49 50 |
# File 'lib/scopa/base.rb', line 48 def filter(name, if: nil, &block) self._filters = _filters + [Filter.new(name, condition: binding.local_variable_get(:if), block: block)] end |
.inherited(subclass) ⇒ Object
17 18 19 20 21 |
# File 'lib/scopa/base.rb', line 17 def inherited(subclass) super subclass._filters = _filters.dup subclass._parameters = _parameters.dup end |
.model(klass = nil) ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/scopa/base.rb', line 23 def model(klass = nil) if klass self._model = klass else _model end end |
.on_invalid(behavior) ⇒ Object
52 53 54 |
# File 'lib/scopa/base.rb', line 52 def on_invalid(behavior) self._on_invalid = behavior end |
.parameter(name, type = nil, default: nil, optional: false) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/scopa/base.rb', line 31 def parameter(name, type = nil, default: nil, optional: false) _parameters[name] = { default: default, optional: optional } if default.respond_to?(:call) attribute name, type define_method(name) do value = super() return value unless value.nil? instance_exec(&self.class._parameters[name][:default]) end else attribute name, type, default: default end validates name, presence: true unless optional end |
Instance Method Details
#call ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/scopa/base.rb', line 68 def call return handle_invalid unless valid? instrument do _filters.reduce(base_scope) do |relation, filter| apply_filter(filter, relation) end end end |