aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2016-11-15 16:39:26 +0100
committerXinhui2016-11-15 16:39:30 +0100
commitaa6a6f3aabb621e8697cc91bb9760d086678ca89 (patch)
tree83cd246ce0ed657746f50a5015c71159104e46b3
parentcddd627eacd1a0bf252494fd7394438f958d53ab (diff)
downloadchouette-core-aa6a6f3aabb621e8697cc91bb9760d086678ca89.tar.bz2
Refactoring CleanUpResult as ActiveRecord model
Refs #1933
-rw-r--r--app/models/clean_up.rb56
-rw-r--r--app/models/clean_up_result.rb56
-rw-r--r--app/views/referentials/_clean.html.slim8
-rw-r--r--app/workers/clean_up_worker.rb7
-rw-r--r--config/initializers/apartment.rb3
-rw-r--r--config/locales/clean_ups.en.yml11
-rw-r--r--config/locales/clean_ups.fr.yml11
-rw-r--r--db/migrate/20161115142708_create_clean_up_results.rb10
-rw-r--r--db/schema.rb12
-rw-r--r--spec/factories/clean_up_results.rb9
-rw-r--r--spec/models/clean_up_result_spec.rb5
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