Class: Policier::Context
- Inherits:
-
Object
show all
- Defined in:
- lib/policier/context.rb
Defined Under Namespace
Classes: DuplicatePayloadKey, NotInScopeException, ScopeStartedEvaluation
Constant Summary
collapse
- THREAD_CURRENT_KEY =
:policier_context_current
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(payload) ⇒ Context
Returns a new instance of Context.
43
44
45
46
47
|
# File 'lib/policier/context.rb', line 43
def initialize(payload)
@payload = payload
@conditions = {}
@data = {}
end
|
Instance Attribute Details
#payload ⇒ Object
Returns the value of attribute payload.
41
42
43
|
# File 'lib/policier/context.rb', line 41
def payload
@payload
end
|
Class Method Details
.current ⇒ Object
16
17
18
19
20
|
# File 'lib/policier/context.rb', line 16
def current
raise NotInScopeException unless Thread.current[THREAD_CURRENT_KEY]
Thread.current[THREAD_CURRENT_KEY]
end
|
.scope(payload = {}) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/policier/context.rb', line 22
def scope(payload = {})
if Thread.current[THREAD_CURRENT_KEY].present? && Context.current.evaluation_started?
raise ScopeStartedEvaluation
end
if Thread.current[THREAD_CURRENT_KEY].blank?
Thread.current[THREAD_CURRENT_KEY] = new(payload)
else
raise ScopeStartedEvaluation if Context.current.evaluation_started? && payload.any?
Context.current.payload.merge!(payload)
end
yield
ensure
Thread.current[THREAD_CURRENT_KEY] = nil
end
|
Instance Method Details
#ensure_condiiton(condition_class) ⇒ Object
66
67
68
|
# File 'lib/policier/context.rb', line 66
def ensure_condiiton(condition_class)
@conditions[condition_class] ||= condition_class.new.verify
end
|
#evaluation_started? ⇒ Boolean
62
63
64
|
# File 'lib/policier/context.rb', line 62
def evaluation_started?
@conditions.present?
end
|
#init_data(condition_class, data_class) ⇒ Object
49
50
51
|
# File 'lib/policier/context.rb', line 49
def init_data(condition_class, data_class)
@data[condition_class] = data_class.new
end
|
#mock_condition(*condtion_classes, failed: false, data_replacement: {}) ⇒ Object
53
54
55
56
57
58
59
60
|
# File 'lib/policier/context.rb', line 53
def mock_condition(*condtion_classes, failed: false, data_replacement: {})
condtion_classes.each do |condition_class|
@condition[condition_class] ||= condition_class.new.iverride!(
failed: failed,
data_replacement: data_replacement
)
end
end
|