lib/mobility/plugins/writer.rb
# frozen-string-literal: true
module Mobility
module Plugins
module Writer
=begin
Defines attribute writer that delegates to +Mobility::Backend#write+.
=end
extend Plugin
default true
requires :backend
initialize_hook do |*names|
if options[:writer]
names.each do |name|
class_eval <<-EOM, __FILE__, __LINE__ + 1
def #{name}=(value, locale: nil, **options)
#{Writer.setup_source}
mobility_backends[:#{name}].write(locale, value, **options)
end
EOM
end
end
end
def self.setup_source
<<-EOL
return super(value) if options[:super]
if (locale &&= locale.to_sym)
#{"Mobility.enforce_available_locales!(locale)" if I18n.enforce_available_locales}
options[:locale] = true
else
locale = Mobility.locale
end
EOL
end
end
register_plugin(:writer, Writer)
end
end