diff options
| author | Zog | 2018-04-18 09:24:08 +0200 | 
|---|---|---|
| committer | Johan Van Ryseghem | 2018-04-27 11:17:19 +0200 | 
| commit | 681f874e3150c35b03e74b25827b74791ae9ae95 (patch) | |
| tree | 5a0cb5c7ab520ec2b8471f95287f89724a469851 | |
| parent | 9279fbf0cc56e0e793de2a17547da9465ae83997 (diff) | |
| download | chouette-core-681f874e3150c35b03e74b25827b74791ae9ae95.tar.bz2 | |
Refs #6572; Define 4 different states on Referentials
With according methods and scopes
| -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 | 
