diff options
| author | Zog | 2018-02-02 14:58:50 +0100 |
|---|---|---|
| committer | cedricnjanga | 2018-02-06 11:11:33 -0800 |
| commit | 40960d78ad2e5a85b4acec5d7588beb69538b61a (patch) | |
| tree | 8e2379663fe1053e8b61614d5471feb0e5937e4c /app | |
| parent | 123da9addd584e4fb86520cb54d8266a9869b8cf (diff) | |
| download | chouette-core-40960d78ad2e5a85b4acec5d7588beb69538b61a.tar.bz2 | |
Refs #5417; Update parents checksum when children are created or updated
Diffstat (limited to 'app')
| -rw-r--r-- | app/models/chouette/time_table.rb | 3 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 2 | ||||
| -rw-r--r-- | app/models/concerns/checksum_support.rb | 23 |
3 files changed, 27 insertions, 1 deletions
diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb index 8113457ec..7b69aefb6 100644 --- a/app/models/chouette/time_table.rb +++ b/app/models/chouette/time_table.rb @@ -47,6 +47,9 @@ module Chouette end end + has_checksum_children TimeTableDate + has_checksum_children TimeTablePeriod + def self.object_id_key "Timetable" end diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 6146d5be8..1971061a2 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -108,6 +108,8 @@ module Chouette end end + has_checksum_children VehicleJourneyAtStop + def set_default_values if number.nil? self.number = 0 diff --git a/app/models/concerns/checksum_support.rb b/app/models/concerns/checksum_support.rb index ff73c87a3..a76995b0f 100644 --- a/app/models/concerns/checksum_support.rb +++ b/app/models/concerns/checksum_support.rb @@ -3,9 +3,21 @@ module ChecksumSupport SEPARATOR = '|' VALUE_FOR_NIL_ATTRIBUTE = '-' - included do + included do |into| before_save :set_current_checksum_source, :update_checksum Referential.register_model_with_checksum self + into.extend ClassMethods + end + + module ClassMethods + def has_checksum_children klass, opts={} + parent_class = self + relation = opts[:relation] || self.model_name.singular + klass.after_save do + parent = self.send(relation) + parent&.update_checksum_without_callbacks! + end + end end def checksum_attributes @@ -34,4 +46,13 @@ module ChecksumSupport update checksum: Digest::SHA256.new.hexdigest(checksum_source) end end + + def update_checksum_without_callbacks! + set_current_checksum_source + _checksum = Digest::SHA256.new.hexdigest(checksum_source) + if _checksum != self.checksum + self.checksum = _checksum + self.class.where(id: self.id).update_all(checksum: _checksum) unless self.new_record? + end + end end |
