auther 8.1.1 → 9.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: 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