diff options
| author | Luc Donnet | 2018-01-19 15:58:23 +0100 | 
|---|---|---|
| committer | GitHub | 2018-01-19 15:58:23 +0100 | 
| commit | 2d8c6a86a191671786f7021564caeb32c42bc7fd (patch) | |
| tree | b85f853d038ab3dad00fcff133c50693baa50ed5 | |
| parent | 889700f25e60bd37ae5553216862ac3b7d43400e (diff) | |
| parent | 03b8e22dba81a5877cfe61a9299580408c18e1f8 (diff) | |
| download | chouette-core-2d8c6a86a191671786f7021564caeb32c42bc7fd.tar.bz2 | |
Merge pull request #249 from af83/5593-task-to-update-checksum
Add task to update checksums
| -rw-r--r-- | app/models/concerns/checksum_support.rb | 1 | ||||
| -rw-r--r-- | app/models/referential.rb | 40 | ||||
| -rw-r--r-- | lib/tasks/referential.rake | 43 | 
3 files changed, 84 insertions, 0 deletions
| diff --git a/app/models/concerns/checksum_support.rb b/app/models/concerns/checksum_support.rb index b700ef286..ff73c87a3 100644 --- a/app/models/concerns/checksum_support.rb +++ b/app/models/concerns/checksum_support.rb @@ -5,6 +5,7 @@ module ChecksumSupport    included do      before_save :set_current_checksum_source, :update_checksum +    Referential.register_model_with_checksum self    end    def checksum_attributes diff --git a/app/models/referential.rb b/app/models/referential.rb index 92931564d..baaa354da 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -75,6 +75,46 @@ class Referential < ActiveRecord::Base    alias_method_chain :save, :table_lock_timeout +  if Rails.env.development? +    def self.force_register_models_with_checksum +      paths = Rails.application.paths['app/models'].to_a +      Rails.application.railties.each do |tie| +        next unless tie.respond_to? :paths +        paths += tie.paths['app/models'].to_a +      end + +      paths.each do |path| +        next unless File.directory?(path) +        Dir.chdir path do +          Dir['**/*.rb'].each do |src| +            next if src =~ /^concerns/ +            # thanks for inconsistent naming ... +            if src == "route_control/zdl_stop_area.rb" +              RouteControl::ZDLStopArea +              next +            end +            Rails.logger.info "Loading #{src}" +            begin +              src[0..-4].classify.safe_constantize +            rescue => e +              Rails.logger.info "Failed: #{e.message}" +              nil +            end +          end +        end +      end +    end +  end + +  def self.register_model_with_checksum klass +    @_models_with_checksum ||= [] +    @_models_with_checksum << klass +  end + +  def self.models_with_checksum +    @_models_with_checksum || [] +  end +    def lines      if metadatas.blank?        workbench ? workbench.lines : associated_lines diff --git a/lib/tasks/referential.rake b/lib/tasks/referential.rake index 7bab6e040..d53157312 100644 --- a/lib/tasks/referential.rake +++ b/lib/tasks/referential.rake @@ -67,4 +67,47 @@ namespace :referential do        referential.update(ready: true)      end    end + +  def update_checksums_for_referential referential +    thing = %w(\\ | / —) +    Referential.force_register_models_with_checksum if Rails.env.development? && Referential.models_with_checksum.empty? +    puts "\n \e[33m***\e[0m Referential #{referential.name}" +    referential.switch do +      Referential.models_with_checksum.each do |klass| +        i = 0 +        j = 0 +        prev_size = 1 +        head =  "Updating checksums for #{klass.name}: " +        print head +        print "⎯"*(80-head.size) +        print "  " +        count = klass.count +        klass.find_each do |o| +          o.update_checksum! +          if j%10 == 0 +            out = "#{"\b"*prev_size}\e[33m#{thing[i]}\e[0m (#{j}/#{count})" +            prev_size = out.size - prev_size - 9 +            print out +            i = (i+1) % thing.size +          end +          j += 1 +        end +        print "#{"\b"*prev_size}\e[32m✓\e[0m (#{count}/#{count})\n" +      end +    end +  end + +  desc 'Update all the checksums in the given referential' +  task :update_checksums_in_referential, [:slug] => :environment do |t, args| +    referential = Referential.find_by_slug(args[:slug]) +    update_checksums_for_referential referential +  end + +  desc 'Update all the checksums in the given organisation' +  task :update_checksums_in_organisation, [:organisation_id] => :environment do |t, args| +    thing = %w(\\ | / —) +    Organisation.find(args[:organisation_id]).referentials.find_each do |referential| +      update_checksums_for_referential referential +    end +  end  end | 
