diff options
| author | Zog | 2018-02-02 14:58:50 +0100 | 
|---|---|---|
| committer | Zog | 2018-02-02 15:48:46 +0100 | 
| commit | 3f9329dffaf4a760adb128824b673c221c8320b8 (patch) | |
| tree | 8bac08538877854bb4c8488edf5fff66c17270a4 /app/models | |
| parent | 9f30b2debe7ece403d9e588df9763c119436d967 (diff) | |
| download | chouette-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.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 | 
