caltrain 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/caltrain +5 -0
- data/data/google_transit/agency.txt +2 -0
- data/data/google_transit/calendar.txt +5 -0
- data/data/google_transit/calendar_dates.txt +6 -0
- data/data/google_transit/fare_attributes.txt +13 -0
- data/data/google_transit/fare_rules.txt +181 -0
- data/data/google_transit/routes.txt +7 -0
- data/data/google_transit/shapes.txt +2678 -0
- data/data/google_transit/stop_times.txt +2265 -0
- data/data/google_transit/stops.txt +32 -0
- data/data/google_transit/trips.txt +131 -0
- data/lib/caltrain.rb +125 -0
- data/spec/caltrain_spec.rb +95 -0
- metadata +70 -0
@@ -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
|