diff --git a/lib/gtfs.rb b/lib/gtfs.rb index 9d42ec2..840e70f 100644 --- a/lib/gtfs.rb +++ b/lib/gtfs.rb @@ -14,6 +14,10 @@ require 'gtfs/fare_rule' require 'gtfs/frequency' require 'gtfs/transfer' +require 'gtfs/translation' +require 'gtfs/pathway' +require 'gtfs/attribution' +require 'gtfs/level' require 'gtfs/source' require 'gtfs/url_source' diff --git a/lib/gtfs/attribution.rb b/lib/gtfs/attribution.rb new file mode 100644 index 0000000..d74b97f --- /dev/null +++ b/lib/gtfs/attribution.rb @@ -0,0 +1,20 @@ +module GTFS + class Attribution + include GTFS::Model + + has_required_attrs :organization_name + has_optional_attrs :attribution_id, :agency_id, :route_id, :trip_id, :is_producer, + :is_operator, :is_authority, :attribution_url, :attribution_email, :attribution_phone + + attr_accessor *attrs + + collection_name :attributions + + required_file false + uses_filename 'attributions.txt' + + def self.parse_attributions(data, options={}) + return parse_models(data, options) + end + end +end diff --git a/lib/gtfs/fare_attribute.rb b/lib/gtfs/fare_attribute.rb index 85c63dd..ac6ed6a 100644 --- a/lib/gtfs/fare_attribute.rb +++ b/lib/gtfs/fare_attribute.rb @@ -3,7 +3,7 @@ class FareAttribute include GTFS::Model has_required_attrs :fare_id, :price, :currency_type, :payment_method, :transfers - has_optional_attrs :transfer_duration + has_optional_attrs :transfer_duration, :agency_id attr_accessor *attrs collection_name :fare_attributes diff --git a/lib/gtfs/feed_info.rb b/lib/gtfs/feed_info.rb index 32298d8..2f58a4f 100644 --- a/lib/gtfs/feed_info.rb +++ b/lib/gtfs/feed_info.rb @@ -3,7 +3,7 @@ class FeedInfo include GTFS::Model has_required_attrs :publisher_name, :publisher_url, :lang - has_optional_attrs :start_date, :end_date, :version + has_optional_attrs :start_date, :end_date, :version, :contact_email, :contact_url, :default_lang attr_accessor *attrs column_prefix :feed_ diff --git a/lib/gtfs/level.rb b/lib/gtfs/level.rb new file mode 100644 index 0000000..96cc5a3 --- /dev/null +++ b/lib/gtfs/level.rb @@ -0,0 +1,17 @@ +module GTFS + class Level + include GTFS::Model + + has_required_attrs :level_id, :level_index + has_optional_attrs :level_name + attr_accessor *attrs + + collection_name :levels + required_file false + uses_filename 'levels.txt' + + def self.parse_levels(data, options={}) + return parse_models(data, options) + end + end +end diff --git a/lib/gtfs/model.rb b/lib/gtfs/model.rb index ecf0018..c59f103 100644 --- a/lib/gtfs/model.rb +++ b/lib/gtfs/model.rb @@ -39,7 +39,7 @@ def required_attrs end def attrs - required_attrs + optional_attrs + required_attrs + optional_attrs end ##################################### diff --git a/lib/gtfs/pathway.rb b/lib/gtfs/pathway.rb new file mode 100644 index 0000000..3e1bf9d --- /dev/null +++ b/lib/gtfs/pathway.rb @@ -0,0 +1,19 @@ +module GTFS + class Pathway + include GTFS::Model + + has_required_attrs :pathway_id, :from_stop_id, :to_stop_id, :pathway_mode, :is_bidirectional + has_optional_attrs :length, :traversal_time, :stair_count, :max_slope, :min_width, :signposted_as, + :reversed_signposted_as + + attr_accessor *attrs + collection_name :pathways + + required_file false + uses_filename 'pathways.txt' + + def self.parse_pathways(data, options={}) + return parse_models(data, options) + end + end +end \ No newline at end of file diff --git a/lib/gtfs/route.rb b/lib/gtfs/route.rb index 92af4fe..325cc41 100644 --- a/lib/gtfs/route.rb +++ b/lib/gtfs/route.rb @@ -3,7 +3,7 @@ class Route include GTFS::Model has_required_attrs :id, :short_name, :long_name, :type - has_optional_attrs :agency_id, :desc, :url, :color, :text_color + has_optional_attrs :agency_id, :desc, :url, :color, :text_color, :sort_order attr_accessor *attrs column_prefix :route_ diff --git a/lib/gtfs/source.rb b/lib/gtfs/source.rb index a2c7818..0f6aec7 100644 --- a/lib/gtfs/source.rb +++ b/lib/gtfs/source.rb @@ -5,9 +5,9 @@ module GTFS class Source - ENTITIES = [GTFS::Agency, GTFS::Stop, GTFS::Route, GTFS::Trip, GTFS::StopTime, - GTFS::Calendar, GTFS::CalendarDate, GTFS::Shape, GTFS::FareAttribute, - GTFS::FareRule, GTFS::Frequency, GTFS::Transfer, GTFS::FeedInfo] + ENTITIES = [GTFS::Agency, GTFS::Stop, GTFS::Route, GTFS::Trip, GTFS::StopTime, GTFS::Calendar, GTFS::CalendarDate, + GTFS::Shape, GTFS::FareAttribute, GTFS::FareRule, GTFS::Frequency, GTFS::Transfer, GTFS::FeedInfo, + GTFS::Attribution, GTFS::Pathway, GTFS::Translation, GTFS::Level] REQUIRED_SOURCE_FILES = ENTITIES.select(&:required_file?).map(&:filename) OPTIONAL_SOURCE_FILES = ENTITIES.reject(&:required_file?).map(&:filename) diff --git a/lib/gtfs/stop.rb b/lib/gtfs/stop.rb index 15e07b9..b85a2e0 100644 --- a/lib/gtfs/stop.rb +++ b/lib/gtfs/stop.rb @@ -3,7 +3,8 @@ class Stop include GTFS::Model has_required_attrs :id, :name, :lat, :lon - has_optional_attrs :code, :desc, :zone_id, :url, :location_type, :parent_station, :timezone, :wheelchair_boarding + has_optional_attrs :code, :desc, :zone_id, :url, :location_type, :parent_station, :timezone, :wheelchair_boarding, + :level_id, :platform_code column_prefix :stop_ attr_accessor *attrs diff --git a/lib/gtfs/translation.rb b/lib/gtfs/translation.rb new file mode 100644 index 0000000..b60247d --- /dev/null +++ b/lib/gtfs/translation.rb @@ -0,0 +1,18 @@ +module GTFS + class Translation + include GTFS::Model + + has_required_attrs :table_name, :field_name, :language, :translation + has_optional_attrs :record_id, :record_sub_id, :field_value + + attr_accessor *attrs + collection_name :translations + + required_file false + uses_filename 'translations.txt' + + def self.parse_translations(data, options={}) + return parse_models(data, options) + end + end +end \ No newline at end of file diff --git a/spec/gtfs/attribution_spec.rb b/spec/gtfs/attribution_spec.rb new file mode 100644 index 0000000..5f06aaa --- /dev/null +++ b/spec/gtfs/attribution_spec.rb @@ -0,0 +1,14 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe GTFS::Attribution do + describe 'Attribution.parse_attributions' do + let(:header_line) {"organization_name\n"} + let(:invalid_header_line) {"\n"} + let(:valid_line) {"Transit Feed Solutions Tokyo\n"} + let(:invalid_line) {"\n"} + + subject {GTFS::Attribution.parse_attributions(source_text, opts)} + + include_examples 'models' + end +end \ No newline at end of file diff --git a/spec/gtfs/level_spec.rb b/spec/gtfs/level_spec.rb new file mode 100644 index 0000000..298230f --- /dev/null +++ b/spec/gtfs/level_spec.rb @@ -0,0 +1,14 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe GTFS::Level do + describe 'Level.parse_levels' do + let(:header_line) {"level_id,level_index\n"} + let(:invalid_header_line) {",level_index\n"} + let(:valid_line) {"L0,0\n"} + let(:invalid_line) {",1\n"} + + subject {GTFS::Level.parse_levels(source_text, opts)} + + include_examples 'models' + end +end \ No newline at end of file diff --git a/spec/gtfs/pathway_spec.rb b/spec/gtfs/pathway_spec.rb new file mode 100644 index 0000000..19de768 --- /dev/null +++ b/spec/gtfs/pathway_spec.rb @@ -0,0 +1,14 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe GTFS::Pathway do + describe 'Pathway.parse_pathways' do + let(:header_line) {"pathway_id,from_stop_id,to_stop_id,pathway_mode,is_bidirectional\n"} + let(:invalid_header_line) {",rom_stop_id,to_stop_id,pathway_mode,is_bidirectional\n"} + let(:valid_line) {"E1N1,E1,N1,2,1\n"} + let(:invalid_line) {"E1N1,E1,,,1\n"} + + subject {GTFS::Pathway.parse_pathways(source_text, opts)} + + include_examples 'models' + end +end \ No newline at end of file diff --git a/spec/gtfs/translation_spec.rb b/spec/gtfs/translation_spec.rb new file mode 100644 index 0000000..e238a7e --- /dev/null +++ b/spec/gtfs/translation_spec.rb @@ -0,0 +1,14 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe GTFS::Translation do + describe 'Translation.parse_translations' do + let(:header_line) {"table_name,field_name,language,translation\n"} + let(:invalid_header_line) {",stop_name,,translation\n"} + let(:valid_line) {"stops,stop_name,en,Tokyo Station\n"} + let(:invalid_line) {",,,en\n"} + + subject {GTFS::Translation.parse_translations(source_text, opts)} + + include_examples 'models' + end +end \ No newline at end of file