gtfs_engine 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/gtfs_engine/default_views_helper.rb +3 -9
- data/app/views/gtfs_engine/calendars/{dates.json.jbuilder → dates.json.jsend} +0 -0
- data/app/views/gtfs_engine/data_sets/{show.json.jbuilder → index.json.jsend} +7 -4
- data/app/views/gtfs_engine/data_sets/show.json.jsend +16 -0
- data/app/views/gtfs_engine/gtfs/{index.json.jbuilder → index.json.jsend} +0 -0
- data/app/views/gtfs_engine/gtfs/{show.json.jbuilder → show.json.jsend} +0 -0
- data/app/views/gtfs_engine/transfers/{from.json.jbuilder → from.json.jsend} +0 -0
- data/app/views/gtfs_engine/transfers/{from_to.json.jbuilder → from_to.json.jsend} +0 -0
- data/app/views/gtfs_engine/transfers/{to.json.jbuilder → to.json.jsend} +0 -0
- data/app/views/gtfs_engine/trips/{block.json.jbuilder → block.json.jsend} +0 -0
- data/lib/gtfs_engine/concerns/controllers/data_access.rb +19 -3
- data/lib/gtfs_engine/concerns/controllers/gtfs.rb +27 -8
- data/lib/gtfs_engine/engine.rb +5 -0
- data/lib/gtfs_engine/exceptions.rb +3 -2
- data/lib/gtfs_engine/json_responder.rb +5 -3
- data/lib/gtfs_engine/version.rb +1 -1
- metadata +41 -13
- data/app/views/gtfs_engine/data_sets/index.json.jbuilder +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41bacc2ca460c53a0d6bfab8dad6a6accba8d24d
|
4
|
+
data.tar.gz: 92aad173090d8dd6105e35e1e40d9603e197d5ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7ee299a9408d4d277c9006cf08d1184d98c1e81e4a7fb16127bb5b9b639e4256bf3da6f88a2abd6f6431f068a9b711d9162443a5a6e86463b7da819a9c1a7d8
|
7
|
+
data.tar.gz: 30b80c487979031d30a18af1ab036f5f2fd0cd85fcb4a447df21d9aae97a65a8fa154a6809c37287562a063f138451d63741b3430de6a97cd0478e82814b2d81
|
@@ -17,21 +17,15 @@ module GtfsEngine
|
|
17
17
|
def index(json, records)
|
18
18
|
json.cache! [controller_name, filter] do
|
19
19
|
json.ignore_nil! true
|
20
|
-
|
21
|
-
json.status 'success'
|
22
|
-
json.data do
|
23
|
-
json.array!(records) {|record| json.extract! record, *fields }
|
24
|
-
end
|
20
|
+
json.array!(records) {|record| json.extract! record, *fields }
|
25
21
|
end
|
26
22
|
end
|
27
23
|
|
24
|
+
|
28
25
|
def show(json, record)
|
29
26
|
json.cache! record do
|
30
27
|
json.ignore_nil! true
|
31
|
-
json.
|
32
|
-
json.data do
|
33
|
-
json.extract! record, *fields
|
34
|
-
end
|
28
|
+
json.extract! record, *fields
|
35
29
|
end
|
36
30
|
end
|
37
31
|
end
|
File without changes
|
@@ -12,8 +12,11 @@
|
|
12
12
|
#
|
13
13
|
# You should have received a copy of the GNU General Public License
|
14
14
|
# along with the KNOWtime server. If not, see <http://www.gnu.org/licenses/>.
|
15
|
-
json.
|
16
|
-
|
17
|
-
json.
|
18
|
-
|
15
|
+
json.ignore_nil! true
|
16
|
+
@data_sets.each do |name, sets|
|
17
|
+
json.set! name do
|
18
|
+
json.array! sets do |set|
|
19
|
+
json.extract! set, *%i(id name title url etag created_at)
|
20
|
+
end
|
21
|
+
end
|
19
22
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file is part of the KNOWtime server.
|
2
|
+
#
|
3
|
+
# The KNOWtime server is free software: you can redistribute it and/or modify it
|
4
|
+
# under the terms of the GNU General Public License as published by the Free
|
5
|
+
# Software Foundation, either version 3 of the License, or (at your option) any
|
6
|
+
# later version.
|
7
|
+
#
|
8
|
+
# The KNOWtime server is distributed in the hope that it will be useful, but
|
9
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
10
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
11
|
+
# details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License
|
14
|
+
# along with the KNOWtime server. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
json.extract! @data_set, *%i(id name title url etag created_at)
|
16
|
+
json.details @data_set.details
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,8 +1,24 @@
|
|
1
|
+
# This file is part of the KNOWtime server.
|
2
|
+
#
|
3
|
+
# The KNOWtime server is free software: you can redistribute it and/or modify it
|
4
|
+
# under the terms of the GNU General Public License as published by the Free
|
5
|
+
# Software Foundation, either version 3 of the License, or (at your option) any
|
6
|
+
# later version.
|
7
|
+
#
|
8
|
+
# The KNOWtime server is distributed in the hope that it will be useful, but
|
9
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
10
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
11
|
+
# details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License
|
14
|
+
# along with the KNOWtime server. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
|
1
16
|
# A Controller +Concern+ for convenient access to the +DataSet+ specified in
|
2
17
|
# the URL.
|
3
18
|
module GtfsEngine::Concerns::Controllers::DataAccess
|
4
19
|
extend ActiveSupport::Concern
|
5
20
|
|
21
|
+
|
6
22
|
#@param param_key <Symbol> The key of the URL param to use as the feed's ID
|
7
23
|
#@return <DataSet>
|
8
24
|
def data(param_key=:data_set_id)
|
@@ -17,12 +33,12 @@ module GtfsEngine::Concerns::Controllers::DataAccess
|
|
17
33
|
end
|
18
34
|
end
|
19
35
|
|
36
|
+
|
20
37
|
def data_cache(key)
|
21
|
-
Rails.cache.fetch
|
22
|
-
yield
|
23
|
-
end
|
38
|
+
Rails.cache.fetch("#{data.id}::#{key}") { yield }
|
24
39
|
end
|
25
40
|
|
41
|
+
|
26
42
|
#@return <Bool> +true+ if the key is the name of the GTFS feed,
|
27
43
|
# instead of its ID
|
28
44
|
def param_is_data_set_name?(param_key)
|
@@ -18,6 +18,7 @@
|
|
18
18
|
module GtfsEngine::Concerns::Controllers::Gtfs
|
19
19
|
extend ActiveSupport::Concern
|
20
20
|
|
21
|
+
|
21
22
|
included do
|
22
23
|
around_filter :gtfs_cache, only: [:index, :show]
|
23
24
|
|
@@ -35,12 +36,14 @@ module GtfsEngine::Concerns::Controllers::Gtfs
|
|
35
36
|
@gtfs_id or controller_name.singularize.foreign_key
|
36
37
|
end
|
37
38
|
|
39
|
+
|
38
40
|
def filters(*attrs)
|
39
41
|
attrs.flatten!
|
40
42
|
@filters = attrs unless attrs.empty?
|
41
43
|
@filters ||= []
|
42
44
|
end
|
43
45
|
|
46
|
+
|
44
47
|
#@return [Class] the +ActiveRecord::Base+ class associated with this
|
45
48
|
# controller
|
46
49
|
def record_class
|
@@ -58,12 +61,14 @@ module GtfsEngine::Concerns::Controllers::Gtfs
|
|
58
61
|
respond_with @records, template: 'gtfs_engine/gtfs/index'
|
59
62
|
end
|
60
63
|
|
64
|
+
|
61
65
|
# GET /:id for a specific element of the given GTFS type
|
62
66
|
def show
|
63
67
|
@record = record
|
64
68
|
respond_with @record, template: 'gtfs_engine/gtfs/show'
|
65
69
|
end
|
66
70
|
|
71
|
+
|
67
72
|
#@return <ActionController::Parameters> the map of fields to filter;
|
68
73
|
# derived from the query string
|
69
74
|
def filter
|
@@ -73,8 +78,7 @@ module GtfsEngine::Concerns::Controllers::Gtfs
|
|
73
78
|
query[q] = true if v.blank? # blank value indicates boolean filter
|
74
79
|
filters.include?(q.to_sym) ? nil : q
|
75
80
|
end.compact
|
76
|
-
|
77
|
-
binding.pry
|
81
|
+
|
78
82
|
unless unknown.empty?
|
79
83
|
raise GtfsEngine::UnknownFilters.new(unknown), 'unknown filter'
|
80
84
|
end
|
@@ -83,39 +87,48 @@ require 'pry'
|
|
83
87
|
end
|
84
88
|
end
|
85
89
|
|
90
|
+
|
86
91
|
protected
|
87
92
|
|
93
|
+
|
88
94
|
#@return [ActiveRecord::Relation] all the records in this GTFS association
|
89
95
|
def collection
|
90
96
|
data.send controller_name
|
91
97
|
end
|
92
98
|
|
99
|
+
|
93
100
|
#@return [ActiveRecord::Relation] all the records in this GTFS
|
94
101
|
# association that match the filter specified in the query string
|
95
102
|
def filtered_collection
|
96
103
|
collection.where filter
|
97
104
|
end
|
98
105
|
|
106
|
+
|
99
107
|
#@return [ActiveRecord::Base] the record identified by +params[:id]+ in this
|
100
108
|
# GTFS association
|
101
109
|
def record
|
102
110
|
collection.find_by! gtfs_id => params[:id]
|
103
111
|
end
|
104
112
|
|
113
|
+
|
105
114
|
def gtfs_id
|
106
115
|
self.class.gtfs_id
|
107
116
|
end
|
108
117
|
|
118
|
+
|
109
119
|
def filters
|
110
120
|
self.class.filters
|
111
121
|
end
|
112
122
|
|
123
|
+
|
113
124
|
def query
|
114
125
|
request.query_parameters
|
115
126
|
end
|
116
127
|
|
128
|
+
|
117
129
|
private
|
118
130
|
|
131
|
+
|
119
132
|
def format
|
120
133
|
request.format.to_sym
|
121
134
|
end
|
@@ -131,28 +144,34 @@ require 'pry'
|
|
131
144
|
yield if stale? options
|
132
145
|
end
|
133
146
|
|
147
|
+
|
134
148
|
#@param ex [GtfsEngine::UnknownFilter]
|
135
149
|
def unknown_filter(ex)
|
136
|
-
|
137
|
-
|
150
|
+
render status: :bad_request, jsend: {
|
151
|
+
error: 'unknown filter', data: ex.to_h
|
152
|
+
}
|
138
153
|
end
|
139
154
|
|
155
|
+
|
140
156
|
def statement_invalid(ex)
|
141
157
|
inner = ex.original_exception
|
142
158
|
case inner
|
143
159
|
when PG::InvalidDatetimeFormat, PG::DatetimeFieldOverflow
|
144
160
|
lines = inner.message.split "\n"
|
145
161
|
/.*"([^"]+)"[^"]+/ === lines[1][0..lines[2].size] and begin
|
146
|
-
|
147
|
-
|
162
|
+
render status: :bad_request, jsend: {
|
163
|
+
message: 'invalid date', data: {$1 => 'invalid date'}
|
164
|
+
}
|
148
165
|
end
|
149
166
|
else
|
150
167
|
raise ex
|
151
168
|
end
|
152
169
|
end
|
153
170
|
|
171
|
+
|
154
172
|
def record_not_found(ex)
|
155
|
-
|
156
|
-
|
173
|
+
render status: :not_found, jsend: {
|
174
|
+
error: 'record not found', data: {gtfs_id => params[:id]}
|
175
|
+
}
|
157
176
|
end
|
158
177
|
end
|
data/lib/gtfs_engine/engine.rb
CHANGED
@@ -12,6 +12,11 @@
|
|
12
12
|
#
|
13
13
|
# You should have received a copy of the GNU General Public License
|
14
14
|
# along with the KNOWtime server. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
|
16
|
+
# The following line is required for jsend_wrapper/rails to be available when
|
17
|
+
# mounted in another rails application.
|
18
|
+
require 'jsend_wrapper/rails'
|
19
|
+
|
15
20
|
module GtfsEngine
|
16
21
|
class Engine < ::Rails::Engine
|
17
22
|
isolate_namespace GtfsEngine
|
@@ -19,17 +19,18 @@ module GtfsEngine
|
|
19
19
|
class UnknownFilters < Error
|
20
20
|
attr_reader :fields
|
21
21
|
|
22
|
+
|
22
23
|
#@param fields [Array<String>] the names of the unknown fields which the
|
23
24
|
# caller tried to filter with
|
24
25
|
def initialize(fields)
|
25
26
|
@fields = fields
|
26
27
|
end
|
27
28
|
|
29
|
+
|
28
30
|
def to_hash
|
29
|
-
fields.each_with_object({}) do |field, hash|
|
31
|
+
fields.each_with_object( {} ) do |field, hash|
|
30
32
|
hash[field] = message
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
35
|
-
|
@@ -24,8 +24,10 @@ class GtfsEngine::JsonResponder < ActionController::Responder
|
|
24
24
|
protected
|
25
25
|
|
26
26
|
def display_errors
|
27
|
-
|
28
|
-
|
29
|
-
controller.render
|
27
|
+
options[:status] ||= :unprocessable_entity
|
28
|
+
|
29
|
+
controller.render status: options[:status], jsend: {
|
30
|
+
error: 'could not process request', data: resource_errors[:errors]
|
31
|
+
}
|
30
32
|
end
|
31
33
|
end
|
data/lib/gtfs_engine/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtfs_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Sangster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jbuilder
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jsend_wrapper-rails
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.3'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.3'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: pry-rails
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,8 +150,8 @@ dependencies:
|
|
122
150
|
- - "~>"
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '4.2'
|
125
|
-
description: '
|
126
|
-
|
153
|
+
description: 'Reads and parses zip files conforming to Google''s GTFS spec. GTFS Spec:
|
154
|
+
https://developers.google.com/transit/gtfs'
|
127
155
|
email: jon@ertt.ca
|
128
156
|
executables:
|
129
157
|
- rails
|
@@ -164,15 +192,15 @@ files:
|
|
164
192
|
- app/models/gtfs_engine/stop_time.rb
|
165
193
|
- app/models/gtfs_engine/transfer.rb
|
166
194
|
- app/models/gtfs_engine/trip.rb
|
167
|
-
- app/views/gtfs_engine/calendars/dates.json.
|
168
|
-
- app/views/gtfs_engine/data_sets/index.json.
|
169
|
-
- app/views/gtfs_engine/data_sets/show.json.
|
170
|
-
- app/views/gtfs_engine/gtfs/index.json.
|
171
|
-
- app/views/gtfs_engine/gtfs/show.json.
|
172
|
-
- app/views/gtfs_engine/transfers/from.json.
|
173
|
-
- app/views/gtfs_engine/transfers/from_to.json.
|
174
|
-
- app/views/gtfs_engine/transfers/to.json.
|
175
|
-
- app/views/gtfs_engine/trips/block.json.
|
195
|
+
- app/views/gtfs_engine/calendars/dates.json.jsend
|
196
|
+
- app/views/gtfs_engine/data_sets/index.json.jsend
|
197
|
+
- app/views/gtfs_engine/data_sets/show.json.jsend
|
198
|
+
- app/views/gtfs_engine/gtfs/index.json.jsend
|
199
|
+
- app/views/gtfs_engine/gtfs/show.json.jsend
|
200
|
+
- app/views/gtfs_engine/transfers/from.json.jsend
|
201
|
+
- app/views/gtfs_engine/transfers/from_to.json.jsend
|
202
|
+
- app/views/gtfs_engine/transfers/to.json.jsend
|
203
|
+
- app/views/gtfs_engine/trips/block.json.jsend
|
176
204
|
- bin/rails
|
177
205
|
- config/initializers/extensions_loader.rb
|
178
206
|
- config/routes.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# This file is part of the KNOWtime server.
|
2
|
-
#
|
3
|
-
# The KNOWtime server is free software: you can redistribute it and/or modify it
|
4
|
-
# under the terms of the GNU General Public License as published by the Free
|
5
|
-
# Software Foundation, either version 3 of the License, or (at your option) any
|
6
|
-
# later version.
|
7
|
-
#
|
8
|
-
# The KNOWtime server is distributed in the hope that it will be useful, but
|
9
|
-
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
10
|
-
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
11
|
-
# details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU General Public License
|
14
|
-
# along with the KNOWtime server. If not, see <http://www.gnu.org/licenses/>.
|
15
|
-
json.ignore_nil! true
|
16
|
-
|
17
|
-
json.status 'success'
|
18
|
-
json.data do
|
19
|
-
@data_sets.each do |name, sets|
|
20
|
-
json.set! name do
|
21
|
-
json.array! sets do |set|
|
22
|
-
json.extract! set, *%i(id name title url etag created_at)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|