pundit 2.0.0 → 2.1.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: 6b973703e2b1653c804d138fb24c204807e41885a81f5b172656d032d7c2a75a
4
- data.tar.gz: 01211cab222a4c16f274e041c074b2d2a1763a4943ab26b6dba938272297a48d
3
+ metadata.gz: 371516754ff155f90b2093a0ce80aacf097ab555027b19ea22b7c823de72a66a
4
+ data.tar.gz: 41e69a7d6a317b46ad35d1d1485d2119b443b8a430e5c78e62935ec502c7d08f
5
5
  SHA512:
6
- metadata.gz: 812528978ec4e8d3322af071c3ebd5b31f4123be449d3fe9bfea1e1fd2845704e0fee308d4cdd6e787636987b1d7a03527f8eae5fe5968483a1f4c5f751b40ef
7
- data.tar.gz: c433160a559102336b9a268ec1311a47e8f54e427ad8618b048634435259612a92d9b9187fefb6d7cc4a1ce5576a37f3e51b7adad1e3773d21c2bb6e9827c26f
6
+ metadata.gz: c77a792bec5d87f487fd3ee419d00745dcab754bd1bd38504d9987b71d80be3bd32fb1aab8419a8e63ef3c3718e1bd8a255ff0117be8f8a5c743c221d87fccdd
7
+ data.tar.gz: 3086b4036cdbafb499f462f22405f185c83d12c8d8175136531dd053733320574b3d5d05c8379895940d854d54d7abb59d6a0958a9d0e6fdfc03f7691883c3ab
data/.rubocop.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  AllCops:
2
2
  DisplayCopNames: true
3
- TargetRubyVersion: 2.1
3
+ TargetRubyVersion: 2.2
4
4
  Exclude:
5
5
  - "gemfiles/**/*"
6
6
  - "vendor/**/*"
@@ -30,33 +30,9 @@ Metrics/CyclomaticComplexity:
30
30
  Metrics/PerceivedComplexity:
31
31
  Enabled: false
32
32
 
33
- Style/StructInheritance:
34
- Enabled: false
35
-
36
33
  Layout/AlignParameters:
37
34
  EnforcedStyle: with_fixed_indentation
38
35
 
39
- Style/StringLiterals:
40
- EnforcedStyle: double_quotes
41
-
42
- Style/StringLiteralsInInterpolation:
43
- EnforcedStyle: double_quotes
44
-
45
- Layout/ClosingParenthesisIndentation:
46
- Enabled: false
47
-
48
- Style/OneLineConditional:
49
- Enabled: false
50
-
51
- Style/AndOr:
52
- Enabled: false
53
-
54
- Style/Not:
55
- Enabled: false
56
-
57
- Documentation:
58
- Enabled: false # TODO: Enable again once we have more docs
59
-
60
36
  Layout/CaseIndentation:
61
37
  EnforcedStyle: case
62
38
  SupportedStyles:
@@ -64,40 +40,37 @@ Layout/CaseIndentation:
64
40
  - end
65
41
  IndentOneStep: true
66
42
 
67
- Style/PercentLiteralDelimiters:
68
- PreferredDelimiters:
69
- '%w': "[]"
70
- '%W': "[]"
71
-
72
43
  Layout/AccessModifierIndentation:
73
44
  EnforcedStyle: outdent
74
45
 
75
- Style/SignalException:
76
- Enabled: false
77
-
78
- Layout/IndentationWidth:
79
- Enabled: false
80
-
81
- Style/TrivialAccessors:
82
- ExactNameMatch: true
83
-
84
46
  Layout/EndAlignment:
85
47
  EnforcedStyleAlignWith: variable
86
48
 
87
- Layout/DefEndAlignment:
88
- Enabled: false
49
+ Style/FrozenStringLiteralComment:
50
+ Enabled: true
89
51
 
90
- Lint/HandleExceptions:
91
- Enabled: false
52
+ Style/PercentLiteralDelimiters:
53
+ PreferredDelimiters:
54
+ '%w': "[]"
55
+ '%W': "[]"
92
56
 
93
- Style/SpecialGlobalVars:
57
+ Style/StringLiterals:
58
+ EnforcedStyle: double_quotes
59
+
60
+ Style/StringLiteralsInInterpolation:
61
+ EnforcedStyle: double_quotes
62
+
63
+ Style/StructInheritance:
94
64
  Enabled: false
95
65
 
96
- Style/TrivialAccessors:
66
+ Style/AndOr:
97
67
  Enabled: false
98
68
 
99
- Layout/IndentHash:
69
+ Style/Not:
100
70
  Enabled: false
101
71
 
102
72
  Style/DoubleNegation:
103
73
  Enabled: false
74
+
75
+ Documentation:
76
+ Enabled: false # TODO: Enable again once we have more docs
data/.travis.yml CHANGED
@@ -1,21 +1,21 @@
1
1
  language: ruby
2
- sudo: false
3
2
  before_install:
4
- - gem update --system
5
- - gem install bundler
3
+ - gem install bundler -v 1.17.3
6
4
 
7
5
  matrix:
8
6
  include:
9
- - rvm: 2.5.1
7
+ - rvm: 2.5.1 # Pre-installed Ruby version
10
8
  script: bundle exec rake rubocop # ONLY lint once, first
11
9
  - rvm: 2.1
12
- - rvm: 2.2.8
10
+ - rvm: 2.2
13
11
  - rvm: 2.3.5
14
- - rvm: 2.4.2
15
- - rvm: 2.5.1
12
+ - rvm: 2.4.6
13
+ - rvm: 2.5.5
14
+ - rvm: 2.6.3
16
15
  - rvm: jruby-9.1.8.0
17
16
  env:
18
17
  - JRUBY_OPTS="--debug"
19
- - rvm: jruby-9.2.0.0
18
+ jdk: openjdk8
19
+ - rvm: jruby-9.2.8.0
20
20
  env:
21
21
  - JRUBY_OPTS="--debug"
data/CHANGELOG.md CHANGED
@@ -1,21 +1,46 @@
1
1
  # Pundit
2
2
 
3
+ ### Fixed
4
+
5
+ - Avoid name clashes with the Error class. (#590)
6
+
7
+ ### Changed
8
+
9
+ - Return a safer default NotAuthorizedError message. (#583)
10
+
11
+ ## 2.0.1 (2019-01-18)
12
+
13
+ ### Breaking changes
14
+
15
+ None
16
+
17
+ ### Other changes
18
+
19
+ - Improve exception handling for `#policy_scope` and `#policy_scope!`. (#550)
20
+ - Add `:policy` metadata to RSpec template. (#566)
21
+
3
22
  ## 2.0.0 (2018-07-21)
4
23
 
5
24
  No changes since beta1
6
25
 
7
26
  ## 2.0.0.beta1 (2018-07-04)
8
27
 
28
+ ### Breaking changes
29
+
30
+ - Only pass last element of "namespace array" to policy and scope. (#529)
31
+ - Raise `InvalidConstructorError` if a policy or policy scope with an invalid constructor is called. (#462)
32
+ - Return passed object from `#authorize` method to make chaining possible. (#385)
33
+
34
+ ### Other changes
35
+
9
36
  - Add `policy_class` option to `authorize` to be able to override the policy. (#441)
10
37
  - Add `policy_scope_class` option to `authorize` to be able to override the policy scope. (#441)
11
38
  - Fix `param_key` issue when passed an array. (#529)
12
- - Only pass last element of "namespace array" to policy and scope. (#529)
13
39
  - Allow specification of a `NilClassPolicy`. (#525)
14
40
  - Make sure `policy_class` override is called when passed an array. (#475)
15
- - Raise `InvalidConstructorError` if a policy or policy scope with an invalid constructor is called. (#462)
41
+
16
42
  - Use `action_name` instead of `params[:action]`. (#419)
17
43
  - Add `pundit_params_for` method to make it easy to customize params fetching. (#502)
18
- - Return passed object from `#authorize` method to make chaining possible. (#385)
19
44
 
20
45
  ## 1.1.0 (2016-01-14)
21
46
 
data/Gemfile CHANGED
@@ -1,16 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  ruby RUBY_VERSION
4
6
 
5
7
  gemspec
6
-
7
- group :development, :test do
8
- gem "actionpack"
9
- gem "activemodel"
10
- gem "bundler"
11
- gem "pry"
12
- gem "rake"
13
- gem "rspec"
14
- gem "rubocop"
15
- gem "yard"
16
- end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Jonas Nicklas, Elabs AB
1
+ Copyright (c) 2019 Jonas Nicklas, Varvet AB
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -195,6 +195,10 @@ class DashboardPolicy < Struct.new(:user, :dashboard)
195
195
  end
196
196
  ```
197
197
 
198
+ Note that the headless policy still needs to accept two arguments. The
199
+ second argument will just be the symbol `:dashboard` in this case which
200
+ is what is passed as the record to `authorize` below.
201
+
198
202
  ```ruby
199
203
  # In controllers
200
204
  authorize :dashboard, :show?
@@ -781,6 +785,10 @@ Pundit does not provide a DSL for testing scopes. Just test it like a regular Ru
781
785
  - [Using Pundit outside of a Rails controller](https://github.com/varvet/pundit/pull/136)
782
786
  - [Straightforward Rails Authorization with Pundit](http://www.sitepoint.com/straightforward-rails-authorization-with-pundit/)
783
787
 
788
+ ## Other implementations
789
+
790
+ - [Flask-Pundit](https://github.com/anurag90x/flask-pundit) (Python) is a [Flask](http://flask.pocoo.org/) extension "heavily inspired by" Pundit
791
+
784
792
  # License
785
793
 
786
794
  Licensed under the MIT license, see the separate LICENSE.txt file.
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rubygems"
2
4
  require "bundler/gem_tasks"
3
5
  require "rspec/core/rake_task"
@@ -1,6 +1,6 @@
1
1
  require '<%= File.exists?('spec/rails_helper.rb') ? 'rails_helper' : 'spec_helper' %>'
2
2
 
3
- RSpec.describe <%= class_name %>Policy do
3
+ RSpec.describe <%= class_name %>Policy, type: :policy do
4
4
  let(:user) { User.new }
5
5
 
6
6
  subject { described_class }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Pundit
2
4
  # Finds policy and scope classes for given object.
3
5
  # @api public
data/lib/pundit/rspec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "active_support/core_ext/array/conversions"
2
4
 
3
5
  module Pundit
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pundit
4
- VERSION = "2.0.0".freeze
4
+ VERSION = "2.1.0".freeze
5
5
  end
data/lib/pundit.rb CHANGED
@@ -8,6 +8,11 @@ require "active_support/core_ext/object/blank"
8
8
  require "active_support/core_ext/module/introspection"
9
9
  require "active_support/dependencies/autoload"
10
10
 
11
+ # @api private
12
+ # To avoid name clashes with common Error naming when mixing in Pundit,
13
+ # keep it here with compact class style definition.
14
+ class Pundit::Error < StandardError; end # rubocop:disable Style/ClassAndModuleChildren
15
+
11
16
  # @api public
12
17
  module Pundit
13
18
  SUFFIX = "Policy".freeze
@@ -15,9 +20,6 @@ module Pundit
15
20
  # @api private
16
21
  module Generators; end
17
22
 
18
- # @api private
19
- class Error < StandardError; end
20
-
21
23
  # Error that will be raised when authorization has failed
22
24
  class NotAuthorizedError < Error
23
25
  attr_reader :query, :record, :policy
@@ -30,7 +32,7 @@ module Pundit
30
32
  @record = options[:record]
31
33
  @policy = options[:policy]
32
34
 
33
- message = options.fetch(:message) { "not allowed to #{query} this #{record.inspect}" }
35
+ message = options.fetch(:message) { "not allowed to #{query} this #{record.class}" }
34
36
  end
35
37
 
36
38
  super(message)
@@ -80,10 +82,16 @@ module Pundit
80
82
  # @raise [InvalidConstructorError] if the policy constructor called incorrectly
81
83
  # @return [Scope{#resolve}, nil] instance of scope class which can resolve to a scope
82
84
  def policy_scope(user, scope)
83
- policy_scope = PolicyFinder.new(scope).scope
84
- policy_scope.new(user, pundit_model(scope)).resolve if policy_scope
85
- rescue ArgumentError
86
- raise InvalidConstructorError, "Invalid #<#{policy_scope}> constructor is called"
85
+ policy_scope_class = PolicyFinder.new(scope).scope
86
+ return unless policy_scope_class
87
+
88
+ begin
89
+ policy_scope = policy_scope_class.new(user, pundit_model(scope))
90
+ rescue ArgumentError
91
+ raise InvalidConstructorError, "Invalid #<#{policy_scope_class}> constructor is called"
92
+ end
93
+
94
+ policy_scope.resolve
87
95
  end
88
96
 
89
97
  # Retrieves the policy scope for the given record.
@@ -95,10 +103,16 @@ module Pundit
95
103
  # @raise [InvalidConstructorError] if the policy constructor called incorrectly
96
104
  # @return [Scope{#resolve}] instance of scope class which can resolve to a scope
97
105
  def policy_scope!(user, scope)
98
- policy_scope = PolicyFinder.new(scope).scope!
99
- policy_scope.new(user, pundit_model(scope)).resolve
100
- rescue ArgumentError
101
- raise InvalidConstructorError, "Invalid #<#{policy_scope}> constructor is called"
106
+ policy_scope_class = PolicyFinder.new(scope).scope!
107
+ return unless policy_scope_class
108
+
109
+ begin
110
+ policy_scope = policy_scope_class.new(user, pundit_model(scope))
111
+ rescue ArgumentError
112
+ raise InvalidConstructorError, "Invalid #<#{policy_scope_class}> constructor is called"
113
+ end
114
+
115
+ policy_scope.resolve
102
116
  end
103
117
 
104
118
  # Retrieves the policy for the given record.
data/pundit.gemspec CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path("lib", __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require "pundit/version"
@@ -5,17 +7,25 @@ require "pundit/version"
5
7
  Gem::Specification.new do |gem|
6
8
  gem.name = "pundit"
7
9
  gem.version = Pundit::VERSION
8
- gem.authors = ["Jonas Nicklas", "Elabs AB"]
10
+ gem.authors = ["Jonas Nicklas", "Varvet AB"]
9
11
  gem.email = ["jonas.nicklas@gmail.com", "dev@elabs.se"]
10
12
  gem.description = "Object oriented authorization for Rails applications"
11
13
  gem.summary = "OO authorization for Rails"
12
14
  gem.homepage = "https://github.com/varvet/pundit"
13
15
  gem.license = "MIT"
14
16
 
15
- gem.files = `git ls-files`.split($/)
17
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
18
  gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
17
19
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
20
  gem.require_paths = ["lib"]
19
21
 
20
22
  gem.add_dependency "activesupport", ">= 3.0.0"
23
+ gem.add_development_dependency "actionpack", ">= 3.0.0"
24
+ gem.add_development_dependency "activemodel", ">= 3.0.0"
25
+ gem.add_development_dependency "bundler"
26
+ gem.add_development_dependency "pry"
27
+ gem.add_development_dependency "rake"
28
+ gem.add_development_dependency "rspec", ">= 2.0.0"
29
+ gem.add_development_dependency "rubocop", "0.57.2"
30
+ gem.add_development_dependency "yard"
21
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PostPolicy do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Pundit::PolicyFinder do
data/spec/pundit_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Pundit do
@@ -16,6 +18,7 @@ describe Pundit do
16
18
  let(:tag_four_five_six) { ProjectOneTwoThree::TagFourFiveSix.new(user) }
17
19
  let(:avatar_four_five_six) { ProjectOneTwoThree::AvatarFourFiveSix.new }
18
20
  let(:wiki) { Wiki.new }
21
+ let(:thread) { Thread.new }
19
22
 
20
23
  describe ".authorize" do
21
24
  it "infers the policy and authorizes based on it" do
@@ -35,7 +38,7 @@ describe Pundit do
35
38
  # rubocop:disable Style/MultilineBlockChain
36
39
  expect do
37
40
  Pundit.authorize(user, post, :destroy?)
38
- end.to raise_error(Pundit::NotAuthorizedError, "not allowed to destroy? this #<Post>") do |error|
41
+ end.to raise_error(Pundit::NotAuthorizedError, "not allowed to destroy? this Post") do |error|
39
42
  expect(error.query).to eq :destroy?
40
43
  expect(error.record).to eq post
41
44
  expect(error.policy).to eq Pundit.policy(user, post)
@@ -88,6 +91,12 @@ describe Pundit do
88
91
  Pundit.policy_scope(user, Wiki)
89
92
  end.to raise_error(Pundit::InvalidConstructorError, "Invalid #<WikiPolicy::Scope> constructor is called")
90
93
  end
94
+
95
+ it "raises an original error with a policy scope that contains error" do
96
+ expect do
97
+ Pundit.policy_scope(user, Thread)
98
+ end.to raise_error(ArgumentError)
99
+ end
91
100
  end
92
101
 
93
102
  describe ".policy_scope!" do
@@ -511,11 +520,13 @@ describe Pundit do
511
520
 
512
521
  describe "#permitted_attributes" do
513
522
  it "checks policy for permitted attributes" do
514
- params = ActionController::Parameters.new(post: {
515
- title: "Hello",
516
- votes: 5,
517
- admin: true
518
- })
523
+ params = ActionController::Parameters.new(
524
+ post: {
525
+ title: "Hello",
526
+ votes: 5,
527
+ admin: true
528
+ }
529
+ )
519
530
 
520
531
  action = "update"
521
532
 
@@ -527,11 +538,13 @@ describe Pundit do
527
538
  end
528
539
 
529
540
  it "checks policy for permitted attributes for record of a ActiveModel type" do
530
- params = ActionController::Parameters.new(customer_post: {
531
- title: "Hello",
532
- votes: 5,
533
- admin: true
534
- })
541
+ params = ActionController::Parameters.new(
542
+ customer_post: {
543
+ title: "Hello",
544
+ votes: 5,
545
+ admin: true
546
+ }
547
+ )
535
548
 
536
549
  action = "update"
537
550
 
@@ -547,24 +560,28 @@ describe Pundit do
547
560
 
548
561
  describe "#permitted_attributes_for_action" do
549
562
  it "is checked if it is defined in the policy" do
550
- params = ActionController::Parameters.new(post: {
551
- title: "Hello",
552
- body: "blah",
553
- votes: 5,
554
- admin: true
555
- })
563
+ params = ActionController::Parameters.new(
564
+ post: {
565
+ title: "Hello",
566
+ body: "blah",
567
+ votes: 5,
568
+ admin: true
569
+ }
570
+ )
556
571
 
557
572
  action = "revise"
558
573
  expect(Controller.new(user, action, params).permitted_attributes(post).to_h).to eq("body" => "blah")
559
574
  end
560
575
 
561
576
  it "can be explicitly set" do
562
- params = ActionController::Parameters.new(post: {
563
- title: "Hello",
564
- body: "blah",
565
- votes: 5,
566
- admin: true
567
- })
577
+ params = ActionController::Parameters.new(
578
+ post: {
579
+ title: "Hello",
580
+ body: "blah",
581
+ votes: 5,
582
+ admin: true
583
+ }
584
+ )
568
585
 
569
586
  action = "update"
570
587
  expect(Controller.new(user, action, params).permitted_attributes(post, :revise).to_h).to eq("body" => "blah")
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "pundit"
2
4
  require "pundit/rspec"
3
5
 
@@ -236,6 +238,18 @@ class WikiPolicy
236
238
  end
237
239
  end
238
240
 
241
+ class Thread
242
+ def self.all; end
243
+ end
244
+ class ThreadPolicy < Struct.new(:user, :thread)
245
+ class Scope < Struct.new(:user, :scope)
246
+ def resolve
247
+ # deliberate wrong useage of the method
248
+ scope.all(:unvalid, :parameters)
249
+ end
250
+ end
251
+ end
252
+
239
253
  class PostFourFiveSix < Struct.new(:user); end
240
254
 
241
255
  class CommentFourFiveSix; extend ActiveModel::Naming; end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pundit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
8
- - Elabs AB
8
+ - Varvet AB
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-07-21 00:00:00.000000000 Z
12
+ date: 2019-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -25,6 +25,118 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 3.0.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: actionpack
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 3.0.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 3.0.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: activemodel
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 3.0.0
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 3.0.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: pry
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rspec
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 2.0.0
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 2.0.0
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '='
117
+ - !ruby/object:Gem::Version
118
+ version: 0.57.2
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: 0.57.2
126
+ - !ruby/object:Gem::Dependency
127
+ name: yard
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
28
140
  description: Object oriented authorization for Rails applications
29
141
  email:
30
142
  - jonas.nicklas@gmail.com
@@ -82,8 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
194
  - !ruby/object:Gem::Version
83
195
  version: '0'
84
196
  requirements: []
85
- rubyforge_project:
86
- rubygems_version: 2.7.6
197
+ rubygems_version: 3.0.3
87
198
  signing_key:
88
199
  specification_version: 4
89
200
  summary: OO authorization for Rails