translink 0.0.1 → 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 (40) hide show
  1. data/CHANGELOG.md +12 -0
  2. data/README.md +44 -8
  3. data/doc/schema.graffle +396 -82
  4. data/doc/schema.png +0 -0
  5. data/lib/translink/cli.rb +10 -16
  6. data/lib/translink/crawler.rb +5 -6
  7. data/lib/translink/db.rb +6 -14
  8. data/lib/translink/model/route.rb +29 -18
  9. data/lib/translink/model/stop.rb +17 -19
  10. data/lib/translink/model/stop_time.rb +26 -0
  11. data/lib/translink/model/trip.rb +48 -0
  12. data/lib/translink/page/route.rb +42 -18
  13. data/lib/translink/page/timetable.rb +15 -18
  14. data/lib/translink/page/trip.rb +90 -17
  15. data/lib/translink/page.rb +1 -1
  16. data/lib/translink/version.rb +1 -1
  17. data/lib/translink.rb +2 -3
  18. data/test/fixtures/sample/route.html +401 -1049
  19. data/test/fixtures/sample/timetable.html +170 -216
  20. data/test/fixtures/verbatim/route.html +1976 -7178
  21. data/test/fixtures/verbatim/timetable.html +1501 -6165
  22. data/test/fixtures/verbatim/trip.html +311 -508
  23. data/test/unit/cli_test.rb +4 -20
  24. data/test/unit/crawler_test.rb +16 -36
  25. data/test/unit/model/route_test.rb +14 -25
  26. data/test/unit/model/stop_test.rb +6 -31
  27. data/test/unit/model/stop_time_test.rb +11 -0
  28. data/test/unit/model/trip_test.rb +28 -0
  29. data/test/unit/page/route_test.rb +38 -28
  30. data/test/unit/page/timetable_test.rb +12 -10
  31. data/test/unit/page/trip_test.rb +38 -22
  32. data/test/unit/page_test.rb +1 -1
  33. data/translink.gemspec +2 -2
  34. metadata +24 -27
  35. data/lib/translink/code.rb +0 -9
  36. data/lib/translink/model/service.rb +0 -20
  37. data/lib/translink/model/stop/extractor.rb +0 -67
  38. data/test/unit/code_test.rb +0 -12
  39. data/test/unit/model/service_test.rb +0 -23
  40. data/test/unit/model/stop/extractor_test.rb +0 -112
@@ -1,9 +0,0 @@
1
- module Translink
2
- module Code
3
- BRISBANE = ('100'..'499').to_a + ['LOOP', 'GLIDER']
4
-
5
- def self.brisbane? code
6
- BRISBANE.include? code.to_s
7
- end
8
- end
9
- end
@@ -1,20 +0,0 @@
1
- module Translink
2
- module Model
3
- class Service
4
- include DataMapper::Resource
5
-
6
- property :id, Serial
7
- property :time, DateTime
8
-
9
- belongs_to :route
10
- belongs_to :stop
11
-
12
- def self.build_from_trip trip
13
- new.tap do |service|
14
- service.stop = Stop.find_or_add_from_stop trip.stop
15
- service.time = trip.time
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,67 +0,0 @@
1
- module Translink
2
- module Model
3
- class Stop::Extractor
4
- module Nil
5
- def gsub *args
6
- self
7
- end
8
-
9
- def strip
10
- self
11
- end
12
- end
13
-
14
- REGEXES = {
15
- /[\s\(]opposite approaching/i => 'opposite_approaching',
16
- /[\s\(]opposite far side of/i => 'opposite_far_side',
17
- /[\s\(]opposite/i => 'opposite',
18
- /[\s\(]approaching/i => 'approaching',
19
- /[\s\(]far side of/i => 'far_side',
20
- /[\s\(]at/i => 'at',
21
- /[\s\(]near/i => 'near'
22
- }
23
-
24
- attr_accessor :stop
25
-
26
- def initialize stop
27
- @stop = stop
28
- end
29
-
30
- def extract!
31
- stop.street1 = street1
32
- stop.street2 = street2
33
- stop.locality = locality
34
- stop
35
- end
36
-
37
- def street1
38
- segment = segments.first
39
- segment =~ /,\s*(.+)/
40
- ($1 || segment).strip
41
- end
42
-
43
- def street2
44
- segments.last.gsub(/[\(\)]/, '').strip
45
- end
46
-
47
- def locality
48
- REGEXES[regex]
49
- end
50
-
51
- protected
52
-
53
- def regex
54
- REGEXES.keys.find { |regex| summary_or_name =~ regex }
55
- end
56
-
57
- def segments
58
- results = summary_or_name.split regex
59
- results.size == 2 ? results : [summary_or_name, nil.extend(Nil)]
60
- end
61
-
62
- def summary_or_name
63
- stop.summary ? stop.summary : stop.name
64
- end
65
- end
66
- end
67
- end
@@ -1,12 +0,0 @@
1
- require 'helper'
2
-
3
- class CodeTest < MiniTest::Unit::TestCase
4
- def test_brisbane
5
- refute Code.brisbane?('10')
6
- assert Code.brisbane?('100')
7
- assert Code.brisbane?('499')
8
- assert Code.brisbane?('GLIDER')
9
- assert Code.brisbane?('LOOP')
10
- refute Code.brisbane?('500')
11
- end
12
- end
@@ -1,23 +0,0 @@
1
- require 'helper'
2
-
3
- class Model::ServiceTest < MiniTest::Unit::TestCase
4
- class Trip
5
- def stop
6
- Model::Stop.first_or_create :name => 'Stop'
7
- end
8
-
9
- def time
10
- DateTime.parse '2011-12-03 18:24:00'
11
- end
12
- end
13
-
14
- def test_build_from_trip
15
- DB.new 'sqlite::memory:' do
16
- trip = Trip.new
17
- service = Model::Service.build_from_trip trip
18
- assert_equal trip.stop, service.stop
19
- assert_equal trip.time, service.time
20
- assert_instance_of Model::Service, service
21
- end
22
- end
23
- end
@@ -1,112 +0,0 @@
1
- require 'helper'
2
-
3
- class Model::Stop::ExtractorTest < MiniTest::Unit::TestCase
4
- def stub_extractor attributes
5
- Model::Stop::Extractor.new OpenStruct.new(attributes)
6
- end
7
-
8
- def test_extract!
9
- stop = OpenStruct.new :summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av'
10
- extractor = Model::Stop::Extractor.new stop
11
- assert_same stop, extractor.extract!
12
- assert_equal 'Grand Av', stop.street1
13
- assert_equal 'Ascot Av', stop.street2
14
- assert_equal 'opposite_approaching', stop.locality
15
- end
16
-
17
- def test_street1_opposite_approaching
18
- assert_equal 'Grand Av', stub_extractor(:summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av').street1
19
- end
20
-
21
- def test_street2_opposite_approaching
22
- assert_equal 'Ascot Av', stub_extractor(:summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av').street2
23
- end
24
-
25
- def test_locality_opposite_approaching
26
- assert_equal 'opposite_approaching', stub_extractor(:summary => 'Grand Ave East, Grand Av opposite approaching Ascot Av').locality
27
- end
28
-
29
- def test_street1_opposite_far_side
30
- assert_equal 'Ipswich Rd', stub_extractor(:summary => 'P.A. Hospital - 14, Ipswich Rd opposite far side of Tottenham St').street1
31
- end
32
-
33
- def test_street2_opposite_far_side
34
- assert_equal 'Tottenham St', stub_extractor(:summary => 'P.A. Hospital - 14, Ipswich Rd opposite far side of Tottenham St').street2
35
- end
36
-
37
- def test_locality_opposite_far_side
38
- assert_equal 'opposite_far_side', stub_extractor(:summary => 'P.A. Hospital - 14, Ipswich Rd opposite far side of Tottenham St').locality
39
- end
40
-
41
- def test_street1_opposite
42
- assert_equal 'Partridge St', stub_extractor(:summary => 'Partridge, Partridge St opposite Tang St').street1
43
- end
44
-
45
- def test_street2_opposite
46
- assert_equal 'Tang St', stub_extractor(:summary => 'Partridge, Partridge St opposite Tang St').street2
47
- end
48
-
49
- def test_locality_opposite
50
- assert_equal 'opposite', stub_extractor(:summary => 'Partridge, Partridge St opposite Tang St').locality
51
- end
52
-
53
- def test_street1_appraoching
54
- assert_equal 'Blunder Rd', stub_extractor(:summary => 'Stop 66, Blunder Rd (approaching Ipswich Rd)').street1
55
- end
56
-
57
- def test_street2_appraoching
58
- assert_equal 'Ipswich Rd', stub_extractor(:summary => 'Stop 66, Blunder Rd (approaching Ipswich Rd)').street2
59
- end
60
-
61
- def test_locality_appraoching
62
- assert_equal 'approaching', stub_extractor(:summary => 'Stop 66, Blunder Rd (approaching Ipswich Rd)').locality
63
- end
64
-
65
- def test_street1_far_side
66
- assert_equal 'Illaweena St', stub_extractor(:summary => 'Waterstone, Illaweena St far side of Waterbrooke Crt').street1
67
- end
68
-
69
- def test_street2_far_side
70
- assert_equal 'Waterbrooke Crt', stub_extractor(:summary => 'Waterstone, Illaweena St far side of Waterbrooke Crt').street2
71
- end
72
-
73
- def test_locality_far_side
74
- assert_equal 'far_side', stub_extractor(:summary => 'Waterstone, Illaweena St far side of Waterbrooke Crt').locality
75
- end
76
-
77
- def test_street1_at
78
- assert_equal 'South East Busway', stub_extractor(:summary => 'Woolloongabba Platform 1, South East Busway At Main St').street1
79
- end
80
-
81
- def test_street2_at
82
- assert_equal 'Main St', stub_extractor(:summary => 'Woolloongabba Platform 1, South East Busway At Main St').street2
83
- end
84
-
85
- def test_locality_at
86
- assert_equal 'at', stub_extractor(:summary => 'Woolloongabba Platform 1, South East Busway At Main St').locality
87
- end
88
-
89
- def test_street1_near
90
- assert_equal 'Old Northern Rd', stub_extractor(:summary => 'Allamanda, Old Northern Rd (Near Allamanda Cres)').street1
91
- end
92
-
93
- def test_street2_near
94
- assert_equal 'Allamanda Cres', stub_extractor(:summary => 'Allamanda, Old Northern Rd (Near Allamanda Cres)').street2
95
- end
96
-
97
- def test_locality_near
98
- assert_equal 'near', stub_extractor(:summary => 'Allamanda, Old Northern Rd (Near Allamanda Cres)').locality
99
- end
100
-
101
- def test_street1_without_locality
102
- assert_equal 'Oyster Cove - Hail And Ride', stub_extractor(:name => 'Oyster Cove - Hail And Ride').street1
103
- end
104
-
105
- def test_street2_without_locality
106
- assert_nil stub_extractor(:name => 'Oyster Cove - Hail And Ride').street2
107
- end
108
-
109
- def test_locality_without_locality
110
- assert_nil stub_extractor(:name => 'Oyster Cove - Hail And Ride').locality
111
- end
112
- end