shioyama/mobility

View on GitHub
lib/mobility/plugins/writer.rb

Summary

Maintainability
A
0 mins
Test Coverage
# 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