ninoxe 1.1.5 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +9 -12
  3. data/app/models/chouette/access_link.rb +52 -51
  4. data/app/models/chouette/access_point.rb +7 -7
  5. data/app/models/chouette/active_record.rb +28 -28
  6. data/app/models/chouette/company.rb +3 -3
  7. data/app/models/chouette/connection_link.rb +3 -3
  8. data/app/models/chouette/footnote.rb +1 -1
  9. data/app/models/chouette/group_of_line.rb +2 -2
  10. data/app/models/chouette/journey_pattern.rb +7 -3
  11. data/app/models/chouette/line.rb +11 -9
  12. data/app/models/chouette/network.rb +2 -2
  13. data/app/models/chouette/pt_link.rb +1 -1
  14. data/app/models/chouette/route.rb +9 -10
  15. data/app/models/chouette/stop_area.rb +8 -8
  16. data/app/models/chouette/stop_point.rb +3 -3
  17. data/app/models/chouette/time_table.rb +25 -122
  18. data/app/models/chouette/time_table_date.rb +1 -1
  19. data/app/models/chouette/time_table_period.rb +1 -1
  20. data/app/models/chouette/vehicle_journey.rb +82 -77
  21. data/app/models/chouette/vehicle_journey_at_stop.rb +1 -1
  22. data/config/database.yml +16 -8
  23. data/config/database.yml.travis +15 -6
  24. data/db/migrate/20150526075108_add_foreign_key_to_routes.rb +28 -0
  25. data/lib/ninoxe/engine.rb +4 -0
  26. data/lib/ninoxe/version.rb +1 -1
  27. data/lib/ninoxe.rb +3 -0
  28. data/spec/dummy/README.rdoc +15 -248
  29. data/spec/dummy/Rakefile +1 -1
  30. data/spec/dummy/app/{mailers/.gitkeep → assets/images/.keep} +0 -0
  31. data/spec/dummy/app/assets/javascripts/application.js +3 -5
  32. data/spec/dummy/app/assets/stylesheets/application.css +1 -1
  33. data/spec/dummy/app/controllers/application_controller.rb +3 -1
  34. data/spec/dummy/app/{models/.gitkeep → controllers/concerns/.keep} +0 -0
  35. data/spec/dummy/{lib/assets/.gitkeep → app/mailers/.keep} +0 -0
  36. data/spec/dummy/{log/.gitkeep → app/models/.keep} +0 -0
  37. data/spec/dummy/app/models/concerns/.keep +0 -0
  38. data/spec/dummy/app/views/layouts/application.html.erb +2 -2
  39. data/spec/dummy/bin/bundle +3 -0
  40. data/spec/dummy/bin/rails +4 -0
  41. data/spec/dummy/bin/rake +4 -0
  42. data/spec/dummy/config/application.rb +8 -36
  43. data/spec/dummy/config/boot.rb +4 -9
  44. data/spec/dummy/config/database.yml +16 -8
  45. data/spec/dummy/config/environment.rb +2 -4
  46. data/spec/dummy/config/environments/development.rb +11 -19
  47. data/spec/dummy/config/environments/production.rb +41 -28
  48. data/spec/dummy/config/environments/test.rb +13 -14
  49. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  50. data/spec/dummy/config/initializers/inflections.rb +6 -5
  51. data/spec/dummy/config/initializers/secret_token.rb +7 -2
  52. data/spec/dummy/config/initializers/session_store.rb +1 -6
  53. data/spec/dummy/config/initializers/wrap_parameters.rb +6 -6
  54. data/spec/dummy/config/locales/en.yml +20 -2
  55. data/spec/dummy/config/locales/fr.yml +23 -0
  56. data/spec/dummy/config.ru +1 -1
  57. data/spec/dummy/db/schema.rb +147 -143
  58. data/spec/dummy/lib/assets/.keep +0 -0
  59. data/spec/dummy/log/.keep +0 -0
  60. data/spec/dummy/public/404.html +43 -11
  61. data/spec/dummy/public/422.html +43 -11
  62. data/spec/dummy/public/500.html +43 -11
  63. data/spec/dummy/script/rails +1 -1
  64. data/spec/factories/chouette_access_links.rb +13 -0
  65. data/spec/factories/chouette_access_points.rb +12 -0
  66. data/spec/factories/chouette_companies.rb +9 -0
  67. data/spec/factories/chouette_connection_links.rb +13 -0
  68. data/spec/factories/chouette_footnotes.rb +10 -0
  69. data/spec/factories/chouette_group_of_lines.rb +9 -0
  70. data/spec/factories/chouette_journey_pattern.rb +40 -0
  71. data/spec/factories/chouette_lines.rb +44 -0
  72. data/spec/factories/chouette_networks.rb +9 -0
  73. data/spec/factories/chouette_routes.rb +26 -0
  74. data/spec/factories/chouette_stop_areas.rb +12 -0
  75. data/spec/factories/chouette_stop_points.rb +10 -0
  76. data/spec/factories/chouette_time_table.rb +37 -0
  77. data/spec/factories/chouette_vehicle_journey.rb +66 -0
  78. data/spec/factories/chouette_vehicle_journey_at_stop.rb +8 -0
  79. data/spec/models/chouette/access_link_spec.rb +17 -13
  80. data/spec/models/chouette/access_point_spec.rb +106 -103
  81. data/spec/models/chouette/active_record_spec.rb +57 -57
  82. data/spec/models/chouette/area_type_spec.rb +8 -8
  83. data/spec/models/chouette/company_spec.rb +18 -18
  84. data/spec/models/chouette/connection_link_spec.rb +19 -15
  85. data/spec/models/chouette/direction_spec.rb +8 -8
  86. data/spec/models/chouette/exporter_spec.rb +4 -4
  87. data/spec/models/chouette/file_validator_spec.rb +4 -4
  88. data/spec/models/chouette/footnote_spec.rb +1 -1
  89. data/spec/models/chouette/group_of_line_spec.rb +11 -11
  90. data/spec/models/chouette/journey_pattern_spec.rb +16 -14
  91. data/spec/models/chouette/line_spec.rb +36 -32
  92. data/spec/models/chouette/loader_spec.rb +9 -9
  93. data/spec/models/chouette/network_spec.rb +9 -9
  94. data/spec/models/chouette/object_id_spec.rb +31 -28
  95. data/spec/models/chouette/route_spec.rb +51 -47
  96. data/spec/models/chouette/stop_area_spec.rb +191 -188
  97. data/spec/models/chouette/stop_point_spec.rb +13 -10
  98. data/spec/models/chouette/time_table_period_spec.rb +18 -18
  99. data/spec/models/chouette/time_table_spec.rb +303 -255
  100. data/spec/models/chouette/transport_mode_spec.rb +10 -10
  101. data/spec/models/chouette/trident_active_record_spec.rb +17 -17
  102. data/spec/models/chouette/vehicle_journey_at_stop_spec.rb +13 -12
  103. data/spec/models/chouette/vehicle_journey_spec.rb +46 -46
  104. data/spec/presenters/chouette/geometry/line_presenter_spec.rb +2 -2
  105. data/spec/spec_helper.rb +22 -9
  106. metadata +102 -87
  107. data/config/database.yml.ci +0 -14
  108. data/lib/factories/chouette_access_links.rb +0 -11
  109. data/lib/factories/chouette_access_points.rb +0 -8
  110. data/lib/factories/chouette_companies.rb +0 -5
  111. data/lib/factories/chouette_connection_links.rb +0 -11
  112. data/lib/factories/chouette_footnotes.rb +0 -6
  113. data/lib/factories/chouette_group_of_lines.rb +0 -5
  114. data/lib/factories/chouette_journey_pattern.rb +0 -32
  115. data/lib/factories/chouette_lines.rb +0 -31
  116. data/lib/factories/chouette_networks.rb +0 -5
  117. data/lib/factories/chouette_routes.rb +0 -20
  118. data/lib/factories/chouette_stop_areas.rb +0 -8
  119. data/lib/factories/chouette_stop_points.rb +0 -7
  120. data/lib/factories/chouette_time_table.rb +0 -23
  121. data/lib/factories/chouette_vehicle_journey.rb +0 -51
  122. data/lib/factories/chouette_vehicle_journey_at_stop.rb +0 -5
  123. data/spec/dummy/config/initializers/active_record.rb +0 -2
@@ -2,13 +2,15 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
2
2
  # FIXME http://jira.codehaus.org/browse/JRUBY-6358
3
3
  self.primary_key = "id"
4
4
 
5
- attr_accessible :objectid, :object_version, :creation_time, :creator_id, :version, :comment
6
- attr_accessible :int_day_types,:monday,:tuesday,:wednesday,:thursday,:friday,:saturday,:sunday
7
- attr_accessible :start_date, :end_date
8
- attr_accessor :monday,:tuesday,:wednesday,:thursday,:friday,:saturday,:sunday
5
+ # attr_accessible :objectid, :object_version, :creation_time, :creator_id, :version, :comment
6
+ # attr_accessible :int_day_types,:monday,:tuesday,:wednesday,:thursday,:friday,:saturday,:sunday
7
+ # attr_accessible :start_date, :end_date
8
+ # attr_accessible :dates_attributes,:periods_attributes
9
+ # attr_accessible :tag_list, :tag_search
9
10
 
10
11
  acts_as_taggable
11
- attr_accessible :tag_list, :tag_search
12
+
13
+ attr_accessor :monday,:tuesday,:wednesday,:thursday,:friday,:saturday,:sunday
12
14
  attr_accessor :tag_search
13
15
 
14
16
  def self.ransackable_attributes auth_object = nil
@@ -17,8 +19,8 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
17
19
 
18
20
  has_and_belongs_to_many :vehicle_journeys, :class_name => 'Chouette::VehicleJourney'
19
21
 
20
- has_many :dates, inverse_of: :time_table, :validate => :true, :class_name => "Chouette::TimeTableDate", :order => :date, :dependent => :destroy
21
- has_many :periods, inverse_of: :time_table, :validate => :true, :class_name => "Chouette::TimeTablePeriod", :order => :period_start, :dependent => :destroy
22
+ has_many :dates, -> {order(:date)}, inverse_of: :time_table, :validate => :true, :class_name => "Chouette::TimeTableDate", :dependent => :destroy
23
+ has_many :periods, -> {order(:period_start)}, inverse_of: :time_table, :validate => :true, :class_name => "Chouette::TimeTablePeriod", :dependent => :destroy
22
24
 
23
25
  after_save :save_shortcuts
24
26
 
@@ -28,7 +30,6 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
28
30
 
29
31
  accepts_nested_attributes_for :dates, :allow_destroy => :true
30
32
  accepts_nested_attributes_for :periods, :allow_destroy => :true
31
- attr_accessible :dates_attributes,:periods_attributes
32
33
 
33
34
  validates_presence_of :comment
34
35
  validates_associated :dates
@@ -406,7 +407,7 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
406
407
  end
407
408
  self.dates = dates
408
409
  end
409
- self.dates.sort! { |a,b| a.date <=> b.date}
410
+ self.dates.to_a.sort! { |a,b| a.date <=> b.date}
410
411
  self.save!
411
412
  end
412
413
  end
@@ -414,131 +415,33 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
414
415
  # remove dates form tt which aren't in another_tt
415
416
  def intersect!(another_tt)
416
417
  transaction do
417
- common_day_types = self.int_day_types & another_tt.int_day_types & 508
418
- # if both tt have periods with common day_types, intersect them
419
- if !self.periods.empty? && !another_tt.periods.empty?
420
- if common_day_types != 0
421
- periods = []
422
- days = []
423
- valid_days = self.class.valid_days(common_day_types)
424
- self.optimize_periods.each do |p1|
425
- another_tt.optimize_periods.each do |p2|
426
- if p1.overlap? p2
427
- # create period for intersection
428
- pi = Chouette::TimeTablePeriod.new(:period_start => [p1.period_start,p2.period_start].max,
429
- :period_end => [p1.period_end,p2.period_end].min)
430
- if !self.effective_days_of_period(pi,valid_days).empty? && !another_tt.effective_days_of_period(pi,valid_days).empty?
431
- if pi.period_start == pi.period_end
432
- days << pi.period_start
433
- else
434
- periods << pi
435
- end
436
- end
437
- end
438
- end
439
- end
440
- # intersect dates
441
- days |= another_tt.intersects(self.included_days) & self.intersects(another_tt.included_days)
442
- excluded_days = self.excluded_days | another_tt.excluded_days
443
- self.dates.clear
444
- days.each {|day| self.dates << Chouette::TimeTableDate.new( :date =>day, :in_out => true)}
445
- self.periods = periods
446
- common_day_types = 0 if periods.empty?
447
- self.int_day_types = common_day_types
448
- days_of_periods = self.effective_days_of_periods
449
- excluded_days.each do |day|
450
- self.dates << Chouette::TimeTableDate.new( :date =>day, :in_out => false) if days_of_periods.include?(day)
451
- end
452
- end
453
- else
418
+
454
419
  # transform tt as effective dates and get common ones
455
420
  days = another_tt.intersects(self.effective_days) & self.intersects(another_tt.effective_days)
456
421
  self.dates.clear
457
422
  days.each {|d| self.dates << Chouette::TimeTableDate.new( :date =>d, :in_out => true)}
458
423
  self.periods.clear
459
424
  self.int_day_types = 0
460
- end
461
- self.dates.sort! { |a,b| a.date <=> b.date}
462
- self.save!
425
+ self.dates.to_a.sort! { |a,b| a.date <=> b.date}
426
+ self.save!
463
427
  end
464
428
  end
465
429
 
466
430
 
467
431
  def disjoin!(another_tt)
468
432
  transaction do
469
- common_day_types = self.int_day_types & another_tt.int_day_types & 508
470
- # if both tt have periods with common day_types, reduce first ones to exclude second
471
- if !self.periods.blank? && !another_tt.periods.blank?
472
- if common_day_types != 0
473
- periods = []
474
- days = []
475
- valid_days = self.class.valid_days(self.int_day_types)
476
- remain_days = self.class.valid_days(self.int_day_types & ~another_tt.int_day_types)
477
- self.optimize_periods.each do |p1|
478
- deleted = false
479
- another_tt.optimize_periods.each do |p2|
480
- if p2.contains? p1
481
- # p1 is removed, keep remaining dates as included
482
- days |= self.effective_days_of_period(p1,remain_days)
483
- deleted = true
484
- break
485
- elsif p1.contains? p2
486
- # p1 is broken in 2; keep remaining dates covered by p2 as included days
487
- days |= self.effective_days_of_period(p2,remain_days)
488
- if p1.period_start != p2.period_start
489
- pi = Chouette::TimeTablePeriod.new(:period_start => p1.period_start,
490
- :period_end => p2.period_start - 1)
491
- if !self.effective_days_of_period(pi,valid_days).empty?
492
- if pi.period_start == pi.period_end
493
- days << pi.period_start
494
- else
495
- periods << pi
496
- end
497
- end
498
- end
499
- if p1.period_end != p2.period_end
500
- p1.period_start = p2.period_end + 1
501
- else
502
- deleted = true
503
- break
504
- end
505
- elsif p1.overlap? p2
506
- if p2.period_start <= p1.period_start
507
- p2.period_start = p1.period_start
508
- p1.period_start = p2.period_end + 1
509
- else
510
- p2.period_end = p1.period_end
511
- p1.period_end = p2.period_start - 1
512
- end
513
- days |= self.effective_days_of_period(p2,remain_days)
514
- end
515
- end
516
- unless deleted || self.effective_days_of_period(p1,valid_days).blank?
517
- if p1.period_start != p1.period_end
518
- periods << p1
519
- else
520
- days << p1.period_start
521
- end
522
- end
523
- end
524
- # rebuild periods and dates
525
- self.periods = periods
526
- self.int_day_types = 0 if periods.blank?
527
- days.each { |d| self.dates |= [Chouette::TimeTableDate.new( :date =>d, :in_out => true)] }
528
- end
529
- else
530
- # otherwise remove or exclude dates and delete empty periods
531
- # first remove peculiar dates
532
- days = self.intersects(another_tt.effective_days)
533
- self.dates -= self.dates.select{|date| days.include?(date.date)}
534
- # then add excluded dates
535
- self.intersects(another_tt.effective_days).each do |d|
536
- self.dates |= [Chouette::TimeTableDate.new( :date =>d, :in_out => false)]
537
- end
538
- end
539
- self.dates.sort! { |a,b| a.date <=> b.date}
540
- self.periods.sort! { |a,b| a.period_start <=> b.period_start}
541
- self.save!
433
+ # remove days from another calendar
434
+ days_to_exclude = self.intersects(another_tt.effective_days)
435
+ days = self.effective_days - days_to_exclude
436
+ self.dates.clear
437
+ self.periods.clear
438
+ self.int_day_types = 0
439
+
440
+ days.each {|d| self.dates << Chouette::TimeTableDate.new( :date =>d, :in_out => true)}
441
+
442
+ self.dates.to_a.sort! { |a,b| a.date <=> b.date}
443
+ self.periods.to_a.sort! { |a,b| a.period_start <=> b.period_start}
444
+ self.save!
542
445
  end
543
446
  end
544
447
 
@@ -6,7 +6,7 @@ class Chouette::TimeTableDate < Chouette::ActiveRecord
6
6
  validates_presence_of :date
7
7
  validates_uniqueness_of :date, :scope => :time_table_id
8
8
 
9
- attr_accessible :date, :position, :time_table_id, :time_table, :in_out
9
+ # attr_accessible :date, :position, :time_table_id, :time_table, :in_out
10
10
 
11
11
  def self.model_name
12
12
  ActiveModel::Name.new Chouette::TimeTableDate, Chouette, "TimeTableDate"
@@ -3,7 +3,7 @@ class Chouette::TimeTablePeriod < Chouette::ActiveRecord
3
3
  belongs_to :time_table, inverse_of: :periods
4
4
  acts_as_list :scope => 'time_table_id = #{time_table_id}',:top_of_list => 0
5
5
 
6
- attr_accessible :period_start, :period_end, :position,:time_table_id,:time_table
6
+ #attr_accessible :period_start, :period_end, :position,:time_table_id,:time_table
7
7
 
8
8
  validates_presence_of :period_start
9
9
  validates_presence_of :period_end
@@ -1,101 +1,106 @@
1
- class Chouette::VehicleJourney < Chouette::TridentActiveRecord
2
- #
3
- # FIXME http://jira.codehaus.org/browse/JRUBY-6358
4
- self.primary_key = "id"
5
-
6
- attr_accessor :transport_mode_name
7
- attr_accessible :route_id, :journey_pattern_id, :time_slot_id, :company_id, :objectid, :object_version, :creation_time, :creator_id, :comment, :status_value
8
- attr_accessible :route, :transport_mode,:transport_mode_name, :published_journey_name, :published_journey_identifier, :facility, :vehicle_type_identifier, :number
9
- attr_accessible :vehicle_journey_at_stops_attributes, :time_table_tokens, :time_tables, :mobility_restricted_suitability, :flexible_service
10
- attr_reader :time_table_tokens
11
-
12
- def self.nullable_attributes
13
- [:transport_mode, :published_journey_name, :vehicle_type_identifier, :published_journey_identifier, :comment, :status_value]
14
- end
1
+ module Chouette
2
+ class VehicleJourney < TridentActiveRecord
3
+ #
4
+ # FIXME http://jira.codehaus.org/browse/JRUBY-6358
5
+ self.primary_key = "id"
6
+
7
+ # attr_accessible :route_id, :journey_pattern_id, :time_slot_id, :company_id, :objectid, :object_version, :creation_time, :creator_id, :comment, :status_value
8
+ # attr_accessible :route, :transport_mode,:transport_mode_name, :published_journey_name, :published_journey_identifier, :facility, :vehicle_type_identifier, :number
9
+ # attr_accessible :vehicle_journey_at_stops_attributes, :time_table_tokens, :time_tables, :mobility_restricted_suitability, :flexible_service
10
+
11
+ attr_accessor :transport_mode_name
12
+ attr_reader :time_table_tokens
15
13
 
16
- belongs_to :company
17
- belongs_to :route
18
- belongs_to :journey_pattern
14
+ def self.nullable_attributes
15
+ [:transport_mode, :published_journey_name, :vehicle_type_identifier, :published_journey_identifier, :comment, :status_value]
16
+ end
19
17
 
20
- has_and_belongs_to_many :footnotes, :class_name => 'Chouette::Footnote'
21
- attr_accessible :footnote_ids
18
+ belongs_to :company
19
+ belongs_to :route
20
+ belongs_to :journey_pattern
22
21
 
23
- validates_presence_of :route
24
- validates_presence_of :journey_pattern
22
+ has_and_belongs_to_many :footnotes, :class_name => 'Chouette::Footnote'
23
+ # attr_accessible :footnote_ids
25
24
 
26
- has_many :vehicle_journey_at_stops, :dependent => :destroy, :include => :stop_point, :order => "stop_points.position"
27
- accepts_nested_attributes_for :vehicle_journey_at_stops, :allow_destroy => true
25
+ validates_presence_of :route
26
+ validates_presence_of :journey_pattern
28
27
 
29
- has_and_belongs_to_many :time_tables, :class_name => 'Chouette::TimeTable'
30
- has_many :stop_points, :through => :vehicle_journey_at_stops, :order => 'stop_points.position'
28
+ has_many :vehicle_journey_at_stops, -> { includes(:stop_point).order("stop_points.position") }, :dependent => :destroy
29
+ has_and_belongs_to_many :time_tables, :class_name => 'Chouette::TimeTable', :foreign_key => "vehicle_journey_id", :association_foreign_key => "time_table_id"
30
+ has_many :stop_points, -> { order("stop_points.position") }, :through => :vehicle_journey_at_stops
31
31
 
32
- validate :increasing_times
33
- validates_presence_of :number
32
+ validate :increasing_times
33
+ validates_presence_of :number
34
34
 
35
- before_validation :set_default_values
36
- def set_default_values
37
- if number.nil?
38
- self.number = 0
35
+ before_validation :set_default_values
36
+ def set_default_values
37
+ if number.nil?
38
+ self.number = 0
39
+ end
39
40
  end
40
- end
41
41
 
42
- def transport_mode_name
43
- # return nil if transport_mode is nil
44
- transport_mode && Chouette::TransportMode.new( transport_mode.underscore)
45
- end
42
+ 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}) }
43
+ 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 }) }
46
44
 
47
- def transport_mode_name=(transport_mode_name)
48
- self.transport_mode = (transport_mode_name ? transport_mode_name.camelcase : nil)
49
- end
45
+ accepts_nested_attributes_for :vehicle_journey_at_stops, :allow_destroy => true
50
46
 
51
- @@transport_mode_names = nil
52
- def self.transport_mode_names
53
- @@transport_mode_names ||= Chouette::TransportMode.all.select do |transport_mode_name|
54
- transport_mode_name.to_i > 0
47
+ def transport_mode_name
48
+ # return nil if transport_mode is nil
49
+ transport_mode && Chouette::TransportMode.new( transport_mode.underscore)
55
50
  end
56
- end
57
-
58
51
 
59
- def increasing_times
60
- previous = nil
61
- vehicle_journey_at_stops.select{|vjas| vjas.departure_time && vjas.arrival_time}.each do |vjas|
62
- errors.add( :vehicle_journey_at_stops, 'time gap overflow') unless vjas.increasing_times_validate( previous)
63
- previous = vjas
52
+ def transport_mode_name=(transport_mode_name)
53
+ self.transport_mode = (transport_mode_name ? transport_mode_name.camelcase : nil)
64
54
  end
65
- end
66
55
 
67
- def missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
68
- selected_journey_pattern.stop_points - self.stop_points
69
- end
70
- def extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
71
- self.stop_points - selected_journey_pattern.stop_points
72
- end
73
- def extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern)
74
- extra_stops = self.extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
75
- self.vehicle_journey_at_stops.select { |vjas| extra_stops.include?( vjas.stop_point)}
76
- end
77
- def time_table_tokens=(ids)
78
- self.time_table_ids = ids.split(",")
79
- end
80
- def bounding_dates
81
- dates = []
56
+ @@transport_mode_names = nil
57
+ def self.transport_mode_names
58
+ @@transport_mode_names ||= Chouette::TransportMode.all.select do |transport_mode_name|
59
+ transport_mode_name.to_i > 0
60
+ end
61
+ end
82
62
 
83
- time_tables.each do |tm|
84
- dates << tm.start_date if tm.start_date
85
- dates << tm.end_date if tm.end_date
63
+ def increasing_times
64
+ previous = nil
65
+ vehicle_journey_at_stops.select{|vjas| vjas.departure_time && vjas.arrival_time}.each do |vjas|
66
+ errors.add( :vehicle_journey_at_stops, 'time gap overflow') unless vjas.increasing_times_validate( previous)
67
+ previous = vjas
68
+ end
86
69
  end
87
70
 
88
- dates.empty? ? [] : [dates.min, dates.max]
89
- end
71
+ def missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
72
+ selected_journey_pattern.stop_points - self.stop_points
73
+ end
74
+ def extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
75
+ self.stop_points - selected_journey_pattern.stop_points
76
+ end
77
+ def extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern)
78
+ extra_stops = self.extra_stops_in_relation_to_a_journey_pattern(selected_journey_pattern)
79
+ self.vehicle_journey_at_stops.select { |vjas| extra_stops.include?( vjas.stop_point)}
80
+ end
81
+ def time_table_tokens=(ids)
82
+ self.time_table_ids = ids.split(",")
83
+ end
84
+ def bounding_dates
85
+ dates = []
90
86
 
91
- def update_journey_pattern( selected_journey_pattern)
92
- return unless selected_journey_pattern.route_id==self.route_id
87
+ time_tables.each do |tm|
88
+ dates << tm.start_date if tm.start_date
89
+ dates << tm.end_date if tm.end_date
90
+ end
93
91
 
94
- missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |sp|
95
- self.vehicle_journey_at_stops.build( :stop_point => sp)
92
+ dates.empty? ? [] : [dates.min, dates.max]
96
93
  end
97
- extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |vjas|
98
- vjas._destroy = true
94
+
95
+ def update_journey_pattern( selected_journey_pattern)
96
+ return unless selected_journey_pattern.route_id==self.route_id
97
+
98
+ missing_stops_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |sp|
99
+ self.vehicle_journey_at_stops.build( :stop_point => sp)
100
+ end
101
+ extra_vjas_in_relation_to_a_journey_pattern(selected_journey_pattern).each do |vjas|
102
+ vjas._destroy = true
103
+ end
99
104
  end
100
105
  end
101
106
  end
@@ -10,7 +10,7 @@ module Chouette
10
10
  belongs_to :vehicle_journey
11
11
 
12
12
  attr_accessor :_destroy
13
- attr_accessible :vehicle_journey_id, :stop_point_id, :connecting_service_id, :boarding_alighting_possibility, :arrival_time, :departure_time, :waiting_time, :elapse_duration, :headway_frequency, :_destroy, :stop_point, :for_boarding, :for_alighting
13
+ # attr_accessible :vehicle_journey_id, :stop_point_id, :connecting_service_id, :boarding_alighting_possibility, :arrival_time, :departure_time, :waiting_time, :elapse_duration, :headway_frequency, :_destroy, :stop_point, :for_boarding, :for_alighting
14
14
 
15
15
  validate :arrival_must_be_before_departure
16
16
  def arrival_must_be_before_departure
data/config/database.yml CHANGED
@@ -1,11 +1,19 @@
1
- development:
1
+ default: &default
2
2
  adapter: postgresql
3
- database: ninoxe_dev
3
+ encoding: unicode
4
+ pool: 5
4
5
  port: 5432
5
- username: <%= ENV['USER'] %>
6
-
6
+ host: localhost
7
+ username: chouette
8
+ password: chouette
9
+
10
+ development:
11
+ <<: *default
12
+ database: ninoxe_dev
13
+
14
+ # Warning: The database defined as "test" will be erased and
15
+ # re-generated from your development database when you run "rake".
16
+ # Do not set this db to the same as development or production.
7
17
  test:
8
- adapter: postgresql
9
- database: ninoxe_test
10
- port: 5432
11
- username: <%= ENV['USER'] %>
18
+ <<: *default
19
+ database: ninoxe_test
@@ -1,9 +1,18 @@
1
- development:
1
+ default: &default
2
2
  adapter: postgresql
3
- database: ninoxe_dev
3
+ encoding: unicode
4
+ pool: 5
5
+ port: 5432
6
+ host: localhost
4
7
  username: postgres
5
-
8
+
9
+ development:
10
+ <<: *default
11
+ database: ninoxe_dev
12
+
13
+ # Warning: The database defined as "test" will be erased and
14
+ # re-generated from your development database when you run "rake".
15
+ # Do not set this db to the same as development or production.
6
16
  test:
7
- adapter: postgresql
8
- database: ninoxe_test
9
- username: postgres
17
+ <<: *default
18
+ database: ninoxe_test
@@ -0,0 +1,28 @@
1
+ class AddForeignKeyToRoutes < ActiveRecord::Migration
2
+ require "forwardable"
3
+ def up
4
+ Chouette::Route.all.map do |route|
5
+ if route.opposite_route_id.present? && !Chouette::Route.exists?(route.opposite_route_id)
6
+ route.update_attributes :opposite_route_id => nil
7
+ end
8
+ end
9
+ change_table :routes do |t|
10
+ if @connection.foreign_keys(:routes).any?
11
+ @connection.foreign_keys(:routes).map do |f|
12
+ name = f.options[:name]
13
+ if (name == "route_opposite_route_fkey" )
14
+ remove_foreign_key :routes, :name => name
15
+ end
16
+ end
17
+ end
18
+ t.foreign_key :routes, :dependent => :nullify, :column => 'opposite_route_id', :name => 'route_opposite_route_fkey'
19
+ end
20
+
21
+ end
22
+
23
+ def down
24
+ change_table :routes do |t|
25
+ t.remove_foreign_key :name => :route_opposite_route_fkey
26
+ end
27
+ end
28
+ end
data/lib/ninoxe/engine.rb CHANGED
@@ -11,5 +11,9 @@ module Ninoxe
11
11
 
12
12
  ::Chouette::ActiveRecord.logger = Rails.logger
13
13
  end
14
+
15
+ initializer "ninoxe.factories", :after => "factory_girl.set_factory_paths" do
16
+ FactoryGirl.definition_file_paths << File.expand_path('../../../spec/factories', __FILE__) if defined?(FactoryGirl)
17
+ end
14
18
  end
15
19
  end
@@ -1,3 +1,3 @@
1
1
  module Ninoxe
2
- VERSION = "1.1.5"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/ninoxe.rb CHANGED
@@ -6,5 +6,8 @@ require "acts_as_tree"
6
6
  require "acts-as-taggable-on"
7
7
  require "enumerize"
8
8
 
9
+ # Hack to delete to use bundler https://github.com/guard/guard-rspec/issues/258
10
+ require "thor"
11
+
9
12
  module Ninoxe
10
13
  end