flightcaster 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +44 -0
- data/VERSION +1 -1
- data/flightcaster.gemspec +11 -9
- data/lib/flightcaster.rb +1 -3
- data/lib/flightcaster/base.rb +80 -32
- data/lib/flightcaster/rash.rb +31 -0
- data/lib/flightcaster/request.rb +3 -1
- data/test/fixtures/flights.xml +1 -1
- data/test/test_flightcaster.rb +8 -7
- data/test/test_request.rb +1 -1
- data/test/test_result.rb +49 -0
- metadata +13 -9
- data/README.rdoc +0 -26
- data/lib/flightcaster/result.rb +0 -51
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
FlightCaster
|
2
|
+
============
|
3
|
+
|
4
|
+
The [FlightCaster](http://flightcaster.com) ruby gem. Get started by [signing up for a free API
|
5
|
+
key](http://docs.flightcaster.com/).
|
6
|
+
|
7
|
+
## Examples
|
8
|
+
|
9
|
+
# load your API key
|
10
|
+
flightcaster = FlightCaster.new('api_key')
|
11
|
+
|
12
|
+
# retrieve all flights
|
13
|
+
flights = flightcaster.flights
|
14
|
+
|
15
|
+
# get flights by airline and flight number
|
16
|
+
flight = flightcaster.flights_by_airline('VX', 28)
|
17
|
+
|
18
|
+
See more in the [examples
|
19
|
+
directory](http://github.com/jarodluebbert/flightcaster/tree/master/examples/).
|
20
|
+
|
21
|
+
## Docs
|
22
|
+
|
23
|
+
[View the
|
24
|
+
documentation](http://rdoc.info/projects/jarodluebbert/flightcaster).
|
25
|
+
|
26
|
+
### todo
|
27
|
+
|
28
|
+
* Load API key from config file
|
29
|
+
* Authenticate with user/pass
|
30
|
+
|
31
|
+
### Note on Patches/Pull Requests
|
32
|
+
|
33
|
+
* Fork the project.
|
34
|
+
* Make your feature addition or bug fix.
|
35
|
+
* Add tests for it. This is important so I don't break it in a
|
36
|
+
future version unintentionally.
|
37
|
+
* Commit, do not mess with rakefile, version, or history.
|
38
|
+
(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)
|
39
|
+
* Send me a pull request. Bonus points for topic branches.
|
40
|
+
|
41
|
+
### Copyright
|
42
|
+
|
43
|
+
Copyright (c) 2010 Jarod Luebbert. See LICENSE for details.
|
44
|
+
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/flightcaster.gemspec
CHANGED
@@ -5,31 +5,31 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{flightcaster}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jarod Luebbert"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-03-01}
|
13
13
|
s.description = %q{Simple interaction with the flightcaster API. Look up
|
14
14
|
flight predictions and information.}
|
15
15
|
s.email = %q{jarod.luebbert@gmail.com}
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE",
|
18
|
-
"README.
|
18
|
+
"README.md"
|
19
19
|
]
|
20
20
|
s.files = [
|
21
21
|
".document",
|
22
22
|
".gitignore",
|
23
23
|
"LICENSE",
|
24
|
-
"README.
|
24
|
+
"README.md",
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"examples/flights.rb",
|
28
28
|
"flightcaster.gemspec",
|
29
29
|
"lib/flightcaster.rb",
|
30
30
|
"lib/flightcaster/base.rb",
|
31
|
+
"lib/flightcaster/rash.rb",
|
31
32
|
"lib/flightcaster/request.rb",
|
32
|
-
"lib/flightcaster/result.rb",
|
33
33
|
"test/fixtures/airline.xml",
|
34
34
|
"test/fixtures/airline_flight.xml",
|
35
35
|
"test/fixtures/airline_flights.xml",
|
@@ -60,7 +60,8 @@ Gem::Specification.new do |s|
|
|
60
60
|
"test/helper.rb",
|
61
61
|
"test/test_base.rb",
|
62
62
|
"test/test_flightcaster.rb",
|
63
|
-
"test/test_request.rb"
|
63
|
+
"test/test_request.rb",
|
64
|
+
"test/test_result.rb"
|
64
65
|
]
|
65
66
|
s.homepage = %q{http://github.com/jarodluebbert/flightcaster}
|
66
67
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -72,6 +73,7 @@ Gem::Specification.new do |s|
|
|
72
73
|
"test/test_base.rb",
|
73
74
|
"test/test_flightcaster.rb",
|
74
75
|
"test/test_request.rb",
|
76
|
+
"test/test_result.rb",
|
75
77
|
"examples/flights.rb"
|
76
78
|
]
|
77
79
|
|
@@ -80,14 +82,14 @@ Gem::Specification.new do |s|
|
|
80
82
|
s.specification_version = 3
|
81
83
|
|
82
84
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
83
|
-
s.add_development_dependency(%q<thoughtbot-shoulda>, [">=
|
85
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 2.10.2"])
|
84
86
|
s.add_development_dependency(%q<shoulda>, [">= 2.10.2"])
|
85
87
|
s.add_development_dependency(%q<mhennemeyer-matchy>, [">= 0.3.3"])
|
86
88
|
s.add_development_dependency(%q<fakeweb>, [">= 1.2.8"])
|
87
89
|
s.add_runtime_dependency(%q<httparty>, [">= 0.5.2"])
|
88
90
|
s.add_runtime_dependency(%q<hashie>, [">= 0.1.8"])
|
89
91
|
else
|
90
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">=
|
92
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 2.10.2"])
|
91
93
|
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
92
94
|
s.add_dependency(%q<mhennemeyer-matchy>, [">= 0.3.3"])
|
93
95
|
s.add_dependency(%q<fakeweb>, [">= 1.2.8"])
|
@@ -95,7 +97,7 @@ Gem::Specification.new do |s|
|
|
95
97
|
s.add_dependency(%q<hashie>, [">= 0.1.8"])
|
96
98
|
end
|
97
99
|
else
|
98
|
-
s.add_dependency(%q<thoughtbot-shoulda>, [">=
|
100
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 2.10.2"])
|
99
101
|
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
100
102
|
s.add_dependency(%q<mhennemeyer-matchy>, [">= 0.3.3"])
|
101
103
|
s.add_dependency(%q<fakeweb>, [">= 1.2.8"])
|
data/lib/flightcaster.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
require 'forwardable'
|
2
|
-
gem 'httparty', '~> 0.5.2'
|
3
2
|
require 'httparty'
|
4
|
-
gem 'hashie', '~> 0.1.8'
|
5
3
|
require 'hashie'
|
6
4
|
|
7
5
|
[ "base",
|
8
6
|
"request",
|
9
|
-
"
|
7
|
+
"rash" ].each do |file|
|
10
8
|
require File.join(File.dirname(__FILE__), 'flightcaster', file)
|
11
9
|
end
|
12
10
|
|
data/lib/flightcaster/base.rb
CHANGED
@@ -22,7 +22,7 @@ module FlightCaster
|
|
22
22
|
perform_get("/airlines/#{id}.xml")
|
23
23
|
end
|
24
24
|
|
25
|
-
#
|
25
|
+
# params
|
26
26
|
# :per_page => The number of results per page. Defaults to 30.
|
27
27
|
# :page => The page of results displayed.
|
28
28
|
def airports(params={})
|
@@ -61,87 +61,135 @@ module FlightCaster
|
|
61
61
|
perform_get("/flights/#{id}.xml")
|
62
62
|
end
|
63
63
|
|
64
|
-
#
|
65
|
-
|
66
|
-
|
67
|
-
perform_get("/airlines/#{airline_id}/flights/#{flight_number}/#{t}.xml", params)
|
68
|
-
end
|
69
|
-
|
70
|
-
# Get all flights from one airport to another.
|
71
|
-
def flight_path(from, to, params={})
|
72
|
-
perform_get("/airports/#{from}/departures/#{to}.xml", params)
|
73
|
-
end
|
74
|
-
|
75
|
-
# Get all flights from one airport to another on a given date.
|
76
|
-
def flight_path_on(from, to, date, params={})
|
77
|
-
t = convert_date(date)
|
78
|
-
perform_get("/airports/#{from}/departures/#{to}/#{t}.xml", params)
|
79
|
-
end
|
80
|
-
|
64
|
+
# params
|
65
|
+
# :per_page => The number of results per page. Defaults to 30.
|
66
|
+
# :page => The page of results displayed.
|
81
67
|
def flights(params={})
|
82
68
|
perform_get('/flights.xml', params)
|
83
69
|
end
|
84
70
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
71
|
+
# airline_id
|
72
|
+
# flight_number
|
73
|
+
# date
|
74
|
+
# A Ruby Time object
|
75
|
+
# or a date in the format 'yearmonthday' (ex: 20100226)
|
76
|
+
# params
|
77
|
+
# :per_page => The number of results per page. Defaults to 30.
|
78
|
+
# :page => The page of results displayed.
|
79
|
+
def flights_by_airline(airline_id, flight_number=nil, date=nil, params={})
|
80
|
+
args = [airline_id, 'flights', flight_number, format(date)].compact.join('/')
|
81
|
+
perform_get("/airlines/#{args}.xml", params)
|
82
|
+
end
|
83
|
+
|
84
|
+
# origin
|
85
|
+
# The FlightCaster id of the airport
|
86
|
+
# The 3 character airport IATA id
|
87
|
+
# The 4 character airport ICAO id
|
88
|
+
# destination
|
89
|
+
# The FlightCaster id of the airport
|
90
|
+
# The 3 character airport IATA id
|
91
|
+
# The 4 character airport ICAO id
|
92
|
+
# date
|
93
|
+
# A Ruby Time object
|
94
|
+
# A date in the format 'yearmonthday' (ex: 20100226)
|
95
|
+
# Returns all flights going from one airport to another
|
96
|
+
def flight_route(origin, destination, date=nil, params={})
|
97
|
+
args = [origin, 'departures', destination, format(date)].compact.join('/')
|
98
|
+
perform_get("/airports/#{args}.xml", params)
|
99
|
+
end
|
100
|
+
|
101
|
+
# params
|
102
|
+
# :per_page => The number of results per page. Defaults to 30.
|
103
|
+
# :page => The page of results displayed.
|
104
|
+
# Returns all metars
|
93
105
|
def metars(params={})
|
94
106
|
perform_get('/metars.xml', params)
|
95
107
|
end
|
96
108
|
|
109
|
+
# id
|
110
|
+
# The FlightCaster id
|
111
|
+
# The 4 character metar ICAO id. If given the metar that is returned
|
112
|
+
# is the last one reported at that station.
|
113
|
+
# Returns metar specified by the given id.
|
97
114
|
def metar(id)
|
98
115
|
perform_get("/metars/#{id}.xml")
|
99
116
|
end
|
100
117
|
|
118
|
+
# params
|
119
|
+
# :per_page => The number of results per page. Defaults to 30.
|
120
|
+
# :page => The page of results displayed.
|
121
|
+
# Returns all tafs
|
101
122
|
def tafs(params={})
|
102
123
|
perform_get('/tafs.xml', params)
|
103
124
|
end
|
104
125
|
|
126
|
+
# id
|
127
|
+
# The FlightCaster id
|
128
|
+
# The 4 character taf ICAO id. If given the taf that is returned
|
129
|
+
# is the last one reported at that station.
|
130
|
+
# Returns taf specified by the given id.
|
105
131
|
def taf(id)
|
106
132
|
perform_get("/tafs/#{id}.xml")
|
107
133
|
end
|
108
134
|
|
135
|
+
# params
|
136
|
+
# :per_page => The number of results per page. Defaults to 30.
|
137
|
+
# :page => The page of results displayed.
|
138
|
+
# Returns a list of ground delays
|
109
139
|
def ground_delays(params={})
|
110
140
|
perform_get('/ground_delays.xml', params)
|
111
141
|
end
|
112
142
|
|
143
|
+
# id
|
144
|
+
# The FlightCaster id
|
145
|
+
# The 4 character delay ICAO id. If given, the delay that is returned
|
146
|
+
# is the last one reported at that station.
|
147
|
+
# Returns a single ground delay.
|
113
148
|
def ground_delay(id)
|
114
149
|
perform_get("/ground_delays/#{id}.xml")
|
115
150
|
end
|
116
151
|
|
152
|
+
# Returns all ground stops, limited to 50 results.
|
117
153
|
def ground_stops(params={})
|
118
154
|
perform_get('/ground_stops.xml', params)
|
119
155
|
end
|
120
156
|
|
157
|
+
# id
|
158
|
+
# The FlightCaster id
|
159
|
+
# The 4 character stop ICAO id. If given, the stop that is returned
|
160
|
+
# is the last one reported at that station.
|
161
|
+
# Returns a single ground stop.
|
121
162
|
def ground_stop(id)
|
122
163
|
perform_get("/ground_stops/#{id}.xml")
|
123
164
|
end
|
124
165
|
|
166
|
+
# params
|
167
|
+
# :per_page => The number of results per page. Defaults to 30.
|
168
|
+
# :page => The page of results displayed.
|
169
|
+
# Returns all delays.
|
125
170
|
def delays(params={})
|
126
171
|
perform_get('/delays.xml', params)
|
127
172
|
end
|
128
173
|
|
174
|
+
# id
|
175
|
+
# The FlightCaster id
|
176
|
+
# The 4 character delay ICAO id. If given, the delay that is returned
|
177
|
+
# is the last one reported at that station.
|
178
|
+
# Returns a single delay.
|
129
179
|
def delay(id)
|
130
180
|
perform_get("/delays/#{id}.xml")
|
131
181
|
end
|
132
182
|
|
133
183
|
private
|
134
184
|
|
185
|
+
# :nodoc
|
135
186
|
def perform_get(path, params={})
|
136
187
|
FlightCaster::Request.get(path, params)
|
137
188
|
end
|
138
189
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
else
|
143
|
-
date
|
144
|
-
end
|
190
|
+
# :nodoc
|
191
|
+
def format(date)
|
192
|
+
(date.is_a?(Time)) ? date.strftime("%Y%m%d") : date
|
145
193
|
end
|
146
194
|
|
147
195
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module FlightCaster
|
2
|
+
class Rash
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
attr_accessor :hash, :array
|
6
|
+
|
7
|
+
def initialize(h)
|
8
|
+
@array = []
|
9
|
+
@hash = h
|
10
|
+
split_into_rash
|
11
|
+
end
|
12
|
+
|
13
|
+
def_delegators :@hash, :id, :replace, :each_key, :keys, :delete,
|
14
|
+
:merge!, :method_missing
|
15
|
+
def_delegators :@array, :each, :size, :[]
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def split_into_rash
|
20
|
+
@hash.each_key do |key|
|
21
|
+
if @hash[key].class == Array
|
22
|
+
@hash[key].each {|x| @array << x}
|
23
|
+
@hash.delete(key)
|
24
|
+
elsif @hash[key].class == Hashie::Mash
|
25
|
+
@hash[key] = Rash.new(@hash[key])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/lib/flightcaster/request.rb
CHANGED
data/test/fixtures/flights.xml
CHANGED
data/test/test_flightcaster.rb
CHANGED
@@ -107,27 +107,28 @@ class TestFlightCaster < Test::Unit::TestCase
|
|
107
107
|
|
108
108
|
should "get flights by airline and flight number" do
|
109
109
|
stub_get('/airlines/VX/flights/28.xml', 'airline_flight.xml')
|
110
|
-
flights = @flightcaster.
|
110
|
+
flights = @flightcaster.flights_by_airline('VX', 28)
|
111
111
|
flights.total_entries.should == '5'
|
112
|
+
flights.size.should == 5
|
112
113
|
flights.total_pages.should == '1'
|
113
114
|
end
|
114
115
|
|
115
116
|
should "get flights by airline, flight number, and date" do
|
116
117
|
stub_get('/airlines/VX/flights/28/20100226.xml', 'flight_date.xml')
|
117
|
-
flights = @flightcaster.
|
118
|
+
flights = @flightcaster.flights_by_airline('VX', 28, '20100226')
|
118
119
|
flights.total_entries.should == '1'
|
119
120
|
end
|
120
121
|
|
121
122
|
should "find a flight from one airport to another" do
|
122
123
|
stub_get('/airports/PDX/departures/DFW.xml', 'flight_path.xml')
|
123
|
-
flights = @flightcaster.
|
124
|
+
flights = @flightcaster.flight_route('PDX', 'DFW')
|
124
125
|
flights.total_entries.should == '6'
|
125
126
|
flights.total_pages.should == '3'
|
126
127
|
end
|
127
128
|
|
128
129
|
should "find a flight from one airport to another on a certain day" do
|
129
130
|
stub_get('/airports/PDX/departures/DFW/20090911.xml', 'flight_path_date.xml')
|
130
|
-
flights = @flightcaster.
|
131
|
+
flights = @flightcaster.flight_route('PDX', 'DFW', '20090911')
|
131
132
|
flights[0].id.should == 2877686
|
132
133
|
flights.size.should == 22
|
133
134
|
end
|
@@ -143,9 +144,9 @@ class TestFlightCaster < Test::Unit::TestCase
|
|
143
144
|
end
|
144
145
|
|
145
146
|
should "get predictions for one flight" do
|
146
|
-
|
147
|
-
|
148
|
-
|
147
|
+
stub_get('/flights/2858102.xml', 'flight.xml')
|
148
|
+
flight = @flightcaster.flight(2858102)
|
149
|
+
flight.predictions[0].state.should == 'delayed'
|
149
150
|
end
|
150
151
|
end
|
151
152
|
|
data/test/test_request.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestRequest < Test::Unit::TestCase
|
4
|
-
context "
|
4
|
+
context "Request" do
|
5
5
|
should "add API key to base_uri" do
|
6
6
|
FlightCaster::Request.set_api_key("foo")
|
7
7
|
FlightCaster::Request.full_uri('/').should == "http://api.flightcaster.com/?api_key=foo"
|
data/test/test_result.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestResult < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
stub_get('/flights.xml', 'flights.xml')
|
6
|
+
FlightCaster::Request.set_api_key('foo')
|
7
|
+
@flights = FlightCaster::Request.get('/flights.xml')
|
8
|
+
end
|
9
|
+
|
10
|
+
context "Initialization" do
|
11
|
+
should "require data" do
|
12
|
+
lambda { FlightCaster::Result.new }.should raise_error
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "After initialization, Result" do
|
17
|
+
should "get rid of the outside hash" do
|
18
|
+
@flights.flights.should == nil
|
19
|
+
end
|
20
|
+
|
21
|
+
should "extract arrays from hashes" do
|
22
|
+
@flights[0].id.should == 2858102
|
23
|
+
@flights[1].id.should == 2856793
|
24
|
+
end
|
25
|
+
|
26
|
+
should "not create duplicates" do
|
27
|
+
@flights.flight.should == nil
|
28
|
+
end
|
29
|
+
|
30
|
+
should "not remove current page number" do
|
31
|
+
@flights.current_page.should == '1'
|
32
|
+
end
|
33
|
+
|
34
|
+
should "not remove number of entries" do
|
35
|
+
@flights.total_entries.should == '504'
|
36
|
+
end
|
37
|
+
|
38
|
+
should "not remove number of pages" do
|
39
|
+
@flights.total_pages.should == '17'
|
40
|
+
end
|
41
|
+
|
42
|
+
should "return the size of the array" do
|
43
|
+
@flights.size.should == 30
|
44
|
+
end
|
45
|
+
|
46
|
+
should "not duplicate inner arrays" do
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jarod Luebbert
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-03-01 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -25,8 +25,10 @@ dependencies:
|
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
segments:
|
28
|
-
-
|
29
|
-
|
28
|
+
- 2
|
29
|
+
- 10
|
30
|
+
- 2
|
31
|
+
version: 2.10.2
|
30
32
|
type: :development
|
31
33
|
version_requirements: *id001
|
32
34
|
- !ruby/object:Gem::Dependency
|
@@ -109,20 +111,20 @@ extensions: []
|
|
109
111
|
|
110
112
|
extra_rdoc_files:
|
111
113
|
- LICENSE
|
112
|
-
- README.
|
114
|
+
- README.md
|
113
115
|
files:
|
114
116
|
- .document
|
115
117
|
- .gitignore
|
116
118
|
- LICENSE
|
117
|
-
- README.
|
119
|
+
- README.md
|
118
120
|
- Rakefile
|
119
121
|
- VERSION
|
120
122
|
- examples/flights.rb
|
121
123
|
- flightcaster.gemspec
|
122
124
|
- lib/flightcaster.rb
|
123
125
|
- lib/flightcaster/base.rb
|
126
|
+
- lib/flightcaster/rash.rb
|
124
127
|
- lib/flightcaster/request.rb
|
125
|
-
- lib/flightcaster/result.rb
|
126
128
|
- test/fixtures/airline.xml
|
127
129
|
- test/fixtures/airline_flight.xml
|
128
130
|
- test/fixtures/airline_flights.xml
|
@@ -154,6 +156,7 @@ files:
|
|
154
156
|
- test/test_base.rb
|
155
157
|
- test/test_flightcaster.rb
|
156
158
|
- test/test_request.rb
|
159
|
+
- test/test_result.rb
|
157
160
|
has_rdoc: true
|
158
161
|
homepage: http://github.com/jarodluebbert/flightcaster
|
159
162
|
licenses: []
|
@@ -189,4 +192,5 @@ test_files:
|
|
189
192
|
- test/test_base.rb
|
190
193
|
- test/test_flightcaster.rb
|
191
194
|
- test/test_request.rb
|
195
|
+
- test/test_result.rb
|
192
196
|
- examples/flights.rb
|
data/README.rdoc
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
= flightcaster
|
2
|
-
|
3
|
-
The flightcaster ruby gem. Get started by going to http://docs.flightcaster.com/
|
4
|
-
and getting an API key.
|
5
|
-
|
6
|
-
== examples
|
7
|
-
|
8
|
-
See the examples directory.
|
9
|
-
|
10
|
-
== docs
|
11
|
-
|
12
|
-
http://rdoc.info/projects/jarodluebbert/flightcaster
|
13
|
-
|
14
|
-
== Note on Patches/Pull Requests
|
15
|
-
|
16
|
-
* Fork the project.
|
17
|
-
* Make your feature addition or bug fix.
|
18
|
-
* Add tests for it. This is important so I don't break it in a
|
19
|
-
future version unintentionally.
|
20
|
-
* Commit, do not mess with rakefile, version, or history.
|
21
|
-
(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)
|
22
|
-
* Send me a pull request. Bonus points for topic branches.
|
23
|
-
|
24
|
-
== Copyright
|
25
|
-
|
26
|
-
Copyright (c) 2010 Jarod Luebbert. See LICENSE for details.
|
data/lib/flightcaster/result.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
module FlightCaster
|
2
|
-
class Result
|
3
|
-
extend Forwardable
|
4
|
-
|
5
|
-
def initialize(data)
|
6
|
-
@h = generate_hash(data)
|
7
|
-
end
|
8
|
-
|
9
|
-
def_delegators :@h, :id, :replace, :each_key, :keys, :delete,
|
10
|
-
:[], :[]=, :merge!, :method_missing
|
11
|
-
|
12
|
-
# When enumerating a hash, look for an array with the
|
13
|
-
# response results and pass it the block.
|
14
|
-
def each(&blk)
|
15
|
-
@h.results.each(&blk)
|
16
|
-
end
|
17
|
-
|
18
|
-
def [](key)
|
19
|
-
@h.results[key]
|
20
|
-
end
|
21
|
-
|
22
|
-
def size
|
23
|
-
@h.results.size
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def generate_hash(data)
|
29
|
-
h = Hashie::Mash.new(data)
|
30
|
-
# since the hash looks like { :airlines => { stuff we want } },
|
31
|
-
# we just grab the value from the first key
|
32
|
-
h = h[h.keys[0]]
|
33
|
-
# now we have:
|
34
|
-
# { :total_entries => 1, ... , :data_requested => [array of hashes], }
|
35
|
-
# for example if the user requests `.flights` then in order to
|
36
|
-
# iterate over all flights `.flights.flight.each` would be needed.
|
37
|
-
# To get around this, we need to grab out that array of hashes
|
38
|
-
# and store it in a general location so we can overload `.each`
|
39
|
-
h.each_key do |key|
|
40
|
-
if h[key].class == Array
|
41
|
-
results = []
|
42
|
-
h[key].each do |item|
|
43
|
-
results << item
|
44
|
-
end
|
45
|
-
h.delete(key)
|
46
|
-
h.merge!({ :results => results })
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|