responders 3.0.1 → 3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -2
- data/MIT-LICENSE +1 -1
- data/README.md +37 -5
- data/lib/action_controller/respond_with.rb +9 -6
- data/lib/action_controller/responder.rb +14 -7
- data/lib/generators/responders/install_generator.rb +13 -9
- data/lib/responders/collection_responder.rb +1 -0
- data/lib/responders/controller_method.rb +1 -1
- data/lib/responders/flash_responder.rb +7 -16
- data/lib/responders/version.rb +1 -1
- data/lib/responders.rb +4 -1
- metadata +16 -13
- data/lib/responders/location_responder.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbd11b54b7dff0d570ff0231c4947ef6c086e75eec2939a6b96d4ebb65bc40f1
|
4
|
+
data.tar.gz: 5f6df15df62211cdc47025a70f4037a493dc1d679aa2a6a5a834d90135b07de1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62f893c63385f0d2de498143a4bcf0dafde98ef920778e5115af3d7b14f2d4c7dcdae08712193db9543e205e9830e307758b702970fe2480e7ccc322e8a81c38
|
7
|
+
data.tar.gz: 888a7bae0e92cdbdd8037f5cbfde45d09ec23d528d783aa11ac436bf21992aae7c63252285161a42513fb9c7dbb1ab4abf45b6371cadebfe9efd05bb2175d8e7
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## Unreleased
|
2
|
+
|
3
|
+
|
4
|
+
## 3.1.0
|
5
|
+
|
6
|
+
* Add config `responders.redirect_status` to allow overriding the redirect code/status used in redirects. The default is `302 Found`, which matches Rails, but it allows to change responders to redirect with `303 See Other` for example, to make it more compatible with how Hotwire/Turbo expects redirects to work.
|
7
|
+
* Add config `responders.error_status` to allow overriding the status code used to respond to `HTML` or `JS` requests that have errors on the resource. The default is `200 OK`, but it allows to change the response to be `422 Unprocessable Entity` in such cases for example, which makes it more consistent with other statuses more commonly used in APIs (like JSON/XML), and works by default with Turbo/Hotwire which expects a 422 on form error HTML responses. Note that changing this may break your application if you're relying on the previous 2xx status to handle error cases.
|
8
|
+
* Add support for Ruby 3.0, 3.1, and 3.2, drop support for Ruby < 2.5.
|
9
|
+
* Add support for Rails 6.1 and 7.0, drop support for Rails < 5.2.
|
10
|
+
* Move CI to GitHub Actions.
|
11
|
+
|
1
12
|
## 3.0.1
|
2
13
|
|
3
14
|
* Add support to Ruby 2.7
|
@@ -13,8 +24,8 @@
|
|
13
24
|
|
14
25
|
## 2.4.0
|
15
26
|
|
16
|
-
* `respond_with` now accepts a new
|
17
|
-
call after an unsuccessful post request.
|
27
|
+
* `respond_with` now accepts a new kwarg called `:render` which goes straight to the `render`
|
28
|
+
call after an unsuccessful post request. Useful if for example you need to render a template
|
18
29
|
which is outside of controller's path eg:
|
19
30
|
|
20
31
|
`respond_with resource, render: { template: 'path/to/template' }`
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Responders
|
2
2
|
|
3
3
|
[](http://badge.fury.io/rb/responders)
|
4
|
-
[](http://travis-ci.org/heartcombo/responders)
|
5
|
-
[](https://codeclimate.com/github/heartcombo/responders)
|
6
4
|
|
7
5
|
A set of responders modules to dry up your Rails app.
|
8
6
|
|
@@ -213,7 +211,8 @@ assertions on this behavior for your controllers.
|
|
213
211
|
def create
|
214
212
|
@widget = Widget.new(widget_params)
|
215
213
|
@widget.errors.add(:base, :invalid)
|
216
|
-
# `respond_with` will render the `new` template again
|
214
|
+
# `respond_with` will render the `new` template again,
|
215
|
+
# and set the status based on the configured `error_status`.
|
217
216
|
respond_with @widget
|
218
217
|
end
|
219
218
|
```
|
@@ -238,9 +237,37 @@ class WidgetsController < ApplicationController
|
|
238
237
|
respond_with widget
|
239
238
|
end
|
240
239
|
end
|
240
|
+
```
|
241
|
+
|
242
|
+
## Configuring error and redirect statuses
|
243
|
+
|
244
|
+
By default, `respond_with` will respond to errors on `HTML` & `JS` requests using the HTTP status code `200 OK`,
|
245
|
+
and perform redirects using the HTTP status code `302 Found`, both for backwards compatibility reasons.
|
241
246
|
|
247
|
+
You can configure this behavior by setting `config.responders.error_status` and `config.responders.redirect_status` to the desired status codes.
|
248
|
+
|
249
|
+
```ruby
|
250
|
+
config.responders.error_status = :unprocessable_entity
|
251
|
+
config.responders.redirect_status = :see_other
|
242
252
|
```
|
243
253
|
|
254
|
+
These can also be set in your custom `ApplicationResponder` if you have generated one: (see install instructions)
|
255
|
+
|
256
|
+
```ruby
|
257
|
+
class ApplicationResponder < ActionController::Responder
|
258
|
+
self.error_status = :unprocessable_entity
|
259
|
+
self.redirect_status = :see_other
|
260
|
+
end
|
261
|
+
```
|
262
|
+
|
263
|
+
_Note_: the application responder generated for new apps already configures a different set of defaults: `422 Unprocessable Entity` for errors, and `303 See Other` for redirects. _Responders may change the defaults to match these in a future major release._
|
264
|
+
|
265
|
+
### Hotwire/Turbo and fetch APIs
|
266
|
+
|
267
|
+
Hotwire/Turbo expects successful redirects after form submissions to respond with HTTP status `303 See Other`, and error responses to be 4xx or 5xx statuses, for example `422 Unprocessable Entity` for displaying form validation errors and `500 Internal Server Error` for other server errors. [Turbo documentation: Redirecting After a Form Submission](https://turbo.hotwired.dev/handbook/drive#redirecting-after-a-form-submission).
|
268
|
+
|
269
|
+
The example configuration showed above matches the statuses that better integrate with Hotwire/Turbo.
|
270
|
+
|
244
271
|
## Examples
|
245
272
|
|
246
273
|
Want more examples ? Check out these blog posts:
|
@@ -249,10 +276,15 @@ Want more examples ? Check out these blog posts:
|
|
249
276
|
* [Three reasons to love ActionController::Responder](http://weblog.rubyonrails.org/2009/8/31/three-reasons-love-responder/)
|
250
277
|
* [My five favorite things about Rails 3](http://www.engineyard.com/blog/2009/my-five-favorite-things-about-rails-3)
|
251
278
|
|
279
|
+
## Supported Ruby / Rails versions
|
280
|
+
|
281
|
+
We intend to maintain support for all Ruby / Rails versions that haven't reached end-of-life.
|
282
|
+
|
283
|
+
For more information about specific versions please check [Ruby](https://www.ruby-lang.org/en/downloads/branches/)
|
284
|
+
and [Rails](https://guides.rubyonrails.org/maintenance_policy.html) maintenance policies, and our test matrix.
|
285
|
+
|
252
286
|
## Bugs and Feedback
|
253
287
|
|
254
288
|
If you discover any bugs or want to drop a line, feel free to create an issue on GitHub.
|
255
289
|
|
256
|
-
http://github.com/heartcombo/responders/issues
|
257
|
-
|
258
290
|
MIT License. Copyright 2020 Rafael França, Carlos Antônio da Silva. Copyright 2009-2019 Plataformatec.
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require "active_support/core_ext/array/extract_options"
|
4
4
|
require "action_controller/metal/mime_responds"
|
5
5
|
|
6
|
-
module ActionController
|
6
|
+
module ActionController # :nodoc:
|
7
7
|
module RespondWith
|
8
8
|
extend ActiveSupport::Concern
|
9
9
|
|
@@ -95,7 +95,10 @@ module ActionController #:nodoc:
|
|
95
95
|
# i.e. its +show+ action.
|
96
96
|
# 2. If there are validation errors, the response
|
97
97
|
# renders a default action, which is <tt>:new</tt> for a
|
98
|
-
# +post+ request or <tt>:edit</tt> for +patch+ or +put
|
98
|
+
# +post+ request or <tt>:edit</tt> for +patch+ or +put+,
|
99
|
+
# and the status is set based on the configured `error_status`.
|
100
|
+
# (defaults to `422 Unprocessable Entity` on new apps,
|
101
|
+
# `200 OK` for compatibility reasons on old apps.)
|
99
102
|
# Thus an example like this -
|
100
103
|
#
|
101
104
|
# respond_to :html, :xml
|
@@ -116,8 +119,8 @@ module ActionController #:nodoc:
|
|
116
119
|
# format.html { redirect_to(@user) }
|
117
120
|
# format.xml { render xml: @user }
|
118
121
|
# else
|
119
|
-
# format.html { render action: "new" }
|
120
|
-
# format.xml { render xml: @user }
|
122
|
+
# format.html { render action: "new", status: :unprocessable_entity }
|
123
|
+
# format.xml { render xml: @user, status: :unprocessable_entity }
|
121
124
|
# end
|
122
125
|
# end
|
123
126
|
# end
|
@@ -194,7 +197,7 @@ module ActionController #:nodoc:
|
|
194
197
|
# need to render a template which is outside of controller's path or you
|
195
198
|
# want to override the default http <tt>:status</tt> code, e.g.
|
196
199
|
#
|
197
|
-
# respond_with(resource, render: { template: 'path/to/template', status:
|
200
|
+
# respond_with(resource, render: { template: 'path/to/template', status: 418 })
|
198
201
|
def respond_with(*resources, &block)
|
199
202
|
if self.class.mimes_for_respond_to.empty?
|
200
203
|
raise "In order to use respond_with, first you need to declare the " \
|
@@ -239,7 +242,7 @@ module ActionController #:nodoc:
|
|
239
242
|
|
240
243
|
# Collect mimes declared in the class method respond_to valid for the
|
241
244
|
# current action.
|
242
|
-
def collect_mimes_from_class_level
|
245
|
+
def collect_mimes_from_class_level # :nodoc:
|
243
246
|
action = action_name.to_sym
|
244
247
|
|
245
248
|
self.class.mimes_for_respond_to.keys.select do |mime|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require "active_support/json"
|
4
4
|
|
5
|
-
module ActionController
|
5
|
+
module ActionController # :nodoc:
|
6
6
|
# Responsible for exposing a resource to different mime requests,
|
7
7
|
# usually depending on the HTTP verb. The responder is triggered when
|
8
8
|
# <code>respond_with</code> is called. The simplest case to study is a GET request:
|
@@ -49,7 +49,7 @@ module ActionController #:nodoc:
|
|
49
49
|
# format.html { redirect_to(@user) }
|
50
50
|
# format.xml { render xml: @user, status: :created, location: @user }
|
51
51
|
# else
|
52
|
-
# format.html { render action: "new" }
|
52
|
+
# format.html { render action: "new", status: :unprocessable_entity }
|
53
53
|
# format.xml { render xml: @user.errors, status: :unprocessable_entity }
|
54
54
|
# end
|
55
55
|
# end
|
@@ -113,13 +113,16 @@ module ActionController #:nodoc:
|
|
113
113
|
# if @task.save
|
114
114
|
# flash[:notice] = 'Task was successfully created.'
|
115
115
|
# else
|
116
|
-
# format.html { render "some_special_template" }
|
116
|
+
# format.html { render "some_special_template", status: :unprocessable_entity }
|
117
117
|
# end
|
118
118
|
# end
|
119
119
|
# end
|
120
120
|
#
|
121
121
|
# Using <code>respond_with</code> with a block follows the same syntax as <code>respond_to</code>.
|
122
122
|
class Responder
|
123
|
+
class_attribute :error_status, default: :ok, instance_writer: false, instance_predicate: false
|
124
|
+
class_attribute :redirect_status, default: :found, instance_writer: false, instance_predicate: false
|
125
|
+
|
123
126
|
attr_reader :controller, :request, :format, :resource, :resources, :options
|
124
127
|
|
125
128
|
DEFAULT_ACTIONS_FOR_VERBS = {
|
@@ -202,9 +205,9 @@ module ActionController #:nodoc:
|
|
202
205
|
if get?
|
203
206
|
raise error
|
204
207
|
elsif has_errors? && default_action
|
205
|
-
render
|
208
|
+
render error_rendering_options
|
206
209
|
else
|
207
|
-
redirect_to navigation_location
|
210
|
+
redirect_to navigation_location, status: redirect_status
|
208
211
|
end
|
209
212
|
end
|
210
213
|
|
@@ -236,6 +239,8 @@ module ActionController #:nodoc:
|
|
236
239
|
def default_render
|
237
240
|
if @default_response
|
238
241
|
@default_response.call(options)
|
242
|
+
elsif !get? && has_errors?
|
243
|
+
controller.render({ status: error_status }.merge!(options))
|
239
244
|
else
|
240
245
|
controller.render(options)
|
241
246
|
end
|
@@ -263,6 +268,8 @@ module ActionController #:nodoc:
|
|
263
268
|
end
|
264
269
|
|
265
270
|
def display_errors
|
271
|
+
# TODO: use `error_status` once we switch the default to be `unprocessable_entity`,
|
272
|
+
# otherwise we'd be changing this behavior here now.
|
266
273
|
controller.render format => resource_errors, :status => :unprocessable_entity
|
267
274
|
end
|
268
275
|
|
@@ -300,11 +307,11 @@ module ActionController #:nodoc:
|
|
300
307
|
@default_response.present?
|
301
308
|
end
|
302
309
|
|
303
|
-
def
|
310
|
+
def error_rendering_options
|
304
311
|
if options[:render]
|
305
312
|
options[:render]
|
306
313
|
else
|
307
|
-
{ action: default_action }
|
314
|
+
{ action: default_action, status: error_status }
|
308
315
|
end
|
309
316
|
end
|
310
317
|
end
|
@@ -8,15 +8,19 @@ module Responders
|
|
8
8
|
desc "Creates an initializer with default responder configuration and copy locale file"
|
9
9
|
|
10
10
|
def create_responder_file
|
11
|
-
create_file "lib/application_responder.rb",
|
12
|
-
class ApplicationResponder < ActionController::Responder
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
create_file "lib/application_responder.rb", <<~RUBY
|
12
|
+
class ApplicationResponder < ActionController::Responder
|
13
|
+
include Responders::FlashResponder
|
14
|
+
include Responders::HttpCacheResponder
|
15
|
+
|
16
|
+
# Redirects resources to the collection path (index action) instead
|
17
|
+
# of the resource path (show action) for POST/PUT/DELETE requests.
|
18
|
+
# include Responders::CollectionResponder
|
19
|
+
|
20
|
+
# Configure default status codes for responding to errors and redirects.
|
21
|
+
self.error_status = :unprocessable_entity
|
22
|
+
self.redirect_status = :see_other
|
23
|
+
end
|
20
24
|
RUBY
|
21
25
|
end
|
22
26
|
|
@@ -72,7 +72,7 @@ module Responders
|
|
72
72
|
#
|
73
73
|
# respond_with(@user, :notice => "Hooray! Welcome!", :alert => "Woot! You failed.")
|
74
74
|
#
|
75
|
-
# * :flash_now - Sets the flash message using flash.now. Accepts true, :on_failure or :
|
75
|
+
# * :flash_now - Sets the flash message using flash.now. Accepts true, :on_failure or :on_success.
|
76
76
|
#
|
77
77
|
# == Configure status keys
|
78
78
|
#
|
@@ -86,15 +86,11 @@ module Responders
|
|
86
86
|
#
|
87
87
|
module FlashResponder
|
88
88
|
class << self
|
89
|
-
attr_accessor :flash_keys, :namespace_lookup
|
89
|
+
attr_accessor :flash_keys, :namespace_lookup
|
90
90
|
end
|
91
91
|
|
92
92
|
self.flash_keys = [ :notice, :alert ]
|
93
93
|
self.namespace_lookup = false
|
94
|
-
self.helper = Object.new.extend(
|
95
|
-
ActionView::Helpers::TranslationHelper,
|
96
|
-
ActionView::Helpers::TagHelper
|
97
|
-
)
|
98
94
|
|
99
95
|
def initialize(controller, resources, options = {})
|
100
96
|
super
|
@@ -128,7 +124,7 @@ module Responders
|
|
128
124
|
return if controller.flash[status].present?
|
129
125
|
|
130
126
|
options = mount_i18n_options(status)
|
131
|
-
message =
|
127
|
+
message = controller.helpers.t options[:default].shift, **options
|
132
128
|
set_flash(status, message)
|
133
129
|
end
|
134
130
|
|
@@ -144,11 +140,11 @@ module Responders
|
|
144
140
|
(default_action && (has_errors? ? @flash_now == :on_failure : @flash_now == :on_success))
|
145
141
|
end
|
146
142
|
|
147
|
-
def set_flash_message?
|
143
|
+
def set_flash_message? # :nodoc:
|
148
144
|
!get? && @flash != false
|
149
145
|
end
|
150
146
|
|
151
|
-
def mount_i18n_options(status)
|
147
|
+
def mount_i18n_options(status) # :nodoc:
|
152
148
|
options = {
|
153
149
|
default: flash_defaults_by_namespace(status),
|
154
150
|
resource_name: resource_name,
|
@@ -164,12 +160,7 @@ module Responders
|
|
164
160
|
end
|
165
161
|
|
166
162
|
def controller_interpolation_options
|
167
|
-
if controller.respond_to?(:flash_interpolation_options, true)
|
168
|
-
controller.send(:flash_interpolation_options)
|
169
|
-
elsif controller.respond_to?(:interpolation_options, true)
|
170
|
-
ActiveSupport::Deprecation.warn("[responders] `#{controller.class}#interpolation_options` is deprecated, please rename it to `flash_interpolation_options`.")
|
171
|
-
controller.send(:interpolation_options)
|
172
|
-
end
|
163
|
+
controller.send(:flash_interpolation_options) if controller.respond_to?(:flash_interpolation_options, true)
|
173
164
|
end
|
174
165
|
|
175
166
|
def resource_name
|
@@ -180,7 +171,7 @@ module Responders
|
|
180
171
|
end
|
181
172
|
end
|
182
173
|
|
183
|
-
def flash_defaults_by_namespace(status)
|
174
|
+
def flash_defaults_by_namespace(status) # :nodoc:
|
184
175
|
defaults = []
|
185
176
|
slices = controller.controller_path.split("/")
|
186
177
|
lookup = Responders::FlashResponder.namespace_lookup
|
data/lib/responders/version.rb
CHANGED
data/lib/responders.rb
CHANGED
@@ -12,7 +12,6 @@ module Responders
|
|
12
12
|
autoload :FlashResponder, "responders/flash_responder"
|
13
13
|
autoload :HttpCacheResponder, "responders/http_cache_responder"
|
14
14
|
autoload :CollectionResponder, "responders/collection_responder"
|
15
|
-
autoload :LocationResponder, "responders/location_responder"
|
16
15
|
|
17
16
|
require "responders/controller_method"
|
18
17
|
|
@@ -20,6 +19,8 @@ module Responders
|
|
20
19
|
config.responders = ActiveSupport::OrderedOptions.new
|
21
20
|
config.responders.flash_keys = [:notice, :alert]
|
22
21
|
config.responders.namespace_lookup = false
|
22
|
+
config.responders.error_status = :ok
|
23
|
+
config.responders.redirect_status = :found
|
23
24
|
|
24
25
|
# Add load paths straight to I18n, so engines and application can overwrite it.
|
25
26
|
require "active_support/i18n"
|
@@ -28,6 +29,8 @@ module Responders
|
|
28
29
|
initializer "responders.flash_responder" do |app|
|
29
30
|
Responders::FlashResponder.flash_keys = app.config.responders.flash_keys
|
30
31
|
Responders::FlashResponder.namespace_lookup = app.config.responders.namespace_lookup
|
32
|
+
ActionController::Responder.error_status = app.config.responders.error_status
|
33
|
+
ActionController::Responder.redirect_status = app.config.responders.redirect_status
|
31
34
|
end
|
32
35
|
end
|
33
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: responders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- José Valim
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '5.
|
26
|
+
version: '5.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: actionpack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
33
|
+
version: '5.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '5.
|
40
|
+
version: '5.2'
|
41
41
|
description: A set of Rails responders to dry up your application
|
42
42
|
email: heartcombo@googlegroups.com
|
43
43
|
executables: []
|
@@ -60,13 +60,16 @@ files:
|
|
60
60
|
- lib/responders/flash_responder.rb
|
61
61
|
- lib/responders/http_cache_responder.rb
|
62
62
|
- lib/responders/locales/en.yml
|
63
|
-
- lib/responders/location_responder.rb
|
64
63
|
- lib/responders/version.rb
|
65
64
|
homepage: https://github.com/heartcombo/responders
|
66
65
|
licenses:
|
67
66
|
- MIT
|
68
|
-
metadata:
|
69
|
-
|
67
|
+
metadata:
|
68
|
+
homepage_uri: https://github.com/heartcombo/responders
|
69
|
+
changelog_uri: https://github.com/heartcombo/responders/blob/master/CHANGELOG.md
|
70
|
+
source_code_uri: https://github.com/heartcombo/responders
|
71
|
+
bug_tracker_uri: https://github.com/heartcombo/responders/issues
|
72
|
+
post_install_message:
|
70
73
|
rdoc_options: []
|
71
74
|
require_paths:
|
72
75
|
- lib
|
@@ -74,15 +77,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
74
77
|
requirements:
|
75
78
|
- - ">="
|
76
79
|
- !ruby/object:Gem::Version
|
77
|
-
version: 2.
|
80
|
+
version: 2.5.0
|
78
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
82
|
requirements:
|
80
83
|
- - ">="
|
81
84
|
- !ruby/object:Gem::Version
|
82
85
|
version: '0'
|
83
86
|
requirements: []
|
84
|
-
rubygems_version: 3.
|
85
|
-
signing_key:
|
87
|
+
rubygems_version: 3.4.5
|
88
|
+
signing_key:
|
86
89
|
specification_version: 4
|
87
90
|
summary: A set of Rails responders to dry up your application
|
88
91
|
test_files: []
|