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.
@@ -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