diff --git a/activerecord-delay_touching.gemspec b/activerecord-delay_touching.gemspec index 5e83d44..c69d2cd 100644 --- a/activerecord-delay_touching.gemspec +++ b/activerecord-delay_touching.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] - spec.add_dependency "activerecord", "~> 4.2" + spec.add_dependency "activerecord", ">= 4.2", "< 5.3" spec.add_development_dependency "bundler", "~> 1.6" spec.add_development_dependency "rake" diff --git a/lib/activerecord/delay_touching.rb b/lib/activerecord/delay_touching.rb index a326802..b32273f 100644 --- a/lib/activerecord/delay_touching.rb +++ b/lib/activerecord/delay_touching.rb @@ -6,7 +6,8 @@ module DelayTouching extend ActiveSupport::Concern # Override ActiveRecord::Base#touch. - def touch(*names) + # see https://github.com/godaddy/activerecord-delay_touching/pull/21 for Rails 5 support + def touch(*names, time: nil) if self.class.delay_touching? && !try(:no_touching?) DelayTouching.add_record(self, *names) true @@ -88,10 +89,8 @@ def self.touch_records(attr, klass, records) records.each do |record| # Don't bother if destroyed or not-saved next unless record.persisted? - record.instance_eval do - write_attribute column, current_time - @changed_attributes.except!(*changes.keys) - end + record.send(:write_attribute, column, current_time) + clear_attribute_changes(record, changes.keys) end end @@ -100,6 +99,16 @@ def self.touch_records(attr, klass, records) state.updated attr, records records.each { |record| record.run_callbacks(:touch) } end + + if ActiveRecord::VERSION::MAJOR >= 5 + def self.clear_attribute_changes(record, attr_names) + record.clear_attribute_changes(attr_names) + end + else + def self.clear_attribute_changes(record, attr_names) + record.instance_variable_get('@changed_attributes').except!(*attr_names) + end + end end end diff --git a/lib/activerecord/delay_touching/version.rb b/lib/activerecord/delay_touching/version.rb index 99579bd..9a78b59 100644 --- a/lib/activerecord/delay_touching/version.rb +++ b/lib/activerecord/delay_touching/version.rb @@ -1,5 +1,5 @@ module Activerecord module DelayTouching - VERSION = "1.1.0" + VERSION = "1.1.1" end end