cumtd 0.0.1 → 0.1.1

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.
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: {}