diff options
| author | Alban Peignier | 2016-05-13 11:56:54 +0200 |
|---|---|---|
| committer | Alban Peignier | 2016-05-13 11:56:54 +0200 |
| commit | 6e28e49262ede9c57a6c5726570a4921f4b63d04 (patch) | |
| tree | 31a26a03e2c1dd3af796c9854918d112ad6e97c8 /app/models/chouette | |
| parent | 781142afdb90bb0ca62783435f582725794f4f57 (diff) | |
| download | chouette-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.rb | 6 | ||||
| -rw-r--r-- | app/models/chouette/line.rb | 6 | ||||
| -rw-r--r-- | app/models/chouette/stop_area.rb | 1 | ||||
| -rw-r--r-- | app/models/chouette/trident_active_record.rb | 138 |
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 |
