module Shrine::Plugins::Persistence
Helper plugin that defines persistence methods on the attacher according to convention.
plugin :_persistence, plugin: MyPlugin
Public Class Methods
Using * Attacher#persist
* Attacher#atomic_persist
* Attacher#atomic_promote
# File lib/shrine/plugins/_persistence.rb, line 21
def self.configure(uploader, plugin:)
plugin_name = plugin.to_s.split("::").last.downcase
plugin::AttacherMethods.module_eval do
define_method :atomic_promote do |**options, &block|
return super(**options, &block) unless send(:"#{plugin_name}?")
abstract_atomic_promote(
reload: method(:"#{plugin_name}_reload"),
persist: method(:"#{plugin_name}_persist"),
**options, &block
)
end
define_method :atomic_persist do |*args, **options, &block|
return super(*args, **options, &block) unless send(:"#{plugin_name}?")
abstract_atomic_persist(
*args,
reload: method(:"#{plugin_name}_reload"),
persist: method(:"#{plugin_name}_persist"),
**options, &block
)
end
define_method :persist do
return super() unless send(:"#{plugin_name}?")
send(:"#{plugin_name}_persist")
end
define_method :hash_attribute? do
return super() unless send(:"#{plugin_name}?")
respond_to?(:"#{plugin_name}_hash_attribute?", true) &&
send(:"#{plugin_name}_hash_attribute?")
end
private :hash_attribute?
end
end
# File lib/shrine/plugins/_persistence.rb, line 10 def self.load_dependencies(uploader, *) uploader.plugin :atomic_helpers uploader.plugin :entity end