trafikanten-travel 0.2.2 → 0.2.3
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.
- data/CHANGES +2 -0
- data/Gemfile +8 -0
- data/README.rdoc +13 -14
- data/VERSION +1 -1
- data/lib/trafikanten_travel/route.rb +6 -8
- data/spec/trafikanten_travel/route_spec.rb +13 -7
- data/trafikanten-travel.gemspec +2 -2
- metadata +4 -4
data/CHANGES
CHANGED
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -17,12 +17,13 @@ route:
|
|
17
17
|
=== Finding stations
|
18
18
|
You query trafikanten.no by the name of the station and you receive an array of hits with information about each
|
19
19
|
|
20
|
+
require 'trafikanten_travel'
|
20
21
|
stations = Station.find_by_name 'Sthanshaugen'
|
21
22
|
|
22
23
|
The station objects will have attributes for name, id, type, lat and lng. lat and lng might not be available, and are then set to nil.
|
23
24
|
|
24
25
|
=== Finding a route between stations
|
25
|
-
Once you have the stations, you use
|
26
|
+
Once you have the stations, you use them to search for a Route:
|
26
27
|
|
27
28
|
from = stations[0]
|
28
29
|
to = stations[1]
|
@@ -31,13 +32,13 @@ Once you have the stations, you use their IDs to create a Route object:
|
|
31
32
|
# or specify a time
|
32
33
|
route = Route.find(from, to, a_time_object)
|
33
34
|
|
34
|
-
This will query trafikanten.no for the first available route
|
35
|
-
or the passed in time and parse the route it found,
|
36
|
-
will have a duration
|
37
|
-
steps array with a Step object for each leg of the
|
38
|
-
you its type (walk, wait, tram, subway, boat,
|
39
|
-
minutes, and arrival and departure station names
|
40
|
-
All these are attributes on the Step object.
|
35
|
+
This will query trafikanten.no for the first available route between the
|
36
|
+
stations based on Time.now or the passed in time and parse the route it found,
|
37
|
+
if any. The Route object will have a duration attribute for the duration of
|
38
|
+
the trip in minutes, and a steps array with a Step object for each leg of the
|
39
|
+
journey. Each Step object tells you its type (walk, wait, tram, subway, boat,
|
40
|
+
train, bus), duration in minutes, and arrival and departure station names
|
41
|
+
along with times for these. All these are attributes on the Step object.
|
41
42
|
|
42
43
|
== TODO
|
43
44
|
* Also include 'area' stations, which are not actual stations but regions
|
@@ -46,20 +47,18 @@ All these are attributes on the Step object.
|
|
46
47
|
* Let the depart and arrive stations in Step be actual Station objects
|
47
48
|
|
48
49
|
== Note on Patches/Pull Requests
|
49
|
-
|
50
|
+
|
50
51
|
* Fork the project.
|
52
|
+
* Add tests in spec/
|
51
53
|
* Make your feature addition or bug fix.
|
52
|
-
*
|
53
|
-
* Commit, do not mess with Rakefile or VERSION.
|
54
|
-
(if you want to have your own version, that is fine but
|
55
|
-
bump version in a commit by itself I can ignore when I pull)
|
54
|
+
* Commit, do not mess with Rakefile or VERSION. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
56
55
|
* Send me a pull request. Bonus points for topic branches.
|
57
56
|
|
58
57
|
== Running tests
|
59
58
|
|
60
59
|
rake
|
61
60
|
|
62
|
-
If you get errors about missing gems -
|
61
|
+
If you get errors about missing gems - `bundle install` should get you sorted.
|
63
62
|
|
64
63
|
== Copyright
|
65
64
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
@@ -8,6 +8,7 @@ module TrafikantenTravel
|
|
8
8
|
include TrafikantenTravel::Utils
|
9
9
|
attr_accessor :duration, :steps
|
10
10
|
BASE_URL = 'http://m.trafikanten.no/BetRes.asp?'
|
11
|
+
NOTFOUND = /Ingen forbindelse funnet eller ingen stoppesteder funnet|Ingen turer ankommer ankomststed|Ingen turer utgår fra avgangsted/u
|
11
12
|
|
12
13
|
# Searches and returns a Route object for the found trip
|
13
14
|
def self.find(from, to, time = TrafikantenTravel::Utils.time_class.now)
|
@@ -23,20 +24,17 @@ module TrafikantenTravel
|
|
23
24
|
@steps = []
|
24
25
|
end
|
25
26
|
|
26
|
-
# Parse the received HTML. First try some error-checking.
|
27
|
+
# Parse the received HTML. First try some simple error-checking.
|
27
28
|
def parse
|
28
29
|
doc = TrafikantenTravel::Utils.fetch(BASE_URL + query_string)
|
29
30
|
|
30
|
-
|
31
|
+
case doc
|
32
|
+
when NOTFOUND
|
31
33
|
return {}
|
32
|
-
|
33
|
-
|
34
|
-
if doc =~ /Trafikanten - Feilmelding/
|
34
|
+
when /Trafikanten - Feilmelding/
|
35
35
|
doc =~ /<p>(.+)<\/p>/
|
36
36
|
raise Error.new($1)
|
37
|
-
|
38
|
-
|
39
|
-
if doc =~ /Microsoft VBScript runtime/
|
37
|
+
when /Microsoft VBScript runtime/
|
40
38
|
raise BadRequest
|
41
39
|
end
|
42
40
|
|
@@ -52,21 +52,21 @@ describe TrafikantenTravel::Route do
|
|
52
52
|
context 'url generation' do
|
53
53
|
# Test the whole thing
|
54
54
|
it 'generates exactly this' do
|
55
|
-
route = TrafikantenTravel::Route.
|
55
|
+
route = TrafikantenTravel::Route.new(@from, @to)
|
56
56
|
query = route.send(:query_string)
|
57
57
|
query.should == "fra=1000013064%3A&DepType=2&date=#{Time.now.strftime("%d.%m.%Y")}&til=02350113%3A&arrType=1&Transport=2,%207,%205,%208,%201,%206,%204&MaxRadius=700&type=1&tid=#{Time.now.strftime("%H.%M")}"
|
58
58
|
end
|
59
59
|
|
60
60
|
# Test the parts in isolation
|
61
61
|
it 'takles stations and their types' do
|
62
|
-
route = TrafikantenTravel::Route.
|
62
|
+
route = TrafikantenTravel::Route.new(@from, @to)
|
63
63
|
query = route.send(:query_string)
|
64
64
|
query.should =~ /fra=1000013064%3A&DepType=2/
|
65
65
|
query.should =~ /til=02350113%3A&arrType=1/
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'defaults to Time.now' do
|
69
|
-
route = TrafikantenTravel::Route.
|
69
|
+
route = TrafikantenTravel::Route.new(@from, @to)
|
70
70
|
query = route.send(:query_string)
|
71
71
|
query.should =~ /date=#{Time.now.strftime("%d.%m.%Y")}/
|
72
72
|
query.should =~ /tid=#{Time.now.strftime("%H.%M")}/
|
@@ -103,14 +103,20 @@ describe TrafikantenTravel::Route do
|
|
103
103
|
<link rel="stylesheet" href="m.css" type="text/css" />
|
104
104
|
<title>Trafikanten - Feilmelding</title>
|
105
105
|
<body>
|
106
|
-
<p
|
106
|
+
<p>%s</p>
|
107
107
|
</body>
|
108
108
|
</html>
|
109
109
|
eos
|
110
110
|
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
[
|
112
|
+
'Ingen turer ankommer ankomststed',
|
113
|
+
'Ingen forbindelse funnet eller ingen stoppesteder funnet',
|
114
|
+
'Ingen turer utgår fra avgangsted'
|
115
|
+
].each do |notfound|
|
116
|
+
TrafikantenTravel::Utils.stub(:fetch).and_return(missing % notfound)
|
117
|
+
route = TrafikantenTravel::Route.find(@from, @to)
|
118
|
+
route.steps.should == []
|
119
|
+
end
|
114
120
|
end
|
115
121
|
|
116
122
|
it 'it parses errors and raises them locally' do
|
data/trafikanten-travel.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{trafikanten-travel}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rune Botten"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-30}
|
13
13
|
s.description = %q{Query the travel planner at trafikanten.no with Ruby}
|
14
14
|
s.email = %q{rbotten@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trafikanten-travel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rune Botten
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-05-
|
18
|
+
date: 2010-05-30 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|