garden_variety 3.0.0 → 4.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 505860db6877118744ce3b7f1b4de589c12e0adf8687ab8cadc518fec0a52b37
4
- data.tar.gz: a4b18a197a210123c5db5f72c1510e1a4ea75e843c543af98635a842bc04cea3
3
+ metadata.gz: dd6dd125edefcf640a8a2aa1b629510eb3e5526551abfea71738b661c9fe1d83
4
+ data.tar.gz: ec5a4e29f8e1937dd74a88d11fdf087394a95cf67c56ceca177e9ce5fb9ae89e
5
5
  SHA512:
6
- metadata.gz: 1703aa1c557798193c1292c7b6999d18f5962d9bf2ebafc83f13c091342376d3a592f6673c519af285e2baa6228222ad9335ded99687748525c551099b5fe965
7
- data.tar.gz: c005e563d798f172a9437423b6921713642442e44061ab350ae8aadbb062486325af39380dcc6f17cbe67e41f7ee24c234282852a1f469d8d30df9467de98a94
6
+ metadata.gz: bd41cf0735bfabe753a7bb4b5138d76a5e9c572952d5d4fb344f344dfe44926258c1a64ffe67b66875fcae5b09d9640fb8dfb8ce742a812bcbb0cfcad80b0d21
7
+ data.tar.gz: ba7d049d2952075c9a431dbd76b9ced59abc89918dfdbe589a7e8e183654a769669e6396e6e4546984bddf2057e7164a7f921ee849dacdee59c1f2d1ead39177
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Delightfully boring Rails controllers. One of the superb advantages of
4
4
  Ruby on Rails is convention over configuration. Opinionated default
5
- behavior can decrease development time, and increase application
5
+ behavior can decrease development time and increase application
6
6
  robustness (less custom code == less that can go wrong). In service of
7
7
  this principle, *garden_variety* provides reasonable default controller
8
8
  actions, with care to allow easy override.
@@ -139,20 +139,23 @@ end
139
139
  The `::model_class` method returns a class corresponding to the
140
140
  controller name, by default. That value can be overridden using the
141
141
  matching `::model_class=` setter. The `model` / `collection` accessor
142
- methods are dictated by `::model_class`. The rest of the methods can be
143
- overridden as normal, a la carte. For a detailed description of method
144
- behavior, see the [API documentation](http://www.rubydoc.info/gems/garden_variety/).
145
- (Note that the `authorize`, `policy_scope`, and `permitted_attributes`
146
- methods are provided by Pundit.)
142
+ method definitions are dictated by `::model_class`. The rest of the
143
+ methods can be overridden as normal, a la carte. For a detailed
144
+ description of method behavior, see the [API documentation](
145
+ https://www.rubydoc.info/gems/garden_variety/). (Note that the
146
+ `authorize`, `policy_scope`, and `permitted_attributes` methods are
147
+ provided by Pundit.)
147
148
 
148
149
 
149
150
  ## Scaffold generator
150
151
 
151
- *garden_variety* includes a scaffold generator similar to the Rails
152
- scaffold generator:
152
+ *garden_variety* includes a `garden:scaffold` generator similar to the
153
+ Rails `scaffold` generator:
153
154
 
154
155
  ```
155
156
  $ rails generate garden:scaffold post title:string body:text published:boolean
157
+ exist config/locales
158
+ create config/locales/flash.en.yml
156
159
  generate resource
157
160
  invoke active_record
158
161
  create db/migrate/19991231235959_create_posts.rb
@@ -169,11 +172,6 @@ $ rails generate garden:scaffold post title:string body:text published:boolean
169
172
  invoke helper
170
173
  create app/helpers/posts_helper.rb
171
174
  invoke test_unit
172
- invoke assets
173
- invoke coffee
174
- create app/assets/javascripts/posts.coffee
175
- invoke scss
176
- create app/assets/stylesheets/posts.scss
177
175
  invoke resource_route
178
176
  route resources :posts
179
177
  generate erb:scaffold
@@ -183,6 +181,7 @@ $ rails generate garden:scaffold post title:string body:text published:boolean
183
181
  create app/views/posts/show.html.erb
184
182
  create app/views/posts/new.html.erb
185
183
  create app/views/posts/_form.html.erb
184
+ create app/views/posts/_post.html.erb
186
185
  insert app/controllers/posts_controller.rb
187
186
  generate pundit:policy
188
187
  create app/policies/post_policy.rb
@@ -201,10 +200,10 @@ generator in a few small ways:
201
200
 
202
201
  Additionally, if you are using the [talent_scout] gem, the scaffold
203
202
  generator will invoke `rails generate talent_scout:search` for the
204
- specified model. This behavior can be disabled with the `--skip-talent-scout`
205
- option. For more information about integrating with *talent_scout*, see
206
- the [Searching with talent_scout](#searching-with-talent_scout) section
207
- below.
203
+ specified model. This behavior can be disabled with the
204
+ `--skip-talent-scout` option. For more information about integrating
205
+ with *talent_scout*, see the [Searching with talent_scout](
206
+ #searching-with-talent_scout) section below.
208
207
 
209
208
  [talent_scout]: https://rubygems.org/gems/talent_scout
210
209
 
@@ -212,10 +211,10 @@ below.
212
211
  ## Flash messages
213
212
 
214
213
  Flash messages are defined using I18n. The *garden_variety* installer
215
- (`rails generate garden:install`) will create a "config/locales/flash.en.yml"
216
- file containing default "success" and "error" messages. You can edit
217
- this file to customize those messages, or add your own translation files
218
- to support other languages.
214
+ (`rails generate garden:install`) will create a
215
+ "config/locales/flash.en.yml" file containing default "success" and
216
+ "error" messages. You can edit this file to customize those messages,
217
+ or add your own translation files to support other languages.
219
218
 
220
219
  As seen in the `PostsController#flash_message` method in the example
221
220
  above, a prioritized list of keys are tried when retrieving a flash
@@ -231,8 +230,8 @@ Interpolation in flash messages is also supported (as described by
231
230
  by the `flash_options` method. By default, `flash_options` provides a
232
231
  `model_name` value, but you can override it to provide your own values.
233
232
 
234
- [Safe HTML Translations]: http://guides.rubyonrails.org/i18n.html#using-safe-html-translations
235
- [Passing Variables to Translations]: http://guides.rubyonrails.org/i18n.html#passing-variables-to-translations
233
+ [Safe HTML Translations]: https://guides.rubyonrails.org/i18n.html#using-safe-html-translations
234
+ [Passing Variables to Translations]: https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations
236
235
 
237
236
 
238
237
  ## Beyond garden variety behavior
@@ -261,7 +260,7 @@ end
261
260
 
262
261
  ### Pagination
263
262
 
264
- You can integrate your your favorite pagination gem (*may I suggest
263
+ You can integrate your favorite pagination gem (*may I suggest
265
264
  [moar](https://rubygems.org/gems/moar)?*) by overriding the
266
265
  `find_collection` method:
267
266
 
@@ -295,7 +294,7 @@ end
295
294
 
296
295
  If you are using the [talent_scout] gem, the default implementation of
297
296
  `find_collection` will automatically instantiate your model search class
298
- -- no override required. For example, if a `PostSearch` class is
297
+ -- no custom code required. For example, if a `PostSearch` class is
299
298
  defined, `PostsController#find_collection` will be equivalent to:
300
299
 
301
300
  ```ruby
@@ -305,9 +304,11 @@ def find_collection
305
304
  end
306
305
  ```
307
306
 
308
- Notice, as a side effect, the `@search` variable is set for later use in
309
- the view. The model search class will be chosen based on the
310
- controller's `::model_class`. For example:
307
+ Notice, as a side effect, the `@search` instance variable is set for
308
+ later use in the view.
309
+
310
+ The model search class will be chosen based on the controller's
311
+ `::model_class`. For example:
311
312
 
312
313
  ```ruby
313
314
  class MyPostsController < ApplicationController
@@ -457,10 +458,10 @@ end
457
458
  In this example, only the `new` and `create` actions are generated by
458
459
  the `garden_variety` macro. The on-success behavior of `create` is
459
460
  overridden to redirect to `root_path`, using the concise syntax
460
- discussed in the [Integrating with SJR](#integrating-with-sjr) example.
461
- The *garden_variety* controller helper methods all work as expected
462
- because `RegistrationForm` responds to `assign_attributes` and `save`,
463
- and has a default (nullary) constructor.
461
+ discussed in the [Server-generated JavaScript Responses (SJR)](#server-generated-javascript-responses-sjr)
462
+ example. The *garden_variety* controller helper methods all work as
463
+ expected because `RegistrationForm` responds to `assign_attributes` and
464
+ `save`, and has a default (nullary) constructor.
464
465
 
465
466
 
466
467
  ### Non-REST actions
@@ -510,19 +511,13 @@ from RailsConf which delves deeper into the principle:
510
511
 
511
512
  ## Installation
512
513
 
513
- Add this line to your application's Gemfile:
514
-
515
- ```ruby
516
- gem "garden_variety"
517
- ```
518
-
519
- Then execute:
514
+ Add the gem to your Gemfile:
520
515
 
521
516
  ```bash
522
- $ bundle install
517
+ $ bundle add garden_variety
523
518
  ```
524
519
 
525
- And finally, run the install generator:
520
+ And run the install generator:
526
521
 
527
522
  ```bash
528
523
  $ rails generate garden:install
@@ -533,9 +528,9 @@ This will also run the Pundit install generator, if necessary.
533
528
 
534
529
  ## Contributing
535
530
 
536
- Run `rake test` to run the tests.
531
+ Run `bin/test` to run the tests.
537
532
 
538
533
 
539
534
  ## License
540
535
 
541
- [MIT License](https://opensource.org/licenses/MIT)
536
+ [MIT License](MIT-LICENSE)
data/Rakefile CHANGED
@@ -1,22 +1,3 @@
1
- begin
2
- require 'bundler/setup'
3
- rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
- end
6
-
7
- require 'yard'
8
-
9
- YARD::Rake::YardocTask.new(:doc) do |t|
10
- end
1
+ require 'bundler/setup'
11
2
 
12
3
  require 'bundler/gem_tasks'
13
-
14
- require 'rake/testtask'
15
-
16
- Rake::TestTask.new(:test) do |t|
17
- t.libs << 'test'
18
- t.test_files = FileList['test/**/*_test.rb'].exclude('test/tmp/**/*')
19
- t.verbose = false
20
- end
21
-
22
- task default: :test
@@ -1,6 +1,6 @@
1
1
  module GardenVariety
2
2
 
3
- REDIRECT_CODES = [301, 302, 303, 307, 308]
3
+ REDIRECT_CODES = [301, 302, 303, 307, 308].to_set
4
4
 
5
5
  module IndexAction
6
6
  # Garden variety controller +index+ action.
@@ -94,8 +94,8 @@ module GardenVariety
94
94
  end
95
95
 
96
96
  # Map of controller action name to action module. Used by the
97
- # {GardenVariety::Controller::ClassMethods#garden_variety} macro to
98
- # include desired controller actions.
97
+ # {GardenVariety::Controller::ClassMethods#garden_variety
98
+ # garden_variety} macro to include desired controller actions.
99
99
  ACTION_MODULES = {
100
100
  index: IndexAction,
101
101
  show: ShowAction,
@@ -2,7 +2,7 @@ module GardenVariety
2
2
  module Controller
3
3
  extend ActiveSupport::Concern
4
4
 
5
- include Pundit
5
+ include Pundit::Authorization
6
6
 
7
7
  module ClassMethods
8
8
  # Macro to include garden variety implementations of specified
@@ -10,16 +10,15 @@ module GardenVariety
10
10
  # typical REST actions (index, show, new, create, edit, update,
11
11
  # destroy) are included.
12
12
  #
13
- # See also:
14
- # - {GardenVariety::IndexAction}
15
- # - {GardenVariety::ShowAction}
16
- # - {GardenVariety::NewAction}
17
- # - {GardenVariety::CreateAction}
18
- # - {GardenVariety::EditAction}
19
- # - {GardenVariety::UpdateAction}
20
- # - {GardenVariety::DestroyAction}
13
+ # @see GardenVariety::IndexAction
14
+ # @see GardenVariety::ShowAction
15
+ # @see GardenVariety::NewAction
16
+ # @see GardenVariety::CreateAction
17
+ # @see GardenVariety::EditAction
18
+ # @see GardenVariety::UpdateAction
19
+ # @see GardenVariety::DestroyAction
21
20
  #
22
- # @example default usage
21
+ # @example Default actions
23
22
  # # This...
24
23
  # class PostsController < ApplicationController
25
24
  # garden_variety
@@ -36,7 +35,7 @@ module GardenVariety
36
35
  # include GardenVariety::DestroyAction
37
36
  # end
38
37
  #
39
- # @example specific usage
38
+ # @example Specific actions
40
39
  # # This...
41
40
  # class PostsController < ApplicationController
42
41
  # garden_variety :index, :show
@@ -104,7 +103,7 @@ module GardenVariety
104
103
 
105
104
  # @!visibility public
106
105
  # Returns the value of the singular-form instance variable dictated
107
- # by {::model_class}.
106
+ # by {ClassMethods#model_class ::model_class}.
108
107
  #
109
108
  # @example
110
109
  # class PostsController
@@ -123,7 +122,7 @@ module GardenVariety
123
122
 
124
123
  # @!visibility public
125
124
  # Sets the value of the singular-form instance variable dictated
126
- # by {::model_class}.
125
+ # by {ClassMethods#model_class ::model_class}.
127
126
  #
128
127
  # @example
129
128
  # class PostsController
@@ -143,7 +142,7 @@ module GardenVariety
143
142
 
144
143
  # @!visibility public
145
144
  # Returns the value of the plural-form instance variable dictated
146
- # by {::model_class}.
145
+ # by {ClassMethods#model_class ::model_class}.
147
146
  #
148
147
  # @example
149
148
  # class PostsController
@@ -162,7 +161,7 @@ module GardenVariety
162
161
 
163
162
  # @!visibility public
164
163
  # Sets the value of the plural-form instance variable dictated
165
- # by {::model_class}.
164
+ # by {ClassMethods#model_class ::model_class}.
166
165
  #
167
166
  # @example
168
167
  # class PostsController
@@ -181,9 +180,9 @@ module GardenVariety
181
180
  end
182
181
 
183
182
  # @!visibility public
184
- # Returns an ActiveRecord::Relation representing model instances
185
- # corresponding to the controller. Designed for use in generic
186
- # +index+ action methods.
183
+ # Returns an ActiveRecord::Relation representing instances of
184
+ # {ClassMethods#model_class ::model_class}. Designed for use in
185
+ # generic +index+ action methods.
187
186
  #
188
187
  # @example
189
188
  # class PostsController < ApplicationController
@@ -198,10 +197,10 @@ module GardenVariety
198
197
  end
199
198
 
200
199
  # @!visibility public
201
- # Returns a model instance corresponding to the controller and the
202
- # id parameter of the current request (i.e. +params[:id]+).
203
- # Designed for use in generic +show+, +edit+, +update+, and
204
- # +destroy+ action methods.
200
+ # Returns an instance of {ClassMethods#model_class ::model_class}
201
+ # matching the +:id+ parameter of the current request (i.e.
202
+ # +params[:id]+). Designed for use in generic +show+, +edit+,
203
+ # +update+, and +destroy+ action methods.
205
204
  #
206
205
  # @example
207
206
  # class PostsController < ApplicationController
@@ -211,12 +210,14 @@ module GardenVariety
211
210
  # end
212
211
  #
213
212
  # @return [ActiveRecord::Base]
213
+ # @raise [ActiveRecord::RecordNotFound]
214
+ # if a model instance with matching +:id+ cannot be found
214
215
  def find_model
215
216
  self.class.model_class.find(params[:id])
216
217
  end
217
218
 
218
219
  # @!visibility public
219
- # Returns a new model instance corresponding to the controller.
220
+ # Returns a new instance of {ClassMethods#model_class ::model_class}.
220
221
  # Designed for use in generic +new+ and +create+ action methods.
221
222
  #
222
223
  # @example
@@ -232,9 +233,9 @@ module GardenVariety
232
233
  end
233
234
 
234
235
  # @!visibility public
235
- # Populates the given model's attributes with the current request
236
- # params permitted by the model's Pundit policy. Returns the given
237
- # model modified but not persisted.
236
+ # Populates the given +model+'s attributes with the current request
237
+ # params permitted by the corresponding Pundit policy. Returns the
238
+ # given +model+ modified but not persisted.
238
239
  #
239
240
  # @example
240
241
  # class PostsController < ApplicationController
@@ -256,23 +257,23 @@ module GardenVariety
256
257
  end
257
258
 
258
259
  # @!visibility public
259
- # Returns Hash of values for interpolation in flash messages via
260
- # I18n. By default, returns a +model_name+ key / value pair based
261
- # on the controller's {Controller::ClassMethods#model_name}.
260
+ # Returns a Hash of values for interpolation in flash messages via
261
+ # I18n. By default, returns a +:model_name+ key / value pair with
262
+ # the humanized name of {ClassMethods#model_class ::model_class}.
262
263
  # Override this method to provide your own values. Be aware that
263
- # certain option names, such as +default+ and +scope+, are reserved
264
- # by the I18n gem, and can not be used for interpolation. See the
265
- # {https://www.rubydoc.info/gems/i18n I18n documentation} for more
266
- # information.
264
+ # certain option names, such as +:default+ and +:scope+, are
265
+ # reserved by the I18n gem, and can not be used for interpolation.
266
+ # See the {https://www.rubydoc.info/gems/i18n I18n documentation}
267
+ # for more information.
267
268
  #
268
- # @return [Hash]
269
+ # @return [Hash{Symbol => #to_s}]
269
270
  def flash_options
270
271
  { model_name: self.class.model_name.human }
271
272
  end
272
273
 
273
274
  # @!visibility public
274
275
  # Returns a flash message appropriate to the controller, the current
275
- # action, and a given status. The flash message is looked up via
276
+ # action, and a given +status+. The flash message is looked up via
276
277
  # I18n using a prioritized list of possible keys. The key priority
277
278
  # is as follows:
278
279
  #
@@ -329,7 +330,7 @@ module GardenVariety
329
330
  :"flash.#{status}",
330
331
  :"flash.#{status}_html",
331
332
  ]
332
- helpers.translate(keys.shift, { default: keys }.merge!(flash_options))
333
+ helpers.translate(keys.shift, default: keys, **flash_options)
333
334
  end
334
335
  end
335
336
  end
@@ -1,3 +1,3 @@
1
1
  module GardenVariety
2
- VERSION = "3.0.0"
2
+ VERSION = "4.0.0"
3
3
  end
@@ -1,7 +1,11 @@
1
+ require "generators/garden/optimized_generate_action"
2
+
1
3
  # @!visibility private
2
4
  module Garden
3
5
  module Generators
4
6
  class InstallGenerator < Rails::Generators::Base
7
+ include OptimizedGenerateAction
8
+
5
9
  source_root File.join(__dir__, "templates")
6
10
 
7
11
  def copy_locales
@@ -0,0 +1,14 @@
1
+ # @!visibility private
2
+ module Garden
3
+ module OptimizedGenerateAction
4
+ def generate(what, *args)
5
+ log :generate, what
6
+
7
+ in_root do
8
+ silence_warnings do
9
+ ::Rails::Command.invoke("generate", [what, *args])
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,11 @@
1
+ require "generators/garden/optimized_generate_action"
2
+
1
3
  # @!visibility private
2
4
  module Garden
3
5
  module Generators
4
6
  class ScaffoldGenerator < Rails::Generators::Base
7
+ include OptimizedGenerateAction
8
+
5
9
  source_root File.join(__dir__, "templates")
6
10
 
7
11
  argument :resource, type: :string
@@ -12,7 +16,7 @@ module Garden
12
16
  class_option :template_engine
13
17
 
14
18
  class_option :talent_scout, type: :boolean, default: true,
15
- description: "Invoke talent_scout:search generator"
19
+ desc: "Invoke talent_scout:search generator"
16
20
 
17
21
  # override +initialize+ because it is the only way to reliably
18
22
  # capture the raw input arguments in order to pass them on to
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: garden_variety
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Hefner
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-03-17 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rails
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '5.1'
18
+ version: '8.1'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '5.1'
25
+ version: '8.1'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: pundit
29
28
  requirement: !ruby/object:Gem::Requirement
@@ -38,51 +37,8 @@ dependencies:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
39
  version: '2.0'
41
- - !ruby/object:Gem::Dependency
42
- name: sqlite3
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: yard
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.9'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.9'
69
- - !ruby/object:Gem::Dependency
70
- name: talent_scout
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- description:
84
40
  email:
85
- - jonathan.hefner@gmail.com
41
+ - jonathan@hefner.pro
86
42
  executables: []
87
43
  extensions: []
88
44
  extra_rdoc_files: []
@@ -99,12 +55,14 @@ files:
99
55
  - lib/garden_variety/version.rb
100
56
  - lib/generators/garden/install/install_generator.rb
101
57
  - lib/generators/garden/install/templates/locales/flash.en.yml
58
+ - lib/generators/garden/optimized_generate_action.rb
102
59
  - lib/generators/garden/scaffold/scaffold_generator.rb
103
60
  homepage: https://github.com/jonathanhefner/garden_variety
104
61
  licenses:
105
62
  - MIT
106
- metadata: {}
107
- post_install_message:
63
+ metadata:
64
+ source_code_uri: https://github.com/jonathanhefner/garden_variety
65
+ changelog_uri: https://github.com/jonathanhefner/garden_variety/blob/master/CHANGELOG.md
108
66
  rdoc_options: []
109
67
  require_paths:
110
68
  - lib
@@ -112,15 +70,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
70
  requirements:
113
71
  - - ">="
114
72
  - !ruby/object:Gem::Version
115
- version: '0'
73
+ version: '3.4'
116
74
  required_rubygems_version: !ruby/object:Gem::Requirement
117
75
  requirements:
118
76
  - - ">="
119
77
  - !ruby/object:Gem::Version
120
78
  version: '0'
121
79
  requirements: []
122
- rubygems_version: 3.0.1
123
- signing_key:
80
+ rubygems_version: 4.0.10
124
81
  specification_version: 4
125
82
  summary: Delightfully boring Rails controllers
126
83
  test_files: []