Module: Shrine::Plugins::KithePromotionDirectives::AttachmentMethods

Defined in:
lib/shrine/plugins/kithe_promotion_directives.rb

Overview

VERY hacky way to try to preserve promotion_directives on Asset.reload.

This may not be necessary in a future shrine version if shrine resolves issue. See: github.com/shrinerb/shrine/issues/463

It is the activerecord plugin implementation that erases all shrine context (and thus our promotion directives) on reload. github.com/shrinerb/shrine/blob/b5fc2e1432e51e6fde87c120bc6cf6abeb286c68/lib/shrine/plugins/activerecord.rb#L56-L60

It is quite tricky to override the activerecord plugin’s own override, because of the way shrine does these overrides. We’ve figured out a pretty crazy way below.

Instance Method Summary collapse

Instance Method Details

#included(model) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/shrine/plugins/kithe_promotion_directives.rb', line 122

def included(model)
  super

  original_reload = instance_method(:reload)

  define_method :reload do |*args|
    previous_promotion_directives = file_attacher.promotion_directives

    result = original_reload.bind(self).call(*args)
    file_attacher.set_promotion_directives(previous_promotion_directives)

    result
  end
end