caltrain 0.0.4
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.
- 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
|