gtfs_df 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/.conform.yaml +25 -0
  3. data/.envrc +12 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +2 -0
  6. data/.solargraph.yml +26 -0
  7. data/.standard.yml +3 -0
  8. data/CHANGELOG.md +3 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +105 -0
  11. data/Rakefile +10 -0
  12. data/devenv.lock +171 -0
  13. data/devenv.nix +13 -0
  14. data/devenv.yaml +8 -0
  15. data/examples/split-by-agency/.gitignore +1 -0
  16. data/examples/split-by-agency/Gemfile +5 -0
  17. data/examples/split-by-agency/Gemfile.lock +52 -0
  18. data/examples/split-by-agency/README.md +26 -0
  19. data/examples/split-by-agency/split_by_agency.rb +52 -0
  20. data/lib/gtfs_df/base_gtfs_table.rb +45 -0
  21. data/lib/gtfs_df/feed.rb +152 -0
  22. data/lib/gtfs_df/graph.rb +131 -0
  23. data/lib/gtfs_df/reader.rb +28 -0
  24. data/lib/gtfs_df/schema/agency.rb +26 -0
  25. data/lib/gtfs_df/schema/areas.rb +18 -0
  26. data/lib/gtfs_df/schema/attributions.rb +28 -0
  27. data/lib/gtfs_df/schema/booking_rules.rb +19 -0
  28. data/lib/gtfs_df/schema/calendar.rb +32 -0
  29. data/lib/gtfs_df/schema/calendar_dates.rb +19 -0
  30. data/lib/gtfs_df/schema/enum_values.rb +147 -0
  31. data/lib/gtfs_df/schema/fare_attributes.rb +25 -0
  32. data/lib/gtfs_df/schema/fare_leg_join_rules.rb +20 -0
  33. data/lib/gtfs_df/schema/fare_leg_rules.rb +21 -0
  34. data/lib/gtfs_df/schema/fare_media.rb +18 -0
  35. data/lib/gtfs_df/schema/fare_products.rb +24 -0
  36. data/lib/gtfs_df/schema/fare_rules.rb +19 -0
  37. data/lib/gtfs_df/schema/fare_transfer_rules.rb +23 -0
  38. data/lib/gtfs_df/schema/feed_info.rb +21 -0
  39. data/lib/gtfs_df/schema/frequencies.rb +22 -0
  40. data/lib/gtfs_df/schema/levels.rb +15 -0
  41. data/lib/gtfs_df/schema/location_group_stops.rb +17 -0
  42. data/lib/gtfs_df/schema/location_groups.rb +17 -0
  43. data/lib/gtfs_df/schema/networks.rb +17 -0
  44. data/lib/gtfs_df/schema/pathways.rb +29 -0
  45. data/lib/gtfs_df/schema/rider_categories.rb +18 -0
  46. data/lib/gtfs_df/schema/route_networks.rb +17 -0
  47. data/lib/gtfs_df/schema/routes.rb +33 -0
  48. data/lib/gtfs_df/schema/shapes.rb +24 -0
  49. data/lib/gtfs_df/schema/stop_areas.rb +19 -0
  50. data/lib/gtfs_df/schema/stop_attributes.rb +17 -0
  51. data/lib/gtfs_df/schema/stop_times.rb +38 -0
  52. data/lib/gtfs_df/schema/stops.rb +34 -0
  53. data/lib/gtfs_df/schema/transfers.rb +20 -0
  54. data/lib/gtfs_df/schema/translations.rb +24 -0
  55. data/lib/gtfs_df/schema/trips.rb +30 -0
  56. data/lib/gtfs_df/schema_validator.rb +89 -0
  57. data/lib/gtfs_df/utils.rb +52 -0
  58. data/lib/gtfs_df/version.rb +5 -0
  59. data/lib/gtfs_df/writer.rb +26 -0
  60. data/lib/gtfs_df.rb +49 -0
  61. data/sig/gtfs-df.rbs +4 -0
  62. metadata +148 -0
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GtfsDf
4
+ class Writer
5
+ # Exports a Feed to a GTFS zip file
6
+ def self.write_to_zip(feed, zip_path)
7
+ require "stringio"
8
+ require "zlib"
9
+ FileUtils.mkdir_p(File.dirname(zip_path))
10
+ Zip::File.open(zip_path, create: true) do |zipfile|
11
+ GtfsDf::Feed::GTFS_FILES.each do |file|
12
+ df = feed.send(file)
13
+ next unless df.is_a?(Polars::DataFrame)
14
+
15
+ # Write CSV to StringIO
16
+ csv_io = StringIO.new
17
+ df.write_csv(csv_io)
18
+ csv_io.rewind
19
+
20
+ # Write StringIO directly to zip
21
+ zipfile.get_output_stream("#{file}.txt") { |f| f.write(csv_io.read) }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
data/lib/gtfs_df.rb ADDED
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "polars-df"
4
+ require "networkx"
5
+ require "zip"
6
+ require_relative "gtfs_df/base_gtfs_table"
7
+ require_relative "gtfs_df/utils"
8
+ require_relative "gtfs_df/version"
9
+ require_relative "gtfs_df/schema/enum_values"
10
+ require_relative "gtfs_df/schema/agency"
11
+ require_relative "gtfs_df/schema/calendar"
12
+ require_relative "gtfs_df/schema/calendar_dates"
13
+ require_relative "gtfs_df/feed"
14
+ require_relative "gtfs_df/graph"
15
+ require_relative "gtfs_df/reader"
16
+ require_relative "gtfs_df/schema/routes"
17
+ require_relative "gtfs_df/schema_validator"
18
+ require_relative "gtfs_df/schema/stop_times"
19
+ require_relative "gtfs_df/schema/stops"
20
+ require_relative "gtfs_df/schema/trips"
21
+ require_relative "gtfs_df/schema/pathways"
22
+ require_relative "gtfs_df/schema/levels"
23
+ require_relative "gtfs_df/schema/feed_info"
24
+ require_relative "gtfs_df/schema/shapes"
25
+ require_relative "gtfs_df/schema/frequencies"
26
+ require_relative "gtfs_df/schema/transfers"
27
+ require_relative "gtfs_df/schema/fare_attributes"
28
+ require_relative "gtfs_df/schema/fare_rules"
29
+ require_relative "gtfs_df/schema/attributions"
30
+ require_relative "gtfs_df/schema/translations"
31
+ require_relative "gtfs_df/schema/stop_areas"
32
+ require_relative "gtfs_df/schema/stop_attributes"
33
+ require_relative "gtfs_df/schema/rider_categories"
34
+ require_relative "gtfs_df/schema/fare_media"
35
+ require_relative "gtfs_df/schema/fare_products"
36
+ require_relative "gtfs_df/schema/fare_leg_rules"
37
+ require_relative "gtfs_df/schema/fare_leg_join_rules"
38
+ require_relative "gtfs_df/schema/fare_transfer_rules"
39
+ require_relative "gtfs_df/schema/areas"
40
+ require_relative "gtfs_df/schema/networks"
41
+ require_relative "gtfs_df/schema/route_networks"
42
+ require_relative "gtfs_df/schema/location_groups"
43
+ require_relative "gtfs_df/schema/location_group_stops"
44
+ require_relative "gtfs_df/schema/booking_rules"
45
+ require_relative "gtfs_df/writer"
46
+
47
+ module GtfsDf
48
+ class Error < StandardError; end
49
+ end
data/sig/gtfs-df.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module GtfsDf
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gtfs_df
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - David Mejorado
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-01 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: networkx
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.4'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.4'
26
+ - !ruby/object:Gem::Dependency
27
+ name: polars-df
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.22'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.22'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rubyzip
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.3'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.3'
54
+ description: 'A Ruby gem to load, filter, and manipulate GTFS (General Transit Feed
55
+ Specification) feeds using DataFrames powered by Polars. Supports cascading filters
56
+ that maintain referential integrity across related tables. NOTE: This gem is not
57
+ ready for production use.'
58
+ email:
59
+ - david.mejorado@gmail.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".conform.yaml"
65
+ - ".envrc"
66
+ - ".rspec"
67
+ - ".rubocop.yml"
68
+ - ".solargraph.yml"
69
+ - ".standard.yml"
70
+ - CHANGELOG.md
71
+ - LICENSE.txt
72
+ - README.md
73
+ - Rakefile
74
+ - devenv.lock
75
+ - devenv.nix
76
+ - devenv.yaml
77
+ - examples/split-by-agency/.gitignore
78
+ - examples/split-by-agency/Gemfile
79
+ - examples/split-by-agency/Gemfile.lock
80
+ - examples/split-by-agency/README.md
81
+ - examples/split-by-agency/split_by_agency.rb
82
+ - lib/gtfs_df.rb
83
+ - lib/gtfs_df/base_gtfs_table.rb
84
+ - lib/gtfs_df/feed.rb
85
+ - lib/gtfs_df/graph.rb
86
+ - lib/gtfs_df/reader.rb
87
+ - lib/gtfs_df/schema/agency.rb
88
+ - lib/gtfs_df/schema/areas.rb
89
+ - lib/gtfs_df/schema/attributions.rb
90
+ - lib/gtfs_df/schema/booking_rules.rb
91
+ - lib/gtfs_df/schema/calendar.rb
92
+ - lib/gtfs_df/schema/calendar_dates.rb
93
+ - lib/gtfs_df/schema/enum_values.rb
94
+ - lib/gtfs_df/schema/fare_attributes.rb
95
+ - lib/gtfs_df/schema/fare_leg_join_rules.rb
96
+ - lib/gtfs_df/schema/fare_leg_rules.rb
97
+ - lib/gtfs_df/schema/fare_media.rb
98
+ - lib/gtfs_df/schema/fare_products.rb
99
+ - lib/gtfs_df/schema/fare_rules.rb
100
+ - lib/gtfs_df/schema/fare_transfer_rules.rb
101
+ - lib/gtfs_df/schema/feed_info.rb
102
+ - lib/gtfs_df/schema/frequencies.rb
103
+ - lib/gtfs_df/schema/levels.rb
104
+ - lib/gtfs_df/schema/location_group_stops.rb
105
+ - lib/gtfs_df/schema/location_groups.rb
106
+ - lib/gtfs_df/schema/networks.rb
107
+ - lib/gtfs_df/schema/pathways.rb
108
+ - lib/gtfs_df/schema/rider_categories.rb
109
+ - lib/gtfs_df/schema/route_networks.rb
110
+ - lib/gtfs_df/schema/routes.rb
111
+ - lib/gtfs_df/schema/shapes.rb
112
+ - lib/gtfs_df/schema/stop_areas.rb
113
+ - lib/gtfs_df/schema/stop_attributes.rb
114
+ - lib/gtfs_df/schema/stop_times.rb
115
+ - lib/gtfs_df/schema/stops.rb
116
+ - lib/gtfs_df/schema/transfers.rb
117
+ - lib/gtfs_df/schema/translations.rb
118
+ - lib/gtfs_df/schema/trips.rb
119
+ - lib/gtfs_df/schema_validator.rb
120
+ - lib/gtfs_df/utils.rb
121
+ - lib/gtfs_df/version.rb
122
+ - lib/gtfs_df/writer.rb
123
+ - sig/gtfs-df.rbs
124
+ homepage: https://github.com/davidmh/ruby-gtfs-df
125
+ licenses:
126
+ - MIT
127
+ metadata:
128
+ homepage_uri: https://github.com/davidmh/ruby-gtfs-df
129
+ source_code_uri: https://github.com/davidmh/ruby-gtfs-df
130
+ changelog_uri: https://github.com/davidmh/ruby-gtfs-df/blob/main/CHANGELOG.md
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 3.1.0
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubygems_version: 3.6.9
146
+ specification_version: 4
147
+ summary: Manipulate GTFS feeds using DataFrames with Polars
148
+ test_files: []