diff options
| -rw-r--r-- | app/models/referential.rb | 26 | ||||
| -rw-r--r-- | db/migrate/20180418070400_add_failed_at_to_referentials.rb | 5 | ||||
| -rw-r--r-- | db/schema.rb | 28 | ||||
| -rw-r--r-- | spec/models/referential_spec.rb | 46 |
4 files changed, 82 insertions, 23 deletions
diff --git a/app/models/referential.rb b/app/models/referential.rb index 0522d72c0..486c3c495 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -58,7 +58,13 @@ class Referential < ApplicationModel belongs_to :referential_suite - scope :ready, -> { where(ready: true) } + scope :pending, -> { where(ready: false, failed_at: nil, archived_at: nil, failed_at: nil) } + scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) } + scope :failed, -> { where.not(failed_at: nil) } + scope :archived, -> { where.not(archived_at: nil) } + + scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) } + scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) } scope :in_periode, ->(periode) { where(id: referential_ids_in_periode(periode)) } scope :include_metadatas_lines, ->(line_ids) { where('referential_metadata.line_ids && ARRAY[?]::bigint[]', line_ids) } scope :order_by_validity_period, ->(dir) { joins(:metadatas).order("unnest(periodes) #{dir}") } @@ -116,6 +122,24 @@ class Referential < ApplicationModel @_models_with_checksum || [] end + def state + return :failed if failed_at.present? + return :archived if archived_at.present? + ready ? :ready : :pending + end + + def failed! + update ready: false, failed_at: Time.now, archived_at: nil + end + + def ready! + update ready: true, failed_at: nil, archived_at: nil + end + + def archived! + update ready: true, failed_at: nil, archived_at: Time.now + end + def lines if metadatas.blank? workbench ? workbench.lines : associated_lines diff --git a/db/migrate/20180418070400_add_failed_at_to_referentials.rb b/db/migrate/20180418070400_add_failed_at_to_referentials.rb new file mode 100644 index 000000000..dd9076b3b --- /dev/null +++ b/db/migrate/20180418070400_add_failed_at_to_referentials.rb @@ -0,0 +1,5 @@ +class AddFailedAtToReferentials < ActiveRecord::Migration + def change + add_column :referentials, :failed_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 7b77a55d2..eeab0102f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,12 +11,12 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180416065012) do +ActiveRecord::Schema.define(version: 20180418070400) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" - enable_extension "hstore" enable_extension "postgis" + enable_extension "hstore" enable_extension "unaccent" create_table "access_links", id: :bigserial, force: :cascade do |t| @@ -92,9 +92,9 @@ ActiveRecord::Schema.define(version: 20180416065012) do t.integer "organisation_id", limit: 8 t.datetime "created_at" t.datetime "updated_at" + t.integer "workgroup_id", limit: 8 t.integer "int_day_types" t.date "excluded_dates", array: true - t.integer "workgroup_id", limit: 8 t.jsonb "metadata", default: {} end @@ -121,7 +121,6 @@ ActiveRecord::Schema.define(version: 20180416065012) do t.datetime "updated_at" t.date "end_date" t.string "date_type" - t.string "mode" end add_index "clean_ups", ["referential_id"], name: "index_clean_ups_on_referential_id", using: :btree @@ -443,7 +442,7 @@ ActiveRecord::Schema.define(version: 20180416065012) do add_index "import_messages", ["resource_id"], name: "index_import_messages_on_resource_id", using: :btree create_table "import_resources", id: :bigserial, force: :cascade do |t| - t.integer "import_id", limit: 8 + t.integer "import_id", limit: 8 t.string "status" t.datetime "created_at" t.datetime "updated_at" @@ -451,13 +450,9 @@ ActiveRecord::Schema.define(version: 20180416065012) do t.string "reference" t.string "name" t.hstore "metrics" - t.integer "referential_id" - t.integer "parent_id" end add_index "import_resources", ["import_id"], name: "index_import_resources_on_import_id", using: :btree - add_index "import_resources", ["parent_id"], name: "index_import_resources_on_parent_id", using: :btree - add_index "import_resources", ["referential_id"], name: "index_import_resources_on_referential_id", using: :btree create_table "imports", id: :bigserial, force: :cascade do |t| t.string "status" @@ -742,6 +737,7 @@ ActiveRecord::Schema.define(version: 20180416065012) do t.integer "referential_suite_id", limit: 8 t.string "objectid_format" t.datetime "merged_at" + t.datetime "failed_at" end add_index "referentials", ["created_from_id"], name: "index_referentials_on_created_from_id", using: :btree @@ -865,8 +861,8 @@ ActiveRecord::Schema.define(version: 20180416065012) do t.integer "waiting_time" t.string "kind" t.jsonb "localized_names" - t.json "custom_field_values" t.datetime "confirmed_at" + t.jsonb "custom_field_values" t.jsonb "metadata", default: {} end @@ -1066,17 +1062,6 @@ ActiveRecord::Schema.define(version: 20180416065012) do add_index "vehicle_journeys", ["objectid"], name: "vehicle_journeys_objectid_key", unique: true, using: :btree add_index "vehicle_journeys", ["route_id"], name: "index_vehicle_journeys_on_route_id", using: :btree - create_table "versions", id: :bigserial, force: :cascade do |t| - t.string "item_type", null: false - t.integer "item_id", null: false - t.string "event", null: false - t.string "whodunnit" - t.text "object" - t.datetime "created_at" - end - - add_index "versions", ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id", using: :btree - create_table "workbenches", id: :bigserial, force: :cascade do |t| t.string "name" t.integer "organisation_id", limit: 8 @@ -1123,7 +1108,6 @@ ActiveRecord::Schema.define(version: 20180416065012) do add_foreign_key "compliance_controls", "compliance_control_blocks" add_foreign_key "compliance_controls", "compliance_control_sets" add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade - add_foreign_key "import_resources", "referentials" add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify add_foreign_key "journey_frequencies", "vehicle_journeys", on_delete: :nullify add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", on_delete: :cascade diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb index 5dfab5348..2fb8b5cb0 100644 --- a/spec/models/referential_spec.rb +++ b/spec/models/referential_spec.rb @@ -29,6 +29,52 @@ describe Referential, :type => :model do end end + context ".state" do + it "should return the expected values" do + referential = build :referential + referential.ready = false + expect(referential.state).to eq :pending + referential.failed_at = Time.now + expect(referential.state).to eq :failed + referential.ready = true + referential.failed_at = nil + expect(referential.state).to eq :ready + referential.archived_at = Time.now + expect(referential.state).to eq :archived + end + + context "the scopes" do + it "should filter the referentials" do + referential = create :referential, ready: false + expect(Referential.pending).to include referential + expect(Referential.failed).to_not include referential + expect(Referential.ready).to_not include referential + expect(Referential.archived).to_not include referential + + referential = create :referential + referential.failed! + expect(Referential.pending).to_not include referential + expect(Referential.failed).to include referential + expect(Referential.ready).to_not include referential + expect(Referential.archived).to_not include referential + + referential = create :referential + referential.ready! + expect(Referential.pending).to_not include referential + expect(Referential.failed).to_not include referential + expect(Referential.ready).to include referential + expect(Referential.archived).to_not include referential + + referential = create :referential + referential.archived! + expect(Referential.pending).to_not include referential + expect(Referential.failed).to_not include referential + expect(Referential.ready).to_not include referential + expect(Referential.archived).to include referential + end + end + end + context ".referential_ids_in_periode" do it 'should retrieve referential id in periode range' do range = ref.metadatas.first.periodes.sample |
