module Shrine::Plugins::Sequel::AttachmentMethods

Public Instance Methods

included(model) click to toggle source
Calls superclass method
# File lib/shrine/plugins/sequel.rb, line 25
def included(model)
  super

  return unless model < ::Sequel::Model

  name = @name

  if shrine_class.opts[:sequel][:validations]
    define_method :validate do
      super()
      send(:"#{name}_attacher").send(:sequel_validate)
    end
  end

  if shrine_class.opts[:sequel][:hooks]
    define_method :before_save do
      super()
      if send(:"#{name}_attacher").changed?
        send(:"#{name}_attacher").send(:sequel_before_save)
      end
    end

    define_method :after_save do
      super()
      if send(:"#{name}_attacher").changed?
        send(:"#{name}_attacher").send(:sequel_after_save)
      end
    end

    define_method :after_destroy do
      super()
      if send(:"#{name}_attacher").attached?
        send(:"#{name}_attacher").send(:sequel_after_destroy)
      end
    end
  end

  # reload the attacher on record reload
  define_method :_refresh do |*args|
    result = super(*args)
    send(:"#{name}_attacher").reload if instance_variable_defined?(:"@#{name}_attacher")
    result
  end
  private :_refresh
end