ninoxe 0.1.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. data/app/models/chouette/command.rb +3 -2
  2. data/app/models/chouette/route.rb +12 -11
  3. data/app/models/chouette/stop_point.rb +11 -5
  4. data/app/models/chouette/time_table.rb +19 -7
  5. data/app/models/chouette/time_table_date.rb +8 -1
  6. data/app/models/chouette/time_table_period.rb +6 -1
  7. data/app/models/chouette/trident_active_record.rb +12 -0
  8. data/config/database.yml +2 -0
  9. data/{spec/dummy/config/database.yml → config/database.yml.me} +2 -0
  10. data/lib/ninoxe/version.rb +1 -1
  11. data/lib/ninoxe.rb~ +7 -0
  12. metadata +131 -209
  13. checksums.yaml +0 -7
  14. data/spec/dummy/README.rdoc +0 -261
  15. data/spec/dummy/Rakefile +0 -6
  16. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  17. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  18. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  19. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  20. data/spec/dummy/app/mailers/.gitkeep +0 -0
  21. data/spec/dummy/app/models/.gitkeep +0 -0
  22. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  23. data/spec/dummy/config/application.rb +0 -56
  24. data/spec/dummy/config/boot.rb +0 -10
  25. data/spec/dummy/config/environment.rb +0 -7
  26. data/spec/dummy/config/environments/development.rb +0 -37
  27. data/spec/dummy/config/environments/production.rb +0 -67
  28. data/spec/dummy/config/environments/test.rb +0 -37
  29. data/spec/dummy/config/initializers/active_record.rb +0 -2
  30. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  31. data/spec/dummy/config/initializers/inflections.rb +0 -15
  32. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  33. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  34. data/spec/dummy/config/initializers/session_store.rb +0 -8
  35. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  36. data/spec/dummy/config/locales/en.yml +0 -5
  37. data/spec/dummy/config/routes.rb +0 -4
  38. data/spec/dummy/config.ru +0 -4
  39. data/spec/dummy/db/test.sqlite3 +0 -0
  40. data/spec/dummy/lib/assets/.gitkeep +0 -0
  41. data/spec/dummy/log/.gitkeep +0 -0
  42. data/spec/dummy/public/404.html +0 -26
  43. data/spec/dummy/public/422.html +0 -26
  44. data/spec/dummy/public/500.html +0 -25
  45. data/spec/dummy/public/favicon.ico +0 -0
  46. data/spec/dummy/script/rails +0 -6
  47. data/spec/models/chouette/access_link_spec.rb +0 -78
  48. data/spec/models/chouette/access_point_spec.rb +0 -193
  49. data/spec/models/chouette/active_record_spec.rb +0 -121
  50. data/spec/models/chouette/area_type_spec.rb +0 -53
  51. data/spec/models/chouette/company_spec.rb +0 -51
  52. data/spec/models/chouette/connection_link_spec.rb +0 -56
  53. data/spec/models/chouette/direction_spec.rb +0 -60
  54. data/spec/models/chouette/exporter_spec.rb +0 -28
  55. data/spec/models/chouette/file_validator_spec.rb +0 -28
  56. data/spec/models/chouette/group_of_line_spec.rb +0 -31
  57. data/spec/models/chouette/journey_pattern_spec.rb +0 -62
  58. data/spec/models/chouette/line_spec.rb +0 -106
  59. data/spec/models/chouette/loader_spec.rb +0 -69
  60. data/spec/models/chouette/network_spec.rb +0 -22
  61. data/spec/models/chouette/object_id_spec.rb +0 -146
  62. data/spec/models/chouette/route_spec.rb +0 -159
  63. data/spec/models/chouette/stop_area_spec.rb +0 -354
  64. data/spec/models/chouette/stop_point_spec.rb +0 -39
  65. data/spec/models/chouette/time_table_spec.rb +0 -372
  66. data/spec/models/chouette/transport_mode_spec.rb +0 -64
  67. data/spec/models/chouette/vehicle_journey_at_stop_spec.rb +0 -46
  68. data/spec/models/chouette/vehicle_journey_spec.rb +0 -204
  69. data/spec/presenters/chouette/geometry/general_presenter.rb +0 -1
  70. data/spec/presenters/chouette/geometry/line_presenter_spec.rb +0 -13
  71. data/spec/spec_helper.rb +0 -45
@@ -17,7 +17,7 @@ class Chouette::Command
17
17
  @@command = "chouette"
18
18
  cattr_accessor :command
19
19
 
20
- attr_accessor :database, :schema, :host, :user, :password
20
+ attr_accessor :database, :schema, :host, :user, :password, :port
21
21
 
22
22
  def initialize(options = {})
23
23
  database_options_from_active_record.merge(options).each do |k,v|
@@ -31,6 +31,7 @@ class Chouette::Command
31
31
  :database => config[:database],
32
32
  :user => config[:username],
33
33
  :password => config[:password],
34
+ :port => config[:port],
34
35
  :host => (config[:host] or "localhost")
35
36
  }
36
37
  end
@@ -45,7 +46,7 @@ class Chouette::Command
45
46
  #f.puts "database.showsql = true"
46
47
  f.puts "hibernate.username = #{user}"
47
48
  f.puts "hibernate.password = #{password}"
48
- f.puts "jdbc.url=jdbc:postgresql://#{host}:5432/#{database}"
49
+ f.puts "jdbc.url=jdbc:postgresql://#{host}:#{port}/#{database}"
49
50
  f.puts "jdbc.username = #{user}"
50
51
  f.puts "jdbc.password = #{password}"
51
52
  #f.puts "database.hbm2ddl.auto=update"
@@ -6,7 +6,7 @@ class Chouette::Route < Chouette::TridentActiveRecord
6
6
  attr_accessor :direction_code
7
7
 
8
8
  attr_accessible :direction_code, :wayback_code, :line_id, :objectid, :object_version, :creation_time, :creator_id, :name
9
- attr_accessible :comment, :opposite_route_id, :published_name, :number, :direction, :wayback
9
+ attr_accessible :comment, :opposite_route_id, :published_name, :number, :direction, :wayback, :stop_points_attributes
10
10
 
11
11
  def self.nullable_attributes
12
12
  [:published_name, :comment, :number]
@@ -21,7 +21,7 @@ class Chouette::Route < Chouette::TridentActiveRecord
21
21
  end
22
22
  end
23
23
  belongs_to :opposite_route, :class_name => 'Chouette::Route', :foreign_key => :opposite_route_id
24
- has_many :stop_points, :order => 'position', :dependent => :destroy do
24
+ has_many :stop_points, inverse_of: :route, :order => 'position', :dependent => :destroy do
25
25
  def find_by_stop_area(stop_area)
26
26
  stop_area_ids = Integer === stop_area ? [stop_area] : (stop_area.children_in_depth + [stop_area]).map(&:id)
27
27
  where( :stop_area_id => stop_area_ids).first or
@@ -39,7 +39,7 @@ class Chouette::Route < Chouette::TridentActiveRecord
39
39
  endpoint
40
40
  else
41
41
  raise ActiveRecord::RecordNotFound.new("Can't determine position in route #{proxy_owner.id} with #{departure.inspect}")
42
- end
42
+ end
43
43
  end
44
44
  where(" position between ? and ? ", between_positions.first, between_positions.last)
45
45
  end
@@ -52,14 +52,15 @@ class Chouette::Route < Chouette::TridentActiveRecord
52
52
  proxy_owner.stop_points.between(departure, arrival).includes(:stop_area).collect(&:stop_area)
53
53
  end
54
54
  end
55
+ accepts_nested_attributes_for :stop_points, :allow_destroy => :true
55
56
 
56
57
  validates_presence_of :name
57
58
  validates_presence_of :line
58
59
  validates_presence_of :direction_code
59
60
  validates_presence_of :wayback_code
60
-
61
+
61
62
  before_destroy :dereference_opposite_route
62
-
63
+
63
64
  def geometry_presenter
64
65
  Chouette::Geometry::RoutePresenter.new self
65
66
  end
@@ -86,12 +87,12 @@ class Chouette::Route < Chouette::TridentActiveRecord
86
87
  end
87
88
 
88
89
  def self.direction_binding
89
- { "A" => "straight_forward",
90
+ { "A" => "straight_forward",
90
91
  "R" => "backward",
91
92
  "ClockWise" => "clock_wise",
92
93
  "CounterClockWise" => "counter_clock_wise",
93
94
  "North" => "north",
94
- "NorthWest" => "north_west",
95
+ "NorthWest" => "north_west",
95
96
  "West" => "west",
96
97
  "SouthWest" => "south_west",
97
98
  "South" => "south",
@@ -105,7 +106,7 @@ class Chouette::Route < Chouette::TridentActiveRecord
105
106
  end
106
107
  def direction_code=(direction_code)
107
108
  self.direction = nil
108
- self.class.direction_binding.each do |k,v|
109
+ self.class.direction_binding.each do |k,v|
109
110
  self.direction = k if v==direction_code
110
111
  end
111
112
  end
@@ -122,7 +123,7 @@ class Chouette::Route < Chouette::TridentActiveRecord
122
123
  end
123
124
  def wayback_code=(wayback_code)
124
125
  self.wayback = nil
125
- self.class.wayback_binding.each do |k,v|
126
+ self.class.wayback_binding.each do |k,v|
126
127
  self.wayback = k if v==wayback_code
127
128
  end
128
129
  end
@@ -130,14 +131,14 @@ class Chouette::Route < Chouette::TridentActiveRecord
130
131
  def self.waybacks
131
132
  @@waybacks ||= Chouette::Wayback.all
132
133
  end
133
-
134
+
134
135
  def stop_point_permutation?( stop_point_ids)
135
136
  stop_points.map(&:id).map(&:to_s).sort == stop_point_ids.map(&:to_s).sort
136
137
  end
137
138
 
138
139
  def reorder!( stop_point_ids)
139
140
  return false unless stop_point_permutation?( stop_point_ids)
140
-
141
+
141
142
  stop_area_id_by_stop_point_id = {}
142
143
  stop_points.each do |sp|
143
144
  stop_area_id_by_stop_point_id.merge!( sp.id => sp.stop_area_id)
@@ -3,21 +3,27 @@ class Chouette::StopPoint < Chouette::TridentActiveRecord
3
3
  self.primary_key = "id"
4
4
 
5
5
  belongs_to :stop_area
6
- belongs_to :route
6
+ belongs_to :route, inverse_of: :stop_points
7
7
  acts_as_list :scope => 'route_id = \'#{route.id}\'',:top_of_list => 0
8
8
 
9
9
  attr_accessible :route_id, :stop_area_id, :objectid, :object_version, :creation_time, :creator_id, :position
10
10
 
11
11
  has_many :vehicle_journey_at_stops, :dependent => :destroy
12
12
  has_many :vehicle_journeys, :through => :vehicle_journey_at_stops, :uniq => true
13
-
13
+
14
14
  before_destroy :remove_dependent_journey_pattern_stop_points
15
-
15
+
16
16
  validates_presence_of :stop_area
17
- validates_presence_of :route
18
-
17
+ validate :stop_area_id_validation
18
+
19
19
  scope :default_order, order("position")
20
20
 
21
+ def stop_area_id_validation
22
+ if stop_area_id.nil?
23
+ errors.add(:stop_area_id, I18n.t("errors.messages.empty"))
24
+ end
25
+ end
26
+
21
27
  def self.area_candidates
22
28
  Chouette::StopArea.where( :area_type => ['Quay', 'BoardingPosition'])
23
29
  end
@@ -7,8 +7,8 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
7
7
  attr_accessible :start_date, :end_date
8
8
  attr_accessor :monday,:tuesday,:wednesday,:thursday,:friday,:saturday,:sunday
9
9
 
10
- has_many :dates, :class_name => "Chouette::TimeTableDate", :order => :date, :dependent => :destroy, :after_add => :shortcuts_update, :after_remove => :shortcuts_update
11
- has_many :periods, :class_name => "Chouette::TimeTablePeriod", :order => :period_start, :dependent => :destroy, :after_add => :shortcuts_update, :after_remove => :shortcuts_update
10
+ has_many :dates, inverse_of: :time_table, :validate => :true, :class_name => "Chouette::TimeTableDate", :order => :date, :dependent => :destroy, :after_add => :shortcuts_update, :after_remove => :shortcuts_update
11
+ has_many :periods, inverse_of: :time_table, :validate => :true, :class_name => "Chouette::TimeTablePeriod", :order => :period_start, :dependent => :destroy, :after_add => :shortcuts_update, :after_remove => :shortcuts_update
12
12
 
13
13
  def self.object_id_key
14
14
  "Timetable"
@@ -19,6 +19,8 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
19
19
  attr_accessible :dates_attributes,:periods_attributes
20
20
 
21
21
  validates_presence_of :comment
22
+ validates_associated :dates
23
+ validates_associated :periods
22
24
 
23
25
  def self.start_validity_period
24
26
  [Chouette::TimeTable.minimum(:start_date)].compact.min
@@ -29,11 +31,21 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
29
31
 
30
32
  def shortcuts_update(date=nil)
31
33
  dates_array = bounding_dates
32
- if dates_array.empty?
33
- update_attributes :start_date => nil, :end_date => nil
34
- else
35
- update_attributes :start_date => dates_array.min, :end_date => dates_array.max
36
- end
34
+ #if new_record?
35
+ if dates_array.empty?
36
+ self.start_date=nil
37
+ self.end_date=nil
38
+ else
39
+ self.start_date=dates_array.min
40
+ self.end_date=dates_array.max
41
+ end
42
+ #else
43
+ # if dates_array.empty?
44
+ # update_attributes :start_date => nil, :end_date => nil
45
+ # else
46
+ # update_attributes :start_date => dates_array.min, :end_date => dates_array.max
47
+ # end
48
+ #end
37
49
  end
38
50
 
39
51
  def validity_out_from_on?(expected_date)
@@ -1,14 +1,21 @@
1
1
  class Chouette::TimeTableDate < Chouette::ActiveRecord
2
2
  self.primary_key = "id"
3
- belongs_to :time_table
3
+ belongs_to :time_table, inverse_of: :dates
4
4
  acts_as_list :scope => 'time_table_id = #{time_table_id}',:top_of_list => 0
5
5
 
6
6
  validates_presence_of :date
7
7
  validates_uniqueness_of :date, :scope => :time_table_id
8
8
 
9
9
  attr_accessible :date, :position, :time_table_id, :time_table
10
+
11
+ after_update :update_parent
12
+
10
13
  def self.model_name
11
14
  ActiveModel::Name.new Chouette::TimeTableDate, Chouette, "TimeTableDate"
12
15
  end
16
+
17
+ def update_parent
18
+ time_table.shortcuts_update
19
+ end
13
20
  end
14
21
 
@@ -1,6 +1,6 @@
1
1
  class Chouette::TimeTablePeriod < Chouette::ActiveRecord
2
2
  self.primary_key = "id"
3
- belongs_to :time_table
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
6
  attr_accessible :period_start, :period_end, :position,:time_table_id,:time_table
@@ -10,6 +10,8 @@ class Chouette::TimeTablePeriod < Chouette::ActiveRecord
10
10
 
11
11
  validate :start_must_be_before_end
12
12
 
13
+ after_update :update_parent
14
+
13
15
  def self.model_name
14
16
  ActiveModel::Name.new Chouette::TimeTablePeriod, Chouette, "TimeTablePeriod"
15
17
  end
@@ -23,4 +25,7 @@ class Chouette::TimeTablePeriod < Chouette::ActiveRecord
23
25
  errors.add(:period_end,I18n.t("activerecord.errors.models.time_table_period.start_must_be_before_end"))
24
26
  end
25
27
  end
28
+ def update_parent
29
+ time_table.shortcuts_update
30
+ end
26
31
  end
@@ -1,5 +1,7 @@
1
1
  class Chouette::TridentActiveRecord < Chouette::ActiveRecord
2
2
  before_validation :prepare_auto_columns
3
+ after_validation :reset_auto_columns
4
+
3
5
  after_save :build_objectid
4
6
 
5
7
  self.abstract_class = true
@@ -39,6 +41,16 @@ class Chouette::TridentActiveRecord < Chouette::ActiveRecord
39
41
  self.creator_id = 'chouette'
40
42
  end
41
43
 
44
+ def reset_auto_columns
45
+ clean_object_id unless self.errors.nil? || self.errors.empty?
46
+ end
47
+
48
+ def clean_object_id
49
+ if self.objectid.include?("__pending_id__")
50
+ self.objectid=nil
51
+ end
52
+ end
53
+
42
54
  def build_objectid
43
55
  #logger.info 'start after_create : '+self.objectid
44
56
  if self.objectid.include? ':__pending_id__'
data/config/database.yml CHANGED
@@ -1,9 +1,11 @@
1
1
  development:
2
2
  adapter: postgresql
3
3
  database: ninoxe_dev
4
+ port: 5432
4
5
  username: <%= ENV['USER'] %>
5
6
 
6
7
  test:
7
8
  adapter: postgresql
8
9
  database: ninoxe_test
10
+ port: 5432
9
11
  username: <%= ENV['USER'] %>
@@ -2,8 +2,10 @@ development:
2
2
  adapter: postgresql
3
3
  database: ninoxe_dev
4
4
  username: <%= ENV['USER'] %>
5
+ password: <%= ENV['USER'] %>
5
6
 
6
7
  test:
7
8
  adapter: postgresql
8
9
  database: ninoxe_test
9
10
  username: <%= ENV['USER'] %>
11
+ password: <%= ENV['USER'] %>
@@ -1,3 +1,3 @@
1
1
  module Ninoxe
2
- VERSION = "0.1.6"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/ninoxe.rb~ ADDED
@@ -0,0 +1,7 @@
1
+ require "ninoxe/engine"
2
+
3
+ require "acts_as_list"
4
+ require "composite_primary_keys"
5
+
6
+ module Ninoxe
7
+ end