Class: Policier::Condition
- Inherits:
-
Object
- Object
- Policier::Condition
- Extended by:
- ConditionResolve
- Defined in:
- lib/policier/condition.rb
Defined Under Namespace
Classes: FailedException
Class Attribute Summary collapse
-
.collector ⇒ Object
Returns the value of attribute collector.
-
.data_class ⇒ Object
Returns the value of attribute data_class.
-
.verification_block ⇒ Object
readonly
Returns the value of attribute verification_block.
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Class Method Summary collapse
Instance Method Summary collapse
- #depend_on!(condition_klass) ⇒ Object
- #fail! ⇒ Object
- #failed? ⇒ Boolean
-
#initialize ⇒ Condition
constructor
A new instance of Condition.
- #instance_exec_with_failures(*args, &block) ⇒ Object
- #override!(failing: false, data_replacement: {}) ⇒ Object
- #payload ⇒ Object
- #union ⇒ Object
- #verify ⇒ Object
Methods included from ConditionResolve
Constructor Details
#initialize ⇒ Condition
Returns a new instance of Condition.
33 34 35 36 37 38 |
# File 'lib/policier/condition.rb', line 33 def initialize @context = Context.current @data = @context.init_data(self.class, self.class.data_class) if self.class.data_class.present? @failed = false @executed = false end |
Class Attribute Details
.collector ⇒ Object
Returns the value of attribute collector.
87 88 89 |
# File 'lib/policier/condition.rb', line 87 def collector @collector end |
.data_class ⇒ Object
Returns the value of attribute data_class.
28 29 30 |
# File 'lib/policier/condition.rb', line 28 def data_class @data_class end |
.verification_block ⇒ Object (readonly)
Returns the value of attribute verification_block.
86 87 88 |
# File 'lib/policier/condition.rb', line 86 def verification_block @verification_block end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
31 32 33 |
# File 'lib/policier/condition.rb', line 31 def data @data end |
Class Method Details
.also_ensure(name, &block) ⇒ Object
93 94 95 96 97 98 |
# File 'lib/policier/condition.rb', line 93 def also_ensure(name, &block) define_method :"and_#{name}" do |data| @failed ||= !instance_exec_with_failures(data, &block) self end end |
.handle ⇒ Object
100 101 102 |
# File 'lib/policier/condition.rb', line 100 def handle Dry::Inflector.new.underscore(name).gsub("/", "_").to_sym end |
.verify_with(&block) ⇒ Object
89 90 91 |
# File 'lib/policier/condition.rb', line 89 def verify_with(&block) @verification_block = block end |
Instance Method Details
#depend_on!(condition_klass) ⇒ Object
40 41 42 43 44 45 |
# File 'lib/policier/condition.rb', line 40 def depend_on!(condition_klass) condition = condition_klass.resolve return fail! if condition.failed? condition.data end |
#fail! ⇒ Object
47 48 49 |
# File 'lib/policier/condition.rb', line 47 def fail! raise FailedException end |
#failed? ⇒ Boolean
55 56 57 |
# File 'lib/policier/condition.rb', line 55 def failed? @failed end |
#instance_exec_with_failures(*args, &block) ⇒ Object
74 75 76 77 78 79 |
# File 'lib/policier/condition.rb', line 74 def instance_exec_with_failures(*args, &block) instance_exec(*args, &block) true rescue FailedException false end |
#override!(failing: false, data_replacement: {}) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/policier/condition.rb', line 67 def override!(failing: false, data_replacement: {}) @failed = failing @executed = true data_replacement.each { |k, v| data[k] = v } self end |
#payload ⇒ Object
51 52 53 |
# File 'lib/policier/condition.rb', line 51 def payload @context.payload end |
#union ⇒ Object
81 82 83 |
# File 'lib/policier/condition.rb', line 81 def union ConditionUnion.new(self) end |
#verify ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/policier/condition.rb', line 59 def verify return self if @executed @failed ||= !instance_exec_with_failures(&self.class.verification_block) @executed = true self end |