diff options
| author | Xinhui | 2016-11-15 16:39:26 +0100 | 
|---|---|---|
| committer | Xinhui | 2016-11-15 16:39:30 +0100 | 
| commit | aa6a6f3aabb621e8697cc91bb9760d086678ca89 (patch) | |
| tree | 83cd246ce0ed657746f50a5015c71159104e46b3 | |
| parent | cddd627eacd1a0bf252494fd7394438f958d53ab (diff) | |
| download | chouette-core-aa6a6f3aabb621e8697cc91bb9760d086678ca89.tar.bz2 | |
Refactoring CleanUpResult as ActiveRecord model
Refs #1933
| -rw-r--r-- | app/models/clean_up.rb | 56 | ||||
| -rw-r--r-- | app/models/clean_up_result.rb | 56 | ||||
| -rw-r--r-- | app/views/referentials/_clean.html.slim | 8 | ||||
| -rw-r--r-- | app/workers/clean_up_worker.rb | 7 | ||||
| -rw-r--r-- | config/initializers/apartment.rb | 3 | ||||
| -rw-r--r-- | config/locales/clean_ups.en.yml | 11 | ||||
| -rw-r--r-- | config/locales/clean_ups.fr.yml | 11 | ||||
| -rw-r--r-- | db/migrate/20161115142708_create_clean_up_results.rb | 10 | ||||
| -rw-r--r-- | db/schema.rb | 12 | ||||
| -rw-r--r-- | spec/factories/clean_up_results.rb | 9 | ||||
| -rw-r--r-- | spec/models/clean_up_result_spec.rb | 5 | 
11 files changed, 76 insertions, 112 deletions
| diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb index 7b4af2fd6..607362682 100644 --- a/app/models/clean_up.rb +++ b/app/models/clean_up.rb @@ -1,6 +1,8 @@  class CleanUp < ActiveRecord::Base    include AASM    belongs_to :referential +  has_one :clean_up_result +    validates :expected_date, presence: true    after_commit :perform_cleanup, :on => :create @@ -8,51 +10,57 @@ class CleanUp < ActiveRecord::Base      CleanUpWorker.perform_async(self.id)    end +  def clean +    result = {} +    tms = Chouette::TimeTable.validity_out_from_on?(expected_date) +    tms.each.map(&:delete) + +    result['time_table_count']      = tms.size +    result['vehicle_journey_count'] = self.clean_vehicle_journeys +    result['journey_pattern_count'] = self.clean_journey_patterns +    result +  end + +  def clean_vehicle_journeys +    ids = Chouette::VehicleJourney.includes(:time_tables).where(:time_tables => {id: nil}).pluck(:id) +    Chouette::VehicleJourney.where(id: ids).delete_all +  end + +  def clean_journey_patterns +    ids = Chouette::JourneyPattern.includes(:vehicle_journeys).where(:vehicle_journeys => {id: nil}).pluck(:id) +    Chouette::JourneyPattern.where(id: ids).delete_all +  end +    aasm column: :status do      state :new, :initial => true      state :pending      state :successful      state :failed -    event :run, after: :update_started_at do +    event :run, after: :log_pending do        transitions :from => [:new, :failed], :to => :pending      end -    event :successful, after: :update_ended_at do +    event :successful, after: :log_successful do        transitions :from => [:pending, :failed], :to => :successful      end -    event :failed, after: :update_ended_at do +    event :failed, after: :log_failed do        transitions :from => :pending, :to => :failed      end    end -  def update_started_at +  def log_pending      update_attribute(:started_at, Time.now)    end -  def update_ended_at +  def log_successful message_attributs      update_attribute(:ended_at, Time.now) +    CleanUpResult.create(clean_up: self, message_key: :successfull, message_attributs: message_attributs)    end -  def clean -    result = CleanUpResult.new -    tms = Chouette::TimeTable.validity_out_from_on?(expected_date) -    result.time_table_count = tms.size -    tms.each.map(&:delete) - -    result.vehicle_journey_count = self.clean_vehicle_journeys -    result.journey_pattern_count = self.clean_journey_patterns -    result -  end - -  def clean_vehicle_journeys -    ids = Chouette::VehicleJourney.includes(:time_tables).where(:time_tables => {id: nil}).pluck(:id) -    Chouette::VehicleJourney.where(id: ids).delete_all -  end - -  def clean_journey_patterns -    ids = Chouette::JourneyPattern.includes(:vehicle_journeys).where(:vehicle_journeys => {id: nil}).pluck(:id) -    Chouette::JourneyPattern.where(id: ids).delete_all +  def log_failed message_attributs +    update_attribute(:ended_at, Time.now) +    # self.clean_up_result.create(message_key: :failed, message_attributs: message_attributs)    end  end diff --git a/app/models/clean_up_result.rb b/app/models/clean_up_result.rb index 92f326c0f..24d262deb 100644 --- a/app/models/clean_up_result.rb +++ b/app/models/clean_up_result.rb @@ -1,55 +1,3 @@ -class CleanUpResult -  include ActiveModel::Conversion   -  extend ActiveModel::Naming -   -  attr_accessor :time_table_count,:vehicle_journey_count,:journey_pattern_count,:route_count,:line_count -  attr_accessor :stop_count,:company_count,:network_count,:group_of_line_count -   -  def initialize() -    self.time_table_count = 0 -    self.vehicle_journey_count = 0 -    self.journey_pattern_count = 0 -    self.route_count = 0 -    self.line_count = 0 -    self.stop_count = 0 -    self.company_count = 0 -    self.network_count = 0 -    self.group_of_line_count = 0 -  end   -     -  def persisted?   -    false   -  end  - -  def notice -    a = Array.new -    a << I18n.t('clean_ups.success_tm', :count => time_table_count.to_s) -    if (vehicle_journey_count > 0)  -      a << I18n.t('clean_ups.success_vj', :count => vehicle_journey_count.to_s) -    end    -    if (journey_pattern_count > 0)  -      a << I18n.t('clean_ups.success_jp', :count => journey_pattern_count.to_s) -    end    -    if (route_count > 0)  -      a << I18n.t('clean_ups.success_r', :count => route_count.to_s) -    end    -    if (line_count > 0)  -      a << I18n.t('clean_ups.success_l', :count => line_count.to_s) -    end    -    if (company_count > 0)  -      a << I18n.t('clean_ups.success_c', :count => company_count.to_s) -    end    -    if (network_count > 0)  -      a << I18n.t('clean_ups.success_n', :count => network_count.to_s) -    end    -    if (group_of_line_count > 0)  -      a << I18n.t('clean_ups.success_g', :count => group_of_line_count.to_s) -    end    -    if (stop_count > 0)  -      a << I18n.t('clean_ups.success_sa', :count => stop_count.to_s) -    end  -    a   - -  end -   +class CleanUpResult < ActiveRecord::Base +  belongs_to :clean_up  end diff --git a/app/views/referentials/_clean.html.slim b/app/views/referentials/_clean.html.slim index 8e09c14cb..cf79da8a6 100644 --- a/app/views/referentials/_clean.html.slim +++ b/app/views/referentials/_clean.html.slim @@ -2,11 +2,5 @@    = semantic_form_for [@referential, CleanUp.new] do |form|      = form.inputs do        = form.input :expected_date, as: :date_picker, :wrapper_html => { class: 'date', title: t('titles.clean_up.expected_date') } -      = form.input :keep_lines, as: :boolean -      = form.input :keep_stops, as: :boolean -      = form.input :keep_companies, as: :boolean -      = form.input :keep_networks, as: :boolean -      = form.input :keep_group_of_lines, as: :boolean -      = form.actions do -      = form.action :submit, as: :button, label: t('clean_ups.actions.clean_up') , :button_html => { data: { confirm: t('clean_ups.actions.confirm') } }
\ No newline at end of file +      = form.action :submit, as: :button, label: t('clean_ups.actions.clean_up') , :button_html => { data: { confirm: t('clean_ups.actions.confirm') } } diff --git a/app/workers/clean_up_worker.rb b/app/workers/clean_up_worker.rb index f758b900b..2d76b3a68 100644 --- a/app/workers/clean_up_worker.rb +++ b/app/workers/clean_up_worker.rb @@ -1,16 +1,17 @@  class CleanUpWorker    include Sidekiq::Worker +  sidekiq_options :retry => false    def perform(id)      cleaner = CleanUp.find id -    cleaner.run! +    cleaner.run if cleaner.may_run?      begin        cleaner.referential.switch        result = cleaner.clean -      cleaner.successful! +      cleaner.successful(result)      rescue Exception => e        Rails.logger.error "CleanUpWorker : #{e}" -      cleaner.failed! +      cleaner.failed({error: e.message})      end    end  end diff --git a/config/initializers/apartment.rb b/config/initializers/apartment.rb index 445e32b78..7be50a2ff 100644 --- a/config/initializers/apartment.rb +++ b/config/initializers/apartment.rb @@ -36,7 +36,8 @@ Apartment.configure do |config|      "Chouette::Network",      "ReferentialCloning",      "Workbench", -    "CleanUp" +    "CleanUp", +    "CleanUpResult"    ]    # use postgres schemas? diff --git a/config/locales/clean_ups.en.yml b/config/locales/clean_ups.en.yml index 27b3dc5c1..41d1983dc 100644 --- a/config/locales/clean_ups.en.yml +++ b/config/locales/clean_ups.en.yml @@ -3,12 +3,6 @@ en:      success_tm: "%{count} time tables deleted"      success_vj: "%{count} vehicle journeys deleted"      success_jp: "%{count} journey patterns deleted" -    success_r: "%{count} routes deleted" -    success_l: "%{count} lines deleted" -    success_sa: "%{count} stop areas deleted" -    success_c: "%{count} companies deleted" -    success_n: "%{count} networks deleted" -    success_g: "%{count} groups of lines deleted"      failure: "Fail when clean_up : %{error_message}"      actions:        clean_up: "clean up" @@ -17,11 +11,6 @@ en:      attributes:        clean_up:          expected_date: "Final date : " -        keep_lines: "keep lines" -        keep_stops: "keep stop areas" -        keep_companies: "keep companies" -        keep_networks: "keep networks" -        keep_group_of_lines: "keep groups of lines"    titles:      clean_up:        expected_date: "value included in clean up" diff --git a/config/locales/clean_ups.fr.yml b/config/locales/clean_ups.fr.yml index 13d34ac4c..40fbf3281 100644 --- a/config/locales/clean_ups.fr.yml +++ b/config/locales/clean_ups.fr.yml @@ -3,12 +3,6 @@ fr:      success_tm: "%{count} calendrier(s) supprimé(s)"      success_vj: "%{count} course(s) supprimée(s)"      success_jp: "%{count} mission(s) supprimée(s)" -    success_r: "%{count} séquence(s) d'arrêt supprimée(s)" -    success_l: "%{count} ligne(s) supprimée(s)" -    success_sa: "%{count} arrêt(s) supprimé(s)" -    success_c: "%{count} transporteur(s) supprimé(s)" -    success_n: "%{count} réseau(x) supprimé(s)" -    success_g: "%{count} groupe(s) de lignes supprimé(s)"      failure: "Echec de la purge : %{error_message}"      actions:        clean_up: "Purger" @@ -17,11 +11,6 @@ fr:      attributes:        clean_up:          expected_date: "Date limite : " -        keep_lines: "conserver les lignes" -        keep_stops: "conserver les arrêts" -        keep_companies: "conserver les transporteurs" -        keep_networks: "conserver les réseaux" -        keep_group_of_lines: "conserver les groupes de lignes"    titles:      clean_up:        expected_date: "valeur incluse dans la purge" diff --git a/db/migrate/20161115142708_create_clean_up_results.rb b/db/migrate/20161115142708_create_clean_up_results.rb new file mode 100644 index 000000000..689fb1268 --- /dev/null +++ b/db/migrate/20161115142708_create_clean_up_results.rb @@ -0,0 +1,10 @@ +class CreateCleanUpResults < ActiveRecord::Migration +  def change +    create_table :clean_up_results do |t| +      t.string :message_key +      t.hstore :message_attributs +      t.references :clean_up, index: true +      t.timestamps +    end +  end +end diff --git a/db/schema.rb b/db/schema.rb index 9d86632b7..e4b85109c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@  #  # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161115141625) do +ActiveRecord::Schema.define(version: 20161115142708) do    # These are extensions that must be enabled in order to support this database    enable_extension "plpgsql" @@ -77,6 +77,16 @@ ActiveRecord::Schema.define(version: 20161115141625) do      t.datetime "updated_at"    end +  create_table "clean_up_results", force: true do |t| +    t.string   "message_key" +    t.hstore   "message_attributs" +    t.integer  "clean_up_id" +    t.datetime "created_at" +    t.datetime "updated_at" +  end + +  add_index "clean_up_results", ["clean_up_id"], :name => "index_clean_up_results_on_clean_up_id" +    create_table "clean_ups", force: true do |t|      t.string   "status"      t.datetime "started_at" diff --git a/spec/factories/clean_up_results.rb b/spec/factories/clean_up_results.rb new file mode 100644 index 000000000..6d3818eff --- /dev/null +++ b/spec/factories/clean_up_results.rb @@ -0,0 +1,9 @@ +FactoryGirl.define do +  factory :clean_up_result do +    criticity 1 +message_key "MyString" +message_attributs "" +cleanup nil +  end + +end diff --git a/spec/models/clean_up_result_spec.rb b/spec/models/clean_up_result_spec.rb new file mode 100644 index 000000000..5b1efe689 --- /dev/null +++ b/spec/models/clean_up_result_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CleanUpResult, :type => :model do +  it { should belong_to(:clean_up) } +end | 
