translink 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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