module Shrine::Plugins::ImageHandlingUtilities::AttachmentMethods

rubocop:disable Metrics/ModuleLength

Public Instance Methods

included(klass) click to toggle source
Calls superclass method
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 6
def included(klass)
  super

  define_instance_methods
  define_class_methods(klass)
end

Private Instance Methods

define_blurhash_instance_method() click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 23
def define_blurhash_instance_method
  name = @name
  define_method(:"#{@name}_blurhash") do
    send(name)&.metadata&.[]('blurhash')
  end
end
define_class_methods(klass) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 83
def define_class_methods(klass)
  define_generate_all_derivatives_class_method(klass)
  define_generate_all_metadata_class_method(klass)
  define_generate_all_derivatives_and_metadata_class_method(klass)
end
define_generate_all_derivatives_and_metadata_class_method(klass) click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 113
def define_generate_all_derivatives_and_metadata_class_method(klass)
  name = @name
  klass.send(
    :define_singleton_method, :"generate_all_#{name}_derivatives_and_metadata"
  ) do |&error_block|
    all.find_each do |record|
      record.send(:"generate_#{name}_derivatives_and_metadata")
    rescue StandardError => e
      error_block.call(record, e) if error_block.present?
    end
  end
end
define_generate_all_derivatives_class_method(klass) click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 89
def define_generate_all_derivatives_class_method(klass)
  name = @name
  klass.send(
    :define_singleton_method, :"generate_all_#{name}_derivatives"
  ) do |&error_block|
    all.find_each do |record|
      record.send(:"generate_#{name}_derivatives")
    rescue StandardError => e
      error_block.call(record, e) if error_block.present?
    end
  end
end
define_generate_all_metadata_class_method(klass) click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 102
def define_generate_all_metadata_class_method(klass)
  name = @name
  klass.send(:define_singleton_method, :"generate_all_#{name}_metadata") do |&error_block|
    all.find_each do |record|
      record.send(:"generate_#{name}_metadata")
    rescue StandardError => e
      error_block.call(record, e) if error_block.present?
    end
  end
end
define_generate_derivatives_and_metadata_instance_method() click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 60
def define_generate_derivatives_and_metadata_instance_method
  name = @name
  define_method(:"generate_#{name}_derivatives_and_metadata") do
    send("with_stored_#{name}_attacher") do |attacher|
      old_derivatives = attacher.derivatives

      attacher.set_derivatives({})
      attacher.file.open do
        attacher.create_derivatives
        attacher.refresh_metadata!
      end

      begin
        attacher.atomic_persist
        attacher.delete_derivatives(old_derivatives) if old_derivatives.present?
      rescue Shrine::AttachmentChanged, ActiveRecord::RecordNotFound
        attacher.delete_derivatives
      end
    end
  end
end
define_generate_derivatives_instance_method() click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 30
def define_generate_derivatives_instance_method
  name = @name
  define_method(:"generate_#{name}_derivatives") do
    send("with_stored_#{name}_attacher") do |attacher|
      old_derivatives = attacher.derivatives

      attacher.set_derivatives({})
      attacher.create_derivatives

      begin
        attacher.atomic_persist
        attacher.delete_derivatives(old_derivatives) if old_derivatives.present?
      rescue Shrine::AttachmentChanged, ActiveRecord::RecordNotFound
        attacher.delete_derivatives
      end
    end
  end
end
define_generate_metadata_instance_method() click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 49
def define_generate_metadata_instance_method
  name = @name
  define_method(:"generate_#{name}_metadata") do
    send("with_stored_#{name}_attacher") do |attacher|
      attacher.refresh_metadata!
      attacher.atomic_persist
    end
  end
end
define_instance_methods() click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 15
def define_instance_methods
  define_with_stored_attacher_method
  define_blurhash_instance_method
  define_generate_derivatives_instance_method
  define_generate_metadata_instance_method
  define_generate_derivatives_and_metadata_instance_method
end
define_with_stored_attacher_method() click to toggle source
# File lib/potassium/assets/config/initializers/shrine/plugins/image_handling_utilities.rb, line 126
def define_with_stored_attacher_method
  name = @name
  define_method(:"with_stored_#{name}_attacher") do |&block|
    return if send(name).blank?

    attacher = send(:"#{name}_attacher")

    block.call(attacher) if attacher.stored?
  end
  private :"with_stored_#{name}_attacher"
end