Module: Shrine::Plugins::KithePromotionHooks::AttacherMethods
- Defined in:
- lib/shrine/plugins/kithe_promotion_hooks.rb
Instance Method Summary collapse
-
#dump ⇒ Object
Overridden so our context is serialized for backgrounding.
-
#promote(uploaded_file = get, **options) ⇒ Object
Overridden to: a) refresh metadata as part of promotion (adds ‘promoting: true` to context for such) b) call promotion callbacks on Asset model, unless `promotion_directives` has been set.
-
#promotion_directives ⇒ Object
context, lazily initializing to hash for convenience.
-
#set_promotion_directives(hash) ⇒ Object
Set one or more promotion directives, in context, that will be serialized and restored to context for bg promotion.
Instance Method Details
#dump ⇒ Object
Overridden so our context is serialized for backgrounding.
103 104 105 106 107 108 109 |
# File 'lib/shrine/plugins/kithe_promotion_hooks.rb', line 103 def dump super.tap do |hash| if context[:promotion_directives] hash["promotion_directives"] = context[:promotion_directives] end end end |
#promote(uploaded_file = get, **options) ⇒ Object
Overridden to: a) refresh metadata as part of promotion (adds ‘promoting: true` to context for such) b) call promotion callbacks on Asset model, unless `promotion_directives`
has been set.
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/shrine/plugins/kithe_promotion_hooks.rb', line 115 def promote(uploaded_file = get, **) # insist on a metadata extraction, add a new key `promoting: true` in case # anyone is interested. uploaded_file.(context.merge().merge(promoting: true)) # Now run ordinary promotion with activemodel callbacks from # the Asset, which will automatically allow them to cancel promotion using # ordinary activemodel callbacck technique of `throw :abort`. if ( !promotion_directives["skip_callbacks"] && context[:record] && context[:record].class.respond_to?(:_promotion_callbacks) ) context[:record].run_callbacks(:promotion) do super(uploaded_file, **) end else super(uploaded_file, **) end end |
#promotion_directives ⇒ Object
context, lazily initializing to hash for convenience.
97 98 99 |
# File 'lib/shrine/plugins/kithe_promotion_hooks.rb', line 97 def promotion_directives context[:promotion_directives] ||= {} end |
#set_promotion_directives(hash) ⇒ Object
Set one or more promotion directives, in context, that will be serialized and restored to context for bg promotion. The values are intended to be simple strings or other json-serializable primitives.
set_promotion_directives will merge it’s results into existing promotion directives, existing keys will remain. So you can set multiple directives with multiple calls to set_promotion_directives, or pass multiple keys to one calls.
83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/shrine/plugins/kithe_promotion_hooks.rb', line 83 def set_promotion_directives(hash) # ActiveJob sometimes has trouble if there are symbols in there, somewhat # unpredictably. hash = hash.collect { |k, v| [k.to_s, v === Symbol ? v.to_s : v.to_s]}.to_h unrecognized = hash.keys.collect(&:to_sym) - KithePromotionHooks.allowed_promotion_directives unless unrecognized.length == 0 raise ArgumentError.new("Unrecognized promotion directive key: #{unrecognized.join('')}") end promotion_directives.merge!(hash) end |