Module: Shrine::Plugins::AtomicHelpers::AttacherMethods
- Defined in:
- lib/shrine/plugins/atomic_helpers.rb
Instance Method Summary collapse
-
#abstract_atomic_persist(original_file = file, reload:, persist:) ⇒ Object
Reloads the record to check whether the attachment has changed.
-
#abstract_atomic_promote(reload:, persist:, **options, &block) ⇒ Object
Like #promote, but additionally persists the promoted file atomically.
-
#file_data ⇒ Object
Return only needed main file data, without the metadata.
Instance Method Details
#abstract_atomic_persist(original_file = file, reload:, persist:) ⇒ Object
Reloads the record to check whether the attachment has changed. If it hasn’t, it persists the record. Otherwise it raises ‘Shrine::AttachmentChanged` exception.
attacher.abstract_atomic_persist(
reload: reload_strategy,
persist: persist_strategy,
)
This more convenient to use with concrete persistence plugins, which provide defaults for reloading and persistence.
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/shrine/plugins/atomic_helpers.rb', line 71 def abstract_atomic_persist(original_file = file, reload:, persist:) abstract_reload(reload) do |attacher| if attacher && attacher.file != original_file fail Shrine::AttachmentChanged, "attachment has changed" end yield attacher if block_given? abstract_persist(persist) end end |
#abstract_atomic_promote(reload:, persist:, **options, &block) ⇒ Object
Like #promote, but additionally persists the promoted file atomically. You need to specify ‘:reload` and `:persist` strategies when calling the method:
attacher.abstract_atomic_promote(
reload: reload_strategy,
persist: persist_strategy,
)
This more convenient to use with concrete persistence plugins, which provide defaults for reloading and persistence.
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/shrine/plugins/atomic_helpers.rb', line 46 def abstract_atomic_promote(reload:, persist:, **, &block) original_file = file result = promote(**) begin abstract_atomic_persist(original_file, reload: reload, persist: persist, &block) result rescue Shrine::AttachmentChanged destroy_attached raise end end |
#file_data ⇒ Object
Return only needed main file data, without the metadata. This allows you to avoid bloating your background job payload when you have derivatives or lots of metadata, by only sending data you need for atomic persitence.
attacher.file_data #=> { "id" => "abc123.jpg", "storage" => "store" }
89 90 91 |
# File 'lib/shrine/plugins/atomic_helpers.rb', line 89 def file_data file!.data.reject { |key, _| key == "metadata" } end |