aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
authorZog2018-02-02 14:58:50 +0100
committerZog2018-02-02 15:48:46 +0100
commit3f9329dffaf4a760adb128824b673c221c8320b8 (patch)
tree8bac08538877854bb4c8488edf5fff66c17270a4 /app/models
parent9f30b2debe7ece403d9e588df9763c119436d967 (diff)
downloadchouette-core-3f9329dffaf4a760adb128824b673c221c8320b8.tar.bz2
Refs #5417; Update parents checksum when children are created or updated
Diffstat (limited to 'app/models')
-rw-r--r--app/models/chouette/time_table.rb3
-rw-r--r--app/models/chouette/vehicle_journey.rb2
-rw-r--r--app/models/concerns/checksum_support.rb23
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