aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/chouette
diff options
context:
space:
mode:
authorAlban Peignier2016-05-13 11:56:54 +0200
committerAlban Peignier2016-05-13 11:56:54 +0200
commit6e28e49262ede9c57a6c5726570a4921f4b63d04 (patch)
tree31a26a03e2c1dd3af796c9854918d112ad6e97c8 /app/models/chouette
parent781142afdb90bb0ca62783435f582725794f4f57 (diff)
downloadchouette-core-6e28e49262ede9c57a6c5726570a4921f4b63d04.tar.bz2
Refactor models and controllers to manage Lines in LineReferential. Refs #825
Diffstat (limited to 'app/models/chouette')
-rw-r--r--app/models/chouette/group_of_line.rb6
-rw-r--r--app/models/chouette/line.rb6
-rw-r--r--app/models/chouette/stop_area.rb1
-rw-r--r--app/models/chouette/trident_active_record.rb138
4 files changed, 17 insertions, 134 deletions
diff --git a/app/models/chouette/group_of_line.rb b/app/models/chouette/group_of_line.rb
index 9443a34e5..0b91f3442 100644
--- a/app/models/chouette/group_of_line.rb
+++ b/app/models/chouette/group_of_line.rb
@@ -1,5 +1,8 @@
-class Chouette::GroupOfLine < Chouette::TridentActiveRecord
+class Chouette::GroupOfLine < Chouette::ActiveRecord
+ include DefaultAttributesSupport
include GroupOfLineRestrictions
+ include LineReferentialSupport
+
# FIXME http://jira.codehaus.org/browse/JRUBY-6358
self.primary_key = "id"
@@ -26,4 +29,3 @@ class Chouette::GroupOfLine < Chouette::TridentActiveRecord
end
end
-
diff --git a/app/models/chouette/line.rb b/app/models/chouette/line.rb
index b1e9940d3..ddd6fc37d 100644
--- a/app/models/chouette/line.rb
+++ b/app/models/chouette/line.rb
@@ -1,5 +1,9 @@
-class Chouette::Line < Chouette::TridentActiveRecord
+class Chouette::Line < Chouette::ActiveRecord
+ include DefaultAttributesSupport
include LineRestrictions
+
+ include LineReferentialSupport
+
# FIXME http://jira.codehaus.org/browse/JRUBY-6358
self.primary_key = "id"
diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb
index 84ea47693..588014fff 100644
--- a/app/models/chouette/stop_area.rb
+++ b/app/models/chouette/stop_area.rb
@@ -15,7 +15,6 @@ class Chouette::StopArea < Chouette::TridentActiveRecord
has_and_belongs_to_many :routing_stops, :class_name => 'Chouette::StopArea', :foreign_key => "parent_id", :association_foreign_key => "child_id", :join_table => "stop_areas_stop_areas", :order => "stop_areas.name"
belongs_to :stop_area_referential
- belongs_to :line_referential
validates_presence_of :stop_area_referential_id
acts_as_tree :foreign_key => 'parent_id',:order => "name"
diff --git a/app/models/chouette/trident_active_record.rb b/app/models/chouette/trident_active_record.rb
index 225d7bb4b..cf7a59c0c 100644
--- a/app/models/chouette/trident_active_record.rb
+++ b/app/models/chouette/trident_active_record.rb
@@ -1,141 +1,19 @@
class Chouette::TridentActiveRecord < Chouette::ActiveRecord
- before_validation :prepare_auto_columns
- after_validation :reset_auto_columns
-
- after_save :build_objectid
+ include DefaultAttributesSupport
- self.abstract_class = true
- #
- # triggers to generate objectId and objectVersion
- # TODO setting prefix in referential object
-
- def self.object_id_key
- model_name
- end
+ self.abstract_class = true
- def referential
- @referential ||= Referential.where(:slug => Apartment::Tenant.current).first!
- end
-
- def hub_restricted?
- referential.data_format == "hub"
- end
-
- def prefix
- self.referential.prefix
- end
-
- def prepare_auto_columns
- # logger.info 'calling before_validation'
- # logger.info 'start before_validation : '+self.objectid.to_s
- if self.objectid.nil? || self.objectid.blank?
- # if empty, generate a pending objectid which will be completed after creation
- if self.id.nil?
- self.objectid = "#{prefix}:#{self.class.object_id_key}:__pending_id__#{rand(1000)}"
- else
- self.objectid = "#{prefix}:#{self.class.object_id_key}:#{self.id}"
- fix_uniq_objectid
- end
- elsif not self.objectid.include? ':'
- # if one token : technical token : completed by prefix and key
- self.objectid = "#{prefix}:#{self.class.object_id_key}:#{self.objectid}"
- end
- # logger.info 'end before_validation : '+self.objectid
- # initialize or update version
- if self.object_version.nil?
- self.object_version = 1
- else
- self.object_version += 1
- end
- self.creation_time = Time.now
- self.creator_id = 'chouette'
- end
-
- def reset_auto_columns
- clean_object_id unless self.errors.nil? || self.errors.empty?
- end
-
- def clean_object_id
- if self.objectid.include?("__pending_id__")
- self.objectid=nil
- end
- end
-
- def fix_uniq_objectid
- base_objectid = self.objectid.rpartition(":").first
- self.objectid = "#{base_objectid}:#{self.id}"
- if !self.valid?
- base_objectid="#{self.objectid}_"
- cnt=1
- while !self.valid?
- self.objectid = "#{base_objectid}#{cnt}"
- cnt += 1
- end
- end
-
- end
-
- def build_objectid
- #logger.info 'start after_create : '+self.objectid
- if self.objectid.include? ':__pending_id__'
- fix_uniq_objectid
- self.update_attributes( :objectid => self.objectid, :object_version => (self.object_version - 1) )
- end
- #logger.info 'end after_create : '+self.objectid
- end
-
- validates_presence_of :objectid
- validates_uniqueness_of :objectid
- validates_numericality_of :object_version
- validate :objectid_format_compliance
-
- def objectid_format_compliance
- if !self.objectid.valid?
- #errors.add(:objectid, "is not a valid ObjectId object")
- errors.add(:objectid,I18n.t("activerecord.errors.models.trident.invalid_object_id",:type => self.class.object_id_key))
-# else
-# unless self.objectid.object_type==self.class.object_id_key
-# errors.add(:objectid,I18n.t("activerecord.errors.models.trident.invalid_object_id_type",:type => self.class.object_id_key))
-# end
- end
- end
-
- def uniq_objectid
- i = 0
- baseobjectid = self.objectid
- while self.class.exists?(:objectid => self.objectid)
- i += 1
- self.objectid = baseobjectid+"_"+i.to_s
- end
+ def referential
+ @referential ||= Referential.where(:slug => Apartment::Tenant.current).first!
end
- def self.model_name
- ActiveModel::Name.new self, Chouette, self.name.demodulize
+ def hub_restricted?
+ referential.data_format == "hub"
end
- def objectid
- Chouette::ObjectId.new read_attribute(:objectid)
+ def prefix
+ self.referential.prefix
end
-# def version
-# self.object_version
-# end
-
-# def version=(version)
-# self.object_version = version
-# end
-
- before_validation :default_values, :on => :create
- def default_values
- self.object_version ||= 1
- end
-
- def timestamp_attributes_for_update #:nodoc:
- [:creation_time]
- end
-
- def timestamp_attributes_for_create #:nodoc:
- [:creation_time]
- end
end