Class: Mobility::Plugins::ActiveModel::Dirty::MethodsBuilder

Inherits:
Module
  • Object
show all
Defined in:
lib/mobility/plugins/active_model/dirty.rb

Overview

Builds module which adds suffix/prefix methods for translated attributes so they act like normal dirty-tracked attributes.

Instance Method Summary collapse

Constructor Details

#initialize(*attribute_names) ⇒ MethodsBuilder

Returns a new instance of MethodsBuilder.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/mobility/plugins/active_model/dirty.rb', line 44

def initialize(*attribute_names)
  attribute_names.each do |name|
    method_suffixes.each do |suffix|
      define_method "#{name}#{suffix}".freeze do
        __send__("attribute#{suffix}".freeze, Mobility.normalize_locale_accessor(name))
      end
    end

    define_method "restore_#{name}!".freeze do
      locale_accessor = Mobility.normalize_locale_accessor(name)
      if attribute_changed?(locale_accessor)
        __send__("#{name}=".freeze, changed_attributes[locale_accessor])
      end
    end
  end

  define_method :restore_attribute! do |attr|
    attribute_names.include?(attr.to_s) ? send("restore_#{attr}!".freeze) : super(attr)
  end
  private :restore_attribute!
end