caltrain 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ stop_id,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url
2
+ "22nd Street Caltrain","22nd Street Caltrain","1149 22nd Street,San Francisco","37.757674","-122.392636","1",
3
+ "Atherton Caltrain","Atherton Caltrain","1 Dinkelspiel Station Lane, Atherton","37.464349","-122.198106","3",""
4
+ "Bayshore Caltrain","Bayshore Caltrain","400 Tunnel Avenue,San Francisco","37.709544","-122.401318","1",
5
+ "Belmont Caltrain","Belmont Caltrain","995 El Camino Real, Belmont","37.520504","-122.276075","2",
6
+ "Blossom Hill Caltrain","Blossom Hill Caltrain","5560 Monterey Hwy.,San Jose","37.252801","-121.797369","5",
7
+ "Broadway Caltrain","Broadway Caltrain","1190 California Drive, Burlingame","37.587466","-122.363233","2",""
8
+ "Burlingame Caltrain","Burlingame Caltrain","290 California Drive, Burlingame","37.579719","-122.345266","2",
9
+ "California Ave Caltrain","California Ave Caltrain","101 California Avenue,Palo Alto","37.428835","-122.142703","3",
10
+ "Capitol Caltrain","Capitol Caltrain","3400 Monterey Hwy.,San Jose","37.284359","-121.841589","5",
11
+ "College Park Caltrain","College Park Caltrain","780 Stockton Avenue,San Jose","37.34217","-121.914998","4",
12
+ "Gilroy Caltrain","Gilroy Caltrain","7150 Monterey Street, Gilroy","37.003084","-121.567091","6",
13
+ "Hayward Park Caltrain","Hayward Park Caltrain","401 Concar Drive,San Mateo","37.552346","-122.308916","2",
14
+ "Hillsdale Caltrain","Hillsdale Caltrain","3333 El Camino Real,San Mateo","37.537503","-122.298001","2",
15
+ "Lawrence Caltrain","Lawrence Caltrain","137 San Zeno Way, Sunnyvale","37.371578","-121.996982","4",
16
+ "Menlo Park Caltrain","Menlo Park Caltrain","1120 Merrill Street,Menlo Park","37.454604","-122.182518","3",
17
+ "Millbrae Caltrain","Millbrae Caltrain","100 California Drive, Millbrae","37.600006","-122.386534","2",
18
+ "Morgan Hill Caltrain","Morgan Hill Caltrain","17300 Depot Street,Morgan Hill","37.129081","-121.650721","6",
19
+ "Mountain View Caltrain","Mountain View Caltrain","600 W. Evelyn Avenue, Mountain View","37.393879","-122.076327","3",
20
+ "Palo Alto Caltrain","Palo Alto Caltrain","95 University Avenue,Palo Alto","37.44307","-122.1649","3",
21
+ "Redwood City Caltrain","Redwood City Caltrain","1 James Avenue,Redwood City","37.485412","-122.231957","2",
22
+ "San Antonio Caltrain","San Antonio Caltrain","190 Showers Drive, Mountain View","37.406163","-122.105787","3",
23
+ "San Bruno Caltrain","San Bruno Caltrain","481 Huntington Avenue,San Bruno","37.624256","-122.408444","1",
24
+ "San Carlos Caltrain","San Carlos Caltrain","599 El Camino Real,San Carlos","37.507361","-122.260365","2",
25
+ "San Francisco Caltrain","San Francisco Caltrain","700 4th Street,San Francisco","37.7764393371","-122.394322993","1",
26
+ "San Jose Caltrain","San Jose Caltrain","65 Cahill Street,San Jose","37.330196","-121.901985","4",
27
+ "San Martin Caltrain","San Martin Caltrain","13400 Monterey Hwy.,San Martin","37.085775","-121.610809","6",
28
+ "San Mateo Caltrain","San Mateo Caltrain","385 First Ave.,San Mateo","37.568209","-122.323933","2",
29
+ "Santa Clara Caltrain","Santa Clara Caltrain","1001 Railroad Avenue,Santa Clara","37.352915","-121.936376","4",
30
+ "So. San Francisco Caltrain","So. San Francisco Caltrain","590 Dubuque Avenue,South San Francisco","37.657013","-122.405516","1",
31
+ "Sunnyvale Caltrain","Sunnyvale Caltrain","121 W. Evelyn Avenue, Sunnyvale","37.377589","-122.030116","3",
32
+ "Tamien Caltrain","Tamien Caltrain","1355 Lick Avenue,San Jose","37.31168","-121.882087","4",
@@ -0,0 +1,131 @@
1
+ trip_id,route_id,service_id,trip_headsign,direction_id,block_id,shape_id
2
+ "101_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 101)","0",,"cal_sj_sf"
3
+ "102_20110701","ct_local_20110701","WD_20110701","San Jose (Train 102)","1",,"cal_sf_sj"
4
+ "103_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 103)","0",,"cal_tam_sf"
5
+ "104_20110701","ct_local_20110701","WD_20110701","Tamien (Train 104)","1",,"cal_sf_tam"
6
+ "134_20110701","ct_local_20110701","WD_20110701","San Jose (Train 134)","1",,"cal_sf_sj"
7
+ "135_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 135)","0",,"cal_sj_sf"
8
+ "138_20110701","ct_local_20110701","WD_20110701","San Jose (Train 138)","1",,"cal_sf_sj"
9
+ "139_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 139)","0",,"cal_sj_sf"
10
+ "142_20110701","ct_local_20110701","WD_20110701","San Jose (Train 142)","1",,"cal_sf_sj"
11
+ "143_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 143)","0",,"cal_sj_sf"
12
+ "146_20110701","ct_local_20110701","WD_20110701","San Jose (Train 146)","1",,"cal_sf_sj"
13
+ "147_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 147)","0",,"cal_sj_sf"
14
+ "150_20110701","ct_local_20110701","WD_20110701","San Jose (Train 150)","1",,"cal_sf_sj"
15
+ "151_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 151)","0",,"cal_sj_sf"
16
+ "154_20110701","ct_local_20110701","WD_20110701","San Jose (Train 154)","1",,"cal_sf_sj"
17
+ "155_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 155)","0",,"cal_sj_sf"
18
+ "158_20110701","ct_local_20110701","WD_20110701","Gilroy (Train 158)","1",,"cal_sf_gil"
19
+ "159_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 159)","0",,"cal_sj_sf"
20
+ "189_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 189)","0",,"cal_sj_sf"
21
+ "190_20110701","ct_local_20110701","WD_20110701","San Jose (Train 190)","1",,"cal_sf_sj"
22
+ "191_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 191)","0",,"cal_sj_sf"
23
+ "192_20110701","ct_local_20110701","WD_20110701","Tamien (Train 192)","1",,"cal_sf_tam"
24
+ "193_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 193)","0",,"cal_tam_sf"
25
+ "194_20110701","ct_local_20110701","WD_20110701","Tamien (Train 194)","1",,"cal_sf_tam"
26
+ "195_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 195)","0",,"cal_tam_sf"
27
+ "196_20110701","ct_local_20110701","WD_20110701","San Jose (Train 196)","1",,"cal_sf_sj"
28
+ "197_20110701","ct_local_20110701","WD_20110701","San Francisco (Train 197)","0",,"cal_sj_sf"
29
+ "198_20110701","ct_local_20110701","WD_20110701","San Jose (Train 198)","1",,"cal_sf_sj"
30
+ "206_20110701","ct_limited_20110701","WD_20110701","San Jose (Train 206)","1",,"cal_sf_sj"
31
+ "207_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 207)","0",,"cal_tam_sf"
32
+ "208_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 208)","1",,"cal_sf_tam"
33
+ "210_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 210)","1",,"cal_sf_tam"
34
+ "211_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 211)","0",,"cal_sj_sf"
35
+ "215_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 215)","0",,"cal_sj_sf"
36
+ "216_20110701","ct_limited_20110701","WD_20110701","San Jose (Train 216)","1",,"cal_sf_sj"
37
+ "217_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 217)","0",,"cal_gil_sf"
38
+ "218_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 218)","1",,"cal_sf_tam"
39
+ "220_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 220)","1",,"cal_sf_tam"
40
+ "221_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 221)","0",,"cal_gil_sf"
41
+ "225_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 225)","0",,"cal_sj_sf"
42
+ "226_20110701","ct_limited_20110701","WD_20110701","San Jose (Train 226)","1",,"cal_sf_sj"
43
+ "227_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 227)","0",,"cal_gil_sf"
44
+ "228_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 228)","1",,"cal_sf_tam"
45
+ "230_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 230)","1",,"cal_sf_tam"
46
+ "231_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 231)","0",,"cal_sj_sf"
47
+ "233_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 233)","0",,"cal_tam_sf"
48
+ "260_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 260)","1",,"cal_sf_tam"
49
+ "261_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 261)","0",,"cal_tam_sf"
50
+ "263_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 263)","0",,"cal_tam_sf"
51
+ "264_20110701","ct_limited_20110701","WD_20110701","San Jose (Train 264)","1",,"cal_sf_sj"
52
+ "266_20110701","ct_limited_20110701","WD_20110701","San Jose (Train 266)","1",,"cal_sf_sj"
53
+ "267_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 267)","0",,"cal_tam_sf"
54
+ "270_20110701","ct_limited_20110701","WD_20110701","Gilroy (Train 270)","1",,"cal_sf_gil"
55
+ "271_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 271)","0",,"cal_tam_sf"
56
+ "274_20110701","ct_limited_20110701","WD_20110701","San Jose (Train 274)","1",,"cal_sf_sj"
57
+ "275_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 275)","0",,"cal_sj_sf"
58
+ "276_20110701","ct_limited_20110701","WD_20110701","Gilroy (Train 276)","1",,"cal_sf_gil"
59
+ "277_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 277)","0",,"cal_tam_sf"
60
+ "280_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 280)","1",,"cal_sf_tam"
61
+ "281_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 281)","0",,"cal_tam_sf"
62
+ "284_20110701","ct_limited_20110701","WD_20110701","San Jose (Train 284)","1",,"cal_sf_sj"
63
+ "285_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 285)","0",,"cal_tam_sf"
64
+ "287_20110701","ct_limited_20110701","WD_20110701","San Francisco (Train 287)","0",,"cal_sj_sf"
65
+ "288_20110701","ct_limited_20110701","WD_20110701","Tamien (Train 288)","1",,"cal_sf_tam"
66
+ "305_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 305)","0",,"cal_sj_sf"
67
+ "309_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 309)","0",,"cal_tam_sf"
68
+ "312_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 312)","1",,"cal_sf_sj"
69
+ "313_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 313)","0",,"cal_sj_sf"
70
+ "314_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 314)","1",,"cal_sf_sj"
71
+ "319_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 319)","0",,"cal_tam_sf"
72
+ "322_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 322)","1",,"cal_sf_sj"
73
+ "323_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 323)","0",,"cal_sj_sf"
74
+ "324_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 324)","1",,"cal_sf_sj"
75
+ "329_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 329)","0",,"cal_tam_sf"
76
+ "332_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 332)","1",,"cal_sf_sj"
77
+ "362_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 362)","1",,"cal_sf_sj"
78
+ "365_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 365)","0",,"cal_sj_sf"
79
+ "368_20110701","ct_bullet_20110701","WD_20110701","Tamien (Train 368)","1",,"cal_sf_tam"
80
+ "369_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 369)","0",,"cal_sj_sf"
81
+ "372_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 372)","1",,"cal_sf_sj"
82
+ "373_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 373)","0",,"cal_sj_sf"
83
+ "378_20110701","ct_bullet_20110701","WD_20110701","Tamien (Train 378)","1",,"cal_sf_tam"
84
+ "379_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 379)","0",,"cal_sj_sf"
85
+ "382_20110701","ct_bullet_20110701","WD_20110701","San Jose (Train 382)","1",,"cal_sf_sj"
86
+ "383_20110701","ct_bullet_20110701","WD_20110701","San Francisco (Train 383)","0",,"cal_sj_sf"
87
+ "386_20110701","ct_bullet_20110701","WD_20110701","Tamien (Train 386)","1",,"cal_sf_tam"
88
+ "421_20110701","ct_local_20110701","ST_20110701","San Francisco (Train 421)","0",,"cal_sj_sf"
89
+ "422_20110701","ct_local_20110701","WE_20110701","San Jose (Train 422)","1",,"cal_sf_sj"
90
+ "423_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 423)","0",,"cal_sj_sf"
91
+ "424_20110701","ct_local_20110701","WE_20110701","San Jose (Train 424)","1",,"cal_sf_sj"
92
+ "425_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 425)","0",,"cal_sj_sf"
93
+ "426_20110701","ct_local_20110701","WE_20110701","San Jose (Train 426)","1",,"cal_sf_sj"
94
+ "427_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 427)","0",,"cal_sj_sf"
95
+ "428_20110701","ct_local_20110701","WE_20110701","San Jose (Train 428)","1",,"cal_sf_sj"
96
+ "429_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 429)","0",,"cal_sj_sf"
97
+ "430_20110701","ct_local_20110701","WE_20110701","San Jose (Train 430)","1",,"cal_sf_sj"
98
+ "431_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 431)","0",,"cal_sj_sf"
99
+ "432_20110701","ct_local_20110701","WE_20110701","San Jose (Train 432)","1",,"cal_sf_sj"
100
+ "433_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 433)","0",,"cal_sj_sf"
101
+ "434_20110701","ct_local_20110701","WE_20110701","San Jose (Train 434)","1",,"cal_sf_sj"
102
+ "435_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 435)","0",,"cal_sj_sf"
103
+ "436_20110701","ct_local_20110701","WE_20110701","San Jose (Train 436)","1",,"cal_sf_sj"
104
+ "437_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 437)","0",,"cal_sj_sf"
105
+ "438_20110701","ct_local_20110701","WE_20110701","San Jose (Train 438)","1",,"cal_sf_sj"
106
+ "439_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 439)","0",,"cal_sj_sf"
107
+ "440_20110701","ct_local_20110701","WE_20110701","San Jose (Train 440)","1",,"cal_sf_sj"
108
+ "441_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 441)","0",,"cal_sj_sf"
109
+ "442_20110701","ct_local_20110701","WE_20110701","San Jose (Train 442)","1",,"cal_sf_sj"
110
+ "443_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 443)","0",,"cal_sj_sf"
111
+ "444_20110701","ct_local_20110701","WE_20110701","San Jose (Train 444)","1",,"cal_sf_sj"
112
+ "445_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 445)","0",,"cal_sj_sf"
113
+ "446_20110701","ct_local_20110701","WE_20110701","San Jose (Train 446)","1",,"cal_sf_sj"
114
+ "447_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 447)","0",,"cal_sj_sf"
115
+ "448_20110701","ct_local_20110701","WE_20110701","San Jose (Train 448)","1",,"cal_sf_sj"
116
+ "449_20110701","ct_local_20110701","WE_20110701","San Francisco (Train 449)","0",,"cal_sj_sf"
117
+ "450_20110701","ct_local_20110701","ST_20110701","San Jose (Train 450)","1",,"cal_sf_sj"
118
+ "451_20110701","ct_local_20110701","ST_20110701","San Francisco (Train 451)","0",,"cal_sj_sf"
119
+ "454_20110701","ct_local_20110701","ST_20110701","San Jose (Train 454)","1",,"cal_sf_sj"
120
+ "801_20110701","ct_bullet_20110701","WE_20110701","San Francisco (Train 801)","0",,"cal_sj_sf"
121
+ "802_20110701","ct_bullet_20110701","WE_20110701","San Jose (Train 802)","1",,"cal_sf_sj"
122
+ "803_20110701","ct_bullet_20110701","WE_20110701","San Francisco (Train 803)","0",,"cal_sj_sf"
123
+ "804_20110701","ct_bullet_20110701","WE_20110701","San Jose (Train 804)","1",,"cal_sf_sj"
124
+ "219_20120220","ct_bullet_20120220","ST_20120220","San Francisco (Train 219)","0","","cal_sj_sf"
125
+ "501_20120220","ct_bullet_20120220","ST_20120220","San Francisco (Train 207)","0","","cal_sj_sf"
126
+ "502_20120220","ct_bullet_20120220","ST_20120220","San Jose (Train 502)","1","","cal_sf_sj"
127
+ "503_20120220","ct_bullet_20120220","ST_20120220","San Francisco (Train 503)","0",,"cal_gil_sf"
128
+ "504_20120220","ct_bullet_20120220","ST_20120220","San Jose (Train 504)","1","","cal_sf_gil"
129
+ "505_20120220","ct_bullet_20120220","ST_20120220","San Francisco (Train 505)","0",,"cal_gil_sf"
130
+ "506_20120220","ct_bullet_20120220","ST_20120220","San Jose (Train 506)","1","","cal_sf_sj"
131
+ "508_20120220","ct_bullet_20120220","ST_20120220","San Jose (Train 508)","1","","cal_sf_sj"
data/lib/caltrain.rb ADDED
@@ -0,0 +1,125 @@
1
+ class Caltrain
2
+ TIMES_PATH = File.expand_path('../../data/google_transit/stop_times.txt', __FILE__)
3
+ TRIPS_PATH = File.expand_path('../../data/google_transit/trips.txt', __FILE__)
4
+
5
+ class << self
6
+ def upcoming_departures(loc, dir)
7
+ times(loc, dir).select { |time| time > now }.sort
8
+ end
9
+
10
+ def next_departure(loc, dir)
11
+ times(loc, dir).find { |time| time > now }
12
+ end
13
+
14
+ def times(loc, dir)
15
+ @times ||= times_for_location(loc).select { |line| trip_ids_for_direction(dir).include?(line[0]) }.map {|i| i[1]}.sort
16
+ end
17
+
18
+ def trip_ids_for_direction(dir)
19
+ @trip_ids_for_direction ||= trips_for_time_of_week.select {|trip| trip[4] == (dir == :north ? '0' : '1') }.map(&:first)
20
+ end
21
+
22
+ def trips_for_time_of_week
23
+ @trips_for_time_of_week ||= all_trips.select { |trip| trip[2] =~ (weekend? ? /^WE/ : /^WD/) }
24
+ end
25
+
26
+ def times_for_location(loc)
27
+ @times_for_location ||= all_times.select { |arr| arr[3] =~ /^#{abbrevs[loc]}/ }
28
+ end
29
+
30
+ def all_times
31
+ @all_times ||= File.read(TIMES_PATH).split(/[\n\r]+/)[1..-1].map { |line| line.gsub('"', '').split(/,+/) }
32
+ end
33
+
34
+ def all_trips
35
+ @all_trips ||= File.read(TRIPS_PATH).split(/[\n\r]+/)[1..-1].map { |line| line.gsub('"', '').split(/,+/) }.sort
36
+ end
37
+
38
+ def weekend?
39
+ @weekend ||= (Time.now.saturday? || Time.now.sunday?)
40
+ end
41
+
42
+ def now
43
+ @now ||= Time.now.strftime('%H:%M:%S')
44
+ end
45
+
46
+ def abbrevs
47
+ {
48
+ :tt => "22nd Street",
49
+ :ath => "Atherton",
50
+ :bsh => "Bayshore",
51
+ :bel => "Belmont",
52
+ :bhl => "Blossom Hill",
53
+ :bdw => "Broadway",
54
+ :brl => "Burlingame",
55
+ :cal => "California Ave",
56
+ :cap => "Capitol",
57
+ :clp => "College Park",
58
+ :gil => "Gilroy",
59
+ :hay => "Hayward Park",
60
+ :hil => "Hillsdale",
61
+ :law => "Lawrence",
62
+ :men => "Menlo Park",
63
+ :mil => "Millbrae",
64
+ :mrg => "Morgan Hill",
65
+ :mv => "Mountain View",
66
+ :pa => "Palo Alto",
67
+ :rc => "Redwood City",
68
+ :sa => "San Antonio",
69
+ :sb => "San Bruno",
70
+ :scl => "San Carlos",
71
+ :sf => "San Francisco",
72
+ :sj => "San Jose",
73
+ :smt => "San Martin",
74
+ :sm => "San Mateo",
75
+ :sc => "Santa Clara",
76
+ :ssf => "So. San Francisco",
77
+ :sv => "Sunnyvale",
78
+ :tam => "Tamien"
79
+ }
80
+ end
81
+
82
+ def pretty_abbrevs
83
+ max_field_width = abbrevs.values.map(&:size).max
84
+
85
+ abbrevs.values.zip(abbrevs.keys).each do |name, abr|
86
+ puts "%#{max_field_width}s #{abr}" % name
87
+ end
88
+ end
89
+
90
+ def usage
91
+ puts "Usage:"
92
+ puts " caltrain <action> <location> <direction>"
93
+ puts " action => [ next | list ]"
94
+ puts ""
95
+ puts "Abbreviations:"
96
+ pretty_abbrevs
97
+ exit(1)
98
+ end
99
+
100
+ def actions
101
+ { :list => :upcoming_departures, :next => :next_departure }
102
+ end
103
+
104
+ def clean!
105
+ instance_variables.each { |i| instance_variable_set(i, nil) }
106
+ true
107
+ end
108
+
109
+ def run!(args)
110
+ begin
111
+ act, loc, dir = *args
112
+
113
+ if dir =~ /^n/
114
+ puts method(actions[act.to_sym]).call(loc.to_sym, :north)
115
+ elsif dir =~ /^s/
116
+ puts method(actions[act.to_sym]).call(loc.to_sym, :south)
117
+ else
118
+ raise
119
+ end
120
+ rescue
121
+ usage
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,95 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+ require 'mocha'
4
+
5
+ require File.expand_path('../lib/caltrain', File.dirname(__FILE__))
6
+
7
+ describe Caltrain do
8
+ before { Caltrain.stubs(:weekend?).returns(false) }
9
+
10
+ after { Caltrain.clean! }
11
+
12
+ describe 'trips' do
13
+ it 'should parse trips.txt depending on the day of the week' do
14
+ Caltrain.all_trips.first.must_equal(['101_20110701','ct_local_20110701','WD_20110701','San Francisco (Train 101)','0','cal_sj_sf'])
15
+ end
16
+ end
17
+
18
+ describe 'times' do
19
+ it 'should parse stop_times.txt correctly' do
20
+ line = ['280_20110701','18:50:00','18:50:00','Mountain View Caltrain','10']
21
+ Caltrain.all_times.must_include(line)
22
+ end
23
+
24
+ it 'should return times for a location' do
25
+ ['16:58:00', '08:13:00', '19:44:00'].each do |time|
26
+ Caltrain.times_for_location(:sv).map {|i| i[1]}.must_include(time)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#next_departure' do
32
+ it 'should return the next departure for north' do
33
+ Caltrain.stubs(:now).returns('08:05:12')
34
+ Caltrain.next_departure(:sv, :north).must_equal('08:13:00')
35
+ end
36
+
37
+ it 'should return the next departure for south' do
38
+ Caltrain.stubs(:now).returns('18:50:00')
39
+ Caltrain.next_departure(:sf, :south).must_equal('18:56:00')
40
+ end
41
+ end
42
+
43
+ describe '#upcoming_departures' do
44
+ it 'should return the upcoming trips for north' do
45
+ Caltrain.stubs(:now).returns('08:05:12')
46
+ upcoming1 = Caltrain.upcoming_departures(:sv, :north)
47
+ upcoming1.must_include('08:18:00')
48
+ upcoming1.wont_include('09:55:00')
49
+ upcoming1.wont_include('09:14:00')
50
+ end
51
+
52
+ it 'should return upcoming trips for south' do
53
+ Caltrain.stubs(:now).returns('18:30:10')
54
+ upcoming2 = Caltrain.upcoming_departures(:sf, :south)
55
+ upcoming2.must_include('18:33:00')
56
+ upcoming2.wont_include('18:44:00')
57
+ upcoming2.wont_include('18:59:00')
58
+ end
59
+ end
60
+
61
+ describe 'weekend versus weekday' do
62
+ it 'should pick weekday times' do
63
+ Caltrain.stubs(:now).returns('09:10:10')
64
+
65
+ Caltrain.next_departure(:mv, :north).must_equal('09:29:00')
66
+
67
+ upcoming = Caltrain.upcoming_departures(:mv, :north)
68
+ upcoming.must_include('16:37:00')
69
+ upcoming.wont_include('09:19:00')
70
+ end
71
+
72
+ it 'should pick weekend times' do
73
+ Caltrain.stubs(:weekend?).returns(true)
74
+ Caltrain.stubs(:now).returns('07:46:15')
75
+
76
+ Caltrain.next_departure(:sj, :north).must_equal('08:00:00')
77
+
78
+ upcoming = Caltrain.upcoming_departures(:sj, :south)
79
+ upcoming.must_include('12:00:00')
80
+ upcoming.wont_include('07:50:00')
81
+ end
82
+ end
83
+
84
+ describe 'excluding last stops' do
85
+ it 'should not include times for last sf stop' do
86
+ Caltrain.stubs(:now).returns('18:58:30')
87
+ Caltrain.next_departure(:sf, :south).must_equal('19:30:00')
88
+ end
89
+
90
+ it 'should not include times for last sj stop' do
91
+ Caltrain.stubs(:now).returns('08:12:10')
92
+ Caltrain.next_departure(:sj, :north).must_equal('08:22:00')
93
+ end
94
+ end
95
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: caltrain
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alex Genco
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mocha
16
+ requirement: &2151813220 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2151813220
25
+ description: A command line tool to easily figure out when the next caltrain leaves.
26
+ email: alexgenco@gmail.com
27
+ executables:
28
+ - caltrain
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - lib/caltrain.rb
33
+ - bin/caltrain
34
+ - data/google_transit/agency.txt
35
+ - data/google_transit/calendar.txt
36
+ - data/google_transit/calendar_dates.txt
37
+ - data/google_transit/fare_attributes.txt
38
+ - data/google_transit/fare_rules.txt
39
+ - data/google_transit/routes.txt
40
+ - data/google_transit/shapes.txt
41
+ - data/google_transit/stop_times.txt
42
+ - data/google_transit/stops.txt
43
+ - data/google_transit/trips.txt
44
+ - spec/caltrain_spec.rb
45
+ homepage: http://github.com/alexgenco/caltrain
46
+ licenses: []
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.17
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Get the next caltrain
69
+ test_files:
70
+ - spec/caltrain_spec.rb