restrict 0.0.8 → 0.2.1

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
- SHA1:
3
- metadata.gz: 4c64d62099175f3a9b75038ddb7194f9194b6a9f
4
- data.tar.gz: 062a5d223b9ca341d424eceabe63549306b26c40
2
+ SHA256:
3
+ metadata.gz: b012524d4112ddfce7cef1066511516b69019acf727b577cb271d36355edc6e5
4
+ data.tar.gz: 161638aee7c62d34da01168eeb8e7aec23cacef01a9e0b596209f3f4cf0ed8ac
5
5
  SHA512:
6
- metadata.gz: 7f20340ac055884a14dde1e86d3487493ed289bd483414918461402bf1f8563f55b1df07390b7ba0a4faa2bb689dcfc61fb2cfde03b82e96bea4ec01269e977f
7
- data.tar.gz: f4cb556ccee44018cb568512a7590a3383cc833340b4cb5cd96432447a817f7550118506436e3709acf1aacb55c3e3d6e2dd51011797c5a42deedf28c265ce68
6
+ metadata.gz: 0130142f698da26e48c9d986782f080e4f457a5833ca83a54846d79dbb6a96a5f751e7ff96d08c0bee6cfa99325f9414ba7f74bbed951629965f89d460981cae
7
+ data.tar.gz: c83f370a57e3f73874000ac806e28f08e22ccfc2247c0c2954b1a329a34f902c71f5aaf60d0a98e61c66d22320ff2b649b3c295a611215f97bc33e48e7f36b7a
@@ -0,0 +1,34 @@
1
+ name: Specs
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - 'master'
7
+ push:
8
+ branches:
9
+ - 'master'
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - uses: actions/checkout@v1
17
+
18
+ - name: Set up Ruby 2.7
19
+ uses: actions/setup-ruby@v1
20
+ with:
21
+ ruby-version: 2.7.x
22
+
23
+ - name: bundle
24
+ env:
25
+ RAILS_ENV: test
26
+ run: |
27
+ gem install bundler
28
+ bundle install --jobs 4 --retry 3
29
+
30
+ - name: Run Tests
31
+ env:
32
+ RAILS_ENV: test
33
+ run: |
34
+ bundle exec rspec
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ [0.2.1] - 2021-04-24
2
+ * Fix rails autoloading issue (@jaynetics)
3
+
4
+ [0.2.0] - 2020-05-18
5
+ * Implement `:on` parameter for `restrict` calls
6
+
7
+ [0.1.1] - 2019-11-26
8
+ * Bug fix release to actually work in rails ¯\_(ツ)_/¯
9
+
10
+ [0.1.0] - 2019-11-25
11
+ * Support controller inheritance
12
+
1
13
  [0.0.7] - 2014-08-25
2
14
  * Breaking change part 2: restrict without action names will now implicitly restrict all actions
3
15
  * :all_actions modifier is gone
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A rails controller extension, that gives you the possibility to restrict access to your controller actions.
4
4
 
5
- [![Build Status](https://secure.travis-ci.org/xijo/restrict.png?branch=master)](https://travis-ci.org/xijo/restrict) [![Gem Version](https://badge.fury.io/rb/restrict.png)](http://badge.fury.io/rb/restrict) [![Code Climate](https://codeclimate.com/github/xijo/restrict.png)](https://codeclimate.com/github/xijo/restrict) [![Code Climate](https://codeclimate.com/github/xijo/restrict/coverage.png)](https://codeclimate.com/github/xijo/restrict)
5
+ ![Specs](https://github.com/xijo/restrict/workflows/Specs/badge.svg) [![Gem Version](https://badge.fury.io/rb/restrict.png)](http://badge.fury.io/rb/restrict) [![Code Climate](https://codeclimate.com/github/xijo/restrict.png)](https://codeclimate.com/github/xijo/restrict) [![Code Climate](https://codeclimate.com/github/xijo/restrict/coverage.png)](https://codeclimate.com/github/xijo/restrict)
6
6
 
7
7
  ## Installation
8
8
 
@@ -49,6 +49,38 @@ restrict
49
49
 
50
50
  This one will apply to all actions on this controller. It takes the `unless` option as well.
51
51
 
52
+ ### Restrict with specific object
53
+
54
+ One may pass `on` to a `restrict` call in a controller.
55
+
56
+ If `on` is set, it evaluates the given method.
57
+ If it returns nil, it raises an error.
58
+ If an object is returned, it will be send while evaluating the `unless`
59
+ condition.
60
+
61
+ Example
62
+
63
+ ```
64
+ class ItemController
65
+ restrict :show, unless: :manager_of?, on: :load_item
66
+
67
+ def show
68
+ end
69
+
70
+ private
71
+
72
+ def manager_of?(item)
73
+ current_user == item.manager
74
+ end
75
+
76
+ def load_item
77
+ @item = Item.find(params[:id])
78
+ end
79
+ end
80
+ ```
81
+
82
+ Aliases for `on` are: `of`, `object`
83
+
52
84
  ### Configuration
53
85
 
54
86
  ```ruby
@@ -58,6 +90,15 @@ Restrict.config.authentication_validation_method = :admin_session_exists?
58
90
 
59
91
  You may set the method that is used to figure out whether a user is signed in or not to whatever you like, however it's default is `:user_signed_in?` which is the most common (devise) method in use.
60
92
 
93
+ ### Inheritance
94
+
95
+ A controller will respect all restrictions that are applied to its ancestors.
96
+
97
+ You may implement a set of rules in a `BaseController` and refine them in subclasses later on.
98
+
99
+ Please note: it is not possible yet to revert previously added restrictions, that means
100
+ if a restriction on `show` is added in a class and another one in the subclass **BOTH** apply.
101
+
61
102
  ## Contributing
62
103
 
63
104
  You know how this works and bonus points for feature branches!
@@ -0,0 +1,4 @@
1
+ module Restrict
2
+ class AlreadyRestrictedError < Error
3
+ end
4
+ end
@@ -15,12 +15,7 @@ module Restrict
15
15
 
16
16
  def handle_restriction(restriction, controller)
17
17
  validate_signed_in(controller)
18
-
19
- if restriction.unless
20
- unless controller.__send__(restriction.unless)
21
- raise Restrict::AccessDenied, reason: restriction
22
- end
23
- end
18
+ restriction.validate(controller)
24
19
  end
25
20
 
26
21
  def concerning_restrictions(controller)
@@ -3,29 +3,48 @@ module Restrict
3
3
  module Controller
4
4
  extend ActiveSupport::Concern
5
5
 
6
- included do
7
- class_attribute :restrictions
6
+ def inherited(subclass)
7
+ subclass.extend Restrict::Rails::Controller
8
+ end
9
+
10
+ def restrictions
11
+ inherited_restrictions + self.class.__send__(:restrict_restrictions)
8
12
  end
9
13
 
10
14
  module ClassMethods
11
15
  def restrict(*args)
12
16
  install_gatekeeper
13
- self.restrictions ||= []
14
- restrictions << Restrict::Restriction.new(*args)
17
+ restrict_restrictions << Restrict::Restriction.new(*args)
18
+ end
19
+
20
+ # Access the class instance variable. Do not mistake this method with
21
+ # the instance method `#restrictions` which is actually used to determine
22
+ # access and that respects inherited restrictions.
23
+ # Hence the `__` name.
24
+ private def restrict_restrictions
25
+ @restrictions ||= []
15
26
  end
16
27
 
17
28
  # This could happen in included block as well, but often you need
18
29
  # other before filters to happen before you actually check the
19
30
  # restrictions, so lets set it where it is used in the code as well.
20
31
  def install_gatekeeper
21
- return if @gatekeeper_installed
32
+ return if @restrict_gatekeeper_installed
22
33
  before_action :invoke_gatekeeper
23
- @gatekeeper_installed = true
34
+ @restrict_gatekeeper_installed = true
24
35
  end
25
36
  end
26
37
 
27
38
  private
28
39
 
40
+ def inherited_restrictions
41
+ self.class.ancestors.map do |ancestor|
42
+ if ancestor.instance_variable_get(:@restrict_gatekeeper_installed)
43
+ ancestor.__send__(:restrict_restrictions)
44
+ end
45
+ end.compact.flatten
46
+ end
47
+
29
48
  def invoke_gatekeeper
30
49
  Restrict::Gatekeeper.new.eye(self)
31
50
  end
@@ -2,7 +2,9 @@ module Restrict
2
2
  module Rails
3
3
  class Railtie < ::Rails::Railtie
4
4
  initializer 'restrict.add_controller_extension' do
5
- ActionController::Base.send :include, Restrict::Rails::Controller
5
+ ActiveSupport.on_load(:action_controller_base) do
6
+ ActionController::Base.include Restrict::Rails::Controller
7
+ end
6
8
  end
7
9
  end
8
10
  end
@@ -1,17 +1,32 @@
1
1
  module Restrict
2
2
  class Restriction
3
- attr_accessor :actions, :unless
3
+ attr_accessor :actions, :options, :unless, :on
4
4
 
5
5
  def initialize(*args)
6
- options = args.extract_options!
7
- @unless = options[:unless]
8
- @actions = args
6
+ @options = args.extract_options!
7
+ @unless = @options[:unless]
8
+ @on = @options[:on] || options[:of] || options[:object]
9
+ @actions = args
9
10
  end
10
11
 
11
12
  def applies_to?(action)
12
13
  applies_to_action?(action) || applies_to_all_actions?
13
14
  end
14
15
 
16
+ def validate(controller)
17
+ @unless or return
18
+
19
+ unless_args = []
20
+ if @on
21
+ object = controller.__send__(on)
22
+ unless_args << object or raise Restrict::AccessDenied, reason: 'object given was #{object.inspect}'
23
+ end
24
+
25
+ unless controller.__send__(@unless, *unless_args)
26
+ raise Restrict::AccessDenied, reason: self
27
+ end
28
+ end
29
+
15
30
  private
16
31
 
17
32
  def applies_to_all_actions?
@@ -4,24 +4,23 @@ 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.applies_to?(given_action_name)
8
- end
9
-
10
- if @restriction
11
- if @given_unless
12
- @restriction.unless == @given_unless
13
- else
14
- true
7
+ if restriction.applies_to?(given_action_name) && matching_unless(restriction, @given_unless)
8
+ restriction
15
9
  end
16
- else
17
- false
18
10
  end
11
+
12
+ !!@restriction
19
13
  end
20
14
 
21
15
  chain :unless do |given_unless|
22
16
  @given_unless = given_unless
23
17
  end
24
18
 
19
+ def matching_unless(restriction, given_unless)
20
+ given_unless or return true
21
+ restriction.unless == given_unless
22
+ end
23
+
25
24
  failure_message do |actual|
26
25
  if @restriction && @given_unless
27
26
  "Expected restriction to call #{@given_unless.inspect}, but calls #{@restriction.unless.inspect}"
@@ -38,7 +37,6 @@ RSpec::Matchers.define :have_restriction_on do |given_action_name|
38
37
  end
39
38
  end
40
39
 
41
- # :nocov:
42
40
  def description
43
41
  "Checks if a restriction for a given action is defined on the controller"
44
42
  end
@@ -4,25 +4,24 @@ 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.applies_to?(given_action_name)
8
- end
9
-
10
- if @restriction
11
- if @given_unless
12
- @restriction.unless == @given_unless
13
- else
14
- true
7
+ if restriction.applies_to?(given_action_name) && matching_unless(restriction, @given_unless)
8
+ restriction
15
9
  end
16
- else
17
- false
18
10
  end
11
+
12
+ !!@restriction
19
13
  end
20
14
 
21
15
  chain :unless do |given_unless|
22
16
  @given_unless = given_unless
23
17
  end
24
18
 
25
- failure_message_for_should do |actual|
19
+ def matching_unless(restriction, given_unless)
20
+ given_unless or return true
21
+ restriction.unless == given_unless
22
+ end
23
+
24
+ failure_message do |actual|
26
25
  if @restriction && @given_unless
27
26
  "Expected restriction to call #{@given_unless.inspect}, but calls #{@restriction.unless.inspect}"
28
27
  else
@@ -30,7 +29,7 @@ RSpec::Matchers.define :have_restriction_on do |given_action_name|
30
29
  end
31
30
  end
32
31
 
33
- failure_message_for_should_not do |actual|
32
+ failure_message_when_negated do |actual|
34
33
  if @given_unless
35
34
  "Expected restriction not to call #{@given_unless.inspect}, but calls #{@restriction.unless.inspect}"
36
35
  else
@@ -0,0 +1,5 @@
1
+ RSpec.shared_examples "restricts access to" do |action_name, unless_condition|
2
+ it "restricts #{action_name}#{unless_condition && " unless #{unless_condition}"}" do
3
+ expect(controller).to have_restriction_on(action_name).unless(unless_condition)
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Restrict
2
- VERSION = "0.0.8"
2
+ VERSION = "0.2.1"
3
3
  end
data/restrict.gemspec CHANGED
@@ -20,10 +20,9 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'rails', '> 3.0'
22
22
 
23
- spec.add_development_dependency 'bundler', '~> 1.5'
23
+ spec.add_development_dependency 'bundler'
24
24
  spec.add_development_dependency 'rspec'
25
25
  spec.add_development_dependency 'simplecov'
26
26
  spec.add_development_dependency 'rake'
27
27
  spec.add_development_dependency 'byebug'
28
- spec.add_development_dependency 'codeclimate-test-reporter'
29
28
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Restrict::Rails::Controller do
4
-
5
4
  let(:controller) { ExampleController.new }
6
5
 
7
6
  before do
@@ -17,6 +16,8 @@ describe Restrict::Rails::Controller do
17
16
  it 'builds and adds a conditional restriction' do
18
17
  expect(controller).to have_restriction_on(:show).unless(:access_allowed?)
19
18
  end
19
+
20
+ include_examples 'restricts access to', :show, :access_allowed?
20
21
  end
21
22
 
22
23
  describe '#included' do
@@ -32,4 +33,47 @@ describe Restrict::Rails::Controller do
32
33
  end
33
34
  end
34
35
 
36
+ describe 'in inherited mode' do
37
+ let(:base) { ExampleController.new }
38
+ let(:controller) { InheritingController.new }
39
+ let(:child) { BottomLineController.new }
40
+
41
+ before do
42
+ base.class.restrict :show, unless: :level1?
43
+ controller.class.restrict :show, unless: :level2?
44
+ child.class.restrict :show, unless: :level3?
45
+ end
46
+
47
+ it 'does not leak restrictions into superclass' do
48
+ expect(base).to have_restriction_on(:show).unless(:level1?)
49
+ expect(base).not_to have_restriction_on(:show).unless(:level2?)
50
+ expect(base).not_to have_restriction_on(:show).unless(:level3?)
51
+
52
+ expect(controller).to have_restriction_on(:show).unless(:level1?)
53
+ expect(controller).to have_restriction_on(:show).unless(:level2?)
54
+ expect(controller).not_to have_restriction_on(:show).unless(:level3?)
55
+
56
+ expect(child).to have_restriction_on(:show).unless(:level1?)
57
+ expect(child).to have_restriction_on(:show).unless(:level2?)
58
+ expect(child).to have_restriction_on(:show).unless(:level3?)
59
+ end
60
+ end
61
+
62
+ describe 'applies inherited general restrictions additionally to explizit restrictions' do
63
+ let(:base) { ExampleController.new }
64
+ let(:controller) { InheritingController.new }
65
+
66
+ before do
67
+ base.class.restrict unless: :level1?
68
+ controller.class.restrict :show, unless: :level2?
69
+ end
70
+
71
+ it 'does not leak restrictions into superclass' do
72
+ expect(base).to have_restriction_on(:show).unless(:level1?)
73
+ expect(base).not_to have_restriction_on(:show).unless(:level2?)
74
+
75
+ expect(controller).to have_restriction_on(:show).unless(:level1?)
76
+ expect(controller).to have_restriction_on(:show).unless(:level2?)
77
+ end
78
+ end
35
79
  end
@@ -28,4 +28,52 @@ describe Restrict::Restriction do
28
28
  expect(restriction).to be_applies_to(:bar)
29
29
  end
30
30
  end
31
+
32
+ describe '#validate' do
33
+ describe 'with :on option' do
34
+ let(:controller) { ObjectController.new }
35
+
36
+ it 'does not raise if no condition was given' do
37
+ restriction = Restrict::Restriction.new on: :managed_object
38
+ expect { restriction.validate(controller) }.not_to raise_error
39
+ end
40
+
41
+ it 'does not raise an error if `on` and `unless` match' do
42
+ restriction = Restrict::Restriction.new on: :managed_object, unless: :manager_of?
43
+ expect { restriction.validate(controller) }.not_to raise_error
44
+ end
45
+
46
+ it 'raises an error if `unless` does not work on `on`' do
47
+ restriction = Restrict::Restriction.new on: :rougue_object, unless: :manager_of?
48
+ expect { restriction.validate(controller) }.to raise_error(Restrict::AccessDenied)
49
+ end
50
+
51
+ it 'raises an error if `on` is nil' do
52
+ restriction = Restrict::Restriction.new on: :nil_object, unless: :manager_of?
53
+ expect { restriction.validate(controller) }.to raise_error(Restrict::AccessDenied)
54
+ end
55
+
56
+ it 'works with aliases' do
57
+ restriction = Restrict::Restriction.new of: :managed_object, unless: :manager_of?
58
+ expect { restriction.validate(controller) }.not_to raise_error
59
+
60
+ restriction = Restrict::Restriction.new object: :managed_object, unless: :manager_of?
61
+ expect { restriction.validate(controller) }.not_to raise_error
62
+ end
63
+ end
64
+
65
+ describe 'without :on option' do
66
+ let(:controller) { ExampleController.new }
67
+
68
+ it 'does not raise an error if `unless` works' do
69
+ restriction = Restrict::Restriction.new unless: :truthy
70
+ expect { restriction.validate(controller) }.not_to raise_error
71
+ end
72
+
73
+ it 'raises an error if `unless` does not work' do
74
+ restriction = Restrict::Restriction.new unless: :falsy
75
+ expect { restriction.validate(controller) }.to raise_error(Restrict::AccessDenied)
76
+ end
77
+ end
78
+ end
31
79
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Restrict do
4
-
5
4
  describe '#config' do
6
5
  it 'returns a configuration' do
7
6
  expect(Restrict.config).to be_a Restrict::Configuration
@@ -17,5 +16,4 @@ describe Restrict do
17
16
  expect(Restrict.config).to eq Restrict.config
18
17
  end
19
18
  end
20
-
21
19
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,7 @@
1
- require 'codeclimate-test-reporter'
2
- CodeClimate::TestReporter.start
3
-
4
1
  require 'simplecov'
5
2
  require 'byebug'
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
6
5
 
7
6
  SimpleCov.profiles.define 'gem' do
8
7
  add_filter '/spec/'
@@ -13,10 +12,13 @@ SimpleCov.start 'gem'
13
12
 
14
13
  require 'restrict'
15
14
  require 'restrict/rspec/matcher'
15
+ require 'restrict/rspec/shared_example'
16
16
 
17
17
  RSpec.configure do |config|
18
18
  config.after do
19
- ExampleController.restrictions = []
19
+ ExampleController.__send__(:restrict_restrictions).clear
20
+ InheritingController.__send__(:restrict_restrictions).clear
21
+ BottomLineController.__send__(:restrict_restrictions).clear
20
22
  end
21
23
  end
22
24
 
@@ -47,3 +49,30 @@ class ExampleController < FakeController
47
49
  true
48
50
  end
49
51
  end
52
+
53
+ class InheritingController < ExampleController
54
+ include Restrict::Rails::Controller
55
+ end
56
+
57
+ class BottomLineController < InheritingController
58
+ include Restrict::Rails::Controller
59
+ end
60
+
61
+ class ObjectController < ExampleController
62
+ def manager_of?(obj)
63
+ obj == :managed
64
+ end
65
+
66
+ private
67
+
68
+ def managed_object
69
+ :managed
70
+ end
71
+
72
+ def rougue_object
73
+ :other
74
+ end
75
+
76
+ def nil_object
77
+ end
78
+ 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.8
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Opper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-02 00:00:00.000000000 Z
11
+ date: 2021-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -26,20 +26,6 @@ dependencies:
26
26
  version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.5'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.5'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - ">="
@@ -53,7 +39,7 @@ dependencies:
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
- name: simplecov
42
+ name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ">="
@@ -67,7 +53,7 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: rake
56
+ name: simplecov
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
@@ -81,7 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: byebug
70
+ name: rake
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,7 +81,7 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: codeclimate-test-reporter
84
+ name: byebug
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -115,9 +101,10 @@ executables: []
115
101
  extensions: []
116
102
  extra_rdoc_files: []
117
103
  files:
104
+ - ".github/workflows/specs.yml"
118
105
  - ".gitignore"
119
106
  - ".rspec"
120
- - ".travis.yml"
107
+ - ".ruby-version"
121
108
  - CHANGELOG.md
122
109
  - Gemfile
123
110
  - LICENSE.txt
@@ -125,6 +112,7 @@ files:
125
112
  - Rakefile
126
113
  - lib/restrict.rb
127
114
  - lib/restrict/access_denied.rb
115
+ - lib/restrict/already_restricted_error.rb
128
116
  - lib/restrict/configuration.rb
129
117
  - lib/restrict/error.rb
130
118
  - lib/restrict/gatekeeper.rb
@@ -134,6 +122,7 @@ files:
134
122
  - lib/restrict/restriction.rb
135
123
  - lib/restrict/rspec/matcher.rb
136
124
  - lib/restrict/rspec/matcher_rspec2.rb
125
+ - lib/restrict/rspec/shared_example.rb
137
126
  - lib/restrict/version.rb
138
127
  - restrict.gemspec
139
128
  - spec/lib/restrict/configuration_spec.rb
@@ -162,8 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
151
  - !ruby/object:Gem::Version
163
152
  version: '0'
164
153
  requirements: []
165
- rubyforge_project:
166
- rubygems_version: 2.6.4
154
+ rubygems_version: 3.1.4
167
155
  signing_key:
168
156
  specification_version: 4
169
157
  summary: Simple access control dsl for controllers.
@@ -175,4 +163,3 @@ test_files:
175
163
  - spec/lib/restrict/rspec/matcher_spec.rb
176
164
  - spec/lib/restrict_spec.rb
177
165
  - spec/spec_helper.rb
178
- has_rdoc:
data/.travis.yml DELETED
@@ -1,11 +0,0 @@
1
- rvm:
2
- - 2.0.0
3
- - 2.1.0
4
- - 2.1.1
5
-
6
- script: 'bundle exec rake spec'
7
-
8
- notifications:
9
- disabled: false
10
- recipients:
11
- - johannes.opper@gmail.com