cumtd 0.0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9b29b282253fd7d5f524f61e7e65092e0421018
4
- data.tar.gz: c0b228e68084015682b7a547aabb5a4d8bafa92f
3
+ metadata.gz: bd40b208a39e58b04532f3480f40bfa872fb9a9c
4
+ data.tar.gz: 0be1f6a864db4f9f12542d9312b67ee2f3d438d9
5
5
  SHA512:
6
- metadata.gz: 4a6c9f5aebe2c84db2176df6641c377f6fe3736f46632c0266a240bf11c8679c7991e64c3b460cbffcc51bf905ae0d46507b98a373541d2d0bcbe5cc639babfa
7
- data.tar.gz: 2ad657f57f944cdeb8e9705cf755250cc8d96b2841dada811b2765f465492a91602f918e2459c8266a26fd527962612462ddca0fa57e6d47cdecea48903705af
6
+ metadata.gz: fe7ebb6bf969afd5b457cfb0ecdf4dbc4ee08ef140b3888960ca9fb083df28388d8a71f7452484bffab3a1870a0269f85910a1a07d20dbfc5a325374fbb74395
7
+ data.tar.gz: 4c1689a745a21980d2fa46a48d655bbc3795ed1b4336af9551c2602cc801f84ea6e3cac0d83a08d52ff02465af0dfb899e6a632d475a38b91ad8153279a1d220
@@ -1,23 +1,90 @@
1
1
  require 'httparty'
2
+ require 'yaml'
2
3
  class CUMTD
4
+ require 'stop'
5
+ require 'stop_point'
6
+ require 'departure'
7
+ require 'route'
8
+ require 'shape'
9
+ require 'trip'
10
+ require 'vehicle'
3
11
  include HTTParty
4
12
  base_uri 'developer.cumtd.com/api/v2.2/json'
5
- def initialize(api_key)
13
+ def initialize(api_key, stops_file=nil, routes_file=nil, serialize_path=File.expand_path(File.dirname(__FILE__)))
6
14
  @api_key = api_key
15
+
16
+ @@all_stops = Array.new
17
+ if stops_file
18
+ object = nil
19
+ File.open(stops_file,"rb") {|f| @@all_stops = Marshal.load(f)}
20
+ else
21
+ self.get_stops
22
+ end
23
+
24
+ @@all_routes = Array.new
25
+ if routes_file
26
+ object = nil
27
+ File.open(routes_file,"rb") {|f| @@all_routes = Marshal.load(f)}
28
+ else
29
+ self.get_routes
30
+ end
31
+
32
+ unless serialize_path == :no_serialize
33
+ p File.join(serialize_path, 'stops')
34
+ serialize_stops(File.join(serialize_path, 'stops.yaml'))
35
+ serialize_routes(File.join(serialize_path, 'routes.yaml'))
36
+ end
37
+
7
38
  end
8
39
 
9
40
  def api_key
10
41
  @api_key
11
42
  end
12
43
 
13
- def current_stops
14
- @current_stops
44
+ def self.all_stops
45
+ @@all_stops
15
46
  end
16
47
 
17
- def get_stops(lat, lon, count=20)
18
- response = self.class.get("/GetStopsByLatLon?key=#{api_key}&lat=#{lat}&lon=#{lon}&count=#{count}")
19
- current_stops = response["stops"]
20
- return stops = response["stops"]
48
+ def self.all_routes
49
+ @@all_routes
50
+ end
51
+
52
+ def serialize_stops(file_location)
53
+ File.open(file_location, "wb") do |file|
54
+ YAML.dump(@@all_stops,file)
55
+ end
56
+ end
57
+
58
+ def serialize_routes(file_location)
59
+ File.open(file_location, "wb") do |file|
60
+ YAML.dump(@@all_routes,file)
61
+ end
62
+ end
63
+
64
+ def get_stops
65
+ response = self.class.get("/GetStops?key=#{@api_key}")
66
+ @@all_stops.clear
67
+ response["stops"].each do |stop|
68
+ @@all_stops << Stop.new(stop)
69
+ end
70
+
71
+ end
72
+
73
+ def get_routes
74
+ response = self.class.get("/GetRoutes?key=#{@api_key}")
75
+ @@all_routes.clear
76
+ response["routes"].each do |route|
77
+ @@all_routes << Route.new(route)
78
+ end
79
+ end
80
+
81
+ def get_stops_by_lat_lon(lat, lon, count=20)
82
+ response = self.class.get("/GetStopsByLatLon?key=#{@api_key}&lat=#{lat}&lon=#{lon}&count=#{count}")
83
+ stops = Array.new
84
+ response["stops"].each do |stop|
85
+ stops << Stop.new(stop)
86
+ end
87
+ return stops
21
88
  end
22
89
 
23
90
  def print_all_departures(stops)
@@ -28,28 +95,37 @@ class CUMTD
28
95
  end
29
96
  end
30
97
 
31
- def get_routes_by_stop(stop_id)
32
- response = self.class.get("/GetRoutesByStop?key=#{api_key}&stop_id=#{stop_id}")
33
- return response.parsed_response["routes"]
98
+ def get_routes_by_stop(stop)
99
+ response = self.class.get("/GetRoutesByStop?key=#{@api_key}&stop_id=#{stop.stop_id}")
100
+ routes = Array.new
101
+ response["routes"].each do |route|
102
+ routes << Route.new(route)
103
+ end
104
+ return routes
34
105
  end
35
106
 
36
107
  def get_stop_by_id(stop_id)
37
- response = self.class.get("/GetStop?key=#{api_key}&stop_id=#{stop_id}")
38
- return response.parsed_response["stops"].first["stop_name"]
39
- end
40
-
41
- def get_departures_by_stop(stop_id)
42
- response = self.class.get("/GetDeparturesByStop?key=#{api_key}&stop_id=#{stop_id}")
43
- return departures = response.parsed_response["departures"]
108
+ response = self.class.get("/GetStop?key=#{@api_key}&stop_id=#{stop_id}")
109
+ stop = Stop.new(response["stops"])
110
+ return stop
44
111
  end
45
112
 
46
- def print_departures(departures, stop)
47
- puts stop["stop_name"] unless departures == []
48
- departures.each do |departure|
49
- puts departure["headsign"] + " " + departure["expected_mins"].to_s + "mins"
113
+ def get_departures_by_stop(stop)
114
+ response = self.class.get("/GetDeparturesByStop?key=#{@api_key}&stop_id=#{stop.stop_id}")
115
+ departures = Array.new
116
+ response["departures"].each do |departure|
117
+ departures << Departure.new(departure)
50
118
  end
119
+ return departures
51
120
  end
52
121
 
122
+ # def print_departures(departures)
123
+ # puts stop["stop_name"] unless departures == []
124
+ # departures.each do |departure|
125
+ # puts departure["headsign"] + " " + departure["expected_mins"].to_s + "mins"
126
+ # end
127
+ # end
128
+
53
129
  # Returns an array of hashes. Each hash contains a "stop" key denoting the stop
54
130
  # and the "departures" key contains one departure. These hashes are sorted
55
131
  # based on length of time until they depart, given stops to get departures for.
@@ -58,12 +134,99 @@ class CUMTD
58
134
  master_deps = Array.new
59
135
  stops.each do |stop|
60
136
  # master_deps.concat(Hash["stop", stop, "departures", get_departures_by_stop(stop["stop_id"]))
61
- stops_from_deps = get_departures_by_stop(stop["stop_id"])
137
+ stops_from_deps = get_departures_by_stop(stop)
62
138
  stops_from_deps.each do |stop_dep|
63
139
  master_deps << Hash["stop", stop, "departures", stop_dep]
64
140
  end
65
141
  end
66
- return master_deps.sort_by! { |stop| stop["departures"]["expected_mins"] }
142
+ return master_deps.sort_by! { |stop| stop["departures"].expected_mins }
143
+ end
144
+
145
+ def get_stops_by_search(query, count=10)
146
+ response = self.class.get("/GetStopsBySearch?key=#{@api_key}&query=#{query}&count=#{count}")
147
+ stops = Array.new
148
+ response["stops"].each do |stop|
149
+ stops << Stop.new(stop)
150
+ end
151
+ return stops
152
+ end
153
+
154
+ def get_stop_times_by_trip(trip_id)
155
+ response = self.class.get("/GetStopTimesByTrip?key=#{@api_key}&trip_id=#{trip_id}")
156
+ stop_times = Array.new
157
+ response["stop_times"].each do |stop_time|
158
+ stop_times << StopTime.new(stop_time)
159
+ end
160
+ return stop_times
161
+ end
162
+
163
+ def get_vehicles
164
+ response = self.class.get("/GetVehicles?key=#{@api_key}")
165
+ vehicles = Array.new
166
+ response["vehicles"].each do |vehicle|
167
+ vehicles << Vehicle.new(vehicle)
168
+ end
169
+ return vehicles
170
+ end
171
+
172
+ def get_vehicle_by_id(vehicle_id)
173
+ response = self.class.get("/GetVehicle?key=#{@api_key}&vehicle_id=#{vehicle_id}")
174
+ return Vehicle.new(response["vehicles"].first)
175
+ end
176
+
177
+ def get_vehicles_by_route_id(route_id)
178
+ response = self.class.get("/GetVehiclesByRoute?key=#{@api_key}&route_id=#{route_id}")
179
+ vehicles = Array.new
180
+ response["vehicles"].each do |vehicle|
181
+ vehicles << Vehicle.new(vehicle)
182
+ end
183
+ return vehicles
184
+ end
185
+
186
+ def get_trip_by_id(trip_id)
187
+ response = self.class.get("/GetTrip?key=#{@api_key}&trip_id=#{trip_id}")
188
+ return Trip.new(response["trips"].first)
189
+ end
190
+
191
+ def get_trips_by_block(block_id)
192
+ response = self.class.get("/GetTripsByBlock?key=#{@api_key}&block_id=#{block_id}")
193
+ trips = Array.new
194
+ response["trips"].each do |trip|
195
+ trips << Trip.new(trip)
196
+ end
197
+ return trips
198
+ end
199
+
200
+ def get_shape_by_id(shape_id)
201
+ response = self.class.get("/GetShape?key=#{@api_key}&shape_id=#{shape_id}")
202
+ shapes = Array.new
203
+ response["shapes"].each do |shape|
204
+ shapes << Shape.new(shape)
205
+ end
206
+ return shapes
207
+ end
208
+
209
+ def get_shape_between_stops(begin_stop_id, end_stop_id, shape_id)
210
+ response = self.class.get("/GetShape?key=#{@api_key}&begin_stop_id=#{begin_stop_id}&end_stop_id=#{end_stop_id}&shape_id=#{shape_id}")
211
+ shapes = Array.new
212
+ response["shapes"].each do |shape|
213
+ shapes << Shape.new(shape)
214
+ end
215
+ return shapes
216
+ end
217
+
218
+ def get_stop_times_by_stop(stop_id, route_id=nil, date=Time.now.to_s)
219
+ if !route_id
220
+ response = self.class.get("/GetStopTimesByStop?key=#{@api_key}&stop_id=#{stop_id}")
221
+ else
222
+ response = self.class.get("/GetStopTimesByStop?key=#{@api_key}&stop_id=#{stop_id}&route_id=#{route_id}")
223
+ end
224
+
225
+ stop_times = Array.new
226
+ response["stop_times"].each do |stop_time|
227
+ stop_times << StopTime.new(stop_time)
228
+ end
229
+ return stop_times
67
230
  end
68
231
 
69
232
  end
@@ -0,0 +1,68 @@
1
+ require 'trip'
2
+ require 'route'
3
+ class Departure < CUMTD
4
+ def initialize(json)
5
+ @stop_id = json["stop_id"]
6
+ @headsign = json["headsign"]
7
+ @trip = Trip.new(json["trip"])
8
+ @vehicle_id = json["vehicle_id"]
9
+ @origin = CUMTD.all_stops.select { |stop| stop.stop_points.each == \
10
+ json["origin"]["stop_id"] }
11
+ @destination = CUMTD.all_stops.select { |stop| stop.stop_points.each == \
12
+ json["destination"]["stop_id"] }
13
+ @is_monitored = json["is_monitored"]
14
+ @is_scheduled = json["is_scheduled"]
15
+ @scheduled = DateTime.parse(json["scheduled"]).to_time
16
+ @expected = DateTime.parse(json["expected"]).to_time
17
+ @expected_mins = json["expected_mins"]
18
+ @location = Hash[:lat, json["location"]["lat"], :lon, json["location"]["lon"]]
19
+ end
20
+
21
+ def stop_id
22
+ @stop_id
23
+ end
24
+
25
+ def headsign
26
+ @headsign
27
+ end
28
+
29
+ def trip
30
+ @trip
31
+ end
32
+
33
+ def vehicle_id
34
+ @vehicle_id
35
+ end
36
+
37
+ def origin
38
+ @origin
39
+ end
40
+
41
+ def destination
42
+ @destination
43
+ end
44
+
45
+ def is_monitored
46
+ @is_monitored
47
+ end
48
+
49
+ def is_scheduled
50
+ @is_scheduled
51
+ end
52
+
53
+ def scheduled
54
+ @scheduled
55
+ end
56
+
57
+ def expected
58
+ @expected
59
+ end
60
+
61
+ def expected_mins
62
+ @expected_mins
63
+ end
64
+
65
+ def location
66
+ @location
67
+ end
68
+ end
@@ -0,0 +1,29 @@
1
+ class Route < CUMTD
2
+ def initialize(json)
3
+ @route_color = json["route_color"]
4
+ @route_id = json["route_id"]
5
+ @route_long_name = json["route_long_name"]
6
+ @route_short_name = json["route_short_name"]
7
+ @route_text_color = json["route_text_color"]
8
+ end
9
+
10
+ def route_color
11
+ @route_color
12
+ end
13
+
14
+ def route_id
15
+ @route_id
16
+ end
17
+
18
+ def route_long_name
19
+ @route_long_name
20
+ end
21
+
22
+ def route_short_name
23
+ @route_short_name
24
+ end
25
+
26
+ def route_text_color
27
+ @route_text_color
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ class Shape < CUMTD
2
+ def initialize(json)
3
+ @shape_dist_traveled = json["shape_dist_traveled"]
4
+ @shape_pt_lat = json["shape_pt_lat"]
5
+ @shape_pt_lon = json["shape_pt_lon"]
6
+ @shape_pt_sequence = json["shape_pt_sequence"]
7
+ @shape_stop_id = json["shape_stop_id"] if json["shape_stop_id"]
8
+ end
9
+
10
+ def shape_dist_traveled
11
+ @shape_dist_traveled
12
+ end
13
+
14
+ def shape_pt_lat
15
+ @shape_pt_lat
16
+ end
17
+
18
+ def shape_pt_lon
19
+ @shape_pt_lon
20
+ end
21
+
22
+ def shape_pt_sequence
23
+ @shape_pt_sequence
24
+ end
25
+
26
+ def shape_stop_id
27
+ @shape_stop_id
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ class Stop < CUMTD
2
+ def initialize(json)
3
+ @stop_id = json["stop_id"]
4
+ @stop_name = json["stop_name"]
5
+ @code = json["code"]
6
+ @stop_points = Array.new
7
+ json["stop_points"].each do |stop_point|
8
+ @stop_points << StopPoint.new(stop_point)
9
+ end
10
+ end
11
+
12
+ def stop_id
13
+ @stop_id
14
+ end
15
+
16
+ def stop_name
17
+ @stop_name
18
+ end
19
+
20
+ def code
21
+ @code
22
+ end
23
+
24
+ def stop_points
25
+ @stop_points
26
+ end
27
+
28
+
29
+ end
@@ -0,0 +1,30 @@
1
+ class StopPoint < CUMTD
2
+ def initialize(json)
3
+ @code = json["code"]
4
+ @stop_id = json["stop_id"]
5
+ @stop_lat = json["stop_lat"]
6
+ @stop_lon = json["stop_lon"]
7
+ @stop_name = json["stop_name"]
8
+ end
9
+
10
+ def code
11
+ @code
12
+ end
13
+
14
+ def stop_id
15
+ @stop_id
16
+ end
17
+
18
+ def stop_lat
19
+ @stop_lat
20
+ end
21
+
22
+ def stop_lon
23
+ @stop_lon
24
+ end
25
+
26
+ def stop_name
27
+ @stop_name
28
+ end
29
+ end
30
+
@@ -0,0 +1,32 @@
1
+ class StopTime < CUMTD
2
+ require 'stop_point'
3
+ require 'trip'
4
+ def initialize(json)
5
+ @arrival_time = DateTime.parse(json["arrival_time"]).to_time
6
+ @departure_time = DateTime.parse(json["departure_time"]).to_time
7
+ @stop_sequence = json["stop_sequence"]
8
+ @stop_point = StopPoint.new(json["stop_point"]) if json["stop_point"]
9
+ @trip = Trip.new(json["trip"]) if json["trip"]
10
+ end
11
+
12
+ def arrival_time
13
+ @arrival_time
14
+ end
15
+
16
+ def departure_time
17
+ @departure_time
18
+ end
19
+
20
+ def stop_sequence
21
+ @stop_sequence
22
+ end
23
+
24
+ def stop_point
25
+ @stop_point
26
+ end
27
+
28
+ def trip
29
+ @trip
30
+ end
31
+
32
+ end
@@ -0,0 +1,40 @@
1
+ class Trip < CUMTD
2
+ def initialize(json)
3
+ @trip_id = json["trip_id"]
4
+ @trip_headsign = json["trip_headsign"]
5
+ @route_id = json["route_id"]
6
+ @block_id = json["block_id"]
7
+ @direction = json["direction"]
8
+ @service_id = json["service_id"]
9
+ @shape_id = json["shape_id"]
10
+ end
11
+
12
+ def trip_id
13
+ @trip_id
14
+ end
15
+
16
+ def trip_headsign
17
+ @trip_headsign
18
+ end
19
+
20
+ def route_id
21
+ @route_id
22
+ end
23
+
24
+ def block_id
25
+ @block_id
26
+ end
27
+
28
+ def direction
29
+ @direction
30
+ end
31
+
32
+ def service_id
33
+ @service_id
34
+ end
35
+
36
+ def shape_id
37
+ @shape_id
38
+ end
39
+
40
+ end
@@ -0,0 +1,45 @@
1
+ class Vehicle < CUMTD
2
+ def initialize(json)
3
+ @vehicle_id = json["vehicle_id"]
4
+ @trip = Trip.new(json["trip"])
5
+ @location = Hash[:lat, json["location"]["lat"], :lon, json["location"]["lon"]]
6
+ @previous_stop_id = json["previous_stop_id"]
7
+ @next_stop_id = json["next_stop_id"]
8
+ @origin_stop_id = json["origin_stop_id"]
9
+ @destination_stop_id = json["destination_stop_id"]
10
+ @last_updated = DateTime.parse(json["last_updated"]).to_time
11
+ end
12
+
13
+ def vehicle_id
14
+ @vehicle_id
15
+ end
16
+
17
+ def trip
18
+ @trip
19
+ end
20
+
21
+ def location
22
+ @location
23
+ end
24
+
25
+ def previous_stop_id
26
+ @previous_stop_id
27
+ end
28
+
29
+ def next_stop_id
30
+ @next_stop_id
31
+ end
32
+
33
+ def origin_stop_id
34
+ @origin_stop_id
35
+ end
36
+
37
+ def destination_stop_id
38
+ @destination_stop_id
39
+ end
40
+
41
+ def last_updated
42
+ @last_updated
43
+ end
44
+
45
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cumtd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Jackson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-09 00:00:00.000000000 Z
11
+ date: 2013-08-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: An interface to CUMTD's API.
14
14
  email: brett@brettjackson.org
@@ -17,7 +17,15 @@ extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
19
  - lib/cumtd.rb
20
- homepage: http://rubygems.org/gems/cumtd
20
+ - lib/stop.rb
21
+ - lib/stop_point.rb
22
+ - lib/departure.rb
23
+ - lib/route.rb
24
+ - lib/trip.rb
25
+ - lib/stop_time.rb
26
+ - lib/vehicle.rb
27
+ - lib/shape.rb
28
+ homepage: http://github.com/bjackson/cumtd
21
29
  licenses:
22
30
  - MIT
23
31
  metadata: {}