rack-reducer 0.1.0

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 (41) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +382 -0
  3. data/lib/rack/reducer.rb +46 -0
  4. data/lib/rack/reducer/parser.rb +20 -0
  5. data/lib/rack/reducer/reduction.rb +49 -0
  6. data/lib/rack/reducer/refinements.rb +30 -0
  7. data/spec/behavior.rb +44 -0
  8. data/spec/benchmarks.rb +56 -0
  9. data/spec/fixtures.rb +19 -0
  10. data/spec/middleware_spec.rb +22 -0
  11. data/spec/rails_example/app/channels/application_cable/channel.rb +4 -0
  12. data/spec/rails_example/app/channels/application_cable/connection.rb +4 -0
  13. data/spec/rails_example/app/controllers/application_controller.rb +2 -0
  14. data/spec/rails_example/app/controllers/artists_controller.rb +53 -0
  15. data/spec/rails_example/app/jobs/application_job.rb +2 -0
  16. data/spec/rails_example/app/mailers/application_mailer.rb +4 -0
  17. data/spec/rails_example/app/models/application_record.rb +3 -0
  18. data/spec/rails_example/app/models/artist.rb +18 -0
  19. data/spec/rails_example/config/application.rb +35 -0
  20. data/spec/rails_example/config/boot.rb +3 -0
  21. data/spec/rails_example/config/environment.rb +5 -0
  22. data/spec/rails_example/config/environments/development.rb +47 -0
  23. data/spec/rails_example/config/environments/production.rb +83 -0
  24. data/spec/rails_example/config/environments/test.rb +42 -0
  25. data/spec/rails_example/config/initializers/application_controller_renderer.rb +8 -0
  26. data/spec/rails_example/config/initializers/backtrace_silencers.rb +7 -0
  27. data/spec/rails_example/config/initializers/cors.rb +16 -0
  28. data/spec/rails_example/config/initializers/filter_parameter_logging.rb +4 -0
  29. data/spec/rails_example/config/initializers/inflections.rb +16 -0
  30. data/spec/rails_example/config/initializers/mime_types.rb +4 -0
  31. data/spec/rails_example/config/initializers/schema.rb +13 -0
  32. data/spec/rails_example/config/initializers/wrap_parameters.rb +14 -0
  33. data/spec/rails_example/config/puma.rb +56 -0
  34. data/spec/rails_example/config/routes.rb +4 -0
  35. data/spec/rails_example/db/seeds.rb +7 -0
  36. data/spec/rails_example/test/test_helper.rb +10 -0
  37. data/spec/rails_spec.rb +7 -0
  38. data/spec/sinatra_functional_spec.rb +32 -0
  39. data/spec/sinatra_mixin_spec.rb +26 -0
  40. data/spec/spec_helper.rb +13 -0
  41. metadata +278 -0
@@ -0,0 +1,42 @@
1
+ Rails.application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb.
3
+
4
+ # The test environment is used exclusively to run your application's
5
+ # test suite. You never need to work with it otherwise. Remember that
6
+ # your test database is "scratch space" for the test suite and is wiped
7
+ # and recreated between test runs. Don't rely on the data there!
8
+ config.cache_classes = true
9
+
10
+ # Do not eager load code on boot. This avoids loading your whole application
11
+ # just for the purpose of running a single test. If you are using a tool that
12
+ # preloads Rails for running tests, you may have to set it to true.
13
+ config.eager_load = false
14
+
15
+ # Configure public file server for tests with Cache-Control for performance.
16
+ config.public_file_server.enabled = true
17
+ config.public_file_server.headers = {
18
+ 'Cache-Control' => "public, max-age=#{1.hour.seconds.to_i}"
19
+ }
20
+
21
+ # Show full error reports and disable caching.
22
+ config.consider_all_requests_local = true
23
+ config.action_controller.perform_caching = false
24
+
25
+ # Raise exceptions instead of rendering exception templates.
26
+ config.action_dispatch.show_exceptions = false
27
+
28
+ # Disable request forgery protection in test environment.
29
+ config.action_controller.allow_forgery_protection = false
30
+ config.action_mailer.perform_caching = false
31
+
32
+ # Tell Action Mailer not to deliver emails to the real world.
33
+ # The :test delivery method accumulates sent emails in the
34
+ # ActionMailer::Base.deliveries array.
35
+ config.action_mailer.delivery_method = :test
36
+
37
+ # Print deprecation notices to the stderr.
38
+ config.active_support.deprecation = :stderr
39
+
40
+ # Raises error for missing translations
41
+ # config.action_view.raise_on_missing_translations = true
42
+ end
@@ -0,0 +1,8 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # ActiveSupport::Reloader.to_prepare do
4
+ # ApplicationController.renderer.defaults.merge!(
5
+ # http_host: 'example.org',
6
+ # https: false
7
+ # )
8
+ # end
@@ -0,0 +1,7 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4
+ # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5
+
6
+ # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7
+ # Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,16 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Avoid CORS issues when API is called from the frontend app.
4
+ # Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.
5
+
6
+ # Read more: https://github.com/cyu/rack-cors
7
+
8
+ # Rails.application.config.middleware.insert_before 0, Rack::Cors do
9
+ # allow do
10
+ # origins 'example.com'
11
+ #
12
+ # resource '*',
13
+ # headers: :any,
14
+ # methods: [:get, :post, :put, :patch, :delete, :options, :head]
15
+ # end
16
+ # end
@@ -0,0 +1,4 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Configure sensitive parameters which will be filtered from the log file.
4
+ Rails.application.config.filter_parameters += [:password]
@@ -0,0 +1,16 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new inflection rules using the following format. Inflections
4
+ # are locale specific, and you may define rules for as many different
5
+ # locales as you wish. All of these examples are active by default:
6
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
7
+ # inflect.plural /^(ox)$/i, '\1en'
8
+ # inflect.singular /^(ox)en/i, '\1'
9
+ # inflect.irregular 'person', 'people'
10
+ # inflect.uncountable %w( fish sheep )
11
+ # end
12
+
13
+ # These inflection rules are supported but not enabled by default:
14
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
15
+ # inflect.acronym 'RESTful'
16
+ # end
@@ -0,0 +1,4 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new mime types for use in respond_to blocks:
4
+ # Mime::Type.register "text/richtext", :rtf
@@ -0,0 +1,13 @@
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) }
@@ -0,0 +1,14 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # This file contains settings for ActionController::ParamsWrapper which
4
+ # is enabled by default.
5
+
6
+ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
+ ActiveSupport.on_load(:action_controller) do
8
+ wrap_parameters format: [:json]
9
+ end
10
+
11
+ # To enable root element in JSON for ActiveRecord objects.
12
+ # ActiveSupport.on_load(:active_record) do
13
+ # self.include_root_in_json = true
14
+ # end
@@ -0,0 +1,56 @@
1
+ # Puma can serve each request in a thread from an internal thread pool.
2
+ # The `threads` method setting takes two numbers: a minimum and maximum.
3
+ # Any libraries that use thread pools should be configured to match
4
+ # the maximum value specified for Puma. Default is set to 5 threads for minimum
5
+ # and maximum; this matches the default thread size of Active Record.
6
+ #
7
+ threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
8
+ threads threads_count, threads_count
9
+
10
+ # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
11
+ #
12
+ port ENV.fetch("PORT") { 3000 }
13
+
14
+ # Specifies the `environment` that Puma will run in.
15
+ #
16
+ environment ENV.fetch("RAILS_ENV") { "development" }
17
+
18
+ # Specifies the number of `workers` to boot in clustered mode.
19
+ # Workers are forked webserver processes. If using threads and workers together
20
+ # the concurrency of the application would be max `threads` * `workers`.
21
+ # Workers do not work on JRuby or Windows (both of which do not support
22
+ # processes).
23
+ #
24
+ # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
25
+
26
+ # Use the `preload_app!` method when specifying a `workers` number.
27
+ # This directive tells Puma to first boot the application and load code
28
+ # before forking the application. This takes advantage of Copy On Write
29
+ # process behavior so workers use less memory. If you use this option
30
+ # you need to make sure to reconnect any threads in the `on_worker_boot`
31
+ # block.
32
+ #
33
+ # preload_app!
34
+
35
+ # If you are preloading your application and using Active Record, it's
36
+ # recommended that you close any connections to the database before workers
37
+ # are forked to prevent connection leakage.
38
+ #
39
+ # before_fork do
40
+ # ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord)
41
+ # end
42
+
43
+ # The code in the `on_worker_boot` will be called if you are using
44
+ # clustered mode by specifying a number of `workers`. After each worker
45
+ # process is booted, this block will be run. If you are using the `preload_app!`
46
+ # option, you will want to use this block to reconnect to any threads
47
+ # or connections that may have been created at application boot, as Ruby
48
+ # cannot share connections between processes.
49
+ #
50
+ # on_worker_boot do
51
+ # ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
52
+ # end
53
+ #
54
+
55
+ # Allow puma to be restarted by `rails restart` command.
56
+ plugin :tmp_restart
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+ resources :artists
3
+ # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
4
+ end
@@ -0,0 +1,7 @@
1
+ # This file should contain all the record creation needed to seed the database with its default values.
2
+ # The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
3
+ #
4
+ # Examples:
5
+ #
6
+ # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
7
+ # Character.create(name: 'Luke', movie: movies.first)
@@ -0,0 +1,10 @@
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
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+ ENV['RACK_ENV'] = ENV['RAILS_ENV'] = 'test'
3
+ require_relative 'rails_example/config/environment'
4
+
5
+ describe Rails.application do
6
+ it_behaves_like Rack::Reducer
7
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require_relative 'fixtures'
3
+ require 'sinatra/base'
4
+ require 'json'
5
+
6
+ class SinatraFunctional < Sinatra::Base
7
+ class Artist < Sequel::Model
8
+ plugin :json_serializer
9
+ end
10
+
11
+ get '/artists' do
12
+ @artists = Rack::Reducer.call(params, dataset: Artist, filters: [
13
+ ->(genre:) { grep(:genre, "%#{genre}%", case_insensitive: true) },
14
+ ->(name:) { grep(:name, "%#{name}%", case_insensitive: true) },
15
+ ->(order: 'genre') { order(order.to_sym) }
16
+ ])
17
+
18
+ @artists.all.to_json
19
+ end
20
+ end
21
+
22
+ describe SinatraFunctional do
23
+ let(:app) { described_class }
24
+ it_behaves_like Rack::Reducer
25
+
26
+ it 'applies a default order' do
27
+ get '/artists' do |response|
28
+ genre = JSON.parse(response.body).dig(0, 'genre')
29
+ expect(genre).to eq('alt-soul')
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require_relative 'fixtures'
3
+ require 'sinatra/base'
4
+ require 'json'
5
+
6
+ class SinatraMixin < Sinatra::Base
7
+ class Artist < Sequel::Model
8
+ plugin :json_serializer
9
+ extend Rack::Reducer
10
+ reduces dataset, filters: [
11
+ ->(genre:) { grep(:genre, "%#{genre}%", case_insensitive: true) },
12
+ ->(name:) { grep(:name, "%#{name}%", case_insensitive: true) },
13
+ ->(order:) { order(order.to_sym) }
14
+ ]
15
+
16
+ end
17
+
18
+ get '/artists' do
19
+ @artists = Artist.reduce(params)
20
+ @artists.all.to_json
21
+ end
22
+ end
23
+
24
+ describe SinatraMixin do
25
+ it_behaves_like Rack::Reducer
26
+ end
@@ -0,0 +1,13 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+ require 'pry'
4
+ require 'rack/test'
5
+ require 'rack/reducer'
6
+ require_relative 'fixtures'
7
+ require_relative 'behavior'
8
+
9
+ RSpec.configure do |config|
10
+ config.color = true
11
+ config.order = :random
12
+ config.include Rack::Test::Methods
13
+ end
metadata ADDED
@@ -0,0 +1,278 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-reducer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Frank
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: benchmark-ips
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack-test
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '12'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '12'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sequel
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '5'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '5'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sinatra
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rack
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '1.6'
160
+ - - "<"
161
+ - !ruby/object:Gem::Version
162
+ version: '3'
163
+ type: :runtime
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '1.6'
170
+ - - "<"
171
+ - !ruby/object:Gem::Version
172
+ 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.
175
+ email:
176
+ - chris.frank@thefutureproject.org
177
+ executables: []
178
+ extensions: []
179
+ extra_rdoc_files: []
180
+ files:
181
+ - README.md
182
+ - lib/rack/reducer.rb
183
+ - lib/rack/reducer/parser.rb
184
+ - lib/rack/reducer/reduction.rb
185
+ - lib/rack/reducer/refinements.rb
186
+ - spec/behavior.rb
187
+ - spec/benchmarks.rb
188
+ - spec/fixtures.rb
189
+ - 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
+ - spec/rails_spec.rb
217
+ - spec/sinatra_functional_spec.rb
218
+ - spec/sinatra_mixin_spec.rb
219
+ - spec/spec_helper.rb
220
+ homepage: https://github.com/chrisfrank/rack-reducer
221
+ licenses:
222
+ - MIT
223
+ metadata: {}
224
+ post_install_message:
225
+ rdoc_options: []
226
+ require_paths:
227
+ - lib
228
+ required_ruby_version: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: '2.1'
233
+ required_rubygems_version: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ requirements: []
239
+ rubyforge_project:
240
+ rubygems_version: 2.7.3
241
+ signing_key:
242
+ specification_version: 4
243
+ summary: Safely map URL params to database filters, in any Rack app.
244
+ test_files:
245
+ - spec/spec_helper.rb
246
+ - spec/benchmarks.rb
247
+ - spec/fixtures.rb
248
+ - 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
275
+ - spec/sinatra_functional_spec.rb
276
+ - spec/middleware_spec.rb
277
+ - spec/behavior.rb
278
+ - spec/rails_spec.rb