policy-assertions 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a38fcb854b7f7f60bbaacd50911686b294ec29f6
4
+ data.tar.gz: b7f5ecf2f114e7180bda034e1e1386aecc27db14
5
+ SHA512:
6
+ metadata.gz: 7d410b2390857310401408497dacdfa4024ad8463606a03f89dfe202ff8b6deb6f79a3e50c589bd52d332d04b231fd17775b1fff4d9cb93dc4e95600af0bf7fa
7
+ data.tar.gz: 2d061e1749a933d9bae107741d66c4e25835be16f88c729b795ec62c41054ebfd8441e206d718dd643fd7d20b9a4caa0bd5a7fd008f2738b338cd2300570a84c
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rubocop.yml ADDED
@@ -0,0 +1,11 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'policy-assertions.gemspec'
4
+ DisplayCopNames: true
5
+ DisplayStyleGuide: true
6
+
7
+ Style/Documentation:
8
+ Enabled: false
9
+
10
+ Style/HashSyntax:
11
+ EnforcedStyle: hash_rockets
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.2.0-preview1
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## v0.0.1
2
+
3
+ * initial release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in policy-assertions.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Kevin Simmons
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,176 @@
1
+ # policy-assertions
2
+ [![Build Status](https://travis-ci.org/ksimmons/policy-assertions.svg?branch=master)](https://travis-ci.org/ksimmons/policy-assertions)
3
+
4
+ Minitest test assertions for [Pundit](https://github.com/elabs/pundit) policies.
5
+
6
+ policy-assertions provides a test class for easy Pundit testing. The test class provides assertions and refutations for policies and strong parameters.
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'policy-assertions'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install policy-assertions
23
+
24
+ **Add require policy\_assertions to test\_helper.rb**
25
+
26
+ ```ruby
27
+ require 'policy_assertions'
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ policy-assertions is intended to make testing Pundit policies as simple as possible. The gem adds the following helpers:
33
+
34
+ - PolicyAssertions::Test class
35
+ - parses permissions to test from method name
36
+ - assert\_permit and refute\_permit methods
37
+ - assert\_strong\_parameters
38
+
39
+ The following code sample illustrates the intended use of this gem.
40
+
41
+ ```ruby
42
+ # The class is named after the policy to be tested.
43
+ class ArticlePolicyTest < PolicyAssertions::Test
44
+
45
+ # Test that the Article model allows index and show
46
+ # for any site visitor. nil is passed in for the user.
47
+ def test_index_and_show
48
+ assert_permit nil, Article
49
+ end
50
+
51
+ # Test that a site staff member is allowed access
52
+ # to new and create
53
+ def test_new_and_create
54
+ assert_permit users(:staff), Article
55
+ end
56
+
57
+ # Test that this user cannot delete this article
58
+ def test_destroy
59
+ refute_permit users(:regular), articles(:instructions)
60
+ end
61
+
62
+ # Test a permission by passing in an array instead of
63
+ # defining it in the method name
64
+ def test_name_is_not_a_permission
65
+ refute_permit nil, Article, 'create?', 'new?'
66
+ end
67
+
68
+ # Test that a site staff member has access to the
69
+ # parameters defined in the params array.
70
+ # Site visitors should not have access to any Article attributes
71
+ def test_strong_parameters
72
+ params = [:title, :body, :tags]
73
+ assert_strong_parameters(users(:staff), Article,
74
+ article_attributes, params)
75
+
76
+ assert_strong_parameters(nil, Article, article_attributes, [])
77
+ end
78
+ end
79
+ ```
80
+
81
+ ### Test method naming
82
+ policy-assertions can read the permissions to test from the method name. This will only work when using the minitest def test_name syntax, it does not work for the Rails test block helper.
83
+
84
+ ```ruby
85
+ # Good
86
+ # The create permission will be parsed from this method name
87
+ def test_create
88
+ end
89
+
90
+ # Good
91
+ # multiple permissions are defined in this method name
92
+ def test_show_and_index
93
+ end
94
+
95
+ # Not good
96
+ # The permission cannot be read from this block.
97
+ test 'create' do
98
+ # passing the permissions to the assert or refute is ok.
99
+ refute_permit nil, Article, 'create?', 'new?'
100
+ end
101
+ ```
102
+ Define multiple permissions in a method name by separating the permissions using '\_and\_'.
103
+
104
+ See the configuration section for changing the separator value.
105
+
106
+ ### assert\_permit and refute\_permit
107
+ These methods take the following parameters:
108
+
109
+ - User to authorize
110
+ - Model or instance to authorize
111
+ - Optional array of permissions. They should match the permission method name exactly.
112
+
113
+ #### Passing permissions to assert and refute
114
+ When permissions are passed to assert or refute the test method name is ignored and does not need to match a policy permission.
115
+
116
+ ```ruby
117
+ class ArticlePolicyTest < PolicyAssertions::Test
118
+ # this method name is not parsed since the permissions
119
+ # are passed into the method
120
+ def test_that_a_user_can_do_stuff
121
+ assert_permit nil, Article, 'show?', 'index?'
122
+ end
123
+ end
124
+ ```
125
+
126
+ ### Using the rails test block helper
127
+ policy-assertions will work with the rails test block helper but it cannot parse the permissions. If a test block is used and the permissions are not passed to the assert and refute methods a PolicyAssertions::MissingBlockParameters error will be thrown.
128
+
129
+ ```ruby
130
+ class ArticlePolicyTest < PolicyAssertions::Test
131
+ test 'index?' do
132
+ assert_permit @user, Article, 'index?', 'show?'
133
+ end
134
+
135
+ # this will result in a
136
+ # PolicyAssertions::MissingBlockParameters error
137
+ test 'show?' do
138
+ assert_permit @user, Article
139
+ end
140
+ end
141
+ ```
142
+
143
+ ### Strong Parameters
144
+ Since Pundit offers a [permitted_attributes](https://github.com/elabs/pundit#strong-parameters) helper, policy-assertions provides an assert method for testing.
145
+
146
+ To use this assertion the test class **must** match an existing policy with 'Test' appended. If the class name does not match a policy a PolicyAssertions::InvalidClassName error is thrown. See the code sample below.
147
+
148
+ ```ruby
149
+ # The class name matches the ArticlePolicy class.
150
+ class ArticlePolicyTest < PolicyAssertions::Test
151
+ # Test that a site staff member has access to the
152
+ # parameters defined in the params method.
153
+ # Site visitors should not have access to any Article attributes
154
+ def test_strong_parameters
155
+ params = [:title, :body, :tags]
156
+ assert_strong_parameters(users(:staff), Article,
157
+ article_attributes, params)
158
+
159
+ assert_strong_parameters(nil, Article, article_attributes, [])
160
+ end
161
+ end
162
+ ```
163
+ ## Configure
164
+ Use the following in your test helper to change the test definition permissions separator.
165
+
166
+ ```ruby
167
+ PolicyAssertions.config.separator = '__separator__'
168
+ ```
169
+
170
+ ## Contributing
171
+
172
+ 1. Fork it ( https://github.com/[my-github-username]/policy-assertions/fork )
173
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
174
+ 3. Commit your changes with tests (`git commit -am 'Add some feature'`)
175
+ 4. Push to the branch (`git push origin my-new-feature`)
176
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |test|
5
+ test.libs << 'lib' << 'test'
6
+ test.pattern = 'test/**/*_test.rb'
7
+ test.verbose = false
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,9 @@
1
+ module PolicyAssertions
2
+ Configuration = Struct.new(:separator, :ruby_version)
3
+ @config = Configuration.new('_and_', RUBY_VERSION.split('.')[0].to_i)
4
+
5
+ # rubocop:disable Style/TrivialAccessors
6
+ def self.config
7
+ @config
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ module PolicyAssertions
2
+ class InvalidClassName < StandardError
3
+ def message
4
+ 'The test class must be the same as a pundit policy class. ' \
5
+ 'For example, RecordPolicyTest'
6
+ end
7
+ end
8
+
9
+ class MissingBlockParameters < StandardError
10
+ def message
11
+ 'PolicyTest must pass the permissions into the assert if called ' \
12
+ 'from the Rails test block method. Use def test_testname method ' \
13
+ 'to have the permissions parsed automatically.'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module PolicyAssertions
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,81 @@
1
+ require 'rack'
2
+ require 'rack/test'
3
+ require 'active_support'
4
+ require 'action_controller/metal/strong_parameters'
5
+
6
+ require 'policy_assertions/errors'
7
+ require 'policy_assertions/version'
8
+ require 'policy_assertions/configuration'
9
+
10
+ module PolicyAssertions
11
+ class Test < ActiveSupport::TestCase
12
+ def assert_permit(user, record, *permissions)
13
+ get_permissions(permissions).each do |permission|
14
+ policy = Pundit.policy!(user, record)
15
+ assert policy.public_send(permission),
16
+ "Expected #{policy.class.name} to grant #{permission} "\
17
+ "on #{record} for #{user} but it didn't"
18
+ end
19
+ end
20
+
21
+ def refute_permit(user, record, *permissions)
22
+ get_permissions(permissions).each do |permission|
23
+ policy = Pundit.policy!(user, record)
24
+ refute policy.public_send(permission),
25
+ "Expected #{policy.class.name} not to grant #{permission} "\
26
+ "on #{record} for #{user} but it did"
27
+ end
28
+ end
29
+
30
+ def assert_strong_parameters(user, record,
31
+ params_hash, allowed_params)
32
+ params = ActionController::Parameters.new(class_symbol => params_hash)
33
+
34
+ strong_params = params.require(class_symbol)
35
+ .permit(*get_strong_params(user, record)).keys
36
+
37
+ strong_params.each do |param|
38
+ assert_includes allowed_params,
39
+ param.to_sym,
40
+ "User #{user} should not be permitted to "\
41
+ "update parameter [#{param}]"
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def class_symbol
48
+ @class_symbol ||= klass.to_s.gsub(/Policy/, '').downcase.to_sym
49
+ end
50
+
51
+ def get_strong_params(user, record)
52
+ klass.new(user, record).permitted_attributes
53
+ end
54
+
55
+ def klass
56
+ @klass ||= self.class.name.demodulize.to_s.gsub(/Test/, '').constantize
57
+ rescue NameError
58
+ raise InvalidClassName
59
+ end
60
+
61
+ def get_permissions(permissions)
62
+ return permissions if permissions.present?
63
+
64
+ name = calling_method
65
+
66
+ fail(MissingBlockParameters) if name.start_with?('block')
67
+
68
+ # remove 'test_' and split
69
+ # append ? to the permission
70
+ name[5..-1].split(PolicyAssertions.config.separator).map { |a| "#{a}?" }
71
+ end
72
+
73
+ def calling_method
74
+ if PolicyAssertions.config.ruby_version > 1
75
+ caller_locations(3, 1)[0].label
76
+ else
77
+ caller[2][/`.*'/][1..-2]
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'policy_assertions/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "policy-assertions"
8
+ spec.version = PolicyAssertions::VERSION
9
+ spec.authors = ['Kevin Simmons']
10
+ spec.email = ['kevin.p.simmons@gmail.com']
11
+ spec.summary = %q{Minitest assertions for Pundit policies.}
12
+ spec.description = %q{Minitest assertions for Pundit policies.}
13
+ spec.homepage = 'https://github.com/ksimmons/policy-assertions'
14
+ spec.license = "MIT"
15
+
16
+ spec.required_ruby_version = '>= 1.9.3'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0")
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.3'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'minitest', '~> 5.6'
26
+ spec.add_development_dependency 'actionpack', '>= 3.0.0'
27
+ spec.add_development_dependency 'rack', '~>1.6.1'
28
+ spec.add_development_dependency 'rack-test', '~> 0.6.3'
29
+
30
+ spec.add_dependency 'pundit', '~> 1.0.0'
31
+ spec.add_dependency 'activesupport', '>= 3.0.0'
32
+ end
data/test/.rubocop.yml ADDED
@@ -0,0 +1,9 @@
1
+ AllCops:
2
+ DisplayCopNames: true
3
+ DisplayStyleGuide: true
4
+
5
+ Style/Documentation:
6
+ Enabled: false
7
+
8
+ Style/HashSyntax:
9
+ EnforcedStyle: hash_rockets
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ class ConfigurationTest < Minitest::Test
4
+ def test_configuration_exists
5
+ refute_nil PolicyAssertions.config
6
+ end
7
+
8
+ def test_seperator
9
+ assert_equal '_and_', PolicyAssertions.config.separator
10
+ end
11
+
12
+ def test_ruby_version
13
+ refute_nil PolicyAssertions.config.ruby_version
14
+
15
+ assert PolicyAssertions.config.ruby_version > 0
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class VersionTest < Minitest::Test
4
+ def test_must_be_defined
5
+ refute_nil PolicyAssertions::VERSION
6
+ end
7
+ end
@@ -0,0 +1,172 @@
1
+ require 'test_helper'
2
+
3
+ class MultipleAssertionsTest < Minitest::Test
4
+ def test_assert_multiple_permissions_pass
5
+ test_runner = policy_class do
6
+ def test_index_and_create
7
+ assert_permit User.new, Article
8
+ end
9
+ end.new :test_index_and_create
10
+
11
+ test_runner.run
12
+ assert test_runner.passed?
13
+ end
14
+
15
+ def test_assert_multiple_permissions_fail
16
+ test_runner = policy_class do
17
+ def test_index_and_create
18
+ assert_permit nil, Article
19
+ end
20
+ end.new :test_index_and_create
21
+
22
+ test_runner.run
23
+ refute test_runner.passed?
24
+ end
25
+
26
+ def test_refute_multiple_permissions_pass
27
+ test_runner = policy_class do
28
+ def test_index_and_create
29
+ refute_permit nil, Article
30
+ end
31
+ end.new :test_index_and_create
32
+
33
+ test_runner.run
34
+ refute test_runner.passed?
35
+ end
36
+
37
+ def test_refute_multiple_permissions_fail
38
+ test_runner = policy_class do
39
+ def test_index_and_create
40
+ refute_permit User.new, Article
41
+ end
42
+ end.new :test_index_and_create
43
+
44
+ test_runner.run
45
+ refute test_runner.passed?
46
+ end
47
+ end
48
+
49
+ class AssertionsTest < Minitest::Test
50
+ def test_long_permission_names
51
+ test_runner = policy_class do
52
+ def test_long_action_and_index
53
+ assert_permit nil, Article
54
+ end
55
+ end.new :test_long_action_and_index
56
+
57
+ test_runner.run
58
+ assert test_runner.passed?
59
+ end
60
+
61
+ def test_permission_passed
62
+ test_runner = policy_class do
63
+ def test_create
64
+ assert_permit User.new, Article
65
+ end
66
+ end.new :test_create
67
+
68
+ test_runner.run
69
+ assert test_runner.passed?
70
+ end
71
+
72
+ def test_permission_failed_expected_to_pass
73
+ test_runner = policy_class do
74
+ def test_create
75
+ assert_permit nil, Article
76
+ end
77
+ end.new :test_create
78
+
79
+ test_runner.run
80
+ refute test_runner.passed?
81
+ end
82
+
83
+ def test_permission_passed_expected_to_fail
84
+ test_runner = policy_class do
85
+ def test_create
86
+ refute_permit User.new, Article
87
+ end
88
+ end.new :test_create
89
+
90
+ test_runner.run
91
+ refute test_runner.passed?
92
+ end
93
+
94
+ def test_permission_failed
95
+ test_runner = policy_class do
96
+ def test_create
97
+ refute_permit nil, Article
98
+ end
99
+ end.new :test_create
100
+
101
+ test_runner.run
102
+ assert test_runner.passed?
103
+ end
104
+
105
+ def test_destroy
106
+ test_runner = policy_class do
107
+ def test_destroy
108
+ assert_permit User.new(100), Article.new(100)
109
+ end
110
+ end.new :test_destroy
111
+
112
+ test_runner.run
113
+ assert test_runner.passed?
114
+ end
115
+ end
116
+
117
+ class StrongParametersTest < Minitest::Test
118
+ def test_strong_parameters_pass
119
+ test_runner = policy_class do
120
+ def test_strong_parameters
121
+ allowed = [:user_id, :title, :description]
122
+ assert_strong_parameters User.new(1), Article, Article.params, allowed
123
+ end
124
+ end.new :test_strong_parameters
125
+
126
+ test_runner.run
127
+ assert test_runner.passed?
128
+ end
129
+
130
+ def test_strong_parameters_fail
131
+ test_runner = policy_class do
132
+ def test_strong_parameters
133
+ assert_strong_parameters nil, Article, Article.params, [:user_id]
134
+ end
135
+ end.new :test_strong_parameters
136
+
137
+ test_runner.run
138
+ refute test_runner.passed?
139
+ end
140
+ end
141
+
142
+ class InvalidClassNameTest
143
+ class FakePolicyTest < PolicyAssertions::Test
144
+ def test_strong_parameters
145
+ assert_raises(PolicyAssertions::InvalidClassName) do
146
+ assert_strong_parameters nil, Article, Article.params, [:user_id]
147
+ end
148
+ end
149
+ end
150
+ end
151
+
152
+ class InvalidBlockParametersTest
153
+ class ArticlePolicyTest < PolicyAssertions::Test
154
+ test 'index?' do
155
+ assert_raises(PolicyAssertions::MissingBlockParameters) do
156
+ assert_permit nil, Article
157
+ end
158
+ end
159
+ end
160
+ end
161
+
162
+ class ValidBlockParametersTest
163
+ class ArticlePolicyTest < PolicyAssertions::Test
164
+ test 'index?' do
165
+ assert_permit nil, Article, 'index?', 'long_action?'
166
+ end
167
+
168
+ test 'destroy?' do
169
+ refute_permit nil, Article, 'destroy?'
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,66 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+ require 'policy_assertions'
4
+ require 'pundit'
5
+
6
+ ActiveSupport::TestCase.test_order = :random
7
+
8
+ # create a dynamic class using the passed in block
9
+ # and names it correctly
10
+ def policy_class(&block)
11
+ klass = Class.new(PolicyAssertions::Test, &block)
12
+ def klass.name
13
+ 'ArticlePolicyTest'
14
+ end
15
+
16
+ klass
17
+ end
18
+
19
+ class User
20
+ attr_accessor :id
21
+
22
+ def initialize(id = nil)
23
+ @id = id if id
24
+ end
25
+ end
26
+
27
+ class Article
28
+ attr_accessor :user_id
29
+
30
+ def initialize(user_id)
31
+ @user_id = user_id
32
+ end
33
+
34
+ def self.params
35
+ { :user_id => 1, :title => 'title', :description => 'test description' }
36
+ end
37
+ end
38
+
39
+ class ArticlePolicy
40
+ attr_reader :user, :record
41
+
42
+ def initialize(user, record)
43
+ @user = user
44
+ @record = record
45
+ end
46
+
47
+ def index?
48
+ true
49
+ end
50
+
51
+ def long_action?
52
+ true
53
+ end
54
+
55
+ def create?
56
+ @user
57
+ end
58
+
59
+ def destroy?
60
+ @user && @user.id == @record.user_id
61
+ end
62
+
63
+ def permitted_attributes
64
+ (@user && @user.id == 1) ? [:user_id, :title, :description] : [:title]
65
+ end
66
+ end
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: policy-assertions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Simmons
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: actionpack
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 3.0.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 3.0.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.6.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.6.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack-test
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.6.3
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.6.3
97
+ - !ruby/object:Gem::Dependency
98
+ name: pundit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.0.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.0.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: activesupport
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 3.0.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 3.0.0
125
+ description: Minitest assertions for Pundit policies.
126
+ email:
127
+ - kevin.p.simmons@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rubocop.yml"
134
+ - ".travis.yml"
135
+ - CHANGELOG.md
136
+ - Gemfile
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - lib/policy_assertions.rb
141
+ - lib/policy_assertions/configuration.rb
142
+ - lib/policy_assertions/errors.rb
143
+ - lib/policy_assertions/version.rb
144
+ - policy-assertions.gemspec
145
+ - test/.rubocop.yml
146
+ - test/lib/policy-assertions/configuration_test.rb
147
+ - test/lib/policy-assertions/version_test.rb
148
+ - test/lib/policy_assertions_test.rb
149
+ - test/test_helper.rb
150
+ homepage: https://github.com/ksimmons/policy-assertions
151
+ licenses:
152
+ - MIT
153
+ metadata: {}
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 1.9.3
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ requirements: []
169
+ rubyforge_project:
170
+ rubygems_version: 2.4.1
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: Minitest assertions for Pundit policies.
174
+ test_files:
175
+ - test/.rubocop.yml
176
+ - test/lib/policy-assertions/configuration_test.rb
177
+ - test/lib/policy-assertions/version_test.rb
178
+ - test/lib/policy_assertions_test.rb
179
+ - test/test_helper.rb
180
+ has_rdoc: