amtrak 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +6 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +3 -0
  6. data/README.markdown +3 -0
  7. data/Rakefile +23 -0
  8. data/amtrak.gemspec +29 -0
  9. data/lib/amtrak.rb +14 -0
  10. data/lib/amtrak/train_fetcher.rb +39 -0
  11. data/lib/amtrak/train_fetcher/main_page.rb +70 -0
  12. data/lib/amtrak/train_fetcher/train_page.rb +41 -0
  13. data/lib/amtrak/train_parser.rb +90 -0
  14. data/lib/amtrak/version.rb +6 -0
  15. data/spec/amtrak/train_fetcher/main_page_spec.rb +75 -0
  16. data/spec/amtrak/train_fetcher/train_page_spec.rb +37 -0
  17. data/spec/amtrak/train_fetcher_spec.rb +59 -0
  18. data/spec/amtrak/train_parser_spec.rb +230 -0
  19. data/spec/amtrak_spec.rb +243 -0
  20. data/spec/fixtures/html/pvd_to_bby.html +2401 -0
  21. data/spec/fixtures/vcr/Amtrak/_get/returns_a_list_of_train_times.yml +1469 -0
  22. data/spec/fixtures/vcr/Amtrak_TrainFetcher/_get/does_the_same_as_get.yml +1467 -0
  23. data/spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_a_valid_date_and_invalid_train_stations/does_not_include_various_classes_and_includes_an_error.yml +843 -0
  24. data/spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_a_valid_date_and_train_stations/includes_various_classes.yml +1467 -0
  25. data/spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_an_invalid_date_and_valid_train_stations/does_not_include_various_classes_and_includes_an_error.yml +838 -0
  26. data/spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_session_id/pulls_the_session_id_from_the_cookies.yml +1082 -0
  27. data/spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_more_than_one_page_exists_on_the_website/returns_1.yml +1076 -0
  28. data/spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_more_than_one_page_exists_on_the_website/returns_2.yml +1074 -0
  29. data/spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_only_one_page_exists_on_the_website/returns_1.yml +1082 -0
  30. data/spec/fixtures/vcr/Amtrak_TrainFetcher_TrainPage/_get/when_it_works/includes_various_classes.yml +247 -0
  31. data/spec/spec_helper.rb +18 -0
  32. data/spec/support/vcr.rb +10 -0
  33. metadata +206 -0
@@ -0,0 +1,247 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://tickets.amtrak.com/itd/amtrak/TrainStatusRequest?_trainstatuspage=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Cookie:
11
+ - JSESSIONID=0000ITjAiGUWm-mBBpAyeGZ43Rv:187j4ddrq
12
+ response:
13
+ status:
14
+ code: 200
15
+ message:
16
+ headers:
17
+ Content-Length:
18
+ - '19020'
19
+ Content-Type:
20
+ - text/html;charset=UTF-8
21
+ Set-Cookie:
22
+ - TS3f5eae=2750936e9044a3889e216922572f4d30ce35612c583388345478d0df; Path=/
23
+ X-powered-by:
24
+ - Servlet/3.0
25
+ Content-Language:
26
+ - en-US
27
+ X-frame-options:
28
+ - SAMEORIGIN
29
+ Expires:
30
+ - Tue, 01 Jul 2003, 00:00:00 GMT
31
+ Date:
32
+ - Fri, 28 Nov 2014 19:45:36 GMT
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: UTF-8
37
+ string: "\r\n\r\n\r\n<table id=\"status_results\" cellspacing=\"0\" >\r\n<thead>\r\n<tr>\r\n<th
38
+ class=\"service\" scope=\"col\">Service</th>\r\n<th class=\"vector\" scope=\"col\">&nbsp;</th>\r\n<th
39
+ class=\"city\" scope=\"col\">City</th>\r\n<th class=\"scheduled\" scope=\"col\">Scheduled</th>\r\n<th
40
+ class=\"act_est\" scope=\"col\">Actual /<br>Estimate</th>\r\n<th class=\"status\"
41
+ scope=\"col\">Status</th>\r\n</tr>\r\n<tr class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n</thead>\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
42
+ class=\"status_result departs whitebackground\">\r\n\r\n<th class=\"service\"
43
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">172</div>\r\n<div
44
+ class=\"route_name\">Northeast Regional</div>\r\n\r\n</th>\r\n\r\n\r\n<th
45
+ class=\"vector\" scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!--
46
+ mp_trans_disable_start -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
47
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
48
+ class=\"time\">2:23 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
49
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n<div
50
+ class=\"time\">2:36 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
51
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\nDeparted:
52
+ \ 13 minutes late.<br/>\r\n\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
53
+ class=\"status_result arrives whitebackground\">\r\n\r\n<th class=\"vector\"
54
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
55
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
56
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
57
+ class=\"time\">3:09 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
58
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
59
+ class=\"time\">3:07 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
60
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
61
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
62
+ Time: 2 minutes early.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
63
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
64
+ class=\"status_result departs greybackground\">\r\n\r\n<th class=\"service\"
65
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">2158</div>\r\n<div
66
+ class=\"route_name\">Acela Express</div>\r\n\r\n</th>\r\n\r\n\r\n<th class=\"vector\"
67
+ scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
68
+ -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
69
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
70
+ class=\"time\">2:54 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
71
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
72
+ class=\"time\">3:02 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
73
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
74
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\nEstimated Departure
75
+ Time: 8 minutes late.<br/>\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
76
+ class=\"status_result arrives greybackground\">\r\n\r\n<th class=\"vector\"
77
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
78
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
79
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
80
+ class=\"time\">3:36 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
81
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
82
+ class=\"time\">3:39 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
83
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
84
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
85
+ Time: 3 minutes late.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
86
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
87
+ class=\"status_result departs whitebackground\">\r\n\r\n<th class=\"service\"
88
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">86</div>\r\n<div
89
+ class=\"route_name\">Northeast Regional</div>\r\n\r\n</th>\r\n\r\n\r\n<th
90
+ class=\"vector\" scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!--
91
+ mp_trans_disable_start -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
92
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
93
+ class=\"time\">3:47 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
94
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
95
+ class=\"time\">3:48 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
96
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
97
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\nEstimated Departure
98
+ Time: 1 minute late.<br/>\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
99
+ class=\"status_result arrives whitebackground\">\r\n\r\n<th class=\"vector\"
100
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
101
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
102
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
103
+ class=\"time\">4:28 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
104
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
105
+ class=\"time\">4:17 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
106
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
107
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
108
+ Time: 11 minutes early.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
109
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
110
+ class=\"status_result departs greybackground\">\r\n\r\n<th class=\"service\"
111
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">174</div>\r\n<div
112
+ class=\"route_name\">Northeast Regional</div>\r\n\r\n</th>\r\n\r\n\r\n<th
113
+ class=\"vector\" scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!--
114
+ mp_trans_disable_start -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
115
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
116
+ class=\"time\">5:30 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
117
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
118
+ class=\"time\">5:31 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
119
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
120
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\nEstimated Departure
121
+ Time: 1 minute late.<br/>\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
122
+ class=\"status_result arrives greybackground\">\r\n\r\n<th class=\"vector\"
123
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
124
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
125
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
126
+ class=\"time\">6:25 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
127
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
128
+ class=\"time\">6:00 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
129
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
130
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
131
+ Time: 25 minutes early.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
132
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
133
+ class=\"status_result departs whitebackground\">\r\n\r\n<th class=\"service\"
134
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">2164</div>\r\n<div
135
+ class=\"route_name\">Acela Express</div>\r\n\r\n</th>\r\n\r\n\r\n<th class=\"vector\"
136
+ scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
137
+ -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
138
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
139
+ class=\"time\">5:50 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
140
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
141
+ class=\"time\">5:51 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
142
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
143
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\nEstimated Departure
144
+ Time: 1 minute late.<br/>\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
145
+ class=\"status_result arrives whitebackground\">\r\n\r\n<th class=\"vector\"
146
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
147
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
148
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
149
+ class=\"time\">6:34 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
150
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
151
+ class=\"time\">6:28 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
152
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
153
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
154
+ Time: 6 minutes early.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
155
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
156
+ class=\"status_result departs greybackground\">\r\n\r\n<th class=\"service\"
157
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">176</div>\r\n<div
158
+ class=\"route_name\">Northeast Regional</div>\r\n\r\n</th>\r\n\r\n\r\n<th
159
+ class=\"vector\" scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!--
160
+ mp_trans_disable_start -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
161
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
162
+ class=\"time\">7:19 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
163
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
164
+ class=\"time\">7:25 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
165
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
166
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\nEstimated Departure
167
+ Time: 6 minutes late.<br/>\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
168
+ class=\"status_result arrives greybackground\">\r\n\r\n<th class=\"vector\"
169
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
170
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
171
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
172
+ class=\"time\">8:06 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
173
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
174
+ class=\"time\">7:54 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
175
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
176
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
177
+ Time: 12 minutes early.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
178
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
179
+ class=\"status_result departs whitebackground\">\r\n\r\n<th class=\"service\"
180
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">2168</div>\r\n<div
181
+ class=\"route_name\">Acela Express</div>\r\n\r\n</th>\r\n\r\n\r\n<th class=\"vector\"
182
+ scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
183
+ -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
184
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
185
+ class=\"time\">7:56 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
186
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
187
+ class=\"time\">7:57 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
188
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
189
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\nEstimated Departure
190
+ Time: 1 minute late.<br/>\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
191
+ class=\"status_result arrives whitebackground\">\r\n\r\n<th class=\"vector\"
192
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
193
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
194
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
195
+ class=\"time\">8:38 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
196
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
197
+ class=\"time\">8:34 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
198
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
199
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
200
+ Time: 4 minutes early.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
201
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
202
+ class=\"status_result departs greybackground\">\r\n\r\n<th class=\"service\"
203
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">94</div>\r\n<div
204
+ class=\"route_name\">Northeast Regional</div>\r\n\r\n</th>\r\n\r\n\r\n<th
205
+ class=\"vector\" scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!--
206
+ mp_trans_disable_start -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
207
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
208
+ class=\"time\">9:16 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
209
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
210
+ class=\"time\">9:17 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
211
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
212
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\nEstimated Departure
213
+ Time: 1 minute late.<br/>\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
214
+ class=\"status_result arrives greybackground\">\r\n\r\n<th class=\"vector\"
215
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
216
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
217
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
218
+ class=\"time\">10:02 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
219
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n<div
220
+ class=\"time\">9:46 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
221
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n<I>(estimated)</I>\r\n\r\n\r\n\r\n</td>\r\n<td
222
+ class=\"darkbluetrainstatusbackground\">\r\n\r\n\r\n\r\nEstimated Arrival
223
+ Time: 16 minutes early.<br/>\r\n\r\n\r\n\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n<tr
224
+ class=\"spacer\"><td colspan=\"6\">&nbsp;</td></tr>\r\n\r\n\r\n\r\n<tbody>\r\n\r\n\r\n<tr
225
+ class=\"status_result departs whitebackground\">\r\n\r\n<th class=\"service\"
226
+ scope=\"rowgroup\" rowspan=\"2\">\r\n<div class=\"route_num\">2172</div>\r\n<div
227
+ class=\"route_name\">Acela Express</div>\r\n\r\n</th>\r\n\r\n\r\n<th class=\"vector\"
228
+ scope=\"row\">\r\nFrom\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
229
+ -->Providence, RI (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=PVD','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">PVD</a>)<!--
230
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
231
+ class=\"time\">9:54 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
232
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n&nbsp;\r\n\r\n</td>\r\n<td
233
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\n\r\n\r\nThe scheduled
234
+ departure time is 9:54 pm. Presently, no further information is available.
235
+ Please check back later for updated information.<br/>\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n\r\n<tr
236
+ class=\"status_result arrives whitebackground\">\r\n\r\n<th class=\"vector\"
237
+ scope=\"row\">\r\nTo\r\n</th>\r\n<td class=\"city\">\r\n<!-- mp_trans_disable_start
238
+ -->Boston, MA -<br> Back Bay (<a href=\"javascript:var child=window.open('http://www.amtrak.com/servlet/Satellite?SnippetName=IBLegacy&pagename=am/AM_Snippet_C/SnippetWrapper&code=BBY','station','directories=0,dependent=1,menubar=0,top=20,left=20,width=680,height=600,scrollbars=1');child.focus();\">BBY</a>)<!--
239
+ mp_trans_disable_end -->\r\n</td>\r\n<td class=\"scheduled\">\r\n\r\n\r\n<div
240
+ class=\"time\">10:35 pm</div>\r\n\r\n<div class=\"date\" style=\"white-space:
241
+ nowrap;\">Fri Nov 28, 2014</div>\r\n\r\n\r\n</td>\r\n<td class=\"act_est\">\r\n\r\n\r\n\r\n&nbsp;\r\n\r\n</td>\r\n<td
242
+ class=\"lightbluetrainstatusbackground\">\r\n\r\n\r\n\r\n\r\n\r\n\r\nThe scheduled
243
+ arrival time is 10:35 pm. Presently, no further information is available.
244
+ Please check back later for updated information.<br/>\r\n\r\n\r\n</td>\r\n</tr>\r\n\r\n</tbody>\r\n\r\n\r\n\r\n</table>\r\n\r\n"
245
+ http_version:
246
+ recorded_at: Fri, 28 Nov 2014 19:45:36 GMT
247
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,18 @@
1
+ require 'simplecov'
2
+ require 'pry'
3
+ require 'rspec'
4
+
5
+ SimpleCov.start do
6
+ add_filter '/spec/'
7
+ end
8
+
9
+ require 'amtrak'
10
+
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
+
13
+ RSpec.configure do |config|
14
+ config.color = true
15
+ config.mock_with :rspec
16
+ config.formatter = :documentation
17
+ config.tty = true
18
+ end
@@ -0,0 +1,10 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.allow_http_connections_when_no_cassette = false
5
+ c.cassette_library_dir = File.join(
6
+ File.dirname(__FILE__), '..', 'fixtures', 'vcr'
7
+ )
8
+ c.hook_into :excon
9
+ c.configure_rspec_metadata!
10
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amtrak
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Todd Lunter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: excon
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.41.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.41.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.25.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.25.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.8.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.8.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: vcr
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 2.9.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 2.9.2
125
+ description: Scrape train times from Amtrak.com
126
+ email:
127
+ - tlunter@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - .gitignore
133
+ - .rubocop.yml
134
+ - .travis.yml
135
+ - Gemfile
136
+ - README.markdown
137
+ - Rakefile
138
+ - amtrak.gemspec
139
+ - lib/amtrak.rb
140
+ - lib/amtrak/train_fetcher.rb
141
+ - lib/amtrak/train_fetcher/main_page.rb
142
+ - lib/amtrak/train_fetcher/train_page.rb
143
+ - lib/amtrak/train_parser.rb
144
+ - lib/amtrak/version.rb
145
+ - spec/amtrak/train_fetcher/main_page_spec.rb
146
+ - spec/amtrak/train_fetcher/train_page_spec.rb
147
+ - spec/amtrak/train_fetcher_spec.rb
148
+ - spec/amtrak/train_parser_spec.rb
149
+ - spec/amtrak_spec.rb
150
+ - spec/fixtures/html/pvd_to_bby.html
151
+ - spec/fixtures/vcr/Amtrak/_get/returns_a_list_of_train_times.yml
152
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/does_the_same_as_get.yml
153
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_a_valid_date_and_invalid_train_stations/does_not_include_various_classes_and_includes_an_error.yml
154
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_a_valid_date_and_train_stations/includes_various_classes.yml
155
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_an_invalid_date_and_valid_train_stations/does_not_include_various_classes_and_includes_an_error.yml
156
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_session_id/pulls_the_session_id_from_the_cookies.yml
157
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_more_than_one_page_exists_on_the_website/returns_1.yml
158
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_more_than_one_page_exists_on_the_website/returns_2.yml
159
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_only_one_page_exists_on_the_website/returns_1.yml
160
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_TrainPage/_get/when_it_works/includes_various_classes.yml
161
+ - spec/spec_helper.rb
162
+ - spec/support/vcr.rb
163
+ homepage: https://github.com/tlunter/amtrak_gem
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.0.14
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Scrape train times from Amtrak.com
187
+ test_files:
188
+ - spec/amtrak/train_fetcher/main_page_spec.rb
189
+ - spec/amtrak/train_fetcher/train_page_spec.rb
190
+ - spec/amtrak/train_fetcher_spec.rb
191
+ - spec/amtrak/train_parser_spec.rb
192
+ - spec/amtrak_spec.rb
193
+ - spec/fixtures/html/pvd_to_bby.html
194
+ - spec/fixtures/vcr/Amtrak/_get/returns_a_list_of_train_times.yml
195
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/does_the_same_as_get.yml
196
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_a_valid_date_and_invalid_train_stations/does_not_include_various_classes_and_includes_an_error.yml
197
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_a_valid_date_and_train_stations/includes_various_classes.yml
198
+ - spec/fixtures/vcr/Amtrak_TrainFetcher/_get/given_an_invalid_date_and_valid_train_stations/does_not_include_various_classes_and_includes_an_error.yml
199
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_session_id/pulls_the_session_id_from_the_cookies.yml
200
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_more_than_one_page_exists_on_the_website/returns_1.yml
201
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_more_than_one_page_exists_on_the_website/returns_2.yml
202
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_MainPage/_total_pages/when_only_one_page_exists_on_the_website/returns_1.yml
203
+ - spec/fixtures/vcr/Amtrak_TrainFetcher_TrainPage/_get/when_it_works/includes_various_classes.yml
204
+ - spec/spec_helper.rb
205
+ - spec/support/vcr.rb
206
+ has_rdoc: