gtfs 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +13 -2
  3. data/Gemfile +11 -8
  4. data/Gemfile.lock +41 -29
  5. data/LICENSE +21 -0
  6. data/README.md +15 -17
  7. data/Rakefile +2 -0
  8. data/gtfs.gemspec +5 -2
  9. data/lib/gtfs.rb +1 -0
  10. data/lib/gtfs/agency.rb +3 -3
  11. data/lib/gtfs/calendar.rb +2 -2
  12. data/lib/gtfs/calendar_date.rb +2 -2
  13. data/lib/gtfs/fare_attribute.rb +3 -3
  14. data/lib/gtfs/fare_rule.rb +2 -2
  15. data/lib/gtfs/feed_info.rb +19 -0
  16. data/lib/gtfs/frequency.rb +2 -2
  17. data/lib/gtfs/model.rb +28 -9
  18. data/lib/gtfs/route.rb +2 -2
  19. data/lib/gtfs/shape.rb +2 -2
  20. data/lib/gtfs/source.rb +19 -11
  21. data/lib/gtfs/stop.rb +3 -3
  22. data/lib/gtfs/stop_time.rb +3 -3
  23. data/lib/gtfs/transfer.rb +2 -2
  24. data/lib/gtfs/trip.rb +3 -3
  25. data/lib/gtfs/url_source.rb +1 -1
  26. data/lib/gtfs/version.rb +1 -2
  27. data/spec/fixtures/cassettes/invalid_gtfs_uri.yml +58 -65
  28. data/spec/fixtures/cassettes/valid_gtfs_uri.yml +55 -122
  29. data/spec/gtfs/agency_spec.rb +2 -2
  30. data/spec/gtfs/calendar_date_spec.rb +1 -1
  31. data/spec/gtfs/calendar_spec.rb +1 -1
  32. data/spec/gtfs/fare_attribute_spec.rb +14 -0
  33. data/spec/gtfs/fare_rule_spec.rb +13 -0
  34. data/spec/gtfs/feed_info_spec.rb +14 -0
  35. data/spec/gtfs/frequency_spec.rb +14 -0
  36. data/spec/gtfs/route_spec.rb +1 -1
  37. data/spec/gtfs/shape_spec.rb +1 -1
  38. data/spec/gtfs/source_spec.rb +23 -11
  39. data/spec/gtfs/stop_spec.rb +1 -1
  40. data/spec/gtfs/stop_time_spec.rb +2 -2
  41. data/spec/gtfs/transfer_spec.rb +14 -0
  42. data/spec/gtfs/trip_spec.rb +2 -2
  43. data/spec/gtfs/url_source_spec.rb +4 -4
  44. data/spec/spec_helper.rb +7 -3
  45. data/spec/support/model_shared_examples.rb +46 -22
  46. metadata +46 -52
data/lib/gtfs/stop.rb CHANGED
@@ -3,7 +3,7 @@ module GTFS
3
3
  include GTFS::Model
4
4
 
5
5
  has_required_attrs :id, :name, :lat, :lon
6
- has_optional_attrs :code, :desc, :zone_id, :url, :location_type, :parent_station, :timezone
6
+ has_optional_attrs :code, :desc, :zone_id, :url, :location_type, :parent_station, :timezone, :wheelchair_boarding
7
7
  column_prefix :stop_
8
8
  attr_accessor *attrs
9
9
 
@@ -14,8 +14,8 @@ module GTFS
14
14
  LOCATION_TYPE_STOP = 0
15
15
  LOCATION_TYPE_STATION = 1
16
16
 
17
- def self.parse_stops(data)
18
- return parse_models(data)
17
+ def self.parse_stops(data, options={})
18
+ return parse_models(data, options)
19
19
  end
20
20
  end
21
21
  end
@@ -3,15 +3,15 @@ module GTFS
3
3
  include GTFS::Model
4
4
 
5
5
  has_required_attrs :trip_id, :arrival_time, :departure_time, :stop_id, :stop_sequence
6
- has_optional_attrs :stop_headsign, :pickup_type, :drop_off_type, :shape_dist_traveled
6
+ has_optional_attrs :stop_headsign, :pickup_type, :drop_off_type, :shape_dist_traveled, :timepoint
7
7
  attr_accessor *attrs
8
8
 
9
9
  collection_name :stop_times
10
10
  required_file true
11
11
  uses_filename 'stop_times.txt'
12
12
 
13
- def self.parse_stop_times(data)
14
- return parse_models(data)
13
+ def self.parse_stop_times(data, options={})
14
+ return parse_models(data, options)
15
15
  end
16
16
  end
17
17
  end
data/lib/gtfs/transfer.rb CHANGED
@@ -12,8 +12,8 @@ module GTFS
12
12
  required_file false
13
13
  uses_filename 'transfers.txt'
14
14
 
15
- def self.parse_transfers(data)
16
- return parse_models(data)
15
+ def self.parse_transfers(data, options={})
16
+ return parse_models(data, options)
17
17
  end
18
18
  end
19
19
  end
data/lib/gtfs/trip.rb CHANGED
@@ -3,7 +3,7 @@ module GTFS
3
3
  include GTFS::Model
4
4
 
5
5
  has_required_attrs :route_id, :service_id, :id
6
- has_optional_attrs :headsign, :short_name, :direction_id, :block_id, :shape_id
6
+ has_optional_attrs :headsign, :short_name, :direction_id, :block_id, :shape_id, :wheelchair_accessible, :bikes_allowed
7
7
  attr_accessor *attrs
8
8
 
9
9
  column_prefix :trip_
@@ -12,8 +12,8 @@ module GTFS
12
12
  required_file true
13
13
  uses_filename 'trips.txt'
14
14
 
15
- def self.parse_trips(data)
16
- return parse_models(data)
15
+ def self.parse_trips(data, options={})
16
+ return parse_models(data, options)
17
17
  end
18
18
  end
19
19
  end
@@ -6,7 +6,7 @@ module GTFS
6
6
 
7
7
  def load_archive(source_url)
8
8
  Dir.mktmpdir do |tmp|
9
- file_name = File.join(tmp, "/gtfs_temp_#{Time.now}.zip")
9
+ file_name = File.join(tmp, "/gtfs_temp_#{Time.now.strftime('%Y%jT%H%M%S%z')}.zip")
10
10
  uri = URI.parse(source_url)
11
11
  response = Net::HTTP.get_response(uri)
12
12
  open(file_name, 'wb') do |file|
data/lib/gtfs/version.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  module GTFS
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
4
-
@@ -1,70 +1,63 @@
1
1
  ---
2
- - !ruby/struct:VCR::HTTPInteraction
3
- request: !ruby/struct:VCR::Request
4
- method: :get
5
- uri: http://www.edschmalzle.com:80/gtfs.zip
6
- body: !!null
7
- headers: !!null
8
- response: !ruby/struct:VCR::Response
9
- status: !ruby/struct:VCR::ResponseStatus
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://example.org/gtfs.zip
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - example.org
18
+ response:
19
+ status:
10
20
  code: 404
11
21
  message: Not Found
12
22
  headers:
13
- date:
14
- - Wed, 18 Jan 2012 05:04:53 GMT
15
- server:
16
- - Apache
17
- vary:
18
- - Cookie,Accept-Encoding
19
- x-pingback:
20
- - http://www.edschmalzle.com/xmlrpc.php
21
- expires:
22
- - Wed, 11 Jan 1984 05:00:00 GMT
23
- cache-control:
24
- - no-cache, must-revalidate, max-age=0
25
- pragma:
26
- - no-cache
27
- last-modified:
28
- - Wed, 18 Jan 2012 05:04:54 GMT
29
- transfer-encoding:
30
- - chunked
31
- content-type:
23
+ Age:
24
+ - '164717'
25
+ Cache-Control:
26
+ - max-age=604800
27
+ Content-Type:
32
28
  - text/html; charset=UTF-8
33
- body: ! "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html
34
- xmlns=\"http://www.w3.org/1999/xhtml\" dir=\"ltr\" lang=\"en-US\">\r\n<head
35
- profile=\"http://gmpg.org/xfn/11\">\r\n<meta http-equiv=\"Content-Type\" content=\"text/html;
36
- charset=UTF-8\" />\r\n<title>Ed Schmalzle &raquo; Page not found</title>\r\n<link
37
- rel=\"stylesheet\" href=\"http://www.edschmalzle.com/wp-content/themes/shallowgrunge/shallowgrunge/style.css\"
38
- type=\"text/css\" media=\"screen\" />\r\n<link rel=\"alternate\" type=\"application/rss+xml\"
39
- title=\"Ed Schmalzle RSS Feed\" href=\"http://www.edschmalzle.com/feed/\" />\r\n<link
40
- rel=\"pingback\" href=\"http://www.edschmalzle.com/xmlrpc.php\" />\r\n<script
41
- type='text/javascript' src='http://www.edschmalzle.com/wp-includes/js/jquery/jquery.js?ver=1.7.1'></script>\n<script
42
- type='text/javascript' src='http://www.edschmalzle.com/wp-content/plugins/google-analyticator/external-tracking.min.js?ver=6.2'></script>\n<link
43
- rel=\"EditURI\" type=\"application/rsd+xml\" title=\"RSD\" href=\"http://www.edschmalzle.com/xmlrpc.php?rsd\"
44
- />\n<link rel=\"wlwmanifest\" type=\"application/wlwmanifest+xml\" href=\"http://www.edschmalzle.com/wp-includes/wlwmanifest.xml\"
45
- /> \n<meta name=\"generator\" content=\"WordPress 3.3.1\" />\n<!-- Google Analytics
46
- Tracking by Google Analyticator 6.2: http://ronaldheft.com/code/analyticator/
47
- -->\n<script type=\"text/javascript\">\n\tvar analyticsFileTypes = [''];\n\tvar
48
- analyticsEventTracking = 'enabled';\n</script>\n<script type=\"text/javascript\">\n\tvar
49
- _gaq = _gaq || [];\n\t_gaq.push(['_setAccount', 'UA-378745-4']);\n\t_gaq.push(['_trackPageview']);\n\t_gaq.push(['_trackPageLoadTime']);\n\n\t(function()
50
- {\n\t\tvar ga = document.createElement('script'); ga.type = 'text/javascript';
51
- ga.async = true;\n\t\tga.src = ('https:' == document.location.protocol ? 'https://ssl'
52
- : 'http://www') + '.google-analytics.com/ga.js';\n\t\tvar s = document.getElementsByTagName('script')[0];
53
- s.parentNode.insertBefore(ga, s);\n\t})();\n</script>\n</head>\r\n<body>\r\n<div
54
- id=\"wrapper\">\r\n<div id=\"wrapper2\">\r\n\r\n<div id=\"header\">\r\n\t<div
55
- id=\"logo\">\r\n\t\t<h1><a href=\"http://www.edschmalzle.com/\">Ed Schmalzle</a></h1>\r\n\t\t<p></p>\r\n\t</div>\r\n</div>\r\n<!--
56
- end #header -->\r\n<div id=\"menu\">\r\n\t<ul>\r\n\t\t<li class=\"page_item\"><a
57
- href=\"http://www.edschmalzle.com/\">Blog</a></li>\r\n\t\t<li class=\"page_item
58
- page-item-60\"><a href=\"http://www.edschmalzle.com/projects/\">Projects</a></li>\n<li
59
- class=\"page_item page-item-5\"><a href=\"http://www.edschmalzle.com/resume/\">Resume</a></li>\n<li
60
- class=\"page_item page-item-6\"><a href=\"http://www.edschmalzle.com/contact/\">Contact</a></li>\n<li
61
- class=\"page_item page-item-75\"><a href=\"http://www.edschmalzle.com/archives/\">Archives</a></li>\n\t\t<li
62
- class=\"page_item\"><a href=\"http://www.edschmalzle.com/feed/\">RSS</a></li>\r\n\t</ul>\r\n</div>\r\n<!--
63
- end #menu -->\r\n</div>\r\n<hr />\r\n\r\n<div id=\"page\">\r\n\t<div id=\"content\"
64
- class=\"narrowcolumn\">\r\n\r\n\t\t<h2 class=\"center\">Error 404 - Not Found</h2>\r\n\r\n\t</div>\r\n\r\n<div
65
- id=\"sidebar\">\r\n\t<ul>\r\n\t</ul>\r\n</div>\r\n<!-- end #sidebar -->\r\n\r\n<div
66
- style=\"clear: both;\">&nbsp;</div>\r\n</div>\r\n<!-- end #page -->\r\n<hr />\r\n</div>\r\n</div>\r\n<!--
67
- end #footer -->\r\n<div id=\"footer\">\r\n\t<div>\r\n\t\t<p>Copyright (c) 2008\r\n\t\t\tEd
68
- Schmalzle\t\t\tAll rights reserved. Design by <a href=\"http://www.freewpthemes.net/\">Free
69
- WordPress Themes</a> &nbsp;&bull;&nbsp;\r\n\t\t\tPowered by <a href=\"http://wordpress.org/\">WordPress</a></p>\r\n\t</div>\r\n</div>\r\n</body></html>"
70
- http_version: '1.1'
29
+ Date:
30
+ - Fri, 23 Oct 2020 23:02:49 GMT
31
+ Expires:
32
+ - Fri, 30 Oct 2020 23:02:49 GMT
33
+ Last-Modified:
34
+ - Thu, 22 Oct 2020 01:17:32 GMT
35
+ Server:
36
+ - ECS (oxr/837A)
37
+ Vary:
38
+ - Accept-Encoding
39
+ X-Cache:
40
+ - 404-HIT
41
+ Content-Length:
42
+ - '648'
43
+ body:
44
+ encoding: ASCII-8BIT
45
+ string: "<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n
46
+ \ <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html;
47
+ charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width,
48
+ initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color:
49
+ #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system,
50
+ system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\",
51
+ Helvetica, Arial, sans-serif;\n \n }\n div {\n width:
52
+ 600px;\n margin: 5em auto;\n padding: 2em;\n background-color:
53
+ #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px
54
+ rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n
55
+ \ text-decoration: none;\n }\n @media (max-width: 700px) {\n div
56
+ {\n margin: 0 auto;\n width: auto;\n }\n }\n
57
+ \ </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n
58
+ \ <p>This domain is for use in illustrative examples in documents. You may
59
+ use this\n domain in literature without prior coordination or asking for
60
+ permission.</p>\n <p><a href=\"https://www.iana.org/domains/example\">More
61
+ information...</a></p>\n</div>\n</body>\n</html>\n"
62
+ recorded_at: Fri, 23 Oct 2020 23:02:49 GMT
63
+ recorded_with: VCR 6.0.0
@@ -1,127 +1,60 @@
1
1
  ---
2
- - !ruby/struct:VCR::HTTPInteraction
3
- request: !ruby/struct:VCR::Request
4
- method: :get
5
- uri: http://dl.dropbox.com:80/u/416235/work/valid_gtfs.zip
6
- body: !!null
7
- headers: !!null
8
- response: !ruby/struct:VCR::Response
9
- status: !ruby/struct:VCR::ResponseStatus
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://developers.google.com/transit/gtfs/examples/sample-feed.zip
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - developers.google.com
18
+ response:
19
+ status:
10
20
  code: 200
11
21
  message: OK
12
22
  headers:
13
- server:
14
- - nginx/1.0.14
15
- date:
16
- - Fri, 13 Apr 2012 21:52:30 GMT
17
- content-type:
23
+ Content-Type:
18
24
  - application/zip
19
- connection:
20
- - keep-alive
21
- content-length:
22
- - '4147'
23
- x-robots-tag:
24
- - noindex,nofollow
25
- accept-ranges:
26
- - bytes
27
- etag:
28
- - 1380046134n
29
- pragma:
30
- - public
31
- cache-control:
32
- - max-age=0
33
- body: !binary |-
34
- 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
- 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
- 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
- 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
- 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
- AGNhbGVuZGFyLnR4dFVUCQADEOkeT5idiE91eAsAAQT1AQAABBQAAABti0EK
40
- gDAMBO8Ff9KDVSj4GikmYg9WSFPF32vSgx7KBnZgJxnpjAvOEex+JAi35YJZ
41
- +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
- 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
- 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
- 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
- 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
- vlAHT5idiE91eAsAAQT1AQAABBQAAACNmFtv4zgShd8XmP/Ap36iY1EXXx5p
47
- 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
- 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
- x9//PY/+9fJt+Pb1+dvzy/mBp//9OA389I9CLBacJ4ngXjdSswlbW9ex7dda
50
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 0Zu6Y05qeFW4gtED4+cyek7wjdTUD/hV7zYDLjicGE6REy9yVsp1ErBJkiDM
77
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- dG9wX3RpbWVzLnR4dFVUCQADvJyIT5idiE91eAsAAQT1AQAABBQAAABtztmK
91
- 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
- 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
- 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
- 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
- UiuzkWroFVJIGL73/QFQSwMEFAAAAAgAyYyNQO5l2ficAQAAmAMAAAkAHABz
96
- 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
- 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
- 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
- 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
- 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
- NVQClhAWAJcSQh2XWS47cicqvVex0qpjZZeTMXokO6wvSAhYxqPIYQWOBRV4
102
- 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
- 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
- XdDh9iwUEDohNvUQf5+/iyCXN6la9Vc0EQDF/AYOElFOAOJbiPgDYrs0U4sB
105
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- AACkgccKAABzdG9wcy50eHRVVAUAA8mciE91eAsAAQT1AQAABBQAAABQSwEC
124
- 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
- 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
126
- AJENAAAAAA==
127
- http_version: '1.1'
25
+ Last-Modified:
26
+ - Wed, 11 Jan 2012 14:31:33 GMT
27
+ Content-Disposition:
28
+ - attachment; filename="sample-feed.zip"
29
+ Cache-Control:
30
+ - no-cache, must-revalidate
31
+ Expires:
32
+ - '0'
33
+ Pragma:
34
+ - no-cache
35
+ Strict-Transport-Security:
36
+ - max-age=31536000; includeSubdomains
37
+ X-Frame-Options:
38
+ - SAMEORIGIN
39
+ X-Xss-Protection:
40
+ - '0'
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Cloud-Trace-Context:
44
+ - 9d9cd729a1af3deba482f46f3a68c263
45
+ Date:
46
+ - Fri, 23 Oct 2020 23:02:49 GMT
47
+ Server:
48
+ - Google Frontend
49
+ Content-Length:
50
+ - '3217'
51
+ Alt-Svc:
52
+ - h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443";
53
+ ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443";
54
+ ma=2592000; v="46,43"
55
+ body:
56
+ encoding: ASCII-8BIT
57
+ string: !binary |-
58
+ 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
59
+ recorded_at: Fri, 23 Oct 2020 23:02:49 GMT
60
+ recorded_with: VCR 6.0.0
@@ -2,12 +2,12 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe GTFS::Agency do
4
4
  describe 'Agency.parse_agencies' do
5
- let(:header_line) {"agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone\n"}
5
+ let(:header_line) {"agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone,agency_email\n"}
6
6
  let(:invalid_header_line) {"agency_id,agency_url,agency_timezone,agency_lang,agency_phone\n"}
7
7
  let(:valid_line) {"1,Maryland Transit Administration,http://www.mta.maryland.gov,America/New_York,en,410-539-5000\n"}
8
8
  let(:invalid_line) {"1,,http://www.mta.maryland.gov,America/New_York,en,410-539-5000\n"}
9
9
 
10
- subject {GTFS::Agency.parse_agencies(source_text)}
10
+ subject {GTFS::Agency.parse_agencies(source_text, opts)}
11
11
 
12
12
  include_examples 'models'
13
13
  end
@@ -7,7 +7,7 @@ describe GTFS::CalendarDate do
7
7
  let(:valid_line) {"3,20110905,1\n"}
8
8
  let(:invalid_line) {"3,,1\n"}
9
9
 
10
- subject {GTFS::CalendarDate.parse_calendar_dates(source_text)}
10
+ subject {GTFS::CalendarDate.parse_calendar_dates(source_text, opts)}
11
11
 
12
12
  include_examples 'models'
13
13
  end
@@ -7,7 +7,7 @@ describe GTFS::Calendar do
7
7
  let(:valid_line) {"1,1,1,1,1,1,0,0,20110828,20120204\n"}
8
8
  let(:invalid_line) {"1,,1,,1,,0,,,20120204\n"}
9
9
 
10
- subject {GTFS::Calendar.parse_calendars(source_text)}
10
+ subject {GTFS::Calendar.parse_calendars(source_text, opts)}
11
11
 
12
12
  include_examples 'models'
13
13
  end
@@ -0,0 +1,14 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe GTFS::FareAttribute do
4
+ describe '.parse_fare_attributes' do
5
+ let(:header_line) {"fare_id,price,currency_type,payment_method,transfers,transfer_duration\n"}
6
+ let(:invalid_header_line) {",,currency_type,,,transfer_duration\n"}
7
+ let(:valid_line) {"1,1.23,USD,0, ,5000\n"}
8
+ let(:invalid_line) {"1,,,0, ,5000\n"}
9
+
10
+ subject {GTFS::FareAttribute.parse_fare_attributes(source_text, opts)}
11
+
12
+ include_examples 'models'
13
+ end
14
+ end