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