Class: Policier::Condition

Inherits:
Object
  • Object
show all
Extended by:
ConditionResolve
Defined in:
lib/policier/condition.rb

Defined Under Namespace

Classes: FailedException

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ConditionResolve

resolve, |

Constructor Details

#initializeCondition

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

.collectorObject

Returns the value of attribute collector.



87
88
89
# File 'lib/policier/condition.rb', line 87

def collector
  @collector
end

.data_classObject

Returns the value of attribute data_class.



28
29
30
# File 'lib/policier/condition.rb', line 28

def data_class
  @data_class
end

.verification_blockObject (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

#dataObject (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

.handleObject



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

Raises:



47
48
49
# File 'lib/policier/condition.rb', line 47

def fail!
  raise FailedException
end

#failed?Boolean

Returns:

  • (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

#payloadObject



51
52
53
# File 'lib/policier/condition.rb', line 51

def payload
  @context.payload
end

#unionObject



81
82
83
# File 'lib/policier/condition.rb', line 81

def union
  ConditionUnion.new(self)
end

#verifyObject



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