diff options
| -rw-r--r-- | app/models/chouette/stif_netex_objectid.rb | 38 | ||||
| -rw-r--r-- | app/models/concerns/stif_netex_attributes_support.rb | 55 |
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 |
