aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorXinhui2017-07-25 15:34:33 +0200
committerXinhui2017-07-25 15:34:33 +0200
commite9e91490317d1ccbc1f75e36b78a88876745bb2a (patch)
tree43d2a6607452f232697a6408d2203236811022d7 /app
parent62ac1ecf0fd61f1785f46ebb577ca5c1e65311a1 (diff)
downloadchouette-core-e9e91490317d1ccbc1f75e36b78a88876745bb2a.tar.bz2
Add Concern StifNetexAttributesSupport
Diffstat (limited to 'app')
-rw-r--r--app/models/chouette/stif_netex_objectid.rb38
-rw-r--r--app/models/concerns/stif_netex_attributes_support.rb55
2 files changed, 93 insertions, 0 deletions
diff --git a/app/models/chouette/stif_netex_objectid.rb b/app/models/chouette/stif_netex_objectid.rb
new file mode 100644
index 000000000..3b11691d9
--- /dev/null
+++ b/app/models/chouette/stif_netex_objectid.rb
@@ -0,0 +1,38 @@
+class Chouette::StifNetexObjectid < String
+ def valid?
+ parts.present?
+ end
+
+ @@format = /^([A-Za-z_]+):([A-Za-z]+):([0-9A-Za-z_-]+):([A-Za-z]+)$/
+ cattr_reader :format
+
+ def parts
+ match(format).try(:captures)
+ end
+
+ def provider_id
+ parts.try(:first)
+ end
+
+ def object_type
+ parts.try(:second)
+ end
+
+ def local_id
+ parts.try(:third)
+ end
+
+ def boiv_id
+ parts.try(:fourth)
+ end
+
+ def self.create(provider_id, object_type, local_id, boiv_id)
+ new [provider_id, object_type, local_id, boiv_id].join(":")
+ end
+
+ def self.new(string)
+ string ||= ""
+ self === string ? string : super
+ end
+
+end
diff --git a/app/models/concerns/stif_netex_attributes_support.rb b/app/models/concerns/stif_netex_attributes_support.rb
new file mode 100644
index 000000000..d4070fbc6
--- /dev/null
+++ b/app/models/concerns/stif_netex_attributes_support.rb
@@ -0,0 +1,55 @@
+module StifNetexAttributesSupport
+ extend ActiveSupport::Concern
+
+ included do
+
+ validates_presence_of :objectid
+ validates :objectid, uniqueness: true
+ validates_numericality_of :object_version
+ validate :objectid_format_compliance
+
+ before_validation :default_values, :on => :create
+ # before_save :increment_workbench_local_id
+ end
+
+ def objectid
+ Chouette::StifNetexObjectId.new read_attribute(:objectid)
+ end
+
+ def provider_id
+ self.referential.workbench.organisation
+ end
+
+ def object_type
+ self.class
+ end
+
+
+ def local_id
+ ''
+ end
+
+ def boiv_id
+ 'LOC'
+ end
+
+ def objectid_format_compliance
+ errors.add :objectid, I18n.t("activerecord.errors.models.stif_netex.invalid_object_id") if !objectid.valid?
+ end
+
+ def default_values
+ self.object_id ||= Chouette::StifNetexObjectId.create(provider_id, object_type, local_id, boiv_id)
+ self.object_version ||= 1
+ end
+
+ def increment_workbench_local_id
+ workbench_object_identifier = self.referential.workbench.worbench_object_identifiers.find_or_create_by_object_class(self.class)
+ result = WorbenchObjectIdentifier.increment_counter(:last_local_id, 1)
+ counter = 3
+ # Ecrire le code pour répéter l'opération 3 fois au cas ou l'enregistrement échouerait.
+ while result == false && counter <= 3
+ .....
+ end
+ end
+
+end