Sha256: 71dcc82be2e0459d8c64c2107cdd47a6c2b129ae7db1cf7ad0cdb478a31654a8

Contents?: true

Size: 864 Bytes

Versions: 2

Compression:

Stored size: 864 Bytes

Contents

require "ar_transaction_changes/version"
require "active_record"

module ArTransactionChanges
  def _run_commit_callbacks
    super
  ensure
    @transaction_changed_attributes = nil
  end

  def _run_rollback_callbacks
    super
  ensure
    @transaction_changed_attributes = nil
  end

  def transaction_changed_attributes
    @transaction_changed_attributes ||= HashWithIndifferentAccess.new
  end

  method_name = if ActiveRecord.gem_version >= Gem::Version.new("5.2.0.beta1")
    "_write_attribute"
  else
    "write_attribute"
  end

  define_method(method_name) do |attr_name, value|
    attr_name = attr_name.to_s
    old_value = read_attribute(attr_name)
    ret = super(attr_name, value)
    unless transaction_changed_attributes.key?(attr_name) || value == old_value
      transaction_changed_attributes[attr_name] = old_value
    end
    ret
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ar_transaction_changes-1.1.4 lib/ar_transaction_changes.rb
ar_transaction_changes-1.1.3 lib/ar_transaction_changes.rb