restrict 0.0.5 → 0.0.6
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 +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +3 -3
- data/lib/restrict/gatekeeper.rb +3 -3
- data/lib/restrict/rails/controller.rb +3 -0
- data/lib/restrict/restriction.rb +6 -6
- data/lib/restrict/rspec/matcher.rb +9 -9
- data/lib/restrict/rspec/matcher_rspec2.rb +9 -9
- data/lib/restrict/version.rb +1 -1
- data/spec/lib/restrict/gatekeeper_spec.rb +4 -4
- data/spec/lib/restrict/rails/controller_spec.rb +2 -2
- data/spec/lib/restrict/restriction_spec.rb +6 -6
- data/spec/lib/restrict/rspec/matcher_spec.rb +5 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e119fe0a7f5a3b29548df9ff5d6f6bf77b490ab
|
4
|
+
data.tar.gz: 34a0da6663e3113ec9fcd1dce4b1bdde1afc7ae2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7d7b6b0e2da3fea9b62fffadd031b464956659a7123d6dbab3c7d66e9fb7a060aa8deef33327af5326ec922985560852a0b38827110fc607c2caee9a89c4c35
|
7
|
+
data.tar.gz: 4dce49238f2706ac0930f2d7a59f859cff47cb61d2709422bb9072fe4b916676fb854d33ba25bbe6536afba23596186ab1542487b5227012d5bb5ab6d4b145b4
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -17,7 +17,7 @@ Works with rails 3 and 4 and all versions every ruby 2.
|
|
17
17
|
```ruby
|
18
18
|
class GoodiesController < ApplicationController
|
19
19
|
restrict :take
|
20
|
-
restrict :delete,
|
20
|
+
restrict :delete, unless: :goodie_manager?
|
21
21
|
|
22
22
|
def take
|
23
23
|
# Grab a goodie
|
@@ -47,7 +47,7 @@ What that does:
|
|
47
47
|
restrict :all_actions
|
48
48
|
```
|
49
49
|
|
50
|
-
This one will apply to all actions on this controller. It takes the `
|
50
|
+
This one will apply to all actions on this controller. It takes the `unless` option as well.
|
51
51
|
|
52
52
|
### Configuration
|
53
53
|
|
@@ -60,7 +60,7 @@ You may set the method that is used to figure out whether a user is signed in or
|
|
60
60
|
|
61
61
|
## Todo Ideas
|
62
62
|
|
63
|
-
* restrict :all_actions, except: [:new],
|
63
|
+
* restrict :all_actions, except: [:new], unless: 'dsfsdf'
|
64
64
|
|
65
65
|
## Contributing
|
66
66
|
|
data/lib/restrict/gatekeeper.rb
CHANGED
@@ -16,8 +16,8 @@ module Restrict
|
|
16
16
|
def handle_restriction(restriction, controller)
|
17
17
|
validate_signed_in(controller)
|
18
18
|
|
19
|
-
if restriction.
|
20
|
-
unless controller.__send__(restriction.
|
19
|
+
if restriction.unless
|
20
|
+
unless controller.__send__(restriction.unless)
|
21
21
|
raise Restrict::AccessDenied, reason: restriction
|
22
22
|
end
|
23
23
|
end
|
@@ -26,7 +26,7 @@ module Restrict
|
|
26
26
|
def concerning_restrictions(controller)
|
27
27
|
controller.restrictions or return
|
28
28
|
controller.restrictions.select do |restriction|
|
29
|
-
restriction.
|
29
|
+
restriction.applies_to?(controller.action_name)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -14,6 +14,9 @@ module Restrict
|
|
14
14
|
restrictions << Restrict::Restriction.new(*args)
|
15
15
|
end
|
16
16
|
|
17
|
+
# This could happen in included block as well, but often you need
|
18
|
+
# other before filters to happen before you actually check the
|
19
|
+
# restrictions, so lets set it where it is used in the code as well.
|
17
20
|
def install_gatekeeper
|
18
21
|
return if @gatekeeper_installed
|
19
22
|
before_filter :invoke_gatekeeper
|
data/lib/restrict/restriction.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
module Restrict
|
2
2
|
class Restriction
|
3
|
-
attr_accessor :actions, :
|
3
|
+
attr_accessor :actions, :unless
|
4
4
|
|
5
5
|
def initialize(*args)
|
6
6
|
options = args.extract_options!
|
7
|
-
@
|
7
|
+
@unless = options[:unless]
|
8
8
|
@actions = args
|
9
9
|
actions.empty? and raise ArgumentError, "expected actions to restrict, but got #{actions.inspect}"
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
|
12
|
+
def applies_to?(action)
|
13
|
+
applies_to_action?(action) || applies_to_all_actions?
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
|
-
def
|
18
|
+
def applies_to_all_actions?
|
19
19
|
actions.include?(:all_actions)
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def applies_to_action?(name)
|
23
23
|
actions.include?(name.to_sym)
|
24
24
|
end
|
25
25
|
end
|
@@ -4,12 +4,12 @@ RSpec::Matchers.define :have_restriction_on do |given_action_name|
|
|
4
4
|
@given_controller = given_controller
|
5
5
|
|
6
6
|
@restriction = given_controller.restrictions.find do |restriction|
|
7
|
-
restriction.
|
7
|
+
restriction.applies_to?(given_action_name)
|
8
8
|
end
|
9
9
|
|
10
10
|
if @restriction
|
11
|
-
if @
|
12
|
-
@restriction.
|
11
|
+
if @given_unless
|
12
|
+
@restriction.unless == @given_unless
|
13
13
|
else
|
14
14
|
true
|
15
15
|
end
|
@@ -18,21 +18,21 @@ RSpec::Matchers.define :have_restriction_on do |given_action_name|
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
chain :
|
22
|
-
@
|
21
|
+
chain :unless do |given_unless|
|
22
|
+
@given_unless = given_unless
|
23
23
|
end
|
24
24
|
|
25
25
|
failure_message do |actual|
|
26
|
-
if @restriction && @
|
27
|
-
"Expected restriction to call #{@
|
26
|
+
if @restriction && @given_unless
|
27
|
+
"Expected restriction to call #{@given_unless.inspect}, but calls #{@restriction.unless.inspect}"
|
28
28
|
else
|
29
29
|
"Expected to have restriction on #{@given_action_name}, but was not found in #{@given_controller.restrictions.inspect}"
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
failure_message_when_negated do |actual|
|
34
|
-
if @
|
35
|
-
"Expected restriction not to call #{@
|
34
|
+
if @given_unless
|
35
|
+
"Expected restriction not to call #{@given_unless.inspect}, but calls #{@restriction.unless.inspect}"
|
36
36
|
else
|
37
37
|
"Expected not to have restriction on #{@given_action_name}, but was found in #{@given_controller.restrictions.inspect}"
|
38
38
|
end
|
@@ -4,12 +4,12 @@ RSpec::Matchers.define :have_restriction_on do |given_action_name|
|
|
4
4
|
@given_controller = given_controller
|
5
5
|
|
6
6
|
@restriction = given_controller.restrictions.find do |restriction|
|
7
|
-
restriction.
|
7
|
+
restriction.applies_to?(given_action_name)
|
8
8
|
end
|
9
9
|
|
10
10
|
if @restriction
|
11
|
-
if @
|
12
|
-
@restriction.
|
11
|
+
if @given_unless
|
12
|
+
@restriction.unless == @given_unless
|
13
13
|
else
|
14
14
|
true
|
15
15
|
end
|
@@ -18,21 +18,21 @@ RSpec::Matchers.define :have_restriction_on do |given_action_name|
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
chain :
|
22
|
-
@
|
21
|
+
chain :unless do |given_unless|
|
22
|
+
@given_unless = given_unless
|
23
23
|
end
|
24
24
|
|
25
25
|
failure_message_for_should do |actual|
|
26
|
-
if @restriction && @
|
27
|
-
"Expected restriction to call #{@
|
26
|
+
if @restriction && @given_unless
|
27
|
+
"Expected restriction to call #{@given_unless.inspect}, but calls #{@restriction.unless.inspect}"
|
28
28
|
else
|
29
29
|
"Expected to have restriction on #{@given_action_name}, but was not found in #{@given_controller.restrictions.inspect}"
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
failure_message_for_should_not do |actual|
|
34
|
-
if @
|
35
|
-
"Expected restriction not to call #{@
|
34
|
+
if @given_unless
|
35
|
+
"Expected restriction not to call #{@given_unless.inspect}, but calls #{@restriction.unless.inspect}"
|
36
36
|
else
|
37
37
|
"Expected not to have restriction on #{@given_action_name}, but was found in #{@given_controller.restrictions.inspect}"
|
38
38
|
end
|
data/lib/restrict/version.rb
CHANGED
@@ -34,9 +34,9 @@ describe Restrict::Gatekeeper do
|
|
34
34
|
|
35
35
|
context 'with conditional restriction' do
|
36
36
|
before do
|
37
|
-
controller.class.restrict :action1,
|
38
|
-
controller.class.restrict :action2,
|
39
|
-
controller.class.restrict :action3,
|
37
|
+
controller.class.restrict :action1, unless: :missing
|
38
|
+
controller.class.restrict :action2, unless: :falsy
|
39
|
+
controller.class.restrict :action3, unless: :truthy
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'raises on missing method' do
|
@@ -66,7 +66,7 @@ describe Restrict::Gatekeeper do
|
|
66
66
|
context 'with multiple restrictions' do
|
67
67
|
before do
|
68
68
|
controller.class.restrict :all_actions
|
69
|
-
controller.class.restrict :edit,
|
69
|
+
controller.class.restrict :edit, unless: :falsy
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'denies access if any restriction fails' do
|
@@ -6,7 +6,7 @@ describe Restrict::Rails::Controller do
|
|
6
6
|
|
7
7
|
before do
|
8
8
|
controller.class.restrict :index
|
9
|
-
controller.class.restrict :show,
|
9
|
+
controller.class.restrict :show, unless: :access_allowed?
|
10
10
|
end
|
11
11
|
|
12
12
|
describe '#restrict' do
|
@@ -15,7 +15,7 @@ describe Restrict::Rails::Controller do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'builds and adds a conditional restriction' do
|
18
|
-
expect(controller).to have_restriction_on(:show).
|
18
|
+
expect(controller).to have_restriction_on(:show).unless(:access_allowed?)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -13,23 +13,23 @@ describe Restrict::Restriction do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
describe '#
|
16
|
+
describe '#applies_to?' do
|
17
17
|
it 'returns true if the given action is contained' do
|
18
|
-
expect(restriction).to
|
18
|
+
expect(restriction).to be_applies_to(:show)
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'returns true if the given name is a string' do
|
22
|
-
expect(restriction).to
|
22
|
+
expect(restriction).to be_applies_to('show')
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'returns false if the given action name is not contained' do
|
26
|
-
expect(restriction).not_to
|
26
|
+
expect(restriction).not_to be_applies_to(:index)
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'returns true if it concerns :all_actions' do
|
30
30
|
restriction = Restrict::Restriction.new(:all_actions)
|
31
|
-
expect(restriction).to
|
32
|
-
expect(restriction).to
|
31
|
+
expect(restriction).to be_applies_to(:foo)
|
32
|
+
expect(restriction).to be_applies_to(:bar)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -3,12 +3,6 @@ require 'spec_helper'
|
|
3
3
|
describe 'have_restriction_on' do
|
4
4
|
let(:controller) { ExampleController.new }
|
5
5
|
|
6
|
-
# before do
|
7
|
-
# controller.class.restrict :index
|
8
|
-
# controller.class.restrict :show, allow_if: :access_allowed?
|
9
|
-
# end
|
10
|
-
|
11
|
-
|
12
6
|
context 'without restrictions' do
|
13
7
|
it 'matcher fails' do
|
14
8
|
expect {
|
@@ -42,17 +36,17 @@ describe 'have_restriction_on' do
|
|
42
36
|
|
43
37
|
it 'matcher conditional chain fails' do
|
44
38
|
expect {
|
45
|
-
expect(controller).to have_restriction_on(:show).
|
39
|
+
expect(controller).to have_restriction_on(:show).unless(:something)
|
46
40
|
}.to raise_error RSpec::Expectations::ExpectationNotMetError
|
47
41
|
end
|
48
42
|
|
49
43
|
it 'negated matcher with conditional chain passes' do
|
50
|
-
expect(controller).not_to have_restriction_on(:show).
|
44
|
+
expect(controller).not_to have_restriction_on(:show).unless(:something)
|
51
45
|
end
|
52
46
|
end
|
53
47
|
|
54
48
|
context 'with conditional restriction' do
|
55
|
-
before { controller.class.restrict :show,
|
49
|
+
before { controller.class.restrict :show, unless: :something }
|
56
50
|
|
57
51
|
it 'matcher passes' do
|
58
52
|
expect(controller).to have_restriction_on(:show)
|
@@ -71,12 +65,12 @@ describe 'have_restriction_on' do
|
|
71
65
|
end
|
72
66
|
|
73
67
|
it 'matcher conditional chain passes' do
|
74
|
-
expect(controller).to have_restriction_on(:show).
|
68
|
+
expect(controller).to have_restriction_on(:show).unless(:something)
|
75
69
|
end
|
76
70
|
|
77
71
|
it 'negated matcher with conditional chain passes' do
|
78
72
|
expect {
|
79
|
-
expect(controller).not_to have_restriction_on(:show).
|
73
|
+
expect(controller).not_to have_restriction_on(:show).unless(:something)
|
80
74
|
}.to raise_error RSpec::Expectations::ExpectationNotMetError
|
81
75
|
end
|
82
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restrict
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Opper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|