lib/sequel/plugins/bitemporal.rb in sequel_bitemporal-0.5.1 vs lib/sequel/plugins/bitemporal.rb in sequel_bitemporal-0.5.2

- old
+ new

@@ -156,13 +156,15 @@ attributes = current_attributes.merge attributes elsif !new? && current_version @current_version_values = current_version.values end attributes.delete :id - @pending_version ||= model.version_class.new - pending_version.set attributes - pending_version.master_id = id unless new? + if attributes_hold_changes? attributes + @pending_version ||= model.version_class.new + pending_version.set attributes + pending_version.master_id = id unless new? + end end def update_attributes(attributes={}) self.attributes = attributes save(raise_on_failure: false) && self @@ -327,9 +329,29 @@ version_attributes[:created_at] = Sequel::Plugins::Bitemporal.point_in_time propagated.send :set_values, version_attributes.merge(attributes) propagated.save validate: false propagated end + + def attributes_hold_changes?(attributes) + if new? || !current_version + attributes.any? + else + attributes.detect do |key, new_value| + case key + when :master_id, :created_at, :expired_at + false + when :valid_from + new_value && new_value<current_version.valid_from + when :valid_to + new_value || new_value!=current_version.valid_to + else + current_version.send(key)!=new_value + end + end + end + end + end end end end