aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2018-03-30 13:26:09 +0200
committerGitHub2018-03-30 13:26:09 +0200
commit3491a4a922d22d88803ef98b95cf93f45acbfd63 (patch)
treef0137d631072483576ce17005b09815b862a20fc
parent9e3b1457d737092fc2b220ac9678407dcafcaf93 (diff)
parentf8f300c203d517fbc92ff2c6a4bc523357b9303c (diff)
downloadchouette-core-3491a4a922d22d88803ef98b95cf93f45acbfd63.tar.bz2
Merge pull request #410 from af83/6328-check-seeds
Improve (try to -) seeds. Refs #6328
-rw-r--r--app/models/line_referential.rb4
-rw-r--r--app/models/line_referential_membership.rb3
-rw-r--r--app/models/stop_area_referential.rb2
-rw-r--r--app/models/stop_area_referential_membership.rb3
-rw-r--r--db/seeds/seed_helpers.rb12
-rw-r--r--db/seeds/stif.seeds.rb53
6 files changed, 37 insertions, 40 deletions
diff --git a/app/models/line_referential.rb b/app/models/line_referential.rb
index 0d2ed39b1..89700c06f 100644
--- a/app/models/line_referential.rb
+++ b/app/models/line_referential.rb
@@ -1,7 +1,7 @@
class LineReferential < ActiveRecord::Base
include ObjectidFormatterSupport
extend StifTransportModeEnumerations
-
+
has_many :line_referential_memberships
has_many :organisations, through: :line_referential_memberships
has_many :lines, class_name: 'Chouette::Line'
@@ -14,7 +14,7 @@ class LineReferential < ActiveRecord::Base
def add_member(organisation, options = {})
attributes = options.merge organisation: organisation
- line_referential_memberships.build attributes
+ line_referential_memberships.build attributes unless organisations.include?(organisation)
end
validates :name, presence: true
diff --git a/app/models/line_referential_membership.rb b/app/models/line_referential_membership.rb
index b49d1b5b1..e89ed50b3 100644
--- a/app/models/line_referential_membership.rb
+++ b/app/models/line_referential_membership.rb
@@ -1,4 +1,7 @@
class LineReferentialMembership < ActiveRecord::Base
belongs_to :organisation
belongs_to :line_referential
+
+ validates :organisation_id, presence: true, uniqueness: { scope: :line_referential }
+ validates :line_referential_id, presence: true
end
diff --git a/app/models/stop_area_referential.rb b/app/models/stop_area_referential.rb
index a9d3cc9b1..4706cdd77 100644
--- a/app/models/stop_area_referential.rb
+++ b/app/models/stop_area_referential.rb
@@ -12,7 +12,7 @@ class StopAreaReferential < ActiveRecord::Base
def add_member(organisation, options = {})
attributes = options.merge organisation: organisation
- stop_area_referential_memberships.build attributes
+ stop_area_referential_memberships.build attributes unless organisations.include?(organisation)
end
def last_sync
diff --git a/app/models/stop_area_referential_membership.rb b/app/models/stop_area_referential_membership.rb
index 435970961..68bc97f36 100644
--- a/app/models/stop_area_referential_membership.rb
+++ b/app/models/stop_area_referential_membership.rb
@@ -1,4 +1,7 @@
class StopAreaReferentialMembership < ActiveRecord::Base
belongs_to :organisation
belongs_to :stop_area_referential
+
+ validates :organisation_id, presence: true, uniqueness: { scope: :stop_area_referential }
+ validates :stop_area_referential_id, presence: true
end
diff --git a/db/seeds/seed_helpers.rb b/db/seeds/seed_helpers.rb
new file mode 100644
index 000000000..8e47e10bd
--- /dev/null
+++ b/db/seeds/seed_helpers.rb
@@ -0,0 +1,12 @@
+class ActiveRecord::Base
+ def self.seed_by(key_attribute, &block)
+ model = find_or_create_by! key_attribute
+ print "Seed #{name} #{key_attribute.inspect} "
+ yield model
+
+ puts "[#{(model.changed? ? 'updated' : 'no change')}]"
+ model.save!
+
+ model
+ end
+end
diff --git a/db/seeds/stif.seeds.rb b/db/seeds/stif.seeds.rb
index aa87b6f6c..bb73b0b9c 100644
--- a/db/seeds/stif.seeds.rb
+++ b/db/seeds/stif.seeds.rb
@@ -1,46 +1,25 @@
# coding: utf-8
-# This file should contain all the record creation needed to seed the database with its default values.
-# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
-stop_area_referential = StopAreaReferential.find_or_create_by!(name: "Reflex", objectid_format: "stif_netex")
-line_referential = LineReferential.find_or_create_by!(name: "CodifLigne", objectid_format: "stif_netex")
+require_relative 'seed_helpers'
-workgroup = Workgroup.find_or_create_by!(name: "Gestion de l'offre théorique IDFm") do |w|
- w.line_referential = line_referential
- w.stop_area_referential = stop_area_referential
- w.export_types = ["Export::Netex"]
+stif = Organisation.seed_by(code: "STIF") do |o|
+ o.name = 'STIF'
end
-Workbench.update_all workgroup_id: workgroup
-
-# Organisations
-stif = Organisation.find_or_create_by!(code: "STIF") do |org|
- org.name = 'STIF'
+stop_area_referential = StopAreaReferential.seed_by(name: "Reflex") do |r|
+ r.objectid_format = "stif_netex"
+ r.add_member stif, owner: true
end
-# operator = Organisation.find_or_create_by!(code: 'transporteur-a') do |organisation|
-# organisation.name = "Transporteur A"
-# end
-
-# Member
-line_referential.add_member stif, owner: true
-# line_referential.add_member operator
-stop_area_referential.add_member stif, owner: true
-# stop_area_referential.add_member operator
+line_referential = LineReferential.seed_by(name: "CodifLigne") do |r|
+ r.objectid_format = "stif_netex"
+ r.add_member stif, owner: true
+end
-# Users
-# stif.users.find_or_create_by!(username: "admin") do |user|
-# user.email = 'stif-boiv@af83.com'
-# user.password = "secret"
-# user.name = "STIF Administrateur"
-# end
-#
-# operator.users.find_or_create_by!(username: "transporteur") do |user|
-# user.email = 'stif-boiv+transporteur@af83.com'
-# user.password = "secret"
-# user.name = "Martin Lejeune"
-# end
+workgroup = Workgroup.seed_by(name: "Gestion de l'offre théorique IDFm") do |w|
+ w.line_referential = line_referential
+ w.stop_area_referential = stop_area_referential
+ w.export_types = ["Export::Netex"]
+end
-# Include all Lines in organisation functional_scope
-stif.update sso_attributes: { functional_scope: line_referential.lines.pluck(:objectid) }
-#operator.update sso_attributes: { functional_scope: line_referential.lines.limit(3).pluck(:objectid) }
+Workbench.update_all workgroup_id: workgroup