Module: Athar::Context
- Defined in:
- lib/athar/context.rb
Constant Summary collapse
- PG_META_KEY =
"athar.meta"- PG_DISABLED_KEY =
"athar.disabled"
Class Method Summary collapse
- .with_actor(actor, &block) ⇒ Object
- .with_context(actor: nil, **metadata, &block) ⇒ Object
-
.with_metadata(meta = nil, **kwargs, &block) ⇒ Object
rubocop:disable Metrics/MethodLength.
- .without_capture(&block) ⇒ Object
Class Method Details
.with_actor(actor, &block) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/athar/context.rb', line 9 def with_actor(actor, &block) raise ArgumentError, "block required" unless block return block.call if actor.nil? unless actor.is_a?(ActiveRecord::Base) raise ArgumentError, "Athar.with_actor only accepts ActiveRecord instances. " \ "Use Athar.with_metadata(actor: #{actor.inspect}) for symbolic actors." end = { "actor_type" => actor.class.base_class.name, "actor_id" => actor.public_send(actor.class.primary_key) } (, &block) end |
.with_context(actor: nil, **metadata, &block) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/athar/context.rb', line 47 def with_context(actor: nil, **, &block) raise ArgumentError, "block required" unless block return with_actor(actor, &block) if .empty? return (, &block) if actor.nil? with_actor(actor) { (, &block) } end |
.with_metadata(meta = nil, **kwargs, &block) ⇒ Object
rubocop:disable Metrics/MethodLength
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/athar/context.rb', line 28 def ( = nil, **kwargs, &block) # rubocop:disable Metrics/MethodLength raise ArgumentError, "block required" unless block normalized = (, kwargs) return block.call if normalized.empty? run_in_transaction do previous_merged = MetadataStack.current MetadataStack.push(normalized) begin (MetadataStack.current) block.call ensure MetadataStack.pop (previous_merged) end end end |
.without_capture(&block) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/athar/context.rb', line 56 def without_capture(&block) raise ArgumentError, "block required" unless block run_in_transaction do previous = read_disabled_setting set_local(PG_DISABLED_KEY, "on") begin block.call ensure restore_disabled_setting(previous) end end end |