aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcedricnjanga2017-11-20 15:43:25 +0100
committercedricnjanga2017-11-20 15:44:20 +0100
commit400fd17ac6cfa612d0ca634fe1f5107a91908783 (patch)
treec09b06a8a74be138b0f8e36af0c066a0295c93ba
parent70313954ea0431f02826aa5aaafefedea3c8fb00 (diff)
downloadchouette-core-400fd17ac6cfa612d0ca634fe1f5107a91908783.tar.bz2
Change the use of namespace and remove modules
-rw-r--r--app/models/chouette/access_link.rb100
-rw-r--r--app/models/chouette/journey_frequency.rb57
-rw-r--r--app/models/chouette/journey_pattern.rb298
-rw-r--r--app/models/chouette/object_id.rb36
-rw-r--r--app/models/chouette/objectid/netex.rb48
-rw-r--r--app/models/chouette/objectid/stif_codifligne.rb35
-rw-r--r--app/models/chouette/objectid/stif_netex.rb20
-rw-r--r--app/models/chouette/objectid/stif_reflex.rb34
-rw-r--r--app/models/chouette/objectid_formatter/netex.rb24
-rw-r--r--app/models/chouette/objectid_formatter/stif_codifligne.rb24
-rw-r--r--app/models/chouette/objectid_formatter/stif_netex.rb26
-rw-r--r--app/models/chouette/objectid_formatter/stif_reflex.rb24
-rw-r--r--app/models/chouette/stop_point.rb86
-rw-r--r--app/models/chouette/timeband.rb38
-rw-r--r--app/models/chouette/vehicle_journey.rb484
-rw-r--r--app/models/chouette/vehicle_journey_at_stop.rb118
-rw-r--r--app/models/chouette/vehicle_journey_at_stops_are_in_increasing_time_order_validator.rb79
-rw-r--r--app/models/chouette/vehicle_journey_at_stops_day_offset.rb60
-rw-r--r--app/models/chouette/vehicle_journey_frequency.rb106
-rw-r--r--app/models/concerns/objectid_support.rb12
-rw-r--r--spec/controllers/routes_controller_spec.rb8
-rw-r--r--spec/models/chouette/object_id_spec.rb180
-rw-r--r--spec/models/chouette/route/route_duplication_spec.rb16
-rw-r--r--spec/models/chouette/vehicle_journey_spec.rb6
24 files changed, 914 insertions, 1005 deletions
diff --git a/app/models/chouette/access_link.rb b/app/models/chouette/access_link.rb
index 543f1cdb7..9ecd401bb 100644
--- a/app/models/chouette/access_link.rb
+++ b/app/models/chouette/access_link.rb
@@ -1,66 +1,64 @@
-module Chouette
- class AccessLink < TridentActiveRecord
- include ObjectidSupport
- # FIXME http://jira.codehaus.org/browse/JRUBY-6358
- self.primary_key = "id"
+class Chouette::AccessLink < Chouette::TridentActiveRecord
+ include ObjectidSupport
+ # FIXME http://jira.codehaus.org/browse/JRUBY-6358
+ self.primary_key = "id"
- attr_accessor :access_link_type, :link_orientation_type, :link_key
+ attr_accessor :access_link_type, :link_orientation_type, :link_key
- belongs_to :access_point, :class_name => 'Chouette::AccessPoint'
- belongs_to :stop_area, :class_name => 'Chouette::StopArea'
+ belongs_to :access_point, :class_name => 'Chouette::AccessPoint'
+ belongs_to :stop_area, :class_name => 'Chouette::StopArea'
- validates_presence_of :name
- validates_presence_of :link_orientation
+ validates_presence_of :name
+ validates_presence_of :link_orientation
- def self.nullable_attributes
- [:link_distance, :default_duration, :frequent_traveller_duration, :occasional_traveller_duration,
- :mobility_restricted_traveller_duration, :link_type]
- end
+ def self.nullable_attributes
+ [:link_distance, :default_duration, :frequent_traveller_duration, :occasional_traveller_duration,
+ :mobility_restricted_traveller_duration, :link_type]
+ end
- def access_link_type
- link_type && Chouette::ConnectionLinkType.new(link_type.underscore)
- end
+ def access_link_type
+ link_type && Chouette::ConnectionLinkType.new(link_type.underscore)
+ end
- def access_link_type=(access_link_type)
- self.link_type = (access_link_type ? access_link_type.camelcase : nil)
- end
+ def access_link_type=(access_link_type)
+ self.link_type = (access_link_type ? access_link_type.camelcase : nil)
+ end
- @@access_link_types = nil
- def self.access_link_types
- @@access_link_types ||= Chouette::ConnectionLinkType.all
- end
+ @@access_link_types = nil
+ def self.access_link_types
+ @@access_link_types ||= Chouette::ConnectionLinkType.all
+ end
- def link_orientation_type
- link_orientation && Chouette::LinkOrientationType.new(link_orientation.underscore)
- end
+ def link_orientation_type
+ link_orientation && Chouette::LinkOrientationType.new(link_orientation.underscore)
+ end
- def link_orientation_type=(link_orientation_type)
- self.link_orientation = (link_orientation_type ? link_orientation_type.camelcase : nil)
- end
+ def link_orientation_type=(link_orientation_type)
+ self.link_orientation = (link_orientation_type ? link_orientation_type.camelcase : nil)
+ end
- @@link_orientation_types = nil
- def self.link_orientation_types
- @@link_orientation_types ||= Chouette::LinkOrientationType.all
- end
+ @@link_orientation_types = nil
+ def self.link_orientation_types
+ @@link_orientation_types ||= Chouette::LinkOrientationType.all
+ end
- def geometry
- GeoRuby::SimpleFeatures::LineString.from_points( [ access_point.geometry, stop_area.geometry], 4326) if access_point.geometry and stop_area.geometry
- end
+ def geometry
+ GeoRuby::SimpleFeatures::LineString.from_points( [ access_point.geometry, stop_area.geometry], 4326) if access_point.geometry and stop_area.geometry
+ end
- def link_key
- Chouette::AccessLink.build_link_key(access_point,stop_area,link_orientation_type)
- end
-
- def self.build_link_key(access_point,stop_area,link_orientation_type)
- if link_orientation_type == "access_point_to_stop_area"
- "A_#{access_point.id}-S_#{stop_area.id}"
- else
- "S_#{stop_area.id}-A_#{access_point.id}"
- end
+ def link_key
+ Chouette::AccessLink.build_link_key(access_point,stop_area,link_orientation_type)
+ end
+
+ def self.build_link_key(access_point,stop_area,link_orientation_type)
+ if link_orientation_type == "access_point_to_stop_area"
+ "A_#{access_point.id}-S_#{stop_area.id}"
+ else
+ "S_#{stop_area.id}-A_#{access_point.id}"
end
+ end
- def geometry_presenter
- Chouette::Geometry::AccessLinkPresenter.new self
- end
+ def geometry_presenter
+ Chouette::Geometry::AccessLinkPresenter.new self
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/journey_frequency.rb b/app/models/chouette/journey_frequency.rb
index 45b8aea8c..ace2db24c 100644
--- a/app/models/chouette/journey_frequency.rb
+++ b/app/models/chouette/journey_frequency.rb
@@ -1,36 +1,33 @@
-module Chouette
+class Chouette::JourneyFrequencyValidator < ActiveModel::Validator
+ def validate(record)
+ timeband = record.timeband
+ if timeband
+ first_departure_time = record.first_departure_time.utc.strftime( "%H%M%S%N" )
+ last_departure_time = record.last_departure_time.utc.strftime( "%H%M%S%N" )
+ timeband_start_time = timeband.start_time.utc.strftime( "%H%M%S%N" )
+ timeband_end_time = timeband.end_time.utc.strftime( "%H%M%S%N" )
- class JourneyFrequencyValidator < ActiveModel::Validator
- def validate(record)
- timeband = record.timeband
- if timeband
- first_departure_time = record.first_departure_time.utc.strftime( "%H%M%S%N" )
- last_departure_time = record.last_departure_time.utc.strftime( "%H%M%S%N" )
- timeband_start_time = timeband.start_time.utc.strftime( "%H%M%S%N" )
- timeband_end_time = timeband.end_time.utc.strftime( "%H%M%S%N" )
-
- unless first_departure_time.between? timeband_start_time, timeband_end_time
- record.errors[:first_departure_time] << I18n.t('activerecord.errors.models.journey_frequency.start_must_be_after_timeband')
- end
- unless last_departure_time.between? timeband_start_time, timeband_end_time
- record.errors[:last_departure_time] << I18n.t('activerecord.errors.models.journey_frequency.end_must_be_before_timeband')
- end
- end
- if record.first_departure_time == record.last_departure_time
- record.errors[:last_departure_time] << I18n.t('activerecord.errors.models.journey_frequency.end_must_be_different_from_first')
+ unless first_departure_time.between? timeband_start_time, timeband_end_time
+ record.errors[:first_departure_time] << I18n.t('activerecord.errors.models.journey_frequency.start_must_be_after_timeband')
end
- if record.scheduled_headway_interval.blank? || (record.scheduled_headway_interval.strftime( "%H%M%S%N" ) == Time.current.midnight.strftime( "%H%M%S%N" ))
- record.errors[:scheduled_headway_interval] << I18n.t('activerecord.errors.models.journey_frequency.scheduled_headway_interval_greater_than_zero')
+ unless last_departure_time.between? timeband_start_time, timeband_end_time
+ record.errors[:last_departure_time] << I18n.t('activerecord.errors.models.journey_frequency.end_must_be_before_timeband')
end
end
- end
-
- class JourneyFrequency < ActiveRecord
- belongs_to :vehicle_journey_frequency, foreign_key: 'vehicle_journey_id'
- belongs_to :timeband
- validates :first_departure_time, presence: true
- validates :last_departure_time, presence: true
- validates :scheduled_headway_interval, presence: true
- validates_with JourneyFrequencyValidator
+ if record.first_departure_time == record.last_departure_time
+ record.errors[:last_departure_time] << I18n.t('activerecord.errors.models.journey_frequency.end_must_be_different_from_first')
+ end
+ if record.scheduled_headway_interval.blank? || (record.scheduled_headway_interval.strftime( "%H%M%S%N" ) == Time.current.midnight.strftime( "%H%M%S%N" ))
+ record.errors[:scheduled_headway_interval] << I18n.t('activerecord.errors.models.journey_frequency.scheduled_headway_interval_greater_than_zero')
+ end
end
end
+
+class Chouette::JourneyFrequency < ActiveRecord::Base
+ belongs_to :vehicle_journey_frequency, foreign_key: 'vehicle_journey_id'
+ belongs_to :timeband
+ validates :first_departure_time, presence: true
+ validates :last_departure_time, presence: true
+ validates :scheduled_headway_interval, presence: true
+ validates_with Chouette::JourneyFrequencyValidator
+end \ No newline at end of file
diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb
index fb30ab69e..b52e27a6b 100644
--- a/app/models/chouette/journey_pattern.rb
+++ b/app/models/chouette/journey_pattern.rb
@@ -1,186 +1,184 @@
-module Chouette
- class JourneyPattern < Chouette::TridentActiveRecord
- include ChecksumSupport
- include JourneyPatternRestrictions
- include ObjectidSupport
- # FIXME http://jira.codehaus.org/browse/JRUBY-6358
- self.primary_key = "id"
-
- belongs_to :route
- has_many :vehicle_journeys, :dependent => :destroy
- has_many :vehicle_journey_at_stops, :through => :vehicle_journeys
- has_and_belongs_to_many :stop_points, -> { order("stop_points.position") }, :before_add => :vjas_add, :before_remove => :vjas_remove, :after_add => :shortcuts_update_for_add, :after_remove => :shortcuts_update_for_remove
- has_many :stop_areas, through: :stop_points
- has_many :journey_pattern_sections
- has_many :route_sections, through: :journey_pattern_sections, dependent: :destroy
-
- validates_presence_of :route
- validates_presence_of :name
-
- #validates :stop_points, length: { minimum: 2, too_short: :minimum }, on: :update
- enum section_status: { todo: 0, completed: 1, control: 2 }
-
- attr_accessor :control_checked
- after_update :control_route_sections, :unless => "control_checked"
-
-
- def local_id
- "IBOO-#{self.referential.id}-#{self.route.line.get_objectid.local_id}-#{self.id}"
- end
+class Chouette::JourneyPattern < Chouette::TridentActiveRecord
+ include ChecksumSupport
+ include JourneyPatternRestrictions
+ include ObjectidSupport
+ # FIXME http://jira.codehaus.org/browse/JRUBY-6358
+ self.primary_key = "id"
- def checksum_attributes
- values = self.slice(*['name', 'published_name', 'registration_number']).values
- values << self.stop_points.map(&:stop_area).map(&:user_objectid)
- values.flatten
- end
+ belongs_to :route
+ has_many :vehicle_journeys, :dependent => :destroy
+ has_many :vehicle_journey_at_stops, :through => :vehicle_journeys
+ has_and_belongs_to_many :stop_points, -> { order("stop_points.position") }, :before_add => :vjas_add, :before_remove => :vjas_remove, :after_add => :shortcuts_update_for_add, :after_remove => :shortcuts_update_for_remove
+ has_many :stop_areas, through: :stop_points
+ has_many :journey_pattern_sections
+ has_many :route_sections, through: :journey_pattern_sections, dependent: :destroy
+
+ validates_presence_of :route
+ validates_presence_of :name
+
+ #validates :stop_points, length: { minimum: 2, too_short: :minimum }, on: :update
+ enum section_status: { todo: 0, completed: 1, control: 2 }
+
+ attr_accessor :control_checked
+ after_update :control_route_sections, :unless => "control_checked"
+
+
+ def local_id
+ "IBOO-#{self.referential.id}-#{self.route.line.get_objectid.local_id}-#{self.id}"
+ end
+
+ def checksum_attributes
+ values = self.slice(*['name', 'published_name', 'registration_number']).values
+ values << self.stop_points.map(&:stop_area).map(&:user_objectid)
+ values.flatten
+ end
- def self.state_update route, state
- transaction do
- state.each do |item|
- item.delete('errors')
- jp = find_by(objectid: item['object_id']) || state_create_instance(route, item)
- next if item['deletable'] && jp.persisted? && jp.destroy
- # Update attributes and stop_points associations
- jp.update_attributes(state_permited_attributes(item)) unless item['new_record']
- jp.state_stop_points_update(item) if !jp.errors.any? && jp.persisted?
- item['errors'] = jp.errors if jp.errors.any?
- end
-
- if state.any? {|item| item['errors']}
- state.map {|item| item.delete('object_id') if item['new_record']}
- raise ::ActiveRecord::Rollback
- end
+ def self.state_update route, state
+ transaction do
+ state.each do |item|
+ item.delete('errors')
+ jp = find_by(objectid: item['object_id']) || state_create_instance(route, item)
+ next if item['deletable'] && jp.persisted? && jp.destroy
+ # Update attributes and stop_points associations
+ jp.update_attributes(state_permited_attributes(item)) unless item['new_record']
+ jp.state_stop_points_update(item) if !jp.errors.any? && jp.persisted?
+ item['errors'] = jp.errors if jp.errors.any?
end
- state.map {|item| item.delete('new_record')}
- state.delete_if {|item| item['deletable']}
+ if state.any? {|item| item['errors']}
+ state.map {|item| item.delete('object_id') if item['new_record']}
+ raise ActiveRecord::Rollback
+ end
end
- def self.state_permited_attributes item
- {
- name: item['name'],
- published_name: item['published_name'],
- registration_number: item['registration_number']
- }
- end
+ state.map {|item| item.delete('new_record')}
+ state.delete_if {|item| item['deletable']}
+ end
- def self.state_create_instance route, item
- # Flag new record, so we can unset object_id if transaction rollback
- jp = route.journey_patterns.create(state_permited_attributes(item))
+ def self.state_permited_attributes item
+ {
+ name: item['name'],
+ published_name: item['published_name'],
+ registration_number: item['registration_number']
+ }
+ end
- # FIXME
- # DefaultAttributesSupport will trigger some weird validation on after save
- # wich will call to valid?, wich will populate errors
- # In this case, we mark jp to be valid if persisted? return true
- jp.errors.clear if jp.persisted?
+ def self.state_create_instance route, item
+ # Flag new record, so we can unset object_id if transaction rollback
+ jp = route.journey_patterns.create(state_permited_attributes(item))
- item['object_id'] = jp.objectid
- item['new_record'] = true
- jp
- end
+ # FIXME
+ # DefaultAttributesSupport will trigger some weird validation on after save
+ # wich will call to valid?, wich will populate errors
+ # In this case, we mark jp to be valid if persisted? return true
+ jp.errors.clear if jp.persisted?
- def state_stop_points_update item
- item['stop_points'].each do |sp|
- exist = stop_area_ids.include?(sp['id'])
- next if exist && sp['checked']
-
- stop_point = route.stop_points.find_by(stop_area_id: sp['id'])
- if !exist && sp['checked']
- stop_points << stop_point
- end
- if exist && !sp['checked']
- stop_points.delete(stop_point)
- end
+ item['object_id'] = jp.objectid
+ item['new_record'] = true
+ jp
+ end
+
+ def state_stop_points_update item
+ item['stop_points'].each do |sp|
+ exist = stop_area_ids.include?(sp['id'])
+ next if exist && sp['checked']
+
+ stop_point = route.stop_points.find_by(stop_area_id: sp['id'])
+ if !exist && sp['checked']
+ stop_points << stop_point
+ end
+ if exist && !sp['checked']
+ stop_points.delete(stop_point)
end
end
+ end
- # TODO: this a workarround
- # otherwise, we loose the first stop_point
- # when creating a new journey_pattern
- def special_update
- bck_sp = self.stop_points.map {|s| s}
- self.update_attributes :stop_points => []
- self.update_attributes :stop_points => bck_sp
- end
+ # TODO: this a workarround
+ # otherwise, we loose the first stop_point
+ # when creating a new journey_pattern
+ def special_update
+ bck_sp = self.stop_points.map {|s| s}
+ self.update_attributes :stop_points => []
+ self.update_attributes :stop_points => bck_sp
+ end
- def departure_stop_point
- return unless departure_stop_point_id
- Chouette::StopPoint.find( departure_stop_point_id)
- end
+ def departure_stop_point
+ return unless departure_stop_point_id
+ Chouette::StopPoint.find( departure_stop_point_id)
+ end
- def arrival_stop_point
- return unless arrival_stop_point_id
- Chouette::StopPoint.find( arrival_stop_point_id)
- end
+ def arrival_stop_point
+ return unless arrival_stop_point_id
+ Chouette::StopPoint.find( arrival_stop_point_id)
+ end
- def shortcuts_update_for_add( stop_point)
- stop_points << stop_point unless stop_points.include?( stop_point)
+ def shortcuts_update_for_add( stop_point)
+ stop_points << stop_point unless stop_points.include?( stop_point)
- ordered_stop_points = stop_points
- ordered_stop_points = ordered_stop_points.sort { |a,b| a.position <=> b.position} unless ordered_stop_points.empty?
+ ordered_stop_points = stop_points
+ ordered_stop_points = ordered_stop_points.sort { |a,b| a.position <=> b.position} unless ordered_stop_points.empty?
- self.update_attributes( :departure_stop_point_id => (ordered_stop_points.first && ordered_stop_points.first.id),
- :arrival_stop_point_id => (ordered_stop_points.last && ordered_stop_points.last.id))
- end
+ self.update_attributes( :departure_stop_point_id => (ordered_stop_points.first && ordered_stop_points.first.id),
+ :arrival_stop_point_id => (ordered_stop_points.last && ordered_stop_points.last.id))
+ end
- def shortcuts_update_for_remove( stop_point)
- stop_points.delete( stop_point) if stop_points.include?( stop_point)
+ def shortcuts_update_for_remove( stop_point)
+ stop_points.delete( stop_point) if stop_points.include?( stop_point)
- ordered_stop_points = stop_points
- ordered_stop_points = ordered_stop_points.sort { |a,b| a.position <=> b.position} unless ordered_stop_points.empty?
+ ordered_stop_points = stop_points
+ ordered_stop_points = ordered_stop_points.sort { |a,b| a.position <=> b.position} unless ordered_stop_points.empty?
- self.update_attributes( :departure_stop_point_id => (ordered_stop_points.first && ordered_stop_points.first.id),
- :arrival_stop_point_id => (ordered_stop_points.last && ordered_stop_points.last.id))
- end
+ self.update_attributes( :departure_stop_point_id => (ordered_stop_points.first && ordered_stop_points.first.id),
+ :arrival_stop_point_id => (ordered_stop_points.last && ordered_stop_points.last.id))
+ end
- def vjas_add( stop_point)
- return if new_record?
+ def vjas_add( stop_point)
+ return if new_record?
- vehicle_journeys.each do |vj|
- vjas = vj.vehicle_journey_at_stops.create :stop_point_id => stop_point.id
- end
+ vehicle_journeys.each do |vj|
+ vjas = vj.vehicle_journey_at_stops.create :stop_point_id => stop_point.id
end
+ end
- def vjas_remove( stop_point)
- return if new_record?
+ def vjas_remove( stop_point)
+ return if new_record?
- vehicle_journey_at_stops.where( :stop_point_id => stop_point.id).each do |vjas|
- vjas.destroy
- end
+ vehicle_journey_at_stops.where( :stop_point_id => stop_point.id).each do |vjas|
+ vjas.destroy
end
+ end
- def control_route_sections
- stop_area_ids = self.stop_points.map(&:stop_area_id)
- control_route_sections_by_stop_areas(stop_area_ids)
- end
+ def control_route_sections
+ stop_area_ids = self.stop_points.map(&:stop_area_id)
+ control_route_sections_by_stop_areas(stop_area_ids)
+ end
- def control_route_sections_by_stop_areas(stop_area_ids)
- journey_pattern_section_all
- i = 0
- to_control = false
- stop_area_ids.each_cons(2) do |a|
- jps = @route_sections_orders[i]
- i += 1
- unless jps
- to_control = true
- next
- end
- unless [jps.route_section.departure.id, jps.route_section.arrival.id] == a
- jps.destroy
- to_control = true
- end
+ def control_route_sections_by_stop_areas(stop_area_ids)
+ journey_pattern_section_all
+ i = 0
+ to_control = false
+ stop_area_ids.each_cons(2) do |a|
+ jps = @route_sections_orders[i]
+ i += 1
+ unless jps
+ to_control = true
+ next
+ end
+ unless [jps.route_section.departure.id, jps.route_section.arrival.id] == a
+ jps.destroy
+ to_control = true
end
- self.control_checked = true
- to_control ? self.control! : self.completed!
end
+ self.control_checked = true
+ to_control ? self.control! : self.completed!
+ end
- protected
+ protected
- def journey_pattern_section_all
- @route_sections_orders = {}
- self.journey_pattern_sections.all.map do |journey_pattern_section|
- @route_sections_orders[journey_pattern_section.rank] = journey_pattern_section
- end
+ def journey_pattern_section_all
+ @route_sections_orders = {}
+ self.journey_pattern_sections.all.map do |journey_pattern_section|
+ @route_sections_orders[journey_pattern_section.rank] = journey_pattern_section
end
end
end \ No newline at end of file
diff --git a/app/models/chouette/object_id.rb b/app/models/chouette/object_id.rb
deleted file mode 100644
index 0b122c91b..000000000
--- a/app/models/chouette/object_id.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-class Chouette::ObjectId < String
-
- def valid?
- parts.present?
- end
- alias_method :objectid?, :valid?
-
- @@format = /^([0-9A-Za-z_]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
- cattr_reader :format
-
- def parts
- match(format).try(:captures)
- end
-
- def system_id
- parts.try(:first)
- end
-
- def object_type
- parts.try(:second)
- end
-
- def local_id
- parts.try(:third)
- end
-
- def self.create(system_id, object_type, local_id)
- new [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/netex.rb b/app/models/chouette/objectid/netex.rb
index 0013de7c8..b83ef7b8d 100644
--- a/app/models/chouette/objectid/netex.rb
+++ b/app/models/chouette/objectid/netex.rb
@@ -1,33 +1,29 @@
-module Chouette
- module Objectid
- class Netex
- include ActiveModel::Model
+class Chouette::Objectid::Netex
+ include ActiveModel::Model
- attr_accessor :provider_id, :object_type, :local_id, :creation_id
- validates_presence_of :provider_id, :object_type, :local_id, :creation_id
- validate :must_respect_format
+ attr_accessor :provider_id, :object_type, :local_id, :creation_id
+ validates_presence_of :provider_id, :object_type, :local_id, :creation_id
+ validate :must_respect_format
- def initialize(**attributes)
- @provider_id ||= (attributes[:provider_id] ||= 'chouette')
- @object_type = attributes[:object_type]
- @local_id = attributes[:local_id]
- @creation_id = (attributes[:creation_id] ||= 'LOC')
- end
+ def initialize(**attributes)
+ @provider_id ||= (attributes[:provider_id] ||= 'chouette')
+ @object_type = attributes[:object_type]
+ @local_id = attributes[:local_id]
+ @creation_id = (attributes[:creation_id] ||= 'LOC')
+ end
- @@format = /^([A-Za-z_-]+):([A-Za-z]+):([0-9A-Za-z_-]+):([A-Za-z]+)$/
- cattr_reader :format
+ @@format = /^([A-Za-z_-]+):([A-Za-z]+):([0-9A-Za-z_-]+):([A-Za-z]+)$/
+ cattr_reader :format
- def to_s
- "#{self.provider_id}:#{self.object_type}:#{self.local_id}:#{self.creation_id}"
- end
+ def to_s
+ "#{self.provider_id}:#{self.object_type}:#{self.local_id}:#{self.creation_id}"
+ end
- def must_respect_format
- self.to_s.match(format)
- end
+ def must_respect_format
+ self.to_s.match(format)
+ end
- def short_id
- local_id
- end
- end
+ def short_id
+ local_id
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/objectid/stif_codifligne.rb b/app/models/chouette/objectid/stif_codifligne.rb
index 9d83a1432..21d2463eb 100644
--- a/app/models/chouette/objectid/stif_codifligne.rb
+++ b/app/models/chouette/objectid/stif_codifligne.rb
@@ -1,25 +1,20 @@
-module Chouette
- module Objectid
- class StifCodifligne < Chouette::Objectid::Netex
+class Chouette::Objectid::StifCodifligne < Chouette::Objectid::Netex
- attr_accessor :sync_id
- validates_presence_of :sync_id
- validates :creation_id, presence: false
+ attr_accessor :sync_id
+ validates_presence_of :sync_id
+ validates :creation_id, presence: false
- @@format = /^([A-Za-z_]+):([A-Za-z]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
+ @@format = /^([A-Za-z_]+):([A-Za-z]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
- def initialize(**attributes)
- @provider_id = attributes[:provider_id]
- @object_type = attributes[:object_type]
- @local_id = attributes[:local_id]
- @sync_id = attributes[:sync_id]
- super
- end
-
- def to_s
- "#{self.provider_id}:#{self.sync_id}:#{self.object_type}:#{self.local_id}"
- end
+ def initialize(**attributes)
+ @provider_id = attributes[:provider_id]
+ @object_type = attributes[:object_type]
+ @local_id = attributes[:local_id]
+ @sync_id = attributes[:sync_id]
+ super
+ end
- end
+ def to_s
+ "#{self.provider_id}:#{self.sync_id}:#{self.object_type}:#{self.local_id}"
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/objectid/stif_netex.rb b/app/models/chouette/objectid/stif_netex.rb
index 4894daac7..26700bf4b 100644
--- a/app/models/chouette/objectid/stif_netex.rb
+++ b/app/models/chouette/objectid/stif_netex.rb
@@ -1,15 +1,11 @@
-module Chouette
- module Objectid
- class StifNetex < Chouette::Objectid::Netex
+class Chouette::Objectid::StifNetex < Chouette::Objectid::Netex
- def initialize(**attributes)
- @provider_id = (attributes[:provider_id] ||= 'stif')
- super
- end
+ def initialize(**attributes)
+ @provider_id = (attributes[:provider_id] ||= 'stif')
+ super
+ end
- def short_id
- local_id.try(:split, "-").try(:[], -1)
- end
- end
+ def short_id
+ local_id.try(:split, "-").try(:[], -1)
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/objectid/stif_reflex.rb b/app/models/chouette/objectid/stif_reflex.rb
index 1ea3ec0ce..57dbede2e 100644
--- a/app/models/chouette/objectid/stif_reflex.rb
+++ b/app/models/chouette/objectid/stif_reflex.rb
@@ -1,24 +1,20 @@
-module Chouette
- module Objectid
- class StifReflex < Chouette::Objectid::Netex
+class Chouette::Objectid::StifReflex < Chouette::Objectid::Netex
- attr_accessor :country_code, :zip_code
- validates_presence_of :country_code, :zip_code
- validates :creation_id, presence: false
+ attr_accessor :country_code, :zip_code
+ validates_presence_of :country_code, :zip_code
+ validates :creation_id, presence: false
- @@format = /^([A-Za-z_]+):([0-9A-Za-z_-]+):([A-Za-z]+):([0-9A-Za-z_-]+):([A-Za-z]+)$/
+ @@format = /^([A-Za-z_]+):([0-9A-Za-z_-]+):([A-Za-z]+):([0-9A-Za-z_-]+):([A-Za-z]+)$/
- def initialize(**attributes)
- @provider_id = attributes[:provider_id]
- @country_code = attributes[:country_code]
- @zip_code = attributes[:zip_code]
- super
- end
-
- def to_s
- "#{self.country_code}:#{self.zip_code}:#{self.object_type}:#{self.local_id}:#{self.provider_id}"
- end
+ def initialize(**attributes)
+ @provider_id = attributes[:provider_id]
+ @country_code = attributes[:country_code]
+ @zip_code = attributes[:zip_code]
+ super
+ end
- end
+ def to_s
+ "#{self.country_code}:#{self.zip_code}:#{self.object_type}:#{self.local_id}:#{self.provider_id}"
end
-end
+
+end \ No newline at end of file
diff --git a/app/models/chouette/objectid_formatter/netex.rb b/app/models/chouette/objectid_formatter/netex.rb
index 5beeae7ea..35bb43ab8 100644
--- a/app/models/chouette/objectid_formatter/netex.rb
+++ b/app/models/chouette/objectid_formatter/netex.rb
@@ -1,18 +1,14 @@
-module Chouette
- module ObjectidFormatter
- class Netex
- def before_validation(model)
- model.update_attribute(:objectid, Chouette::Objectid::Netex.new(local_id: SecureRandom.uuid, object_type: model.class.name.gsub(/Chouette::/,'')).to_s) unless model.objectid
- end
+class Chouette::ObjectidFormatter::Netex
+ def before_validation(model)
+ model.update_attributes(objectid: Chouette::Objectid::Netex.new(local_id: SecureRandom.uuid, object_type: model.class.name.gsub(/Chouette::/,'')).to_s) unless model.read_attribute(:objectid)
+ end
- def after_create(model)
- # unused method in this context
- end
+ def after_commit(model)
+ # unused method in this context
+ end
- def get_objectid(definition)
- parts = definition.try(:split, ":")
- Chouette::Objectid::Netex.new(provider_id: parts[0], object_type: parts[1], local_id: parts[2], creation_id: parts[3]) rescue nil
- end
- end
+ def get_objectid(definition)
+ parts = definition.try(:split, ":")
+ Chouette::Objectid::Netex.new(provider_id: parts[0], object_type: parts[1], local_id: parts[2], creation_id: parts[3]) rescue nil
end
end \ No newline at end of file
diff --git a/app/models/chouette/objectid_formatter/stif_codifligne.rb b/app/models/chouette/objectid_formatter/stif_codifligne.rb
index 8121bbf8c..d9849ef1e 100644
--- a/app/models/chouette/objectid_formatter/stif_codifligne.rb
+++ b/app/models/chouette/objectid_formatter/stif_codifligne.rb
@@ -1,18 +1,14 @@
-module Chouette
- module ObjectidFormatter
- class StifCodifligne
- def before_validation(model)
- # unused method in this context
- end
+class Chouette::ObjectidFormatter::StifCodifligne
+ def before_validation(model)
+ # unused method in this context
+ end
- def after_create(model)
- # unused method in this context
- end
+ def after_commit(model)
+ # unused method in this context
+ end
- def get_objectid(definition)
- parts = definition.try(:split, ":")
- Chouette::Objectid::StifCodifligne.new(provider_id: parts[0], sync_id: parts[1], object_type: parts[2], local_id: parts[3]) rescue nil
- end
- end
+ def get_objectid(definition)
+ parts = definition.try(:split, ":")
+ Chouette::Objectid::StifCodifligne.new(provider_id: parts[0], sync_id: parts[1], object_type: parts[2], local_id: parts[3]) rescue nil
end
end \ No newline at end of file
diff --git a/app/models/chouette/objectid_formatter/stif_netex.rb b/app/models/chouette/objectid_formatter/stif_netex.rb
index 0531221e7..fa73e9cbd 100644
--- a/app/models/chouette/objectid_formatter/stif_netex.rb
+++ b/app/models/chouette/objectid_formatter/stif_netex.rb
@@ -1,20 +1,14 @@
-module Chouette
- module ObjectidFormatter
- class StifNetex
- def before_validation(model)
- model.attributes = {objectid: "__pending_id__#{rand(50)+ rand(50)}"} unless model.read_attribute(:objectid)
- end
+class Chouette::ObjectidFormatter::StifNetex
+ def before_validation(model)
+ model.attributes = {objectid: "__pending_id__#{SecureRandom.uuid}"} unless model.read_attribute(:objectid)
+ end
- def after_create(model)
- if model.read_attribute(:objectid).include? '__pending_id__'
- model.update_attributes(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 after_commit(model)
+ model.update_attributes(objectid: Chouette::Objectid::StifNetex.new(provider_id: "stif", object_type: model.class.name.gsub(/Chouette::/,''), local_id: model.local_id).to_s)
+ end
- def get_objectid(definition)
- parts = definition.try(:split, ":")
- Chouette::Objectid::StifNetex.new(provider_id: parts[0], object_type: parts[1], local_id: parts[2], creation_id: parts[3]) rescue nil
- end
- end
+ def get_objectid(definition)
+ parts = definition.try(:split, ":")
+ Chouette::Objectid::StifNetex.new(provider_id: parts[0], object_type: parts[1], local_id: parts[2], creation_id: parts[3]) rescue nil
end
end \ No newline at end of file
diff --git a/app/models/chouette/objectid_formatter/stif_reflex.rb b/app/models/chouette/objectid_formatter/stif_reflex.rb
index 7a45b7f6a..fc2971ca7 100644
--- a/app/models/chouette/objectid_formatter/stif_reflex.rb
+++ b/app/models/chouette/objectid_formatter/stif_reflex.rb
@@ -1,18 +1,14 @@
-module Chouette
- module ObjectidFormatter
- class StifReflex
- def before_validation(model)
- # unused method in this context
- end
+class Chouette::ObjectidFormatter::StifReflex
+ def before_validation(model)
+ # unused method in this context
+ end
- def after_create(model)
- # unused method in this context
- end
+ def after_commit(model)
+ # unused method in this context
+ end
- def get_objectid(definition)
- parts = definition.try(: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]) rescue nil
- end
- end
+ def get_objectid(definition)
+ parts = definition.try(: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]) rescue nil
end
end \ No newline at end of file
diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb
index 593de83a3..4f8b215b0 100644
--- a/app/models/chouette/stop_point.rb
+++ b/app/models/chouette/stop_point.rb
@@ -1,61 +1,59 @@
-module Chouette
- class StopPoint < TridentActiveRecord
+class Chouette::StopPoint < Chouette::TridentActiveRecord
- def self.policy_class
- RoutePolicy
- end
+ def self.policy_class
+ RoutePolicy
+ end
- include ForBoardingEnumerations
- include ForAlightingEnumerations
- include ObjectidSupport
+ include ForBoardingEnumerations
+ include ForAlightingEnumerations
+ include ObjectidSupport
- # FIXME http://jira.codehaus.org/browse/JRUBY-6358
- self.primary_key = "id"
+ # FIXME http://jira.codehaus.org/browse/JRUBY-6358
+ self.primary_key = "id"
- belongs_to :stop_area
- belongs_to :route, inverse_of: :stop_points
- has_many :vehicle_journey_at_stops, :dependent => :destroy
- has_many :vehicle_journeys, -> {uniq}, :through => :vehicle_journey_at_stops
+ belongs_to :stop_area
+ belongs_to :route, inverse_of: :stop_points
+ has_many :vehicle_journey_at_stops, :dependent => :destroy
+ has_many :vehicle_journeys, -> {uniq}, :through => :vehicle_journey_at_stops
- acts_as_list :scope => :route, top_of_list: 0
+ acts_as_list :scope => :route, top_of_list: 0
- validates_presence_of :stop_area
- validate :stop_area_id_validation
- def stop_area_id_validation
- if stop_area_id.nil?
- errors.add(:stop_area_id, I18n.t("stop_areas.errors.empty"))
- end
+ validates_presence_of :stop_area
+ validate :stop_area_id_validation
+ def stop_area_id_validation
+ if stop_area_id.nil?
+ errors.add(:stop_area_id, I18n.t("stop_areas.errors.empty"))
end
+ end
- scope :default_order, -> { order("position") }
+ scope :default_order, -> { order("position") }
- delegate :name, to: :stop_area
+ delegate :name, to: :stop_area
- before_destroy :remove_dependent_journey_pattern_stop_points
- def remove_dependent_journey_pattern_stop_points
- route.journey_patterns.each do |jp|
- if jp.stop_point_ids.include?( id)
- jp.stop_point_ids = jp.stop_point_ids - [id]
- end
+ before_destroy :remove_dependent_journey_pattern_stop_points
+ def remove_dependent_journey_pattern_stop_points
+ route.journey_patterns.each do |jp|
+ if jp.stop_point_ids.include?( id)
+ jp.stop_point_ids = jp.stop_point_ids - [id]
end
end
+ end
- def duplicate(for_route:)
- keys_for_create = attributes.keys - %w{id objectid created_at updated_at}
- atts_for_create = attributes
- .slice(*keys_for_create)
- .merge('route_id' => for_route.id)
- self.class.create!(atts_for_create)
- end
-
- def local_id
- "IBOO-#{self.referential.id}-#{self.route.line.get_objectid.local_id}-#{self.route.id}-#{self.id}"
- end
+ def duplicate(for_route:)
+ keys_for_create = attributes.keys - %w{id objectid created_at updated_at}
+ atts_for_create = attributes
+ .slice(*keys_for_create)
+ .merge('route_id' => for_route.id)
+ self.class.create!(atts_for_create)
+ end
- def self.area_candidates
- Chouette::StopArea.where(:area_type => ['Quay', 'BoardingPosition'])
- end
+ def local_id
+ "IBOO-#{self.referential.id}-#{self.route.line.get_objectid.local_id}-#{self.route.id}-#{self.id}"
+ end
+ def self.area_candidates
+ Chouette::StopArea.where(:area_type => ['Quay', 'BoardingPosition'])
end
-end
+
+end \ No newline at end of file
diff --git a/app/models/chouette/timeband.rb b/app/models/chouette/timeband.rb
index 9844dd1b1..3de394ced 100644
--- a/app/models/chouette/timeband.rb
+++ b/app/models/chouette/timeband.rb
@@ -1,30 +1,26 @@
-module Chouette
-
- class TimebandValidator < ActiveModel::Validator
- def validate(record)
- if record.end_time <= record.start_time
- record.errors[:end_time] << I18n.t('activerecord.errors.models.timeband.start_must_be_before_end')
- end
+class Chouette::TimebandValidator < ActiveModel::Validator
+ def validate(record)
+ if record.end_time <= record.start_time
+ record.errors[:end_time] << I18n.t('activerecord.errors.models.timeband.start_must_be_before_end')
end
end
+end
- class Timeband < Chouette::TridentActiveRecord
- self.primary_key = "id"
-
- validates :start_time, :end_time, presence: true
- validates_with TimebandValidator
+class Chouette::Timeband < Chouette::TridentActiveRecord
+ self.primary_key = "id"
- default_scope { order(:start_time) }
+ validates :start_time, :end_time, presence: true
+ validates_with Chouette::TimebandValidator
- def self.object_id_key
- "Timeband"
- end
+ default_scope { order(:start_time) }
- def fullname
- fullname = "#{I18n.l(self.start_time, format: :hour)}-#{I18n.l(self.end_time, format: :hour)}"
- "#{self.name} (#{fullname})" if self.name
- end
+ def self.object_id_key
+ "Timeband"
+ end
+ def fullname
+ fullname = "#{I18n.l(self.start_time, format: :hour)}-#{I18n.l(self.end_time, format: :hour)}"
+ "#{self.name} (#{fullname})" if self.name
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb
index 7b51b94ea..ec4d82de7 100644
--- a/app/models/chouette/vehicle_journey.rb
+++ b/app/models/chouette/vehicle_journey.rb
@@ -1,308 +1,306 @@
-module Chouette
- class VehicleJourney < TridentActiveRecord
- include ChecksumSupport
- include VehicleJourneyRestrictions
- include ObjectidSupport
- extend StifTransportModeEnumerations
- # FIXME http://jira.codehaus.org/browse/JRUBY-6358
- self.primary_key = "id"
+class Chouette::VehicleJourney < Chouette::TridentActiveRecord
+ include ChecksumSupport
+ include VehicleJourneyRestrictions
+ include ObjectidSupport
+ extend StifTransportModeEnumerations
+ # FIXME http://jira.codehaus.org/browse/JRUBY-6358
+ self.primary_key = "id"
- enum journey_category: { timed: 0, frequency: 1 }
+ enum journey_category: { timed: 0, frequency: 1 }
- default_scope { where(journey_category: journey_categories[:timed]) }
+ default_scope { where(journey_category: journey_categories[:timed]) }
- attr_reader :time_table_tokens
+ attr_reader :time_table_tokens
- def self.nullable_attributes
- [:transport_mode, :published_journey_name, :vehicle_type_identifier, :published_journey_identifier, :comment, :status_value]
- end
+ def self.nullable_attributes
+ [:transport_mode, :published_journey_name, :vehicle_type_identifier, :published_journey_identifier, :comment, :status_value]
+ end
- belongs_to :company
- belongs_to :route
- belongs_to :journey_pattern
+ belongs_to :company
+ belongs_to :route
+ belongs_to :journey_pattern
- has_and_belongs_to_many :footnotes, :class_name => 'Chouette::Footnote'
+ has_and_belongs_to_many :footnotes, :class_name => 'Chouette::Footnote'
- validates_presence_of :route
- validates_presence_of :journey_pattern
- # validates :vehicle_journey_at_stops,
- # Validation temporarily removed for day offsets
- # :vjas_departure_time_must_be_before_next_stop_arrival_time,
+ validates_presence_of :route
+ validates_presence_of :journey_pattern
+ # validates :vehicle_journey_at_stops,
+ # Validation temporarily removed for day offsets
+ # :vjas_departure_time_must_be_before_next_stop_arrival_time,
- # vehicle_journey_at_stops_are_in_increasing_time_order: false
- validates_presence_of :number
+ # vehicle_journey_at_stops_are_in_increasing_time_order: false
+ validates_presence_of :number
- has_many :vehicle_journey_at_stops, -> { includes(:stop_point).order("stop_points.position") }, :dependent => :destroy
- has_and_belongs_to_many :time_tables, :class_name => 'Chouette::TimeTable', :foreign_key => "vehicle_journey_id", :association_foreign_key => "time_table_id"
- has_many :stop_points, -> { order("stop_points.position") }, :through => :vehicle_journey_at_stops
+ has_many :vehicle_journey_at_stops, -> { includes(:stop_point).order("stop_points.position") }, :dependent => :destroy
+ has_and_belongs_to_many :time_tables, :class_name => 'Chouette::TimeTable', :foreign_key => "vehicle_journey_id", :association_foreign_key => "time_table_id"
+ has_many :stop_points, -> { order("stop_points.position") }, :through => :vehicle_journey_at_stops
- before_validation :set_default_values,
- :calculate_vehicle_journey_at_stop_day_offset
+ before_validation :set_default_values,
+ :calculate_vehicle_journey_at_stop_day_offset
- # TODO: Remove this validator
- # We've eliminated this validation because it prevented vehicle journeys
- # from being saved with at-stops having a day offset greater than 0,
- # because these would have times that were "earlier" than the previous
- # at-stop. TBD by Luc whether we're deleting this validation altogether or
- # instead rejiggering it to work with day offsets.
- def vjas_departure_time_must_be_before_next_stop_arrival_time
- notice = 'departure time must be before next stop arrival time'
- vehicle_journey_at_stops.each_with_index do |current_stop, index|
- next_stop = vehicle_journey_at_stops[index + 1]
+ # TODO: Remove this validator
+ # We've eliminated this validation because it prevented vehicle journeys
+ # from being saved with at-stops having a day offset greater than 0,
+ # because these would have times that were "earlier" than the previous
+ # at-stop. TBD by Luc whether we're deleting this validation altogether or
+ # instead rejiggering it to work with day offsets.
+ def vjas_departure_time_must_be_before_next_stop_arrival_time
+ notice = 'departure time must be before next stop arrival time'
+ vehicle_journey_at_stops.each_with_index do |current_stop, index|
+ next_stop = vehicle_journey_at_stops[index + 1]
- next unless next_stop && (next_stop[:arrival_time] < current_stop[:departure_time])
+ next unless next_stop && (next_stop[:arrival_time] < current_stop[:departure_time])
- current_stop.errors.add(:departure_time, notice)
- self.errors.add(:vehicle_journey_at_stops, notice)
- end
+ current_stop.errors.add(:departure_time, notice)
+ self.errors.add(:vehicle_journey_at_stops, notice)
end
+ end
- def local_id
- "IBOO-#{self.referential.id}-#{self.route.line.get_objectid.local_id}-#{self.id}"
- end
+ def local_id
+ "IBOO-#{self.referential.id}-#{self.route.line.get_objectid.local_id}-#{self.id}"
+ end
- def checksum_attributes
- [].tap do |attrs|
- attrs << self.published_journey_name
- attrs << self.published_journey_identifier
- attrs << self.try(:company).try(:objectid).try(:local_id)
- attrs << self.footnotes.map(&:checksum).sort
- attrs << self.vehicle_journey_at_stops.map(&:checksum).sort
- end
+ def checksum_attributes
+ [].tap do |attrs|
+ attrs << self.published_journey_name
+ attrs << self.published_journey_identifier
+ attrs << self.try(:company).try(:objectid).try(:local_id)
+ attrs << self.footnotes.map(&:checksum).sort
+ attrs << self.vehicle_journey_at_stops.map(&:checksum).sort
end
+ end
- def set_default_values
- if number.nil?
- self.number = 0
- end
+ def set_default_values
+ if number.nil?
+ self.number = 0
end
+ end
- def calculate_vehicle_journey_at_stop_day_offset
- Chouette::VehicleJourneyAtStopsDayOffset.new(
- vehicle_journey_at_stops
- ).update
- end
+ def calculate_vehicle_journey_at_stop_day_offset
+ Chouette::VehicleJourneyAtStopsDayOffset.new(
+ vehicle_journey_at_stops
+ ).update
+ end
- scope :without_any_time_table, -> { joins('LEFT JOIN "time_tables_vehicle_journeys" ON "time_tables_vehicle_journeys"."vehicle_journey_id" = "vehicle_journeys"."id" LEFT JOIN "time_tables" ON "time_tables"."id" = "time_tables_vehicle_journeys"."time_table_id"').where(:time_tables => { :id => nil}) }
- scope :without_any_passing_time, -> { joins('LEFT JOIN "vehicle_journey_at_stops" ON "vehicle_journey_at_stops"."vehicle_journey_id" = "vehicle_journeys"."id"').where(vehicle_journey_at_stops: { id: nil }) }
+ scope :without_any_time_table, -> { joins('LEFT JOIN "time_tables_vehicle_journeys" ON "time_tables_vehicle_journeys"."vehicle_journey_id" = "vehicle_journeys"."id" LEFT JOIN "time_tables" ON "time_tables"."id" = "time_tables_vehicle_journeys"."time_table_id"').where(:time_tables => { :id => nil}) }
+ scope :without_any_passing_time, -> { joins('LEFT JOIN "vehicle_journey_at_stops" ON "vehicle_journey_at_stops"."vehicle_journey_id" = "vehicle_journeys"."id"').where(vehicle_journey_at_stops: { id: nil }) }
- accepts_nested_attributes_for :vehicle_journey_at_stops, :allow_destroy => true
+ accepts_nested_attributes_for :vehicle_journey_at_stops, :allow_destroy => true
- def presenter
- @presenter ||= ::VehicleJourneyPresenter.new( self)
- end
+ def presenter
+ @presenter ||= ::VehicleJourneyPresenter.new( self)
+ end
- def vehicle_journey_at_stops_matrix
- at_stops = self.vehicle_journey_at_stops.to_a.dup
- active_stop_point_ids = journey_pattern.stop_points.map(&:id)
+ def vehicle_journey_at_stops_matrix
+ at_stops = self.vehicle_journey_at_stops.to_a.dup
+ active_stop_point_ids = journey_pattern.stop_points.map(&:id)
- (route.stop_points.map(&:id) - at_stops.map(&:stop_point_id)).each do |id|
- vjas = Chouette::VehicleJourneyAtStop.new(stop_point_id: id)
- vjas.dummy = !active_stop_point_ids.include?(id)
- at_stops.insert(route.stop_points.map(&:id).index(id), vjas)
- end
- at_stops
+ (route.stop_points.map(&:id) - at_stops.map(&:stop_point_id)).each do |id|
+ vjas = Chouette::VehicleJourneyAtStop.new(stop_point_id: id)
+ vjas.dummy = !active_stop_point_ids.include?(id)
+ at_stops.insert(route.stop_points.map(&:id).index(id), vjas)
end
+ at_stops
+ end
- def create_or_find_vjas_from_state vjas
- return vehicle_journey_at_stops.find(vjas['id']) if vjas['id']
- stop_point = Chouette::StopPoint.find_by(objectid: vjas['stop_point_objectid'])
- stop = vehicle_journey_at_stops.create(stop_point: stop_point)
- vjas['id'] = stop.id
- vjas['new_record'] = true
- stop
- end
+ def create_or_find_vjas_from_state vjas
+ return vehicle_journey_at_stops.find(vjas['id']) if vjas['id']
+ stop_point = Chouette::StopPoint.find_by(objectid: vjas['stop_point_objectid'])
+ stop = vehicle_journey_at_stops.create(stop_point: stop_point)
+ vjas['id'] = stop.id
+ vjas['new_record'] = true
+ stop
+ end
- def update_vjas_from_state state
- state.each do |vjas|
- next if vjas["dummy"]
- params = {}.tap do |el|
- ['arrival_time', 'departure_time'].each do |field|
- time = "#{vjas[field]['hour']}:#{vjas[field]['minute']}"
- el[field.to_sym] = Time.parse("2000-01-01 #{time}:00 UTC")
- end
+ def update_vjas_from_state state
+ state.each do |vjas|
+ next if vjas["dummy"]
+ params = {}.tap do |el|
+ ['arrival_time', 'departure_time'].each do |field|
+ time = "#{vjas[field]['hour']}:#{vjas[field]['minute']}"
+ el[field.to_sym] = Time.parse("2000-01-01 #{time}:00 UTC")
end
- stop = create_or_find_vjas_from_state(vjas)
- stop.update_attributes(params)
- vjas.delete('errors')
- vjas['errors'] = stop.errors if stop.errors.any?
end
+ stop = create_or_find_vjas_from_state(vjas)
+ stop.update_attributes(params)
+ vjas.delete('errors')
+ vjas['errors'] = stop.errors if stop.errors.any?
end
+ end
- def state_update_vjas? vehicle_journey_at_stops
- departure_times = vehicle_journey_at_stops.map do |vjas|
- "#{vjas['departure_time']['hour']}:#{vjas['departure_time']['minute']}"
- end
- times = departure_times.uniq
- (times.count == 1 && times[0] == '00:00') ? false : true
+ def state_update_vjas? vehicle_journey_at_stops
+ departure_times = vehicle_journey_at_stops.map do |vjas|
+ "#{vjas['departure_time']['hour']}:#{vjas['departure_time']['minute']}"
end
+ times = departure_times.uniq
+ (times.count == 1 && times[0] == '00:00') ? false : true
+ end
- def update_has_and_belongs_to_many_from_state item
- ['time_tables', 'footnotes'].each do |assos|
- saved = self.send(assos).map(&:id)
+ def update_has_and_belongs_to_many_from_state item
+ ['time_tables', 'footnotes'].each do |assos|
+ saved = self.send(assos).map(&:id)
- (saved - item[assos].map{|t| t['id']}).each do |id|
- self.send(assos).delete(self.send(assos).find(id))
- end
+ (saved - item[assos].map{|t| t['id']}).each do |id|
+ self.send(assos).delete(self.send(assos).find(id))
+ end
- item[assos].each do |t|
- klass = "Chouette::#{assos.classify}".constantize
- unless saved.include?(t['id'])
- self.send(assos) << klass.find(t['id'])
- end
+ item[assos].each do |t|
+ klass = "Chouette::#{assos.classify}".constantize
+ unless saved.include?(t['id'])
+ self.send(assos) << klass.find(t['id'])
end
end
end
+ end
- def self.state_update route, state
- transaction do
- state.each do |item|
- item.delete('errors')
- vj = find_by(objectid: item['objectid']) || state_create_instance(route, item)
- next if item['deletable'] && vj.persisted? && vj.destroy
-
- if vj.state_update_vjas?(item['vehicle_journey_at_stops'])
- vj.update_vjas_from_state(item['vehicle_journey_at_stops'])
- end
+ def self.state_update route, state
+ transaction do
+ state.each do |item|
+ item.delete('errors')
+ vj = find_by(objectid: item['objectid']) || state_create_instance(route, item)
+ next if item['deletable'] && vj.persisted? && vj.destroy
- vj.update_attributes(state_permited_attributes(item))
- vj.update_has_and_belongs_to_many_from_state(item)
- item['errors'] = vj.errors.full_messages.uniq if vj.errors.any?
+ if vj.state_update_vjas?(item['vehicle_journey_at_stops'])
+ vj.update_vjas_from_state(item['vehicle_journey_at_stops'])
end
- # Delete ids of new object from state if we had to rollback
- if state.any? {|item| item['errors']}
- state.map do |item|
- item.delete('objectid') if item['new_record']
- item['vehicle_journey_at_stops'].map {|vjas| vjas.delete('id') if vjas['new_record'] }
- end
- raise ::ActiveRecord::Rollback
- end
+ vj.update_attributes(state_permited_attributes(item))
+ vj.update_has_and_belongs_to_many_from_state(item)
+ item['errors'] = vj.errors.full_messages.uniq if vj.errors.any?
end
- # Remove new_record flag && deleted item from state if transaction has been saved
- state.map do |item|
- item.delete('new_record')
- item['vehicle_journey_at_stops'].map {|vjas| vjas.delete('new_record') }
+ # Delete ids of new object from state if we had to rollback
+ if state.any? {|item| item['errors']}
+ state.map do |item|
+ item.delete('objectid') if item['new_record']
+ item['vehicle_journey_at_stops'].map {|vjas| vjas.delete('id') if vjas['new_record'] }
+ end
+ raise ::ActiveRecord::Rollback
end
- state.delete_if {|item| item['deletable']}
end
- def self.state_create_instance route, item
- # Flag new record, so we can unset object_id if transaction rollback
- vj = route.vehicle_journeys.create(state_permited_attributes(item))
- item['objectid'] = vj.objectid
- item['new_record'] = true
- vj
+ # Remove new_record flag && deleted item from state if transaction has been saved
+ state.map do |item|
+ item.delete('new_record')
+ item['vehicle_journey_at_stops'].map {|vjas| vjas.delete('new_record') }
end
+ state.delete_if {|item| item['deletable']}
+ end
- def self.state_permited_attributes item
- attrs = item.slice('published_journey_identifier', 'published_journey_name', 'journey_pattern_id', 'company_id').to_hash
- ['company', 'journey_pattern'].map do |association|
- attrs["#{association}_id"] = item[association]['id'] if item[association]
- end
- attrs
- end
+ def self.state_create_instance route, item
+ # Flag new record, so we can unset object_id if transaction rollback
+ vj = route.vehicle_journeys.create(state_permited_attributes(item))
+ item['objectid'] = vj.objectid
+ item['new_record'] = true
+ vj
+ end
- def missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
- selected_journey_pattern.stop_points - self.stop_points
- end
- def extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
- self.stop_points - selected_journey_pattern.stop_points
- end
- def extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern)
- extra_stops = self.extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
- self.vehicle_journey_at_stops.select { |vjas| extra_stops.include?( vjas.stop_point)}
- end
- def time_table_tokens=(ids)
- self.time_table_ids = ids.split(",")
+ def self.state_permited_attributes item
+ attrs = item.slice('published_journey_identifier', 'published_journey_name', 'journey_pattern_id', 'company_id').to_hash
+ ['company', 'journey_pattern'].map do |association|
+ attrs["#{association}_id"] = item[association]['id'] if item[association]
end
- def bounding_dates
- dates = []
+ attrs
+ end
- time_tables.each do |tm|
- dates << tm.start_date if tm.start_date
- dates << tm.end_date if tm.end_date
- end
+ def missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
+ selected_journey_pattern.stop_points - self.stop_points
+ end
+ def extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
+ self.stop_points - selected_journey_pattern.stop_points
+ end
+ def extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern)
+ extra_stops = self.extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
+ self.vehicle_journey_at_stops.select { |vjas| extra_stops.include?( vjas.stop_point)}
+ end
+ def time_table_tokens=(ids)
+ self.time_table_ids = ids.split(",")
+ end
+ def bounding_dates
+ dates = []
- dates.empty? ? [] : [dates.min, dates.max]
+ time_tables.each do |tm|
+ dates << tm.start_date if tm.start_date
+ dates << tm.end_date if tm.end_date
end
- def update_journey_pattern( selected_journey_pattern)
- return unless selected_journey_pattern.route_id==self.route_id
+ dates.empty? ? [] : [dates.min, dates.max]
+ end
- missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |sp|
- self.vehicle_journey_at_stops.build( :stop_point => sp)
- end
- extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |vjas|
- vjas._destroy = true
- end
- end
+ def update_journey_pattern( selected_journey_pattern)
+ return unless selected_journey_pattern.route_id==self.route_id
- def self.matrix(vehicle_journeys)
- {}.tap do |hash|
- vehicle_journeys.map{ |vj|
- vj.vehicle_journey_at_stops.map{ |vjas |hash[ "#{vj.id}-#{vjas.stop_point_id}"] = vjas }
- }
- end
+ missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |sp|
+ self.vehicle_journey_at_stops.build( :stop_point => sp)
end
-
- def self.with_stops
- self
- .joins(:journey_pattern)
- .joins('
- LEFT JOIN "vehicle_journey_at_stops"
- ON "vehicle_journey_at_stops"."vehicle_journey_id" =
- "vehicle_journeys"."id"
- AND "vehicle_journey_at_stops"."stop_point_id" =
- "journey_patterns"."departure_stop_point_id"
- ')
- .order('"vehicle_journey_at_stops"."departure_time"')
+ extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |vjas|
+ vjas._destroy = true
end
+ end
- # Requires a SELECT DISTINCT and a join with
- # "vehicle_journey_at_stops".
- #
- # Example:
- # .select('DISTINCT "vehicle_journeys".*')
- # .joins('
- # LEFT JOIN "vehicle_journey_at_stops"
- # ON "vehicle_journey_at_stops"."vehicle_journey_id" =
- # "vehicle_journeys"."id"
- # ')
- # .where_departure_time_between('08:00', '09:45')
- def self.where_departure_time_between(
- start_time,
- end_time,
- allow_empty: false
- )
- self
- .where(
- %Q(
- "vehicle_journey_at_stops"."departure_time" >= ?
- AND "vehicle_journey_at_stops"."departure_time" <= ?
- #{
- if allow_empty
- 'OR "vehicle_journey_at_stops"."id" IS NULL'
- end
- }
- ),
- "2000-01-01 #{start_time}:00 UTC",
- "2000-01-01 #{end_time}:00 UTC"
- )
+ def self.matrix(vehicle_journeys)
+ {}.tap do |hash|
+ vehicle_journeys.map{ |vj|
+ vj.vehicle_journey_at_stops.map{ |vjas |hash[ "#{vj.id}-#{vjas.stop_point_id}"] = vjas }
+ }
end
+ end
- def self.without_time_tables
- # Joins the VehicleJourney–TimeTable through table to select only those
- # VehicleJourneys that don't have an associated TimeTable.
- self
- .joins('
- LEFT JOIN "time_tables_vehicle_journeys"
- ON "time_tables_vehicle_journeys"."vehicle_journey_id" =
- "vehicle_journeys"."id"
- ')
- .where('"time_tables_vehicle_journeys"."vehicle_journey_id" IS NULL')
- end
+ def self.with_stops
+ self
+ .joins(:journey_pattern)
+ .joins('
+ LEFT JOIN "vehicle_journey_at_stops"
+ ON "vehicle_journey_at_stops"."vehicle_journey_id" =
+ "vehicle_journeys"."id"
+ AND "vehicle_journey_at_stops"."stop_point_id" =
+ "journey_patterns"."departure_stop_point_id"
+ ')
+ .order('"vehicle_journey_at_stops"."departure_time"')
+ end
+ # Requires a SELECT DISTINCT and a join with
+ # "vehicle_journey_at_stops".
+ #
+ # Example:
+ # .select('DISTINCT "vehicle_journeys".*')
+ # .joins('
+ # LEFT JOIN "vehicle_journey_at_stops"
+ # ON "vehicle_journey_at_stops"."vehicle_journey_id" =
+ # "vehicle_journeys"."id"
+ # ')
+ # .where_departure_time_between('08:00', '09:45')
+ def self.where_departure_time_between(
+ start_time,
+ end_time,
+ allow_empty: false
+ )
+ self
+ .where(
+ %Q(
+ "vehicle_journey_at_stops"."departure_time" >= ?
+ AND "vehicle_journey_at_stops"."departure_time" <= ?
+ #{
+ if allow_empty
+ 'OR "vehicle_journey_at_stops"."id" IS NULL'
+ end
+ }
+ ),
+ "2000-01-01 #{start_time}:00 UTC",
+ "2000-01-01 #{end_time}:00 UTC"
+ )
end
-end
+
+ def self.without_time_tables
+ # Joins the VehicleJourney–TimeTable through table to select only those
+ # VehicleJourneys that don't have an associated TimeTable.
+ self
+ .joins('
+ LEFT JOIN "time_tables_vehicle_journeys"
+ ON "time_tables_vehicle_journeys"."vehicle_journey_id" =
+ "vehicle_journeys"."id"
+ ')
+ .where('"time_tables_vehicle_journeys"."vehicle_journey_id" IS NULL')
+ end
+
+end \ No newline at end of file
diff --git a/app/models/chouette/vehicle_journey_at_stop.rb b/app/models/chouette/vehicle_journey_at_stop.rb
index 271139830..470725041 100644
--- a/app/models/chouette/vehicle_journey_at_stop.rb
+++ b/app/models/chouette/vehicle_journey_at_stop.rb
@@ -1,79 +1,77 @@
-module Chouette
- class VehicleJourneyAtStop < ActiveRecord
- include ForBoardingEnumerations
- include ForAlightingEnumerations
- include ChecksumSupport
+class Chouette::VehicleJourneyAtStop < ActiveRecord::Base
+ include Chouette::ForBoardingEnumerations
+ include Chouette::ForAlightingEnumerations
+ include ChecksumSupport
- DAY_OFFSET_MAX = 1
+ DAY_OFFSET_MAX = 1
- # FIXME http://jira.codehaus.org/browse/JRUBY-6358
- self.primary_key = "id"
+ # FIXME http://jira.codehaus.org/browse/JRUBY-6358
+ self.primary_key = "id"
- belongs_to :stop_point
- belongs_to :vehicle_journey
+ belongs_to :stop_point
+ belongs_to :vehicle_journey
- attr_accessor :_destroy, :dummy
+ attr_accessor :_destroy, :dummy
- validate :arrival_must_be_before_departure
- def arrival_must_be_before_departure
- # security against nil values
- return unless arrival_time && departure_time
+ validate :arrival_must_be_before_departure
+ def arrival_must_be_before_departure
+ # security against nil values
+ return unless arrival_time && departure_time
- if TimeDuration.exceeds_gap?(4.hours, arrival_time, departure_time)
- errors.add(
- :arrival_time,
- I18n.t("activerecord.errors.models.vehicle_journey_at_stop.arrival_must_be_before_departure")
- )
- end
+ if TimeDuration.exceeds_gap?(4.hours, arrival_time, departure_time)
+ errors.add(
+ :arrival_time,
+ I18n.t("activerecord.errors.models.vehicle_journey_at_stop.arrival_must_be_before_departure")
+ )
end
+ end
- validate :day_offset_must_be_within_range
+ validate :day_offset_must_be_within_range
- after_initialize :set_virtual_attributes
- def set_virtual_attributes
- @_destroy = false
- @dummy = false
- end
+ after_initialize :set_virtual_attributes
+ def set_virtual_attributes
+ @_destroy = false
+ @dummy = false
+ end
- def day_offset_must_be_within_range
- if day_offset_outside_range?(arrival_day_offset)
- errors.add(
- :arrival_day_offset,
- I18n.t(
- 'vehicle_journey_at_stops.errors.day_offset_must_not_exceed_max',
- short_id: vehicle_journey.get_objectid.short_id,
- max: DAY_OFFSET_MAX + 1
- )
+ def day_offset_must_be_within_range
+ if day_offset_outside_range?(arrival_day_offset)
+ errors.add(
+ :arrival_day_offset,
+ I18n.t(
+ 'vehicle_journey_at_stops.errors.day_offset_must_not_exceed_max',
+ short_id: vehicle_journey.get_objectid.short_id,
+ max: DAY_OFFSET_MAX + 1
)
- end
+ )
+ end
- if day_offset_outside_range?(departure_day_offset)
- errors.add(
- :departure_day_offset,
- I18n.t(
- 'vehicle_journey_at_stops.errors.day_offset_must_not_exceed_max',
- short_id: vehicle_journey.get_objectid.short_id,
- max: DAY_OFFSET_MAX + 1
- )
+ if day_offset_outside_range?(departure_day_offset)
+ errors.add(
+ :departure_day_offset,
+ I18n.t(
+ 'vehicle_journey_at_stops.errors.day_offset_must_not_exceed_max',
+ short_id: vehicle_journey.get_objectid.short_id,
+ max: DAY_OFFSET_MAX + 1
)
- end
+ )
end
+ end
- def day_offset_outside_range?(offset)
- # At-stops that were created before the database-default of 0 will have
- # nil offsets. Handle these gracefully by forcing them to a 0 offset.
- offset ||= 0
+ def day_offset_outside_range?(offset)
+ # At-stops that were created before the database-default of 0 will have
+ # nil offsets. Handle these gracefully by forcing them to a 0 offset.
+ offset ||= 0
- offset < 0 || offset > DAY_OFFSET_MAX
- end
+ offset < 0 || offset > DAY_OFFSET_MAX
+ end
- def checksum_attributes
- [].tap do |attrs|
- attrs << self.departure_time.try(:to_s, :time)
- attrs << self.arrival_time.try(:to_s, :time)
- attrs << self.departure_day_offset.to_s
- attrs << self.arrival_day_offset.to_s
- end
+ def checksum_attributes
+ [].tap do |attrs|
+ attrs << self.departure_time.try(:to_s, :time)
+ attrs << self.arrival_time.try(:to_s, :time)
+ attrs << self.departure_day_offset.to_s
+ attrs << self.arrival_day_offset.to_s
end
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/vehicle_journey_at_stops_are_in_increasing_time_order_validator.rb b/app/models/chouette/vehicle_journey_at_stops_are_in_increasing_time_order_validator.rb
index 95f0cdc3e..ba6992ed3 100644
--- a/app/models/chouette/vehicle_journey_at_stops_are_in_increasing_time_order_validator.rb
+++ b/app/models/chouette/vehicle_journey_at_stops_are_in_increasing_time_order_validator.rb
@@ -1,50 +1,47 @@
-module Chouette
- class VehicleJourneyAtStopsAreInIncreasingTimeOrderValidator <
- ActiveModel::EachValidator
- def validate_each(vehicle_journey, attribute, value)
- previous_at_stop = nil
+class Chouette::VehicleJourneyAtStopsAreInIncreasingTimeOrderValidator < ActiveModel::EachValidator
+ def validate_each(vehicle_journey, attribute, value)
+ previous_at_stop = nil
- vehicle_journey
- .vehicle_journey_at_stops
- .select { |vjas| vjas.departure_time && vjas.arrival_time }
- .each do |vjas|
- unless self.class.validate_at_stop_times_must_increase(
- vjas,
- previous_at_stop
+ vehicle_journey
+ .vehicle_journey_at_stops
+ .select { |vjas| vjas.departure_time && vjas.arrival_time }
+ .each do |vjas|
+ unless self.class.validate_at_stop_times_must_increase(
+ vjas,
+ previous_at_stop
+ )
+ vehicle_journey.errors.add(
+ :vehicle_journey_at_stops,
+ 'time gap overflow'
)
- vehicle_journey.errors.add(
- :vehicle_journey_at_stops,
- 'time gap overflow'
- )
- end
-
- previous_at_stop = vjas
end
- end
- def self.validate_at_stop_times_must_increase(at_stop, previous_at_stop)
- valid = true
- return valid unless previous_at_stop
-
- if TimeDuration.exceeds_gap?(
- 4.hours,
- previous_at_stop.departure_time,
- at_stop.departure_time
- )
- valid = false
- at_stop.errors.add(:departure_time, 'departure time gap overflow')
+ previous_at_stop = vjas
end
+ end
- if TimeDuration.exceeds_gap?(
- 4.hours,
- previous_at_stop.arrival_time,
- at_stop.arrival_time
- )
- valid = false
- at_stop.errors.add(:arrival_time, 'arrival time gap overflow')
- end
+ def self.validate_at_stop_times_must_increase(at_stop, previous_at_stop)
+ valid = true
+ return valid unless previous_at_stop
+
+ if TimeDuration.exceeds_gap?(
+ 4.hours,
+ previous_at_stop.departure_time,
+ at_stop.departure_time
+ )
+ valid = false
+ at_stop.errors.add(:departure_time, 'departure time gap overflow')
+ end
- valid
+ if TimeDuration.exceeds_gap?(
+ 4.hours,
+ previous_at_stop.arrival_time,
+ at_stop.arrival_time
+ )
+ valid = false
+ at_stop.errors.add(:arrival_time, 'arrival time gap overflow')
end
+
+ valid
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/vehicle_journey_at_stops_day_offset.rb b/app/models/chouette/vehicle_journey_at_stops_day_offset.rb
index 9f577dded..60b8c2edf 100644
--- a/app/models/chouette/vehicle_journey_at_stops_day_offset.rb
+++ b/app/models/chouette/vehicle_journey_at_stops_day_offset.rb
@@ -1,42 +1,40 @@
-module Chouette
- class VehicleJourneyAtStopsDayOffset
- def initialize(at_stops)
- @at_stops = at_stops
- end
+class Chouette::VehicleJourneyAtStopsDayOffset
+ def initialize(at_stops)
+ @at_stops = at_stops
+ end
- def calculate!
- arrival_offset = 0
- departure_offset = 0
+ def calculate!
+ arrival_offset = 0
+ departure_offset = 0
- @at_stops.inject(nil) do |prior_stop, stop|
- next stop if prior_stop.nil?
+ @at_stops.inject(nil) do |prior_stop, stop|
+ next stop if prior_stop.nil?
- if stop.arrival_time < prior_stop.departure_time ||
- stop.arrival_time < prior_stop.arrival_time
- arrival_offset += 1
- end
+ if stop.arrival_time < prior_stop.departure_time ||
+ stop.arrival_time < prior_stop.arrival_time
+ arrival_offset += 1
+ end
- if stop.departure_time < stop.arrival_time ||
- stop.departure_time < prior_stop.departure_time
- departure_offset += 1
- end
+ if stop.departure_time < stop.arrival_time ||
+ stop.departure_time < prior_stop.departure_time
+ departure_offset += 1
+ end
- stop.arrival_day_offset = arrival_offset
- stop.departure_day_offset = departure_offset
+ stop.arrival_day_offset = arrival_offset
+ stop.departure_day_offset = departure_offset
- stop
- end
+ stop
end
+ end
- def save
- @at_stops.each do |at_stop|
- at_stop.save
- end
+ def save
+ @at_stops.each do |at_stop|
+ at_stop.save
end
+ end
- def update
- calculate!
- save
- end
+ def update
+ calculate!
+ save
end
-end
+end \ No newline at end of file
diff --git a/app/models/chouette/vehicle_journey_frequency.rb b/app/models/chouette/vehicle_journey_frequency.rb
index 41ba49082..61bc1206d 100644
--- a/app/models/chouette/vehicle_journey_frequency.rb
+++ b/app/models/chouette/vehicle_journey_frequency.rb
@@ -1,69 +1,67 @@
-module Chouette
- class VehicleJourneyFrequency < VehicleJourney
+class Chouette::VehicleJourneyFrequency < Chouette::VehicleJourney
- after_initialize :fill_journey_category
+ after_initialize :fill_journey_category
- default_scope { where(journey_category: journey_categories[:frequency]) }
+ default_scope { where(journey_category: journey_categories[:frequency]) }
- has_many :journey_frequencies, dependent: :destroy, foreign_key: 'vehicle_journey_id'
- accepts_nested_attributes_for :journey_frequencies, allow_destroy: true
+ has_many :journey_frequencies, dependent: :destroy, foreign_key: 'vehicle_journey_id'
+ accepts_nested_attributes_for :journey_frequencies, allow_destroy: true
- validate :require_at_least_one_frequency
+ validate :require_at_least_one_frequency
- def self.matrix(vehicle_journeys)
- hash = {}
- vehicle_journeys.each do |vj|
- vj.journey_frequencies.each do |jf|
- next if jf.scheduled_headway_interval.hour == 0 && jf.scheduled_headway_interval.min == 0
- interval = jf.scheduled_headway_interval.hour.hours + jf.scheduled_headway_interval.min.minutes
- first_departure_time = jf.first_departure_time
- while first_departure_time <= jf.last_departure_time
- hash[first_departure_time] = vj
- first_departure_time += interval
- end
+ def self.matrix(vehicle_journeys)
+ hash = {}
+ vehicle_journeys.each do |vj|
+ vj.journey_frequencies.each do |jf|
+ next if jf.scheduled_headway_interval.hour == 0 && jf.scheduled_headway_interval.min == 0
+ interval = jf.scheduled_headway_interval.hour.hours + jf.scheduled_headway_interval.min.minutes
+ first_departure_time = jf.first_departure_time
+ while first_departure_time <= jf.last_departure_time
+ hash[first_departure_time] = vj
+ first_departure_time += interval
end
end
- hash.sort.to_h
end
+ hash.sort.to_h
+ end
- def self.matrix_interval(matrix)
- hash = prepare_matrix(matrix)
- matrix.each do |departure_time, vj|
- @base_departure_time = departure_time
- vj.vehicle_journey_at_stops.each_cons(2) { |vjas, vjas_next|
- vjas_dup = vjas.dup
- vjas_dup.departure_time = @base_departure_time
- hash[vjas.stop_point.stop_area.name][departure_time.to_i] = vjas_dup
- @base_departure_time = vjas_dup.departure_time + (vjas_next.departure_time - vjas.departure_time)
- @last_vjas_next = vjas_next.dup
- }
- # Add last stop_point
- @last_vjas_next.departure_time = @base_departure_time
- hash[@last_vjas_next.stop_point.stop_area.name][departure_time.to_i] = @last_vjas_next
- end
- hash
+ def self.matrix_interval(matrix)
+ hash = prepare_matrix(matrix)
+ matrix.each do |departure_time, vj|
+ @base_departure_time = departure_time
+ vj.vehicle_journey_at_stops.each_cons(2) { |vjas, vjas_next|
+ vjas_dup = vjas.dup
+ vjas_dup.departure_time = @base_departure_time
+ hash[vjas.stop_point.stop_area.name][departure_time.to_i] = vjas_dup
+ @base_departure_time = vjas_dup.departure_time + (vjas_next.departure_time - vjas.departure_time)
+ @last_vjas_next = vjas_next.dup
+ }
+ # Add last stop_point
+ @last_vjas_next.departure_time = @base_departure_time
+ hash[@last_vjas_next.stop_point.stop_area.name][departure_time.to_i] = @last_vjas_next
end
+ hash
+ end
- private
+ private
- def self.prepare_matrix(matrix)
- matrix.map{ |departure_time, vj|
- Hash[
- vj.vehicle_journey_at_stops.map{ |sp|
- [
- sp.stop_point.stop_area.name, Hash[matrix.map{ |departure_time2, vj2| [departure_time2.to_i, nil] }]
- ]
- }
- ]
- }.inject(&:merge)
- end
+ def self.prepare_matrix(matrix)
+ matrix.map{ |departure_time, vj|
+ Hash[
+ vj.vehicle_journey_at_stops.map{ |sp|
+ [
+ sp.stop_point.stop_area.name, Hash[matrix.map{ |departure_time2, vj2| [departure_time2.to_i, nil] }]
+ ]
+ }
+ ]
+ }.inject(&:merge)
+ end
- def fill_journey_category
- self.journey_category = :frequency
- end
+ def fill_journey_category
+ self.journey_category = :frequency
+ end
- def require_at_least_one_frequency
- errors.add(:base, I18n.t('vehicle_journey_frequency.require_at_least_one_frequency')) unless journey_frequencies.size > 0
- end
+ def require_at_least_one_frequency
+ errors.add(:base, I18n.t('vehicle_journey_frequency.require_at_least_one_frequency')) unless journey_frequencies.size > 0
end
-end
+end \ No newline at end of file
diff --git a/app/models/concerns/objectid_support.rb b/app/models/concerns/objectid_support.rb
index 9e4dc34c1..6822912f1 100644
--- a/app/models/concerns/objectid_support.rb
+++ b/app/models/concerns/objectid_support.rb
@@ -3,16 +3,16 @@ module ObjectidSupport
included do
before_validation :before_validation_objectid
- after_create :after_create_objectid
+ after_commit :after_commit_objectid, on: :create, if: Proc.new {|model| model.read_attribute(:objectid).try(:include?, '__pending_id__')}
validates_presence_of :objectid_format, :objectid
- validates_uniqueness_of :objectid, skip_validation: Proc.new {|model| model.objectid == nil}
+ validates_uniqueness_of :objectid, skip_validation: Proc.new {|model| model.read_attribute(:objectid).nil?}
def before_validation_objectid
self.referential.objectid_formater.before_validation self
end
- def after_create_objectid
- self.referential.objectid_formater.after_create self
+ def after_commit_objectid
+ self.referential.objectid_formater.after_commit self
end
def get_objectid
@@ -23,6 +23,10 @@ module ObjectidSupport
get_objectid.try(:to_s)
end
+ def objectid_class
+ get_objectid.try(:class)
+ end
+
def objectid_format
self.referential.objectid_format
end
diff --git a/spec/controllers/routes_controller_spec.rb b/spec/controllers/routes_controller_spec.rb
index 336f20945..42064b5ea 100644
--- a/spec/controllers/routes_controller_spec.rb
+++ b/spec/controllers/routes_controller_spec.rb
@@ -1,5 +1,3 @@
-Route = Chouette::Route
-
RSpec.describe RoutesController, type: :controller do
login_user
@@ -87,10 +85,10 @@ RSpec.describe RoutesController, type: :controller do
referential_id: route.line.line_referential_id,
line_id: route.line_id,
id: route.id
- end.to change { Route.count }.by(1)
+ end.to change { Chouette::Route.count }.by(1)
- expect(Route.last.name).to eq(route.name)
- expect(Route.last.published_name).to eq(route.published_name)
+ expect(Chouette::Route.last.name).to eq(route.name)
+ expect(Chouette::Route.last.published_name).to eq(route.published_name)
end
end
end
diff --git a/spec/models/chouette/object_id_spec.rb b/spec/models/chouette/object_id_spec.rb
index dd8b66388..7ac5fe5ca 100644
--- a/spec/models/chouette/object_id_spec.rb
+++ b/spec/models/chouette/object_id_spec.rb
@@ -1,149 +1,149 @@
-require 'spec_helper'
+# require 'spec_helper'
-describe Chouette::ObjectId, :type => :model do
+# describe Chouette::ObjectId, :type => :model do
- def objectid(value = "abc:StopArea:abc123")
- Chouette::ObjectId.new value
- end
+# def objectid(value = "abc:StopArea:abc123")
+# Chouette::ObjectId.new value
+# end
- subject { objectid }
+# subject { objectid }
- context "when invalid" do
+# context "when invalid" do
- subject { objectid("abc") }
+# subject { objectid("abc") }
- it { is_expected.not_to be_valid }
+# it { is_expected.not_to be_valid }
- describe '#parts' do
- subject { super().parts }
- it { is_expected.to be_nil }
- end
+# describe '#parts' do
+# subject { super().parts }
+# it { is_expected.to be_nil }
+# end
- describe '#system_id' do
- subject { super().system_id }
- it { is_expected.to be_nil }
- end
+# describe '#system_id' do
+# subject { super().system_id }
+# it { is_expected.to be_nil }
+# end
- end
+# end
- context "when with spaces in last part" do
+# context "when with spaces in last part" do
- subject { objectid("abc:Line:Aze toto") }
+# subject { objectid("abc:Line:Aze toto") }
- it { is_expected.not_to be_valid }
+# it { is_expected.not_to be_valid }
- end
+# end
- context "when with spaces in first part" do
+# context "when with spaces in first part" do
- subject { objectid("ae abc:Line:Aze") }
+# subject { objectid("ae abc:Line:Aze") }
- it { is_expected.not_to be_valid }
+# it { is_expected.not_to be_valid }
- end
+# end
- context "when with spaces in middle part" do
+# context "when with spaces in middle part" do
- subject { objectid("aeabc:Li ne:Aze") }
+# subject { objectid("aeabc:Li ne:Aze") }
- it { is_expected.not_to be_valid }
+# it { is_expected.not_to be_valid }
- end
+# end
- context "when invalid in first part" do
+# context "when invalid in first part" do
- subject { objectid("Abc_+19:Line:Abc") }
+# subject { objectid("Abc_+19:Line:Abc") }
- it { is_expected.not_to be_valid }
- end
+# it { is_expected.not_to be_valid }
+# end
- context "when invalid in middle part" do
+# context "when invalid in middle part" do
- subject { objectid("Abc_19:Li56ne:Abc") }
+# subject { objectid("Abc_19:Li56ne:Abc") }
- it { is_expected.not_to be_valid }
- end
+# it { is_expected.not_to be_valid }
+# end
- context "when invalid in last part" do
+# context "when invalid in last part" do
- subject { objectid("Abc_19:Line:Ab+c") }
+# subject { objectid("Abc_19:Line:Ab+c") }
- it { is_expected.not_to be_valid }
- end
- context "when valid" do
+# it { is_expected.not_to be_valid }
+# end
+# context "when valid" do
- subject { objectid("Abc_19:Line:Abc_12-") }
+# subject { objectid("Abc_19:Line:Abc_12-") }
- it { is_expected.to be_valid }
- end
+# it { is_expected.to be_valid }
+# end
- describe "#parts" do
+# describe "#parts" do
- it "should be the 3 parts of the ObjectId" do
- expect(objectid("abc:StopArea:abc123").parts).to eq(%w{abc StopArea abc123})
- end
+# it "should be the 3 parts of the ObjectId" do
+# expect(objectid("abc:StopArea:abc123").parts).to eq(%w{abc StopArea abc123})
+# end
- end
+# end
- describe "#system_id" do
+# describe "#system_id" do
- it "should be the first ObjectId parts" do
- expect(objectid("first:second:third").system_id).to eq("first")
- end
+# it "should be the first ObjectId parts" do
+# expect(objectid("first:second:third").system_id).to eq("first")
+# end
- end
+# end
- describe "#object_type" do
+# describe "#object_type" do
- it "should be the second ObjectId parts" do
- expect(objectid("first:second:third").object_type).to eq("second")
- end
+# it "should be the second ObjectId parts" do
+# expect(objectid("first:second:third").object_type).to eq("second")
+# end
- end
+# end
- describe "#local_id" do
+# describe "#local_id" do
- it "should be the third ObjectId parts" do
- expect(objectid("first:second:third").local_id).to eq("third")
- end
+# it "should be the third ObjectId parts" do
+# expect(objectid("first:second:third").local_id).to eq("third")
+# end
- end
+# end
- it "should be valid when parts are found" do
- allow(subject).to receive_messages :parts => "dummy"
- expect(subject).to be_valid
- end
+# it "should be valid when parts are found" do
+# allow(subject).to receive_messages :parts => "dummy"
+# expect(subject).to be_valid
+# end
- describe ".create" do
+# describe ".create" do
- let(:given_system_id) { "systemId" }
- let(:given_object_type) { "objectType" }
- let(:given_local_id) { "localId" }
+# let(:given_system_id) { "systemId" }
+# let(:given_object_type) { "objectType" }
+# let(:given_local_id) { "localId" }
- subject { Chouette::ObjectId.create(given_system_id, given_object_type, given_local_id) }
+# subject { Chouette::ObjectId.create(given_system_id, given_object_type, given_local_id) }
- it "should return ObjectId attributes" do
- expect(subject.send(:system_id)).to eq(given_system_id)
- expect(subject.send(:object_type)).to eq(given_object_type)
- expect(subject.send(:local_id)).to eq(given_local_id)
- end
+# it "should return ObjectId attributes" do
+# expect(subject.send(:system_id)).to eq(given_system_id)
+# expect(subject.send(:object_type)).to eq(given_object_type)
+# expect(subject.send(:local_id)).to eq(given_local_id)
+# end
- end
+# end
- describe ".new" do
+# describe ".new" do
- it "should return an existing ObjectId" do
- expect(Chouette::ObjectId.new(objectid)).to eq(objectid)
- end
+# it "should return an existing ObjectId" do
+# expect(Chouette::ObjectId.new(objectid)).to eq(objectid)
+# end
- it "should create an empty ObjectId with nil" do
- expect(Chouette::ObjectId.new(nil)).to be_empty
- end
+# it "should create an empty ObjectId with nil" do
+# expect(Chouette::ObjectId.new(nil)).to be_empty
+# end
- end
+# end
-end
+# end
diff --git a/spec/models/chouette/route/route_duplication_spec.rb b/spec/models/chouette/route/route_duplication_spec.rb
index 6645b909f..b8a8c1b35 100644
--- a/spec/models/chouette/route/route_duplication_spec.rb
+++ b/spec/models/chouette/route/route_duplication_spec.rb
@@ -1,9 +1,9 @@
# From Chouette import what we need ™
-Route = Chouette::Route
-StopArea = Chouette::StopArea
-StopPoint = Chouette::StopPoint
+# Route = Chouette::Route
+# StopArea = Chouette::StopArea
+# StopPoint = Chouette::StopPoint
-RSpec.describe Route do
+RSpec.describe Chouette::Route do
let!( :route ){ create :route }
@@ -11,7 +11,7 @@ RSpec.describe Route do
describe 'properties' do
it 'same attribute values' do
route.duplicate
- expect( values_for_create(Route.last, except: %w{objectid}) ).to eq( values_for_create( route, except: %w{objectid} ) )
+ expect( values_for_create(Chouette::Route.last, except: %w{objectid}) ).to eq( values_for_create( route, except: %w{objectid} ) )
end
it 'and others cannot' do
expect{ route.duplicate name: 'YAN', line_id: 42 }.to raise_error(ArgumentError)
@@ -23,13 +23,13 @@ RSpec.describe Route do
describe 'side_effects' do
it {
- expect{ route.duplicate }.to change{Route.count}.by(1)
+ expect{ route.duplicate }.to change{Chouette::Route.count}.by(1)
}
it 'duplicates its stop points' do
- expect{ route.duplicate }.to change{StopPoint.count}.by(route.stop_points.count)
+ expect{ route.duplicate }.to change{Chouette::StopPoint.count}.by(route.stop_points.count)
end
it 'does bot duplicate the stop areas' do
- expect{ route.duplicate }.not_to change{StopArea.count}
+ expect{ route.duplicate }.not_to change{Chouette::StopArea.count}
end
end
diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb
index d4f3e0204..ca438ffcc 100644
--- a/spec/models/chouette/vehicle_journey_spec.rb
+++ b/spec/models/chouette/vehicle_journey_spec.rb
@@ -101,10 +101,12 @@ describe Chouette::VehicleJourney, :type => :model do
expect {
Chouette::VehicleJourney.state_update(route, collection)
}.to change {Chouette::VehicleJourney.count}.by(1)
+
expect(collection.last['objectid']).not_to be_nil
- vj = Chouette::VehicleJourney.find_by(objectid: collection.last['objectid'])
- expect(vj.published_journey_name).to eq 'dummy'
+ Chouette::VehicleJourney.last.run_callbacks(:commit)
+
+ expect(Chouette::VehicleJourney.last.published_journey_name).to eq 'dummy'
end
it 'should save vehicle_journey_at_stops of newly created vj' do