Sha256: b66570f3cbcb960d12d0ec46a3434426f7cd89386f37b8b2ec60585e4a425d6a

Contents?: true

Size: 1.65 KB

Versions: 15

Compression:

Stored size: 1.65 KB

Contents

# frozen-string-literal: true

module Mobility
  module Plugins
=begin

Plugin to use an original column for a given locale, and otherwise use the backend.

=end
    module ActiveRecord
      module ColumnFallback
        extend Plugin

        requires :column_fallback, include: false

        included_hook do |_, backend_class|
          backend_class.include BackendInstanceMethods
          backend_class.extend BackendClassMethods
        end

        def self.use_column_fallback?(options, locale)
          case column_fallback = options[:column_fallback]
          when TrueClass
            locale == I18n.default_locale
          when Array
            column_fallback.include?(locale)
          when Proc
            column_fallback.call(locale)
          else
            false
          end
        end

        module BackendInstanceMethods
          def read(locale, **)
            if ColumnFallback.use_column_fallback?(options, locale)
              model.read_attribute(attribute)
            else
              super
            end
          end

          def write(locale, value, **)
            if ColumnFallback.use_column_fallback?(options, locale)
              model.send(:write_attribute, attribute, value)
            else
              super
            end
          end
        end

        module BackendClassMethods
          def build_node(attr, locale)
            if ColumnFallback.use_column_fallback?(options, locale)
              model_class.arel_table[attr]
            else
              super
            end
          end
        end
      end
    end

    register_plugin(:active_record_column_fallback, ActiveRecord::ColumnFallback)
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
mobility-1.3.2 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.3.1 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.3.0 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.3.0.rc3 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.3.0.rc2 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.3.0.rc1 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.9 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.8 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.7 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.6 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.5 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.4 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.3 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.2 lib/mobility/plugins/active_record/column_fallback.rb
mobility-1.2.1 lib/mobility/plugins/active_record/column_fallback.rb