aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcedricnjanga2017-11-16 16:10:48 +0100
committercedricnjanga2017-11-17 10:49:01 +0100
commit0f7da86d0a54d84f9f9f5683b2bb95a106158373 (patch)
treee0e930a927a2367b5ef7fe2a1906da5dc2e96c16
parent8cbad698e0fe517602bca4b82ae60795eca12ab0 (diff)
downloadchouette-core-0f7da86d0a54d84f9f9f5683b2bb95a106158373.tar.bz2
Create objectid format and integrate it in models. Work in progress. Refs #4941
-rw-r--r--app/models/chouette/netex_object_id.rb40
-rw-r--r--app/models/chouette/objectid_formater/netex.rb18
-rw-r--r--app/models/chouette/objectid_formater/stif_codifligne.rb18
-rw-r--r--app/models/chouette/objectid_formater/stif_netex.rb20
-rw-r--r--app/models/chouette/objectid_formater/stif_reflex.rb18
-rw-r--r--app/models/chouette/stif_codifligne_objectid.rb18
-rw-r--r--app/models/chouette/stif_netex_objectid.rb42
-rw-r--r--app/models/chouette/stif_reflex_objectid.rb18
-rw-r--r--app/models/concerns/object_id_format_to_referential.rb11
-rw-r--r--app/models/concerns/objectid_formater_support.rb15
-rw-r--r--app/models/line_referential.rb8
-rw-r--r--app/models/referential.rb8
-rw-r--r--app/models/stop_area_referential.rb8
13 files changed, 113 insertions, 129 deletions
diff --git a/app/models/chouette/netex_object_id.rb b/app/models/chouette/netex_object_id.rb
deleted file mode 100644
index 441004c1e..000000000
--- a/app/models/chouette/netex_object_id.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-class Chouette::NetexObjectId < String
-
- def valid?
- parts.present?
- end
- alias_method :objectid?, :valid?
-
- @@format = /^([A-Za-z_]+):([0-9A-Za-z_]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
- cattr_reader :format
-
- def parts
- match(format).try(:captures)
- end
-
- def provider_id
- parts.try(:first)
- end
-
- def system_id
- parts.try(:second)
- end
-
- def object_type
- parts.try(:third)
- end
-
- def local_id
- parts.try(:fourth)
- end
-
- def self.create(provider_id, system_id, object_type, local_id)
- new [provider_id, system_id, object_type, local_id].join(":")
- end
-
- def self.new(string)
- string ||= ""
- self === string ? string : super
- end
-
-end
diff --git a/app/models/chouette/objectid_formater/netex.rb b/app/models/chouette/objectid_formater/netex.rb
new file mode 100644
index 000000000..0736b6ff9
--- /dev/null
+++ b/app/models/chouette/objectid_formater/netex.rb
@@ -0,0 +1,18 @@
+module Chouette
+ module ObjectidFormater
+ class Netex
+ def before_validation(model)
+ model.objectid ||= Chouette::Objectid::Netex.new(local_id: SecureRandom.uuid, object_type: model.class.name.gsub(/Chouette::/,'')).to_s
+ end
+
+ def after_commit(model)
+ # unused method in this context
+ end
+
+ def parse_objectid(definition)
+ parts = definition.split(":")
+ Chouette::Objectid::Netex.new(provider_id: parts[0], object_type: parts[1], local_id: parts[2], creation_id: parts[3]).to_s rescue nil
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/app/models/chouette/objectid_formater/stif_codifligne.rb b/app/models/chouette/objectid_formater/stif_codifligne.rb
new file mode 100644
index 000000000..53fd28c82
--- /dev/null
+++ b/app/models/chouette/objectid_formater/stif_codifligne.rb
@@ -0,0 +1,18 @@
+module Chouette
+ module ObjectidFormater
+ class StifCodifligne
+ def before_validation(model)
+ # unused method in this context
+ end
+
+ def after_commit(model)
+ # unused method in this context
+ end
+
+ def parse_objectid(definition)
+ parts = definition.split(":")
+ Chouette::Objectid::StifCodifligne.new(provider_id: parts[0], sync_id: parts[1], object_type: parts[2], local_id: parts[3]).to_s rescue nil
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/app/models/chouette/objectid_formater/stif_netex.rb b/app/models/chouette/objectid_formater/stif_netex.rb
new file mode 100644
index 000000000..88995dd05
--- /dev/null
+++ b/app/models/chouette/objectid_formater/stif_netex.rb
@@ -0,0 +1,20 @@
+module Chouette
+ module ObjectidFormater
+ class StifNetex
+ def before_validation(model)
+ model.objectid ||= "__pending_id__#{rand(50)+ rand(50)}"
+ end
+
+ def after_commit(model)
+ if model.objectid.include? ':__pending_id__'
+ model.objectid = Chouette::Objectid::StifNetex.new(provider_id: "stif", object_type: model.class.name.gsub(/Chouette::/,''), local_id: model.local_id).to_s
+ end
+ end
+
+ def parse_objectid(definition)
+ parts = definition.split(":")
+ Chouette::Objectid::StifNetex.new(provider_id: parts[0], object_type: parts[1], local_id: parts[2], creation_id: parts[3]).to_s rescue nil
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/app/models/chouette/objectid_formater/stif_reflex.rb b/app/models/chouette/objectid_formater/stif_reflex.rb
new file mode 100644
index 000000000..e6c6a6a70
--- /dev/null
+++ b/app/models/chouette/objectid_formater/stif_reflex.rb
@@ -0,0 +1,18 @@
+module Chouette
+ module ObjectidFormater
+ class StifReflex
+ def before_validation(model)
+ # unused method in this context
+ end
+
+ def after_commit(model)
+ # unused method in this context
+ end
+
+ def parse_objectid(definition)
+ parts = definition.split(":")
+ Chouette::Objectid::StifReflex.new(country_code: parts[0], zip_code: parts[1], object_type: parts[2], local_id: parts[3], provider_id: parts[4]).to_s rescue nil
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/app/models/chouette/stif_codifligne_objectid.rb b/app/models/chouette/stif_codifligne_objectid.rb
deleted file mode 100644
index 46109e24f..000000000
--- a/app/models/chouette/stif_codifligne_objectid.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-class Chouette::StifCodifligneObjectid < String
-
- @@format = /^([A-Za-z_]+):([A-Za-z]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
- cattr_reader :format
-
- def parts
- match(format).try(:captures)
- end
-
- def object_type
- parts.try(:third)
- end
-
- def local_id
- parts.try(:fourth)
- end
-
-end
diff --git a/app/models/chouette/stif_netex_objectid.rb b/app/models/chouette/stif_netex_objectid.rb
deleted file mode 100644
index 93e7a1e85..000000000
--- a/app/models/chouette/stif_netex_objectid.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-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 short_id
- local_id.try(:split, "-").try(:[], -1)
- 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/chouette/stif_reflex_objectid.rb b/app/models/chouette/stif_reflex_objectid.rb
deleted file mode 100644
index c41a9325a..000000000
--- a/app/models/chouette/stif_reflex_objectid.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-class Chouette::StifReflexObjectid < String
-
- @@format = /^([A-Za-z_]+):([0-9A-Za-z_-]+):([A-Za-z]+):([0-9A-Za-z_-]+):([A-Za-z]+)$/
- cattr_reader :format
-
- def parts
- match(format).try(:captures)
- end
-
- def object_type
- parts.try(:third)
- end
-
- def local_id
- parts.try(:fourth)
- end
-
-end
diff --git a/app/models/concerns/object_id_format_to_referential.rb b/app/models/concerns/object_id_format_to_referential.rb
deleted file mode 100644
index 1b99acf17..000000000
--- a/app/models/concerns/object_id_format_to_referential.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-module ObjectIdFormatToReferential
- extend ActiveSupport::Concern
-
- included do
- validates_presence_of :objectid_format
- end
-
- def objectid_format
- "#{self.referential.objectid_format}_attributes_support".camelcase.constantize if self.referential.objectid_format
- end
-end
diff --git a/app/models/concerns/objectid_formater_support.rb b/app/models/concerns/objectid_formater_support.rb
new file mode 100644
index 000000000..1064b156f
--- /dev/null
+++ b/app/models/concerns/objectid_formater_support.rb
@@ -0,0 +1,15 @@
+module ObjectidFormaterSupport
+ extend ActiveSupport::Concern
+
+ included do
+ validates_presence_of :objectid_formater_class
+
+ def objectid_formater
+ objectid_formater_class.new
+ end
+
+ def objectid_formater_class
+ "Chouette::ObjectidFormater::#{read_attribute(:objectid_format).camelcase}".constantize if read_attribute(:objectid_format)
+ end
+ end
+end \ No newline at end of file
diff --git a/app/models/line_referential.rb b/app/models/line_referential.rb
index d8cf74bda..0d7125a57 100644
--- a/app/models/line_referential.rb
+++ b/app/models/line_referential.rb
@@ -1,5 +1,9 @@
class LineReferential < ActiveRecord::Base
+<<<<<<< HEAD
include ObjectidFormatterSupport
+=======
+ include ObjectidFormaterSupport
+>>>>>>> Create objectid format and integrate it in models. Work in progress. Refs #4941
extend StifTransportModeEnumerations
extend Enumerize
@@ -11,7 +15,11 @@ class LineReferential < ActiveRecord::Base
has_many :networks, class_name: 'Chouette::Network'
has_many :line_referential_syncs, -> { order created_at: :desc }
has_many :workbenches
+<<<<<<< HEAD
enumerize :objectid_format, in: %w(netex stif_netex stif_reflex stif_codifligne), default: 'netex'
+=======
+ enumerize :objectid_format, in: %w(netex stif_netex stif_reflex stif_codifligne)
+>>>>>>> Create objectid format and integrate it in models. Work in progress. Refs #4941
def add_member(organisation, options = {})
attributes = options.merge organisation: organisation
diff --git a/app/models/referential.rb b/app/models/referential.rb
index 8003d342f..8e64ef57d 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -1,6 +1,10 @@
class Referential < ActiveRecord::Base
include DataFormatEnumerations
+<<<<<<< HEAD
include ObjectidFormatterSupport
+=======
+ include ObjectidFormaterSupport
+>>>>>>> Create objectid format and integrate it in models. Work in progress. Refs #4941
extend Enumerize
validates_presence_of :name
@@ -56,7 +60,11 @@ class Referential < ActiveRecord::Base
belongs_to :referential_suite
+<<<<<<< HEAD
enumerize :objectid_format, in: %w(netex stif_netex stif_reflex stif_codifligne), default: 'netex'
+=======
+ enumerize :objectid_format, in: %w(netex stif_netex stif_reflex stif_codifligne)
+>>>>>>> Create objectid format and integrate it in models. Work in progress. Refs #4941
scope :ready, -> { where(ready: true) }
scope :in_periode, ->(periode) { where(id: referential_ids_in_periode(periode)) }
diff --git a/app/models/stop_area_referential.rb b/app/models/stop_area_referential.rb
index 159ee07b3..5709a43a9 100644
--- a/app/models/stop_area_referential.rb
+++ b/app/models/stop_area_referential.rb
@@ -1,13 +1,21 @@
class StopAreaReferential < ActiveRecord::Base
extend Enumerize
+<<<<<<< HEAD
include ObjectidFormatterSupport
+=======
+ include ObjectidFormaterSupport
+>>>>>>> Create objectid format and integrate it in models. Work in progress. Refs #4941
has_many :stop_area_referential_memberships
has_many :organisations, through: :stop_area_referential_memberships
has_many :stop_areas, class_name: 'Chouette::StopArea'
has_many :stop_area_referential_syncs, -> {order created_at: :desc}
has_many :workbenches
+<<<<<<< HEAD
enumerize :objectid_format, in: %w(netex stif_netex stif_reflex stif_codifligne), default: 'netex'
+=======
+ enumerize :objectid_format, in: %w(netex stif_netex stif_reflex stif_codifligne)
+>>>>>>> Create objectid format and integrate it in models. Work in progress. Refs #4941
validates_presence_of :objectid_format
def add_member(organisation, options = {})