gtfs 0.2.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +28 -0
- data/Gemfile +10 -7
- data/Gemfile.lock +55 -19
- data/LICENSE +21 -0
- data/README.md +5 -17
- data/Rakefile +2 -0
- data/gtfs.gemspec +3 -2
- data/lib/gtfs/agency.rb +1 -1
- data/lib/gtfs/attribution.rb +20 -0
- data/lib/gtfs/fare_attribute.rb +2 -2
- data/lib/gtfs/feed_info.rb +19 -0
- data/lib/gtfs/level.rb +17 -0
- data/lib/gtfs/model.rb +3 -3
- data/lib/gtfs/pathway.rb +19 -0
- data/lib/gtfs/route.rb +1 -1
- data/lib/gtfs/source.rb +8 -8
- data/lib/gtfs/stop.rb +2 -1
- data/lib/gtfs/stop_time.rb +1 -1
- data/lib/gtfs/translation.rb +18 -0
- data/lib/gtfs/trip.rb +1 -1
- data/lib/gtfs/version.rb +1 -1
- data/lib/gtfs.rb +5 -0
- data/spec/fixtures/cassettes/invalid_gtfs_uri.yml +58 -65
- data/spec/fixtures/cassettes/valid_gtfs_uri.yml +55 -122
- data/spec/gtfs/agency_spec.rb +1 -1
- data/spec/gtfs/attribution_spec.rb +14 -0
- data/spec/gtfs/feed_info_spec.rb +14 -0
- data/spec/gtfs/level_spec.rb +14 -0
- data/spec/gtfs/local_source_spec.rb +9 -5
- data/spec/gtfs/pathway_spec.rb +14 -0
- data/spec/gtfs/source_spec.rb +9 -3
- data/spec/gtfs/stop_time_spec.rb +1 -1
- data/spec/gtfs/translation_spec.rb +14 -0
- data/spec/gtfs/trip_spec.rb +1 -1
- data/spec/gtfs/url_source_spec.rb +2 -2
- data/spec/spec_helper.rb +8 -3
- metadata +26 -11
- data/.travis.yml +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: dc9d7e6c89a8e5a32b02fa4beeb688871c6f341bc1e019148f3fd4fdc0ba077b
|
4
|
+
data.tar.gz: 2850718a407d7fba536d7d0472e0b886713d4a5c387594d5ad94a52175d0d10a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8990b4d336656ef5b02c1cd2acdcf1e1886533f35534cbd9acd5b384b9aee2d386320a671d781a6576e18f746f4b9920f26e3cea88f7c27f3af9af2ebd65053
|
7
|
+
data.tar.gz: 3f2f724cd7d8cf336cd8aabef553d21d036e0c1769053324afca22872d504a2cc792b9144b8eafdd1c96092b6864a055ae89ff36a1143514c566cda6e9366dd0
|
@@ -0,0 +1,28 @@
|
|
1
|
+
name: Run CI Tasks
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
ruby-version: ['2.7', '3.0', '3.1']
|
16
|
+
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v2
|
19
|
+
|
20
|
+
- name: Set up Ruby
|
21
|
+
uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
24
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
25
|
+
|
26
|
+
- name: Run Tests
|
27
|
+
run: |
|
28
|
+
bundle exec rake -t
|
data/Gemfile
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
gem 'simplecov', :require => false
|
7
|
-
gem '
|
8
|
-
gem '
|
9
|
-
gem '
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :test, :development do
|
6
|
+
gem 'simplecov', :require => false
|
7
|
+
gem 'rake'
|
8
|
+
gem 'rspec-its'
|
9
|
+
gem 'rspec'
|
10
|
+
gem 'vcr'
|
11
|
+
gem 'webmock'
|
12
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,33 +1,69 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
gtfs (0.3.0)
|
5
|
+
multi_json
|
6
|
+
rake
|
7
|
+
rubyzip (~> 1.1)
|
8
|
+
|
1
9
|
GEM
|
2
10
|
remote: https://rubygems.org/
|
3
11
|
specs:
|
4
|
-
|
12
|
+
addressable (2.8.0)
|
13
|
+
public_suffix (>= 2.0.2, < 5.0)
|
14
|
+
byebug (11.1.3)
|
15
|
+
crack (0.4.5)
|
16
|
+
rexml
|
17
|
+
diff-lcs (1.5.0)
|
18
|
+
docile (1.4.0)
|
5
19
|
fakeweb (1.3.0)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
rspec-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
hashdiff (1.0.1)
|
21
|
+
multi_json (1.15.0)
|
22
|
+
public_suffix (4.0.7)
|
23
|
+
rake (13.0.6)
|
24
|
+
rexml (3.2.5)
|
25
|
+
rspec (3.11.0)
|
26
|
+
rspec-core (~> 3.11.0)
|
27
|
+
rspec-expectations (~> 3.11.0)
|
28
|
+
rspec-mocks (~> 3.11.0)
|
29
|
+
rspec-core (3.11.0)
|
30
|
+
rspec-support (~> 3.11.0)
|
31
|
+
rspec-expectations (3.11.0)
|
32
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
33
|
+
rspec-support (~> 3.11.0)
|
34
|
+
rspec-its (1.3.0)
|
35
|
+
rspec-core (>= 3.0.0)
|
36
|
+
rspec-expectations (>= 3.0.0)
|
37
|
+
rspec-mocks (3.11.1)
|
38
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
+
rspec-support (~> 3.11.0)
|
40
|
+
rspec-support (3.11.0)
|
41
|
+
rubyzip (1.3.0)
|
42
|
+
simplecov (0.21.2)
|
43
|
+
docile (~> 1.1)
|
44
|
+
simplecov-html (~> 0.11)
|
45
|
+
simplecov_json_formatter (~> 0.1)
|
46
|
+
simplecov-html (0.12.3)
|
47
|
+
simplecov_json_formatter (0.1.4)
|
48
|
+
vcr (6.1.0)
|
49
|
+
webmock (3.14.0)
|
50
|
+
addressable (>= 2.8.0)
|
51
|
+
crack (>= 0.3.2)
|
52
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
22
53
|
|
23
54
|
PLATFORMS
|
24
55
|
ruby
|
25
56
|
|
26
57
|
DEPENDENCIES
|
58
|
+
byebug
|
27
59
|
fakeweb
|
28
|
-
|
60
|
+
gtfs!
|
29
61
|
rake
|
30
62
|
rspec
|
31
|
-
|
63
|
+
rspec-its
|
32
64
|
simplecov
|
33
65
|
vcr
|
66
|
+
webmock
|
67
|
+
|
68
|
+
BUNDLED WITH
|
69
|
+
2.3.6
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2012 Ed Schmalzle
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
### GTFS Ruby
|
2
2
|
|
3
|
+
[![Run CI Tasks](https://github.com/nerdEd/gtfs/actions/workflows/ci.yml/badge.svg)](https://github.com/nerdEd/gtfs/actions/workflows/ci.yml)
|
4
|
+
|
3
5
|
A Ruby wrapper for the [General Transit Feed Specification](https://developers.google.com/transit/gtfs/)
|
4
6
|
|
5
7
|
### Getting started
|
@@ -33,23 +35,9 @@ Alternatively:
|
|
33
35
|
...
|
34
36
|
source.each_transfer {|transfer| puts transfer}
|
35
37
|
|
36
|
-
### License
|
37
|
-
|
38
|
-
Copyright (C) 2012 Ed Schmalzle
|
39
38
|
|
40
|
-
|
41
|
-
copy of this software and associated documentation files (the "Software"), to
|
42
|
-
deal in the Software without restriction, including without limitation the
|
43
|
-
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
44
|
-
copies of the Software, and to permit persons to whom the Software is furnished
|
45
|
-
to do so, subject to the following conditions:
|
39
|
+
### License
|
46
40
|
|
47
|
-
|
48
|
-
all copies or substantial portions of the Software.
|
41
|
+
This project is licensed under the terms of the MIT license.
|
49
42
|
|
50
|
-
|
51
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
52
|
-
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
53
|
-
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
54
|
-
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
55
|
-
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
43
|
+
See this license at [`LICENSE`](LICENSE).
|
data/Rakefile
CHANGED
data/gtfs.gemspec
CHANGED
@@ -5,7 +5,6 @@ require './lib/gtfs/version'
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = 'gtfs'
|
7
7
|
gem.version = GTFS::VERSION
|
8
|
-
gem.date = Date.today.to_s
|
9
8
|
|
10
9
|
gem.summary = 'Load and read GTFS data from zip bundles'
|
11
10
|
gem.description = 'gtfs reads GTFS data from a google-compliant Zip bundle
|
@@ -15,6 +14,8 @@ Gem::Specification.new do |gem|
|
|
15
14
|
gem.email = ['ed@nerded.net']
|
16
15
|
gem.homepage = 'https://github.com/nerdEd/gtfs'
|
17
16
|
|
17
|
+
gem.license = 'MIT'
|
18
|
+
|
18
19
|
gem.required_ruby_version = '>= 1.9.2'
|
19
20
|
|
20
21
|
gem.add_dependency 'rake'
|
@@ -23,7 +24,7 @@ Gem::Specification.new do |gem|
|
|
23
24
|
|
24
25
|
gem.add_development_dependency 'rspec', ['>= 2.0.0']
|
25
26
|
gem.add_development_dependency 'simplecov'
|
26
|
-
gem.add_development_dependency '
|
27
|
+
gem.add_development_dependency 'byebug'
|
27
28
|
gem.add_development_dependency 'vcr'
|
28
29
|
gem.add_development_dependency 'fakeweb'
|
29
30
|
|
data/lib/gtfs/agency.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
module GTFS
|
2
|
+
class Attribution
|
3
|
+
include GTFS::Model
|
4
|
+
|
5
|
+
has_required_attrs :organization_name
|
6
|
+
has_optional_attrs :attribution_id, :agency_id, :route_id, :trip_id, :is_producer,
|
7
|
+
:is_operator, :is_authority, :attribution_url, :attribution_email, :attribution_phone
|
8
|
+
|
9
|
+
attr_accessor *attrs
|
10
|
+
|
11
|
+
collection_name :attributions
|
12
|
+
|
13
|
+
required_file false
|
14
|
+
uses_filename 'attributions.txt'
|
15
|
+
|
16
|
+
def self.parse_attributions(data, options={})
|
17
|
+
return parse_models(data, options)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/gtfs/fare_attribute.rb
CHANGED
@@ -2,8 +2,8 @@ module GTFS
|
|
2
2
|
class FareAttribute
|
3
3
|
include GTFS::Model
|
4
4
|
|
5
|
-
has_required_attrs :fare_id, :price, :currency_type, :payment_method
|
6
|
-
has_optional_attrs :transfer_duration, :
|
5
|
+
has_required_attrs :fare_id, :price, :currency_type, :payment_method, :transfers
|
6
|
+
has_optional_attrs :transfer_duration, :agency_id
|
7
7
|
attr_accessor *attrs
|
8
8
|
|
9
9
|
collection_name :fare_attributes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module GTFS
|
2
|
+
class FeedInfo
|
3
|
+
include GTFS::Model
|
4
|
+
|
5
|
+
has_required_attrs :publisher_name, :publisher_url, :lang
|
6
|
+
has_optional_attrs :start_date, :end_date, :version, :contact_email, :contact_url, :default_lang
|
7
|
+
attr_accessor *attrs
|
8
|
+
|
9
|
+
column_prefix :feed_
|
10
|
+
|
11
|
+
collection_name :feed_infos
|
12
|
+
required_file false
|
13
|
+
uses_filename 'feed_info.txt'
|
14
|
+
|
15
|
+
def self.parse_feed_infos(data, options={})
|
16
|
+
return parse_models(data, options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/gtfs/level.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module GTFS
|
2
|
+
class Level
|
3
|
+
include GTFS::Model
|
4
|
+
|
5
|
+
has_required_attrs :level_id, :level_index
|
6
|
+
has_optional_attrs :level_name
|
7
|
+
attr_accessor *attrs
|
8
|
+
|
9
|
+
collection_name :levels
|
10
|
+
required_file false
|
11
|
+
uses_filename 'levels.txt'
|
12
|
+
|
13
|
+
def self.parse_levels(data, options={})
|
14
|
+
return parse_models(data, options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/gtfs/model.rb
CHANGED
@@ -39,7 +39,7 @@ module GTFS
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def attrs
|
42
|
-
|
42
|
+
required_attrs + optional_attrs
|
43
43
|
end
|
44
44
|
|
45
45
|
#####################################
|
@@ -77,8 +77,8 @@ module GTFS
|
|
77
77
|
self.define_singleton_method(:filename) {filename}
|
78
78
|
end
|
79
79
|
|
80
|
-
def each(filename)
|
81
|
-
CSV.foreach(filename, :headers => true) do |row|
|
80
|
+
def each(filename, options)
|
81
|
+
CSV.foreach(filename, :headers => true, :encoding => options[:encoding]) do |row|
|
82
82
|
yield parse_model(row.to_hash)
|
83
83
|
end
|
84
84
|
end
|
data/lib/gtfs/pathway.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module GTFS
|
2
|
+
class Pathway
|
3
|
+
include GTFS::Model
|
4
|
+
|
5
|
+
has_required_attrs :pathway_id, :from_stop_id, :to_stop_id, :pathway_mode, :is_bidirectional
|
6
|
+
has_optional_attrs :length, :traversal_time, :stair_count, :max_slope, :min_width, :signposted_as,
|
7
|
+
:reversed_signposted_as
|
8
|
+
|
9
|
+
attr_accessor *attrs
|
10
|
+
collection_name :pathways
|
11
|
+
|
12
|
+
required_file false
|
13
|
+
uses_filename 'pathways.txt'
|
14
|
+
|
15
|
+
def self.parse_pathways(data, options={})
|
16
|
+
return parse_models(data, options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/gtfs/route.rb
CHANGED
@@ -3,7 +3,7 @@ module GTFS
|
|
3
3
|
include GTFS::Model
|
4
4
|
|
5
5
|
has_required_attrs :id, :short_name, :long_name, :type
|
6
|
-
has_optional_attrs :agency_id, :desc, :url, :color, :text_color
|
6
|
+
has_optional_attrs :agency_id, :desc, :url, :color, :text_color, :sort_order
|
7
7
|
attr_accessor *attrs
|
8
8
|
|
9
9
|
column_prefix :route_
|
data/lib/gtfs/source.rb
CHANGED
@@ -5,15 +5,15 @@ require 'zip'
|
|
5
5
|
module GTFS
|
6
6
|
class Source
|
7
7
|
|
8
|
-
ENTITIES = [GTFS::Agency, GTFS::Stop, GTFS::Route, GTFS::Trip, GTFS::StopTime,
|
9
|
-
GTFS::
|
10
|
-
GTFS::
|
8
|
+
ENTITIES = [GTFS::Agency, GTFS::Stop, GTFS::Route, GTFS::Trip, GTFS::StopTime, GTFS::Calendar, GTFS::CalendarDate,
|
9
|
+
GTFS::Shape, GTFS::FareAttribute, GTFS::FareRule, GTFS::Frequency, GTFS::Transfer, GTFS::FeedInfo,
|
10
|
+
GTFS::Attribution, GTFS::Pathway, GTFS::Translation, GTFS::Level]
|
11
11
|
|
12
12
|
REQUIRED_SOURCE_FILES = ENTITIES.select(&:required_file?).map(&:filename)
|
13
13
|
OPTIONAL_SOURCE_FILES = ENTITIES.reject(&:required_file?).map(&:filename)
|
14
14
|
SOURCE_FILES = ENTITIES.map(&:filename)
|
15
15
|
|
16
|
-
DEFAULT_OPTIONS = {strict: true}
|
16
|
+
DEFAULT_OPTIONS = {strict: true, encoding: "utf-8"}
|
17
17
|
|
18
18
|
attr_accessor :source, :archive, :options
|
19
19
|
|
@@ -64,13 +64,13 @@ module GTFS
|
|
64
64
|
|
65
65
|
ENTITIES.each do |entity|
|
66
66
|
define_method entity.name.to_sym do
|
67
|
-
parse_file entity.filename do |f|
|
67
|
+
parse_file entity.filename, options do |f|
|
68
68
|
entity.send("parse_#{entity.name}".to_sym, f.read, options)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
72
|
define_method "each_#{entity.singular_name}".to_sym do |&block|
|
73
|
-
entity.each(File.join(@tmp_dir, entity.filename)) { |model| block.call model }
|
73
|
+
entity.each(File.join(@tmp_dir, entity.filename), options) { |model| block.call model }
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -78,9 +78,9 @@ module GTFS
|
|
78
78
|
@files ||= {}
|
79
79
|
end
|
80
80
|
|
81
|
-
def parse_file(filename)
|
81
|
+
def parse_file(filename, options)
|
82
82
|
raise_if_missing_source filename
|
83
|
-
open File.join(@tmp_dir, '/', filename),
|
83
|
+
open File.join(@tmp_dir, '/', filename), "r:#{options[:encoding]}" do |f|
|
84
84
|
files[filename] ||= yield f
|
85
85
|
end
|
86
86
|
end
|
data/lib/gtfs/stop.rb
CHANGED
@@ -3,7 +3,8 @@ 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, :wheelchair_boarding
|
6
|
+
has_optional_attrs :code, :desc, :zone_id, :url, :location_type, :parent_station, :timezone, :wheelchair_boarding,
|
7
|
+
:level_id, :platform_code
|
7
8
|
column_prefix :stop_
|
8
9
|
attr_accessor *attrs
|
9
10
|
|
data/lib/gtfs/stop_time.rb
CHANGED
@@ -3,7 +3,7 @@ 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
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module GTFS
|
2
|
+
class Translation
|
3
|
+
include GTFS::Model
|
4
|
+
|
5
|
+
has_required_attrs :table_name, :field_name, :language, :translation
|
6
|
+
has_optional_attrs :record_id, :record_sub_id, :field_value
|
7
|
+
|
8
|
+
attr_accessor *attrs
|
9
|
+
collection_name :translations
|
10
|
+
|
11
|
+
required_file false
|
12
|
+
uses_filename 'translations.txt'
|
13
|
+
|
14
|
+
def self.parse_translations(data, options={})
|
15
|
+
return parse_models(data, options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
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, :wheelchair_accessible
|
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_
|
data/lib/gtfs/version.rb
CHANGED
data/lib/gtfs.rb
CHANGED
@@ -3,6 +3,7 @@ require 'gtfs/model'
|
|
3
3
|
require 'gtfs/agency'
|
4
4
|
require 'gtfs/calendar'
|
5
5
|
require 'gtfs/calendar_date'
|
6
|
+
require 'gtfs/feed_info'
|
6
7
|
require 'gtfs/route'
|
7
8
|
require 'gtfs/shape'
|
8
9
|
require 'gtfs/stop'
|
@@ -13,6 +14,10 @@ require 'gtfs/fare_attribute'
|
|
13
14
|
require 'gtfs/fare_rule'
|
14
15
|
require 'gtfs/frequency'
|
15
16
|
require 'gtfs/transfer'
|
17
|
+
require 'gtfs/translation'
|
18
|
+
require 'gtfs/pathway'
|
19
|
+
require 'gtfs/attribution'
|
20
|
+
require 'gtfs/level'
|
16
21
|
|
17
22
|
require 'gtfs/source'
|
18
23
|
require 'gtfs/url_source'
|
@@ -1,70 +1,63 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
|
4
|
-
method:
|
5
|
-
uri:
|
6
|
-
body:
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
14
|
-
-
|
15
|
-
|
16
|
-
-
|
17
|
-
|
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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
Schmalzle\t\t\tAll rights reserved. Design by <a href=\"http://www.freewpthemes.net/\">Free
|
69
|
-
WordPress Themes</a> • \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
|
-
|
3
|
-
|
4
|
-
method:
|
5
|
-
uri:
|
6
|
-
body:
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
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
|
-
|
20
|
-
-
|
21
|
-
|
22
|
-
-
|
23
|
-
|
24
|
-
-
|
25
|
-
|
26
|
-
-
|
27
|
-
|
28
|
-
-
|
29
|
-
|
30
|
-
-
|
31
|
-
|
32
|
-
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
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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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
-
l4+r3t+eNyWu8jk/W+VksLHPZERVvhh8HqvsEFivgXHnIgpadAEOlZEaIcTa
|
66
|
-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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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
-
PFnWH8M+Q3qWSM8QjPY6pawqI7POSUb3UWYU7syuulO3IB1upHQ02A7lMVTn
|
81
|
-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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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
-
4+GEqhWVw6MgdT6f/gBQSwMEFAAAAAgAwoyNQPKLtVLGAAAA0gEAAA4AHABz
|
90
|
-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
-
wyAUgOH7wrzJobgdNXkZkXo6lW5WTaFvP8GkwoTgxY/6udQck4sBfM7x7W+u
|
92
|
-
xjtBoORznTIt01KfzbQWek30OK2rF/KhxN8HpHi6TsnVT5qP53nneT4vs3Lx
|
93
|
-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
-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
-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
-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
-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
-
Vb1+3uPGvnfVvnBVuXmBal80O1cdNi0UVYk/q7IYzr29HvCh2m3a56pctx91
|
99
|
-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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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
-
AACXAQAACgAYAAAAAAABAAAApIHECAAAc2hhcGVzLnR4dFVUBQADrZyIT3V4
|
120
|
-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
-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
-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
-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
-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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
|
data/spec/gtfs/agency_spec.rb
CHANGED
@@ -2,7 +2,7 @@ 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"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe GTFS::Attribution do
|
4
|
+
describe 'Attribution.parse_attributions' do
|
5
|
+
let(:header_line) {"organization_name\n"}
|
6
|
+
let(:invalid_header_line) {"\n"}
|
7
|
+
let(:valid_line) {"Transit Feed Solutions Tokyo\n"}
|
8
|
+
let(:invalid_line) {"\n"}
|
9
|
+
|
10
|
+
subject {GTFS::Attribution.parse_attributions(source_text, opts)}
|
11
|
+
|
12
|
+
include_examples 'models'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe GTFS::FeedInfo do
|
4
|
+
describe 'FeedInfo.parse_feed_infos' do
|
5
|
+
let(:header_line) {"feed_publisher_name,feed_publisher_url,feed_lang,feed_start_date,feed_end_date,feed_version\n"}
|
6
|
+
let(:invalid_header_line) {"feed_publisher_name,feed_publisher_url,feed_start_date,feed_end_date,feed_version\n"}
|
7
|
+
let(:valid_line) {"Torrance Transit,http://Transit.TorranceCA.gov,en,20141102,20151003,1413\n"}
|
8
|
+
let(:invalid_line) {"Torrance Transit,http://Transit.TorranceCA.gov\n"}
|
9
|
+
|
10
|
+
subject {GTFS::FeedInfo.parse_feed_infos(source_text, opts)}
|
11
|
+
|
12
|
+
include_examples 'models'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe GTFS::Level do
|
4
|
+
describe 'Level.parse_levels' do
|
5
|
+
let(:header_line) {"level_id,level_index\n"}
|
6
|
+
let(:invalid_header_line) {",level_index\n"}
|
7
|
+
let(:valid_line) {"L0,0\n"}
|
8
|
+
let(:invalid_line) {",1\n"}
|
9
|
+
|
10
|
+
subject {GTFS::Level.parse_levels(source_text, opts)}
|
11
|
+
|
12
|
+
include_examples 'models'
|
13
|
+
end
|
14
|
+
end
|
@@ -2,24 +2,28 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe GTFS::LocalSource do
|
4
4
|
describe '#new' do
|
5
|
-
subject {lambda{GTFS::LocalSource.new(source_path)}}
|
6
|
-
|
7
5
|
context 'with a local source path that is invalid' do
|
8
6
|
let(:source_path) {File.expand_path(File.dirname(__FILE__) + '/../fixtures/not_here.zip')}
|
9
7
|
|
10
|
-
it
|
8
|
+
it 'throws an exception' do
|
9
|
+
expect { GTFS::LocalSource.new(source_path) }.to raise_error(GTFS::InvalidSourceException)
|
10
|
+
end
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'with a local source path to a zip w/o required files' do
|
14
14
|
let(:source_path) {File.expand_path(File.dirname(__FILE__) + '/../fixtures/missing_files_gtfs.zip')}
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'throws an exception' do
|
17
|
+
expect { GTFS::LocalSource.new(source_path) }.to raise_error(GTFS::InvalidSourceException)
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
context 'with a local source path to a valid source zip' do
|
20
22
|
let(:source_path) {File.expand_path(File.dirname(__FILE__) + '/../fixtures/valid_gtfs.zip')}
|
21
23
|
|
22
|
-
it
|
24
|
+
it 'throws an exception' do
|
25
|
+
expect { GTFS::LocalSource.new(source_path) }.to_not raise_error(GTFS::InvalidSourceException)
|
26
|
+
end
|
23
27
|
end
|
24
28
|
end
|
25
29
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe GTFS::Pathway do
|
4
|
+
describe 'Pathway.parse_pathways' do
|
5
|
+
let(:header_line) {"pathway_id,from_stop_id,to_stop_id,pathway_mode,is_bidirectional\n"}
|
6
|
+
let(:invalid_header_line) {",rom_stop_id,to_stop_id,pathway_mode,is_bidirectional\n"}
|
7
|
+
let(:valid_line) {"E1N1,E1,N1,2,1\n"}
|
8
|
+
let(:invalid_line) {"E1N1,E1,,,1\n"}
|
9
|
+
|
10
|
+
subject {GTFS::Pathway.parse_pathways(source_text, opts)}
|
11
|
+
|
12
|
+
include_examples 'models'
|
13
|
+
end
|
14
|
+
end
|
data/spec/gtfs/source_spec.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
3
|
describe GTFS::Source do
|
4
|
+
before(:each) do
|
5
|
+
VCR.insert_cassette 'valid_gtfs_uri'
|
6
|
+
end
|
7
|
+
after(:each) do
|
8
|
+
VCR.eject_cassette
|
9
|
+
end
|
10
|
+
|
4
11
|
let(:valid_local_source) do
|
5
12
|
File.expand_path(File.dirname(__FILE__) + '/../fixtures/valid_gtfs.zip')
|
6
13
|
end
|
@@ -15,8 +22,7 @@ describe GTFS::Source do
|
|
15
22
|
subject {GTFS::Source.build(data_source, opts)}
|
16
23
|
|
17
24
|
context 'with a url as a data root' do
|
18
|
-
|
19
|
-
let(:data_source) {'http://dl.dropbox.com/u/416235/work/valid_gtfs.zip'}
|
25
|
+
let(:data_source) {'https://developers.google.com/transit/gtfs/examples/sample-feed.zip'}
|
20
26
|
|
21
27
|
it {should be_instance_of GTFS::URLSource}
|
22
28
|
its(:options) {should == GTFS::Source::DEFAULT_OPTIONS}
|
@@ -39,7 +45,7 @@ describe GTFS::Source do
|
|
39
45
|
context 'with options to disable strict checks' do
|
40
46
|
let(:opts) {{strict: false}}
|
41
47
|
|
42
|
-
its(:options) {should == {strict: false}}
|
48
|
+
its(:options) {should == GTFS::Source::DEFAULT_OPTIONS.merge({strict: false})}
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
data/spec/gtfs/stop_time_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe GTFS::StopTime do
|
4
4
|
describe 'StopTime.parse_stop_times' do
|
5
|
-
let(:header_line) {"trip_id,arrival_time,departure_time,stop_id,stop_sequence,stop_headsign,pickup_type,drop_off_type,shape_dist_traveled\n"}
|
5
|
+
let(:header_line) {"trip_id,arrival_time,departure_time,stop_id,stop_sequence,stop_headsign,pickup_type,drop_off_type,shape_dist_traveled,timepoint\n"}
|
6
6
|
let(:invalid_header_line) {",arrival_time,,stop_id,,stop_headsign,,drop_off_type,\n"}
|
7
7
|
let(:valid_line) {"982385,4:34:00,4:34:00,277,1,,0,0,\n"}
|
8
8
|
let(:invalid_line) {",,4:34:00,,1,,,0,\n"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe GTFS::Translation do
|
4
|
+
describe 'Translation.parse_translations' do
|
5
|
+
let(:header_line) {"table_name,field_name,language,translation\n"}
|
6
|
+
let(:invalid_header_line) {",stop_name,,translation\n"}
|
7
|
+
let(:valid_line) {"stops,stop_name,en,Tokyo Station\n"}
|
8
|
+
let(:invalid_line) {",,,en\n"}
|
9
|
+
|
10
|
+
subject {GTFS::Translation.parse_translations(source_text, opts)}
|
11
|
+
|
12
|
+
include_examples 'models'
|
13
|
+
end
|
14
|
+
end
|
data/spec/gtfs/trip_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe GTFS::Trip do
|
4
4
|
describe 'Trip.parse_trips' do
|
5
|
-
let(:header_line) {"route_id,service_id,trip_id,trip_headsign,direction_id,block_id,shape_id\n"}
|
5
|
+
let(:header_line) {"route_id,service_id,trip_id,trip_headsign,direction_id,block_id,shape_id,bikes_allowed\n"}
|
6
6
|
let(:invalid_header_line) {",,,,direction_id,block_id,shape_id\n"}
|
7
7
|
let(:valid_line) {"4679,1,982394,1 FT McHENRY,0,189021,59135\n"}
|
8
8
|
let(:invalid_line) {",1,,1 FT McHENRY,,189021,\n"}
|
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe GTFS::URLSource do
|
4
4
|
context 'with a URI to a valid source zip' do
|
5
|
-
let(:source_path) {'
|
5
|
+
let(:source_path) {'https://developers.google.com/transit/gtfs/examples/sample-feed.zip'}
|
6
6
|
it 'should create a new source successfully' do
|
7
7
|
VCR.use_cassette('valid_gtfs_uri') do
|
8
8
|
lambda {GTFS::URLSource.new(source_path, {})}.should_not raise_error(GTFS::InvalidSourceException)
|
@@ -11,7 +11,7 @@ describe GTFS::URLSource do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'with a non-existent URI' do
|
14
|
-
let(:source_path) {'
|
14
|
+
let(:source_path) {'https://example.org/gtfs.zip'}
|
15
15
|
it 'should raise an exception' do
|
16
16
|
VCR.use_cassette('invalid_gtfs_uri') do
|
17
17
|
lambda {GTFS::URLSource.new(source_path, {})}.should raise_error(GTFS::InvalidSourceException)
|
data/spec/spec_helper.rb
CHANGED
@@ -6,16 +6,21 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
6
6
|
|
7
7
|
require 'bundler/setup'
|
8
8
|
require 'rspec'
|
9
|
+
require 'rspec/its'
|
9
10
|
require 'vcr'
|
10
11
|
require 'gtfs'
|
11
12
|
|
12
13
|
require File.expand_path(File.dirname(__FILE__) + '/support/model_shared_examples')
|
13
14
|
|
14
15
|
RSpec.configure do |config|
|
15
|
-
config.
|
16
|
+
config.expect_with :rspec do |expectations|
|
17
|
+
expectations.syntax = [:should , :expect]
|
18
|
+
expectations.on_potential_false_positives = :nothing
|
19
|
+
end
|
20
|
+
config.raise_errors_for_deprecations!
|
16
21
|
end
|
17
22
|
|
18
|
-
VCR.
|
23
|
+
VCR.configure do |c|
|
19
24
|
c.cassette_library_dir = File.join(File.dirname(__FILE__), '/fixtures/cassettes')
|
20
|
-
c.
|
25
|
+
c.hook_into :webmock
|
21
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nerdEd
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: byebug
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -130,29 +130,35 @@ executables: []
|
|
130
130
|
extensions: []
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
|
+
- ".github/workflows/ci.yml"
|
133
134
|
- ".gitignore"
|
134
|
-
- ".travis.yml"
|
135
135
|
- Gemfile
|
136
136
|
- Gemfile.lock
|
137
|
+
- LICENSE
|
137
138
|
- README.md
|
138
139
|
- Rakefile
|
139
140
|
- gtfs.gemspec
|
140
141
|
- lib/gtfs.rb
|
141
142
|
- lib/gtfs/agency.rb
|
143
|
+
- lib/gtfs/attribution.rb
|
142
144
|
- lib/gtfs/calendar.rb
|
143
145
|
- lib/gtfs/calendar_date.rb
|
144
146
|
- lib/gtfs/custom_exceptions.rb
|
145
147
|
- lib/gtfs/fare_attribute.rb
|
146
148
|
- lib/gtfs/fare_rule.rb
|
149
|
+
- lib/gtfs/feed_info.rb
|
147
150
|
- lib/gtfs/frequency.rb
|
151
|
+
- lib/gtfs/level.rb
|
148
152
|
- lib/gtfs/local_source.rb
|
149
153
|
- lib/gtfs/model.rb
|
154
|
+
- lib/gtfs/pathway.rb
|
150
155
|
- lib/gtfs/route.rb
|
151
156
|
- lib/gtfs/shape.rb
|
152
157
|
- lib/gtfs/source.rb
|
153
158
|
- lib/gtfs/stop.rb
|
154
159
|
- lib/gtfs/stop_time.rb
|
155
160
|
- lib/gtfs/transfer.rb
|
161
|
+
- lib/gtfs/translation.rb
|
156
162
|
- lib/gtfs/trip.rb
|
157
163
|
- lib/gtfs/url_source.rb
|
158
164
|
- lib/gtfs/version.rb
|
@@ -161,26 +167,32 @@ files:
|
|
161
167
|
- spec/fixtures/missing_files.zip
|
162
168
|
- spec/fixtures/valid_gtfs.zip
|
163
169
|
- spec/gtfs/agency_spec.rb
|
170
|
+
- spec/gtfs/attribution_spec.rb
|
164
171
|
- spec/gtfs/calendar_date_spec.rb
|
165
172
|
- spec/gtfs/calendar_spec.rb
|
166
173
|
- spec/gtfs/fare_attribute_spec.rb
|
167
174
|
- spec/gtfs/fare_rule_spec.rb
|
175
|
+
- spec/gtfs/feed_info_spec.rb
|
168
176
|
- spec/gtfs/frequency_spec.rb
|
177
|
+
- spec/gtfs/level_spec.rb
|
169
178
|
- spec/gtfs/local_source_spec.rb
|
179
|
+
- spec/gtfs/pathway_spec.rb
|
170
180
|
- spec/gtfs/route_spec.rb
|
171
181
|
- spec/gtfs/shape_spec.rb
|
172
182
|
- spec/gtfs/source_spec.rb
|
173
183
|
- spec/gtfs/stop_spec.rb
|
174
184
|
- spec/gtfs/stop_time_spec.rb
|
175
185
|
- spec/gtfs/transfer_spec.rb
|
186
|
+
- spec/gtfs/translation_spec.rb
|
176
187
|
- spec/gtfs/trip_spec.rb
|
177
188
|
- spec/gtfs/url_source_spec.rb
|
178
189
|
- spec/spec_helper.rb
|
179
190
|
- spec/support/model_shared_examples.rb
|
180
191
|
homepage: https://github.com/nerdEd/gtfs
|
181
|
-
licenses:
|
192
|
+
licenses:
|
193
|
+
- MIT
|
182
194
|
metadata: {}
|
183
|
-
post_install_message:
|
195
|
+
post_install_message:
|
184
196
|
rdoc_options: []
|
185
197
|
require_paths:
|
186
198
|
- lib
|
@@ -195,9 +207,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
207
|
- !ruby/object:Gem::Version
|
196
208
|
version: '0'
|
197
209
|
requirements: []
|
198
|
-
|
199
|
-
|
200
|
-
signing_key:
|
210
|
+
rubygems_version: 3.2.32
|
211
|
+
signing_key:
|
201
212
|
specification_version: 4
|
202
213
|
summary: Load and read GTFS data from zip bundles
|
203
214
|
test_files:
|
@@ -206,20 +217,24 @@ test_files:
|
|
206
217
|
- spec/fixtures/missing_files.zip
|
207
218
|
- spec/fixtures/valid_gtfs.zip
|
208
219
|
- spec/gtfs/agency_spec.rb
|
220
|
+
- spec/gtfs/attribution_spec.rb
|
209
221
|
- spec/gtfs/calendar_date_spec.rb
|
210
222
|
- spec/gtfs/calendar_spec.rb
|
211
223
|
- spec/gtfs/fare_attribute_spec.rb
|
212
224
|
- spec/gtfs/fare_rule_spec.rb
|
225
|
+
- spec/gtfs/feed_info_spec.rb
|
213
226
|
- spec/gtfs/frequency_spec.rb
|
227
|
+
- spec/gtfs/level_spec.rb
|
214
228
|
- spec/gtfs/local_source_spec.rb
|
229
|
+
- spec/gtfs/pathway_spec.rb
|
215
230
|
- spec/gtfs/route_spec.rb
|
216
231
|
- spec/gtfs/shape_spec.rb
|
217
232
|
- spec/gtfs/source_spec.rb
|
218
233
|
- spec/gtfs/stop_spec.rb
|
219
234
|
- spec/gtfs/stop_time_spec.rb
|
220
235
|
- spec/gtfs/transfer_spec.rb
|
236
|
+
- spec/gtfs/translation_spec.rb
|
221
237
|
- spec/gtfs/trip_spec.rb
|
222
238
|
- spec/gtfs/url_source_spec.rb
|
223
239
|
- spec/spec_helper.rb
|
224
240
|
- spec/support/model_shared_examples.rb
|
225
|
-
has_rdoc:
|
data/.travis.yml
DELETED