Class: Hipaapotamus::AccountabilityContext
- Inherits:
-
Object
- Object
- Hipaapotamus::AccountabilityContext
- Defined in:
- lib/hipaapotamus/accountability_context.rb
Constant Summary collapse
- THREAD_STORAGE_KEY =
:hipaapotamus_active_accountability_context
Instance Attribute Summary collapse
-
#agent ⇒ Object
readonly
Returns the value of attribute agent.
-
#parent_accountability_context ⇒ Object
readonly
Returns the value of attribute parent_accountability_context.
-
#progenitor_actions ⇒ Object
readonly
Returns the value of attribute progenitor_actions.
Class Method Summary collapse
Instance Method Summary collapse
- #finalize! ⇒ Object
- #finalized? ⇒ Boolean
-
#initialize(agent) ⇒ AccountabilityContext
constructor
A new instance of AccountabilityContext.
- #open? ⇒ Boolean
-
#record_action(protected, action_type, transactional = false) ⇒ Object
noinspection RubyArgCount.
- #root? ⇒ Boolean
- #within ⇒ Object
Constructor Details
#initialize(agent) ⇒ AccountabilityContext
Returns a new instance of AccountabilityContext.
9 10 11 12 13 14 15 16 17 |
# File 'lib/hipaapotamus/accountability_context.rb', line 9 def initialize(agent) raise AccountabilityError, 'Cannot create AccountabilityContext without a valid Agent' unless agent.is_a? Agent @agent = agent @open = true @finalized = false within { yield(self) } if block_given? end |
Instance Attribute Details
#agent ⇒ Object (readonly)
Returns the value of attribute agent.
7 8 9 |
# File 'lib/hipaapotamus/accountability_context.rb', line 7 def agent @agent end |
#parent_accountability_context ⇒ Object (readonly)
Returns the value of attribute parent_accountability_context.
7 8 9 |
# File 'lib/hipaapotamus/accountability_context.rb', line 7 def parent_accountability_context @parent_accountability_context end |
#progenitor_actions ⇒ Object (readonly)
Returns the value of attribute progenitor_actions.
7 8 9 |
# File 'lib/hipaapotamus/accountability_context.rb', line 7 def progenitor_actions @progenitor_actions end |
Class Method Details
.current ⇒ Object
88 89 90 |
# File 'lib/hipaapotamus/accountability_context.rb', line 88 def current Thread.current[THREAD_STORAGE_KEY] end |
.current! ⇒ Object
92 93 94 |
# File 'lib/hipaapotamus/accountability_context.rb', line 92 def current! current || raise(AccountabilityError, 'Not within an AccountabilityContext') end |
Instance Method Details
#finalize! ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/hipaapotamus/accountability_context.rb', line 41 def finalize! raise(AccountabilityError, 'AccountabilityContext is open') if open? raise(AccountabilityError, 'AccountabilityContext is finalized') if finalized? Action.bulk_insert(log_worthy_actions) if root? @finalized = true end |
#finalized? ⇒ Boolean
37 38 39 |
# File 'lib/hipaapotamus/accountability_context.rb', line 37 def finalized? @finalized end |
#open? ⇒ Boolean
19 20 21 |
# File 'lib/hipaapotamus/accountability_context.rb', line 19 def open? @open end |
#record_action(protected, action_type, transactional = false) ⇒ Object
noinspection RubyArgCount
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/hipaapotamus/accountability_context.rb', line 24 def record_action(protected, action_type, transactional = false) action = Action.new( agent: agent, protected: protected, action_type: action_type, source_transaction_state: Hipaapotamus.current_transaction_state, is_transactional: transactional, performed_at: DateTime.now ) actions << action end |
#root? ⇒ Boolean
50 51 52 |
# File 'lib/hipaapotamus/accountability_context.rb', line 50 def root? parent_accountability_context.nil? end |
#within ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/hipaapotamus/accountability_context.rb', line 54 def within raise(AccountabilityError, 'AccountabilityContext is not open') unless open? @open = false @parent_accountability_context = Thread.current[THREAD_STORAGE_KEY] Thread.current[THREAD_STORAGE_KEY] = self begin yield(self) ensure Thread.current[THREAD_STORAGE_KEY] = @parent_accountability_context end end |