auther 8.1.1 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d28e7eb9c4cc447ddc6a22ba26facbe31c366c59af9d10497a1dd69fe0e7d55
4
- data.tar.gz: ab32e59141f9f35f7476cad12ec5cd86a573956efe37a8435aeda8287d0091e1
3
+ metadata.gz: 14e8ae7299b00dabe60f19df5a340d05213b0ab1846ed7e3128609509730de00
4
+ data.tar.gz: 5536af213a4974c84cb701c0d79fb9944247716ac48ce015d8b4ca6bca5eade8
5
5
  SHA512:
6
- metadata.gz: 410324c4c59a3eaea2f977f6c089ec9f68bdc9b28985d622e9f90d2231da3b3335ed6de892b3c5dad55e882c69f56496539ec63e56a21a1eb3ce64b863648d25
7
- data.tar.gz: 0f4333de3b53b70916f820b40afa9d0516a28d798051dc09a22286214ac755880e41bd7c19f01e8ab78ef74d8a738ee639603d3b0657a88792ca018389be3ea6
6
+ metadata.gz: 23b064f2e6be5fa0cab05f9a9cc55efca379ee81d0eae9222b97d1092016a107f4d2265ffef783103cd91837906cfe84cfe0cc1ee2ceff0f7090e4bb4ea53e43
7
+ data.tar.gz: 3eb317e1a599a1e5cf0dd073ba53284fd0f3a726479900b75b24c8d69bfc1aad3595cc038c7adc1b732f9ba83cc52535fd1ee34d43427c74d8ec2c57f10e3137
Binary file
data.tar.gz.sig CHANGED
Binary file
data/LICENSE.md CHANGED
@@ -1,20 +1,163 @@
1
- Copyright (c) 2014 [Alchemists](https://www.alchemists.io).
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ # Apache License
2
+
3
+ Version 2.0, January 2004
4
+
5
+ http://www.apache.org/licenses
6
+
7
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
8
+
9
+ ## 1. Definitions
10
+
11
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by
12
+ Sections 1 through 9 of this document.
13
+
14
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
15
+ granting the License.
16
+
17
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are
18
+ controlled by, or are under common control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the direction or management of such
20
+ entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this
24
+ License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications, including but not limited to
27
+ software source code, documentation source, and configuration files.
28
+
29
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a
30
+ Source form, including but not limited to compiled object code, generated documentation, and
31
+ conversions to other media types.
32
+
33
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the
34
+ License, as indicated by a copyright notice that is included in or attached to the work (an example
35
+ is provided in the Appendix below).
36
+
37
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or
38
+ derived from) the Work and for which the editorial revisions, annotations, elaborations, or other
39
+ modifications represent, as a whole, an original work of authorship. For the purposes of this
40
+ License, Derivative Works shall not include works that remain separable from, or merely link (or
41
+ bind by name) to the interfaces of, the Work and Derivative Works thereof.
42
+
43
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any
44
+ modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted
45
+ to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity
46
+ authorized to submit on behalf of the copyright owner. For the purposes of this definition,
47
+ "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or
48
+ its representatives, including but not limited to communication on electronic mailing lists, source
49
+ code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor
50
+ for the purpose of discussing and improving the Work, but excluding communication that is
51
+ conspicuously marked or otherwise designated in writing by the copyright owner as "Not a
52
+ Contribution."
53
+
54
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
55
+ Contribution has been received by Licensor and subsequently incorporated within the Work.
56
+
57
+ ## 2. Grant of Copyright License
58
+
59
+ Subject to the terms and conditions of this License, each Contributor hereby grants to You a
60
+ perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to
61
+ reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and
62
+ distribute the Work and such Derivative Works in Source or Object form.
63
+
64
+ ## 3. Grant of Patent License
65
+
66
+ Subject to the terms and conditions of this License, each Contributor hereby grants to You a
67
+ perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this
68
+ section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer
69
+ the Work, where such license applies only to those patent claims licensable by such Contributor that
70
+ are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s)
71
+ with the Work to which such Contribution(s) was submitted. If You institute patent litigation
72
+ against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or
73
+ a Contribution incorporated within the Work constitutes direct or contributory patent infringement,
74
+ then any patent licenses granted to You under this License for that Work shall terminate as of the
75
+ date such litigation is filed.
76
+
77
+ ## 4. Redistribution
78
+
79
+ You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with
80
+ or without modifications, and in Source or Object form, provided that You meet the following
81
+ conditions:
82
+
83
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
84
+
85
+ 2. You must cause any modified files to carry prominent notices stating that You changed the
86
+ files; and
87
+
88
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright,
89
+ patent, trademark, and attribution notices from the Source form of the Work, excluding those
90
+ notices that do not pertain to any part of the Derivative Works; and
91
+
92
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative
93
+ Works that You distribute must include a readable copy of the attribution notices contained
94
+ within such NOTICE file, excluding those notices that do not pertain to any part of the
95
+ Derivative Works, in at least one of the following places: within a NOTICE text file
96
+ distributed as part of the Derivative Works; within the Source form or documentation, if
97
+ provided along with the Derivative Works; or, within a display generated by the Derivative
98
+ Works, if and wherever such third-party notices normally appear. The contents of the NOTICE
99
+ file are for informational purposes only and do not modify the License. You may add Your own
100
+ attribution notices within Derivative Works that You distribute, alongside or as an addendum to
101
+ the NOTICE text from the Work, provided that such additional attribution notices cannot be
102
+ construed as modifying the License.
103
+
104
+ You may add Your own copyright statement to Your modifications and may provide additional or
105
+ different license terms and conditions for use, reproduction, or distribution of Your modifications,
106
+ or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of
107
+ the Work otherwise complies with the conditions stated in this License.
108
+
109
+ ## 5. Submission of Contributions
110
+
111
+ Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the
112
+ Work by You to the Licensor shall be under the terms and conditions of this License, without any
113
+ additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify
114
+ the terms of any separate license agreement you may have executed with Licensor regarding such
115
+ Contributions.
116
+
117
+ ## 6. Trademarks
118
+
119
+ This License does not grant permission to use the trade names, trademarks, service marks, or product
120
+ names of the Licensor, except as required for reasonable and customary use in describing the origin
121
+ of the Work and reproducing the content of the NOTICE file.
122
+
123
+ ## 7. Disclaimer of Warranty
124
+
125
+ Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each
126
+ Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
127
+ KIND, either express or implied, including, without limitation, any warranties or conditions of
128
+ TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely
129
+ responsible for determining the appropriateness of using or redistributing the Work and assume any
130
+ risks associated with Your exercise of permissions under this License.
131
+
132
+ ## 8. Limitation of Liability
133
+
134
+ In no event and under no legal theory, whether in tort (including negligence), contract, or
135
+ otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or
136
+ agreed to in writing, shall any Contributor be liable to You for damages, including any direct,
137
+ indirect, special, incidental, or consequential damages of any character arising as a result of this
138
+ License or out of the use or inability to use the Work (including but not limited to damages for
139
+ loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial
140
+ damages or losses), even if such Contributor has been advised of the possibility of such damages.
141
+
142
+ ## 9. Accepting Warranty or Additional Liability
143
+
144
+ While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee
145
+ for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
146
+ consistent with this License. However, in accepting such obligations, You may act only on Your own
147
+ behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You
148
+ agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or
149
+ claims asserted against, such Contributor by reason of your accepting any such warranty or
150
+ additional liability.
151
+
152
+ END OF TERMS AND CONDITIONS
153
+
154
+ Copyright 2014 [Alchemists](https://www.alchemists.io).
155
+
156
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
157
+ compliance with the License. You may obtain a [copy](http://www.apache.org/licenses/LICENSE-2.0) of
158
+ the License.
159
+
160
+ Unless required by applicable law or agreed to in writing, software distributed under the License is
161
+ distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
162
+ implied. See the License for the specific language governing permissions and limitations under the
163
+ License.
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Auther
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/auther.svg)](http://badge.fury.io/rb/auther)
4
- [![Code Climate GPA](https://codeclimate.com/github/bkuhlmann/auther.svg)](https://codeclimate.com/github/bkuhlmann/auther)
5
- [![Code Climate Coverage](https://codeclimate.com/github/bkuhlmann/auther/coverage.svg)](https://codeclimate.com/github/bkuhlmann/auther)
4
+ [![Code Climate Maintainability](https://api.codeclimate.com/v1/badges/3172d51796930fcdfad8/maintainability)](https://codeclimate.com/github/bkuhlmann/auther/maintainability)
5
+ [![Code Climate Test Coverage](https://api.codeclimate.com/v1/badges/3172d51796930fcdfad8/test_coverage)](https://codeclimate.com/github/bkuhlmann/auther/test_coverage)
6
6
  [![Gemnasium Status](https://gemnasium.com/bkuhlmann/auther.svg)](https://gemnasium.com/bkuhlmann/auther)
7
7
  [![Circle CI Status](https://circleci.com/gh/bkuhlmann/auther.svg?style=svg)](https://circleci.com/gh/bkuhlmann/auther)
8
8
  [![Patreon](https://img.shields.io/badge/patreon-donate-brightgreen.svg)](https://www.patreon.com/bkuhlmann)
@@ -49,28 +49,19 @@ user experience.
49
49
 
50
50
  - Uses CSS Flexbox for lightweight styling.
51
51
  - Uses encrypted account credentials to keep sensitive information secure.
52
- - Supports multiple accounts with account specific blacklists.
52
+ - Supports multiple accounts with optional path exclude lists.
53
53
  - Supports customizable routes, models, presenters, views, controllers, and loggers.
54
54
  - Provides a generator for easy install and setup within an existing project.
55
55
  - Provides auto-redirection to requested path for verified credentials.
56
56
 
57
57
  ## Requirements
58
58
 
59
- 0. [Ruby 2.4.x](https://www.ruby-lang.org).
59
+ 0. [Ruby 2.5.x](https://www.ruby-lang.org).
60
60
  0. [Ruby on Rails 5.x.x](http://rubyonrails.org).
61
61
 
62
62
  ## Setup
63
63
 
64
- For a secure install, type the following from the command line (recommended):
65
-
66
- gem cert --add <(curl --location --silent https://www.alchemists.io/gem-public.pem)
67
- gem install auther --trust-policy MediumSecurity
68
-
69
- NOTE: A HighSecurity trust policy would be best but MediumSecurity enables signed gem verification
70
- while allowing the installation of unsigned dependencies since they are beyond the scope of this
71
- gem.
72
-
73
- For an insecure install, type the following (not recommended):
64
+ Type the following to install:
74
65
 
75
66
  gem install auther
76
67
 
@@ -145,11 +136,11 @@ The initializer can be customized as follows:
145
136
  - *name* - Required. The account name that uniquely identifies the account.
146
137
  - *encrypted_login* - Required. The encrypted account login.
147
138
  - *encrypted_password* - Required. The encrypted account password.
148
- - *paths* - Required. The array of blacklisted paths for which only this account has access to.
139
+ - *paths* - Required. The array of excluded paths for which only this account has access to.
149
140
  - *authorized_url* - Optional. The URL to redirect to upon successful authorization. Authorized
150
141
  redirection works in the order defined:
151
- - The blacklisted path (if requested prior to authorization but now authorized).
152
- - The authorized URL (if defined and the blacklisted path wasn't requested).
142
+ - The excluded path (if requested prior to authorization but now authorized).
143
+ - The authorized URL (if defined and the excluded path wasn't requested).
153
144
  - The root path (if none of the above).
154
145
  - *deauthorized_url* - Optional. The URL to redirect to upon successful deauthorization (i.e.
155
146
  logout). Deauthorized redirections works as follows (in the order defined):
@@ -219,7 +210,7 @@ As mentioned in the setup above, the logger can be customized as follows:
219
210
  When logging is enabled, you'll be able to see the following information in the server logs to help
220
211
  debug custom Auther settings:
221
212
 
222
- - Requested path and blacklist path detection.
213
+ - Requested path and excluded path detection.
223
214
  - Finding (or not finding) of account.
224
215
  - Account authentication pass/fail.
225
216
  - Account and path authorization pass/fail.
@@ -27,6 +27,7 @@ module Auther
27
27
  render template: new_template_path
28
28
  end
29
29
  end
30
+ # rubocop:enable Metrics/AbcSize
30
31
 
31
32
  def destroy
32
33
  account = Auther::Account.new settings.find_account(params[:name])
@@ -29,5 +29,6 @@ module Auther
29
29
  @authorized_url = options.fetch :authorized_url, nil
30
30
  @deauthorized_url = options.fetch :deauthorized_url, nil
31
31
  end
32
+ # rubocop:enable Style/OptionHash
32
33
  end
33
34
  end
@@ -10,6 +10,7 @@ module Auther
10
10
  @account_presenter = account_presenter
11
11
  @logger = logger
12
12
  end
13
+ # rubocop:enable Metrics/ParameterLists
13
14
 
14
15
  def authenticated?
15
16
  account_model.valid? &&
@@ -55,9 +55,9 @@ module Auther
55
55
  end
56
56
 
57
57
  # rubocop:disable Metrics/ParameterLists
58
- def log_authorization authorized, account_name, blacklist, request_path
58
+ def log_authorization authorized, account_name, excludes, request_path
59
59
  details = %(Account: "#{account_name}". ) +
60
- %(Blacklist: #{blacklist}. ) +
60
+ %(Excludes: #{excludes}. ) +
61
61
  %(Request Path: "#{request_path}".)
62
62
 
63
63
  if authorized
@@ -66,6 +66,7 @@ module Auther
66
66
  log_info %(Authorization failed! #{details})
67
67
  end
68
68
  end
69
+ # rubocop:enable Metrics/ParameterLists
69
70
 
70
71
  def find_account
71
72
  session["auther_init"] = true # Force session to initialize.
@@ -80,13 +81,13 @@ module Auther
80
81
  paths.map { |path| path.chomp "/" }
81
82
  end
82
83
 
83
- def blacklisted_paths
84
+ def excluded_paths
84
85
  paths = settings.accounts.map { |account| clean_paths account.fetch(:paths) }
85
86
  paths.flatten.uniq
86
87
  end
87
88
 
88
- def blacklisted_matched_paths path
89
- blacklisted_paths.select { |blacklisted_path| path.include? blacklisted_path }
89
+ def excluded_matched_paths path
90
+ excluded_paths.select { |excluded_path| path.include? excluded_path }
90
91
  end
91
92
 
92
93
  # rubocop:disable Metrics/AbcSize
@@ -101,6 +102,7 @@ module Auther
101
102
 
102
103
  session_login == account_login && session_password == account_password
103
104
  end
105
+ # rubocop:enable Metrics/AbcSize
104
106
 
105
107
  def authenticated? account
106
108
  authenticated = account_authenticated? account
@@ -112,7 +114,7 @@ module Auther
112
114
  end
113
115
 
114
116
  def account_authorized? account, path
115
- all_paths = blacklisted_paths
117
+ all_paths = excluded_paths
116
118
  account_paths = clean_paths account.fetch(:paths)
117
119
  restricted_paths = all_paths - account_paths
118
120
 
@@ -122,9 +124,9 @@ module Auther
122
124
  end
123
125
 
124
126
  def authorized? path
125
- if blacklisted_matched_paths(path).any?
126
- log_info %(Requested path "#{request.path}" found in blacklisted paths: ) +
127
- %(#{blacklisted_paths}.)
127
+ if excluded_matched_paths(path).any?
128
+ log_info %(Requested path "#{request.path}" found in excluded paths: ) +
129
+ %(#{excluded_paths}.)
128
130
  account = find_account
129
131
  account && authenticated?(account) && account_authorized?(account, path)
130
132
  else
@@ -132,4 +134,5 @@ module Auther
132
134
  end
133
135
  end
134
136
  end
137
+ # rubocop:enable Metrics/ClassLength
135
138
  end
@@ -12,7 +12,7 @@ module Auther
12
12
  end
13
13
 
14
14
  def self.version
15
- "8.1.1"
15
+ "9.0.0"
16
16
  end
17
17
 
18
18
  def self.version_label
@@ -20,6 +20,7 @@ module Auther
20
20
  @auth_url = auth_url
21
21
  @logger = logger
22
22
  end
23
+ # rubocop:enable Metrics/ParameterLists
23
24
 
24
25
  def find_account name
25
26
  accounts.find { |account| account.fetch(:name) == name }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auther
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.1.1
4
+ version: 9.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -30,7 +30,7 @@ cert_chain:
30
30
  MQXa5aqjoFEODxVbBBI6NyNVH4gMKDsILEFlH/mcBQKKQwXj2McJmB8jIG+WuKoE
31
31
  GyTL6s+8CnN9sL2Spfh/YdRn/29r4g2qi6FomQ==
32
32
  -----END CERTIFICATE-----
33
- date: 2017-11-19 00:00:00.000000000 Z
33
+ date: 2018-01-01 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: rails
@@ -150,28 +150,28 @@ dependencies:
150
150
  requirements:
151
151
  - - "~>"
152
152
  - !ruby/object:Gem::Version
153
- version: '10.4'
153
+ version: '11.0'
154
154
  type: :development
155
155
  prerelease: false
156
156
  version_requirements: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - "~>"
159
159
  - !ruby/object:Gem::Version
160
- version: '10.4'
160
+ version: '11.0'
161
161
  - !ruby/object:Gem::Dependency
162
162
  name: git-cop
163
163
  requirement: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - "~>"
166
166
  - !ruby/object:Gem::Version
167
- version: '1.7'
167
+ version: '2.0'
168
168
  type: :development
169
169
  prerelease: false
170
170
  version_requirements: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - "~>"
173
173
  - !ruby/object:Gem::Version
174
- version: '1.7'
174
+ version: '2.0'
175
175
  - !ruby/object:Gem::Dependency
176
176
  name: guard-rspec
177
177
  requirement: !ruby/object:Gem::Requirement
@@ -290,14 +290,14 @@ dependencies:
290
290
  requirements:
291
291
  - - "~>"
292
292
  - !ruby/object:Gem::Version
293
- version: '0.51'
293
+ version: '0.52'
294
294
  type: :development
295
295
  prerelease: false
296
296
  version_requirements: !ruby/object:Gem::Requirement
297
297
  requirements:
298
298
  - - "~>"
299
299
  - !ruby/object:Gem::Version
300
- version: '0.51'
300
+ version: '0.52'
301
301
  - !ruby/object:Gem::Dependency
302
302
  name: wirb
303
303
  requirement: !ruby/object:Gem::Requirement
@@ -345,7 +345,7 @@ files:
345
345
  - lib/generators/auther/templates/config/initializers/auther.rb
346
346
  homepage: https://github.com/bkuhlmann/auther
347
347
  licenses:
348
- - MIT
348
+ - Apache-2.0
349
349
  metadata: {}
350
350
  post_install_message:
351
351
  rdoc_options: []
@@ -355,7 +355,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
355
355
  requirements:
356
356
  - - "~>"
357
357
  - !ruby/object:Gem::Version
358
- version: '2.4'
358
+ version: '2.5'
359
359
  required_rubygems_version: !ruby/object:Gem::Requirement
360
360
  requirements:
361
361
  - - ">="
@@ -363,7 +363,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
363
363
  version: '0'
364
364
  requirements: []
365
365
  rubyforge_project:
366
- rubygems_version: 2.7.2
366
+ rubygems_version: 2.7.4
367
367
  signing_key:
368
368
  specification_version: 4
369
369
  summary: Enhances Rails with multi-account, form-based, database-less, application-wide
metadata.gz.sig CHANGED
Binary file