Sha256: 54b22c2d25d0630d87969a396272241f084e2e5e5f761209d41b064c80b99942

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

module Mobility
  module Backend
=begin

Dirty tracking for Sequel models which use the +Sequel::Plugins::Dirty+ plugin.
Automatically includes dirty plugin in model class when enabled.

@see http://sequel.jeremyevans.net/rdoc-plugins/index.html Sequel dirty plugin

=end
    module Sequel::Dirty
      # @!group Backend Accessors
      # @!macro backend_writer
      def write(locale, value, **)
        locale_accessor = "#{attribute}_#{locale}".to_sym
        if model.column_changes.has_key?(locale_accessor) && model.initial_values[locale_accessor] == value
          super
          [model.changed_columns, model.initial_values].each { |h| h.delete(locale_accessor) }
        else
          model.will_change_column("#{attribute}_#{locale}".to_sym)
          super
        end
      end
      # @!endgroup

      # @param [Class] backend_class Class of backend
      def self.included(backend_class)
        backend_class.extend(ClassMethods)
      end

      # Adds hook after {Backend::Setup#setup_model} to add dirty-tracking
      # methods for translated attributes onto model class.
      module ClassMethods
        # (see Mobility::Backend::Setup#setup_model)
        def setup_model(model_class, attributes, **)
          super
          model_class.plugin :dirty
          model_class.class_eval do
            mod = Module.new do
              %w[initial_value column_change column_changed? reset_column].each do |method_name|
                define_method method_name do |column|
                  if attributes.map(&:to_sym).include?(column)
                    super("#{column}_#{Mobility.locale}".to_sym)
                  else
                    super(column)
                  end
                end
              end
            end
            include mod
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mobility-0.1.4 lib/mobility/backend/sequel/dirty.rb