rack-reducer 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +170 -104
  3. data/lib/rack/reducer/middleware.rb +24 -0
  4. data/lib/rack/reducer/reduction.rb +5 -17
  5. data/lib/rack/reducer.rb +7 -7
  6. data/spec/_hanami_example/apps/web/application.rb +326 -0
  7. data/spec/_hanami_example/apps/web/config/routes.rb +4 -0
  8. data/spec/_hanami_example/apps/web/controllers/artists/index.rb +12 -0
  9. data/spec/_hanami_example/apps/web/views/application_layout.rb +7 -0
  10. data/spec/_hanami_example/config/boot.rb +2 -0
  11. data/spec/_hanami_example/config/environment.rb +29 -0
  12. data/spec/_hanami_example/lib/hanami_example/entities/artist.rb +2 -0
  13. data/spec/_hanami_example/lib/hanami_example/repositories/artist_repository.rb +9 -0
  14. data/spec/_hanami_example/lib/hanami_example.rb +5 -0
  15. data/spec/{rails_example → _rails_example}/app/channels/application_cable/channel.rb +0 -0
  16. data/spec/{rails_example → _rails_example}/app/channels/application_cable/connection.rb +0 -0
  17. data/spec/{rails_example → _rails_example}/app/controllers/application_controller.rb +0 -0
  18. data/spec/_rails_example/app/controllers/artists_controller.rb +8 -0
  19. data/spec/{rails_example → _rails_example}/app/jobs/application_job.rb +0 -0
  20. data/spec/{rails_example → _rails_example}/app/mailers/application_mailer.rb +0 -0
  21. data/spec/{rails_example → _rails_example}/app/models/application_record.rb +0 -0
  22. data/spec/_rails_example/app/models/rails_example/artist.rb +20 -0
  23. data/spec/{rails_example → _rails_example}/config/application.rb +0 -0
  24. data/spec/{rails_example → _rails_example}/config/boot.rb +0 -0
  25. data/spec/{rails_example → _rails_example}/config/environment.rb +0 -0
  26. data/spec/{rails_example → _rails_example}/config/environments/development.rb +0 -0
  27. data/spec/{rails_example → _rails_example}/config/environments/production.rb +0 -0
  28. data/spec/{rails_example → _rails_example}/config/environments/test.rb +0 -0
  29. data/spec/{rails_example → _rails_example}/config/initializers/application_controller_renderer.rb +0 -0
  30. data/spec/{rails_example → _rails_example}/config/initializers/backtrace_silencers.rb +0 -0
  31. data/spec/{rails_example → _rails_example}/config/initializers/cors.rb +0 -0
  32. data/spec/{rails_example → _rails_example}/config/initializers/filter_parameter_logging.rb +0 -0
  33. data/spec/{rails_example → _rails_example}/config/initializers/inflections.rb +0 -0
  34. data/spec/{rails_example → _rails_example}/config/initializers/mime_types.rb +0 -0
  35. data/spec/{rails_example → _rails_example}/config/initializers/wrap_parameters.rb +0 -0
  36. data/spec/{rails_example → _rails_example}/config/puma.rb +0 -0
  37. data/spec/{rails_example → _rails_example}/config/routes.rb +0 -0
  38. data/spec/{rails_example → _rails_example}/db/seeds.rb +0 -0
  39. data/spec/behavior.rb +2 -2
  40. data/spec/hanami_spec.rb +6 -0
  41. data/spec/middleware_spec.rb +16 -8
  42. data/spec/rails_spec.rb +1 -2
  43. data/spec/roda_spec.rb +15 -0
  44. data/spec/sinatra_functional_spec.rb +3 -9
  45. data/spec/sinatra_mixin_spec.rb +0 -2
  46. data/spec/spec_helper.rb +12 -1
  47. metadata +121 -62
  48. data/spec/fixtures.rb +0 -19
  49. data/spec/rails_example/app/controllers/artists_controller.rb +0 -53
  50. data/spec/rails_example/app/models/artist.rb +0 -18
  51. data/spec/rails_example/config/initializers/schema.rb +0 -13
  52. data/spec/rails_example/test/test_helper.rb +0 -10
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-reducer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-04 00:00:00.000000000 Z
11
+ date: 2018-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: hanami
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: hanami-model
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rack-test
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +122,20 @@ dependencies:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
124
  version: '12'
125
+ - !ruby/object:Gem::Dependency
126
+ name: roda
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3'
97
139
  - !ruby/object:Gem::Dependency
98
140
  name: rspec
99
141
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +156,14 @@ dependencies:
114
156
  requirements:
115
157
  - - "~>"
116
158
  - !ruby/object:Gem::Version
117
- version: '5'
159
+ version: '4'
118
160
  type: :development
119
161
  prerelease: false
120
162
  version_requirements: !ruby/object:Gem::Requirement
121
163
  requirements:
122
164
  - - "~>"
123
165
  - !ruby/object:Gem::Version
124
- version: '5'
166
+ version: '4'
125
167
  - !ruby/object:Gem::Dependency
126
168
  name: sinatra
127
169
  requirement: !ruby/object:Gem::Requirement
@@ -170,8 +212,8 @@ dependencies:
170
212
  - - "<"
171
213
  - !ruby/object:Gem::Version
172
214
  version: '3'
173
- description: Safely map URL params to database filters, in any Rack app. If your users
174
- need to filter data by making HTTP requests, this gem can help.
215
+ description: Dynamically filter, sort, and paginate data via URL params, in any Rack
216
+ app.
175
217
  email:
176
218
  - chris.frank@thefutureproject.org
177
219
  executables: []
@@ -180,40 +222,49 @@ extra_rdoc_files: []
180
222
  files:
181
223
  - README.md
182
224
  - lib/rack/reducer.rb
225
+ - lib/rack/reducer/middleware.rb
183
226
  - lib/rack/reducer/parser.rb
184
227
  - lib/rack/reducer/reduction.rb
185
228
  - lib/rack/reducer/refinements.rb
229
+ - spec/_hanami_example/apps/web/application.rb
230
+ - spec/_hanami_example/apps/web/config/routes.rb
231
+ - spec/_hanami_example/apps/web/controllers/artists/index.rb
232
+ - spec/_hanami_example/apps/web/views/application_layout.rb
233
+ - spec/_hanami_example/config/boot.rb
234
+ - spec/_hanami_example/config/environment.rb
235
+ - spec/_hanami_example/lib/hanami_example.rb
236
+ - spec/_hanami_example/lib/hanami_example/entities/artist.rb
237
+ - spec/_hanami_example/lib/hanami_example/repositories/artist_repository.rb
238
+ - spec/_rails_example/app/channels/application_cable/channel.rb
239
+ - spec/_rails_example/app/channels/application_cable/connection.rb
240
+ - spec/_rails_example/app/controllers/application_controller.rb
241
+ - spec/_rails_example/app/controllers/artists_controller.rb
242
+ - spec/_rails_example/app/jobs/application_job.rb
243
+ - spec/_rails_example/app/mailers/application_mailer.rb
244
+ - spec/_rails_example/app/models/application_record.rb
245
+ - spec/_rails_example/app/models/rails_example/artist.rb
246
+ - spec/_rails_example/config/application.rb
247
+ - spec/_rails_example/config/boot.rb
248
+ - spec/_rails_example/config/environment.rb
249
+ - spec/_rails_example/config/environments/development.rb
250
+ - spec/_rails_example/config/environments/production.rb
251
+ - spec/_rails_example/config/environments/test.rb
252
+ - spec/_rails_example/config/initializers/application_controller_renderer.rb
253
+ - spec/_rails_example/config/initializers/backtrace_silencers.rb
254
+ - spec/_rails_example/config/initializers/cors.rb
255
+ - spec/_rails_example/config/initializers/filter_parameter_logging.rb
256
+ - spec/_rails_example/config/initializers/inflections.rb
257
+ - spec/_rails_example/config/initializers/mime_types.rb
258
+ - spec/_rails_example/config/initializers/wrap_parameters.rb
259
+ - spec/_rails_example/config/puma.rb
260
+ - spec/_rails_example/config/routes.rb
261
+ - spec/_rails_example/db/seeds.rb
186
262
  - spec/behavior.rb
187
263
  - spec/benchmarks.rb
188
- - spec/fixtures.rb
264
+ - spec/hanami_spec.rb
189
265
  - spec/middleware_spec.rb
190
- - spec/rails_example/app/channels/application_cable/channel.rb
191
- - spec/rails_example/app/channels/application_cable/connection.rb
192
- - spec/rails_example/app/controllers/application_controller.rb
193
- - spec/rails_example/app/controllers/artists_controller.rb
194
- - spec/rails_example/app/jobs/application_job.rb
195
- - spec/rails_example/app/mailers/application_mailer.rb
196
- - spec/rails_example/app/models/application_record.rb
197
- - spec/rails_example/app/models/artist.rb
198
- - spec/rails_example/config/application.rb
199
- - spec/rails_example/config/boot.rb
200
- - spec/rails_example/config/environment.rb
201
- - spec/rails_example/config/environments/development.rb
202
- - spec/rails_example/config/environments/production.rb
203
- - spec/rails_example/config/environments/test.rb
204
- - spec/rails_example/config/initializers/application_controller_renderer.rb
205
- - spec/rails_example/config/initializers/backtrace_silencers.rb
206
- - spec/rails_example/config/initializers/cors.rb
207
- - spec/rails_example/config/initializers/filter_parameter_logging.rb
208
- - spec/rails_example/config/initializers/inflections.rb
209
- - spec/rails_example/config/initializers/mime_types.rb
210
- - spec/rails_example/config/initializers/schema.rb
211
- - spec/rails_example/config/initializers/wrap_parameters.rb
212
- - spec/rails_example/config/puma.rb
213
- - spec/rails_example/config/routes.rb
214
- - spec/rails_example/db/seeds.rb
215
- - spec/rails_example/test/test_helper.rb
216
266
  - spec/rails_spec.rb
267
+ - spec/roda_spec.rb
217
268
  - spec/sinatra_functional_spec.rb
218
269
  - spec/sinatra_mixin_spec.rb
219
270
  - spec/spec_helper.rb
@@ -229,7 +280,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
229
280
  requirements:
230
281
  - - ">="
231
282
  - !ruby/object:Gem::Version
232
- version: '2.1'
283
+ version: '2.2'
233
284
  required_rubygems_version: !ruby/object:Gem::Requirement
234
285
  requirements:
235
286
  - - ">="
@@ -240,39 +291,47 @@ rubyforge_project:
240
291
  rubygems_version: 2.7.3
241
292
  signing_key:
242
293
  specification_version: 4
243
- summary: Safely map URL params to database filters, in any Rack app.
294
+ summary: Dynamically filter data via URL params, in any Rack app.
244
295
  test_files:
245
296
  - spec/spec_helper.rb
246
297
  - spec/benchmarks.rb
247
- - spec/fixtures.rb
248
298
  - spec/sinatra_mixin_spec.rb
249
- - spec/rails_example/app/mailers/application_mailer.rb
250
- - spec/rails_example/app/models/artist.rb
251
- - spec/rails_example/app/models/application_record.rb
252
- - spec/rails_example/app/jobs/application_job.rb
253
- - spec/rails_example/app/controllers/application_controller.rb
254
- - spec/rails_example/app/controllers/artists_controller.rb
255
- - spec/rails_example/app/channels/application_cable/connection.rb
256
- - spec/rails_example/app/channels/application_cable/channel.rb
257
- - spec/rails_example/test/test_helper.rb
258
- - spec/rails_example/config/routes.rb
259
- - spec/rails_example/config/environments/production.rb
260
- - spec/rails_example/config/environments/development.rb
261
- - spec/rails_example/config/environments/test.rb
262
- - spec/rails_example/config/environment.rb
263
- - spec/rails_example/config/application.rb
264
- - spec/rails_example/config/puma.rb
265
- - spec/rails_example/config/boot.rb
266
- - spec/rails_example/config/initializers/application_controller_renderer.rb
267
- - spec/rails_example/config/initializers/backtrace_silencers.rb
268
- - spec/rails_example/config/initializers/schema.rb
269
- - spec/rails_example/config/initializers/mime_types.rb
270
- - spec/rails_example/config/initializers/filter_parameter_logging.rb
271
- - spec/rails_example/config/initializers/wrap_parameters.rb
272
- - spec/rails_example/config/initializers/inflections.rb
273
- - spec/rails_example/config/initializers/cors.rb
274
- - spec/rails_example/db/seeds.rb
299
+ - spec/_rails_example/app/mailers/application_mailer.rb
300
+ - spec/_rails_example/app/models/rails_example/artist.rb
301
+ - spec/_rails_example/app/models/application_record.rb
302
+ - spec/_rails_example/app/jobs/application_job.rb
303
+ - spec/_rails_example/app/controllers/application_controller.rb
304
+ - spec/_rails_example/app/controllers/artists_controller.rb
305
+ - spec/_rails_example/app/channels/application_cable/connection.rb
306
+ - spec/_rails_example/app/channels/application_cable/channel.rb
307
+ - spec/_rails_example/config/routes.rb
308
+ - spec/_rails_example/config/environments/production.rb
309
+ - spec/_rails_example/config/environments/development.rb
310
+ - spec/_rails_example/config/environments/test.rb
311
+ - spec/_rails_example/config/environment.rb
312
+ - spec/_rails_example/config/application.rb
313
+ - spec/_rails_example/config/puma.rb
314
+ - spec/_rails_example/config/boot.rb
315
+ - spec/_rails_example/config/initializers/application_controller_renderer.rb
316
+ - spec/_rails_example/config/initializers/backtrace_silencers.rb
317
+ - spec/_rails_example/config/initializers/mime_types.rb
318
+ - spec/_rails_example/config/initializers/filter_parameter_logging.rb
319
+ - spec/_rails_example/config/initializers/wrap_parameters.rb
320
+ - spec/_rails_example/config/initializers/inflections.rb
321
+ - spec/_rails_example/config/initializers/cors.rb
322
+ - spec/_rails_example/db/seeds.rb
323
+ - spec/_hanami_example/config/environment.rb
324
+ - spec/_hanami_example/config/boot.rb
325
+ - spec/_hanami_example/lib/hanami_example/repositories/artist_repository.rb
326
+ - spec/_hanami_example/lib/hanami_example/entities/artist.rb
327
+ - spec/_hanami_example/lib/hanami_example.rb
328
+ - spec/_hanami_example/apps/web/config/routes.rb
329
+ - spec/_hanami_example/apps/web/application.rb
330
+ - spec/_hanami_example/apps/web/controllers/artists/index.rb
331
+ - spec/_hanami_example/apps/web/views/application_layout.rb
275
332
  - spec/sinatra_functional_spec.rb
276
333
  - spec/middleware_spec.rb
334
+ - spec/roda_spec.rb
335
+ - spec/hanami_spec.rb
277
336
  - spec/behavior.rb
278
337
  - spec/rails_spec.rb
data/spec/fixtures.rb DELETED
@@ -1,19 +0,0 @@
1
- # hash fixture data
2
- ARTISTS = [
3
- { name: 'Blake Mills', genre: 'alternative' },
4
- { name: 'Björk', genre: 'electronic' },
5
- { name: 'James Blake', genre: 'electronic' },
6
- { name: 'Janelle Monae', genre: 'alt-soul' },
7
- { name: 'SZA', genre: 'alt-soul' },
8
- ].freeze
9
-
10
- require 'sequel'
11
- DB = Sequel.sqlite
12
-
13
- DB.create_table :artists do
14
- String :name
15
- String :genre
16
- end
17
-
18
- # put the hash fixtures into an in-memory SQLite database
19
- ARTISTS.each { |artist| DB[:artists].insert(artist) }
@@ -1,53 +0,0 @@
1
- class ArtistsController < ApplicationController
2
- before_action :set_artist, only: [:show, :update, :destroy]
3
-
4
- # GET /artists
5
- def index
6
- @artists = Artist.reduce(params)
7
-
8
- render json: @artists
9
- end
10
-
11
- # GET /artists/1
12
- def show
13
- render json: @artist
14
- end
15
-
16
- # POST /artists
17
- def create
18
- @artist = Artist.new(artist_params)
19
-
20
- if @artist.save
21
- render json: @artist, status: :created, location: @artist
22
- else
23
- render json: @artist.errors, status: :unprocessable_entity
24
- end
25
- end
26
-
27
- # PATCH/PUT /artists/1
28
- def update
29
- if @artist.update(artist_params)
30
- render json: @artist
31
- else
32
- render json: @artist.errors, status: :unprocessable_entity
33
- end
34
- end
35
-
36
- # DELETE /artists/1
37
- def destroy
38
- @artist.destroy
39
- end
40
-
41
- private
42
- # Use callbacks to share common setup or constraints between actions.
43
- def set_artist
44
- @artist = Artist.find(params[:id])
45
- end
46
-
47
- # Only allow a trusted parameter "white list" through.
48
- def artist_params
49
- params.require(:artist).permit(:name, :genre, :last_release)
50
- end
51
- end
52
- #filters: [:search_genre, :search_name].map { |m| method(m).to_proc },
53
-
@@ -1,18 +0,0 @@
1
- class Artist < ApplicationRecord
2
- scope :by_name, lambda { |name|
3
- where('lower(name) like ?', "%#{name.downcase}%")
4
- }
5
- def self.search_genre(genre)
6
- where('lower(genre) like ?', "%#{genre.downcase}%")
7
- end
8
-
9
- extend Rack::Reducer
10
- reduces all, filters: [
11
- # filters can call class methods...
12
- ->(genre:) { search_genre(genre) },
13
- # or scopes...
14
- ->(name:) { by_name(name) },
15
- # or inline ActiveRecord queries
16
- ->(order:) { order(order.to_sym) }
17
- ]
18
- end
@@ -1,13 +0,0 @@
1
- ActiveRecord::Schema.define do
2
-
3
- create_table "artists" do |t|
4
- t.string "name"
5
- t.string "genre"
6
- t.date "last_release"
7
- t.datetime "created_at", null: false
8
- t.datetime "updated_at", null: false
9
- end
10
-
11
- end
12
-
13
- ARTISTS.each { |artist| Artist.create(artist) }
@@ -1,10 +0,0 @@
1
- ENV['RAILS_ENV'] ||= 'test'
2
- require File.expand_path('../../config/environment', __FILE__)
3
- require 'rails/test_help'
4
-
5
- class ActiveSupport::TestCase
6
- # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
7
- fixtures :all
8
-
9
- # Add more helper methods to be used by all tests here...
10
- end