restrict 0.0.2 → 0.0.3

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
  SHA1:
3
- metadata.gz: c99bdbebb900cbb8bd4f2e16c7951a00077c9552
4
- data.tar.gz: ad856af2b30b2e808db164da909ee824598707ee
3
+ metadata.gz: a311cd60d3877b78f14d2baa83f6155a86a1f3f2
4
+ data.tar.gz: 4a974335ee21c330485d91de9cc54f9d861812dc
5
5
  SHA512:
6
- metadata.gz: cef3ff540a576034e4d243304e52717dd4edb910e738e707417ba8bcbcfaf024dfc963307e411dd799627697692cc0d106d0135ffdbe6a3ddfedbedfcf9cb16b
7
- data.tar.gz: 2d6bf74cbe84d97398ea0c23cb99429e6be7dbb7dfd8359f3c6abbbfdd8c215beb3fd70c22b4f810bdbc3bd70c29d0e85a5286a42429723256f584e62fdbb116
6
+ metadata.gz: a49f1610e19cb448b598ff93e965e277788e1e7e482b2541eb5c6275a7b290afbdd1397a51f55dd518894063b34e63dc85ab835e832b0e6a8de52b667f8a3b14
7
+ data.tar.gz: c50d8015c07fb09a5061f606b2ca8aaeacf45c9d5dc3ed4e0d50d445fef2a849e0372ba31854ed56b0e856d673996d397aa6ff446948939eb1764cc49a403c67
data/CHANGELOG.md CHANGED
@@ -1,5 +1,7 @@
1
- [not released] - 2014-08-22
1
+ [0.0.3] - 2014-08-23
2
2
  * Added railtie to require controller extension instantly
3
+ * Added :all_actions matcher
4
+ * Configuration for authentication_validation_method
3
5
 
4
6
  [0.0.1] - 2014-08-21 Initial import
5
7
  * Includes plain and conditional restrictions
data/README.md CHANGED
@@ -41,10 +41,22 @@ What that does:
41
41
  3. If a `current_user` exists but `goodie_manager?` returns false, then `Restrict::AccessDenied` will be raised
42
42
  4. If a `current_user` exists and `goodie_manager?` is true, the access is allowed
43
43
 
44
- ## Todos/Ideas
44
+ ### Restrict all actions
45
45
 
46
- * make `current_user` configurable
47
- * introduce `any_action` option
46
+ ```ruby
47
+ restrict :all_actions
48
+ ```
49
+
50
+ This one will apply to all actions on this controller. It takes the `allow_if` option as well.
51
+
52
+ ### Configuration
53
+
54
+ ```ruby
55
+ # Default is :user_signed_in?
56
+ Restrict.config.authentication_validation_method = :current_user
57
+ ```
58
+
59
+ 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.
48
60
 
49
61
  ## Contributing
50
62
 
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
3
  if File.exist?('.codeclimate')
4
- ENV["CODECLIMATE_REPO_TOKEN"] = File.read('.codeclimate')
4
+ ENV["CODECLIMATE_REPO_TOKEN"] = File.read('.codeclimate').strip
5
5
  end
6
6
 
7
7
  require 'rspec/core/rake_task'
@@ -0,0 +1,9 @@
1
+ module Restrict
2
+ class Configuration
3
+ attr_writer :authentication_validation_method
4
+
5
+ def authentication_validation_method
6
+ @authentication_validation_method || :user_signed_in?
7
+ end
8
+ end
9
+ end
@@ -20,7 +20,7 @@ module Restrict
20
20
  def current_restriction(controller)
21
21
  controller.restrictions or return
22
22
  controller.restrictions.find do |restriction|
23
- restriction.restricts?(controller.action_name)
23
+ restriction.concerning?(controller.action_name)
24
24
  end
25
25
  end
26
26
  end
@@ -1,17 +1,26 @@
1
1
  module Restrict
2
2
  class Restriction
3
- attr_accessor :actions, :role, :allow_if
3
+ attr_accessor :actions, :allow_if
4
4
 
5
5
  def initialize(*args)
6
6
  options = args.extract_options!
7
- @role = options[:role]
8
7
  @allow_if = options[:allow_if]
9
8
  @actions = args
10
9
  actions.empty? and raise ArgumentError, "expected actions to restrict, but got #{actions.inspect}"
11
10
  end
12
11
 
13
- def restricts?(action_name)
14
- actions.include?(action_name.to_sym)
12
+ def concerning?(action)
13
+ concerns_action?(action) || concerns_all?
14
+ end
15
+
16
+ private
17
+
18
+ def concerns_all?
19
+ actions.include?(:all_actions)
20
+ end
21
+
22
+ def concerns_action?(name)
23
+ actions.include?(name.to_sym)
15
24
  end
16
25
  end
17
26
  end
@@ -4,7 +4,7 @@ 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.restricts?(given_action_name)
7
+ restriction.concerning?(given_action_name)
8
8
  end
9
9
 
10
10
  if @restriction
@@ -38,6 +38,7 @@ RSpec::Matchers.define :have_restriction_on do |given_action_name|
38
38
  end
39
39
  end
40
40
 
41
+ # :nocov:
41
42
  def description
42
43
  "Checks if a restriction for a given action is defined on the controller"
43
44
  end
@@ -4,7 +4,7 @@ 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.restricts?(given_action_name)
7
+ restriction.concerning?(given_action_name)
8
8
  end
9
9
 
10
10
  if @restriction
@@ -1,3 +1,3 @@
1
1
  module Restrict
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/restrict.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'active_support'
2
2
 
3
3
  require 'restrict/version'
4
+ require 'restrict/configuration'
4
5
  require 'restrict/error'
5
6
  require 'restrict/login_required'
6
7
  require 'restrict/access_denied'
@@ -10,5 +11,10 @@ require 'restrict/rails/controller'
10
11
  require 'restrict/rails/railtie' if defined?(Rails)
11
12
 
12
13
  module Restrict
13
- # Your code goes here...
14
+
15
+ def self.config(&block)
16
+ @configuration ||= Restrict::Configuration.new
17
+ block_given? ? yield(@configuration) : @configuration
18
+ end
19
+
14
20
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restrict::Configuration do
4
+ let(:configuration) { Restrict::Configuration.new }
5
+
6
+ describe '#authentication_method' do
7
+ it 'has a sensible default' do
8
+ expect(configuration.authentication_validation_method).to eq :user_signed_in?
9
+ end
10
+
11
+ it 'can be overridden' do
12
+ configuration.authentication_validation_method = :foobar?
13
+ expect(configuration.authentication_validation_method).to eq :foobar?
14
+ end
15
+ end
16
+
17
+ end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Restrict::Restriction do
4
- let(:restriction) { Restrict::Restriction.new(:show, :edit, role: :manager) }
4
+ let(:restriction) { Restrict::Restriction.new(:show, :edit) }
5
5
 
6
6
  describe '#initialize' do
7
7
  it 'knows about its actions' do
@@ -13,24 +13,23 @@ describe Restrict::Restriction do
13
13
  end
14
14
  end
15
15
 
16
- describe '#restricts?' do
16
+ describe '#concerning?' do
17
17
  it 'returns true if the given action is contained' do
18
- expect(restriction).to be_restricts(:show)
18
+ expect(restriction).to be_concerning(:show)
19
19
  end
20
20
 
21
- it 'returns false if the given action name is not contained' do
22
- expect(restriction).not_to be_restricts(:index)
21
+ it 'returns true if the given name is a string' do
22
+ expect(restriction).to be_concerning('show')
23
23
  end
24
- end
25
24
 
26
- describe '#role' do
27
- it 'returns the role name if given' do
28
- expect(restriction.role).to eq :manager
25
+ it 'returns false if the given action name is not contained' do
26
+ expect(restriction).not_to be_concerning(:index)
29
27
  end
30
28
 
31
- it 'returns nil if non was given' do
32
- expect(Restrict::Restriction.new(:foo).role).to be_nil
29
+ it 'returns true if it concerns :all_actions' do
30
+ restriction = Restrict::Restriction.new(:all_actions)
31
+ expect(restriction).to be_concerning(:foo)
32
+ expect(restriction).to be_concerning(:bar)
33
33
  end
34
34
  end
35
-
36
35
  end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restrict do
4
+
5
+ describe '#config' do
6
+ it 'returns a configuration' do
7
+ expect(Restrict.config).to be_a Restrict::Configuration
8
+ end
9
+
10
+ it 'yiels a configuration if block given' do
11
+ Restrict.config do |config|
12
+ expect(config).to be_a Restrict::Configuration
13
+ end
14
+ end
15
+
16
+ it 'keeps the same configuration' do
17
+ expect(Restrict.config).to eq Restrict.config
18
+ end
19
+ end
20
+
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restrict
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Opper
@@ -125,6 +125,7 @@ files:
125
125
  - Rakefile
126
126
  - lib/restrict.rb
127
127
  - lib/restrict/access_denied.rb
128
+ - lib/restrict/configuration.rb
128
129
  - lib/restrict/error.rb
129
130
  - lib/restrict/gatekeeper.rb
130
131
  - lib/restrict/login_required.rb
@@ -135,10 +136,12 @@ files:
135
136
  - lib/restrict/rspec/matcher_rspec2.rb
136
137
  - lib/restrict/version.rb
137
138
  - restrict.gemspec
139
+ - spec/lib/restrict/configuration_spec.rb
138
140
  - spec/lib/restrict/gatekeeper_spec.rb
139
141
  - spec/lib/restrict/rails/controller_spec.rb
140
142
  - spec/lib/restrict/restriction_spec.rb
141
143
  - spec/lib/restrict/rspec/matcher_spec.rb
144
+ - spec/lib/restrict_spec.rb
142
145
  - spec/spec_helper.rb
143
146
  homepage: https://github.com/xijo/restrict
144
147
  licenses:
@@ -165,8 +168,10 @@ signing_key:
165
168
  specification_version: 4
166
169
  summary: Simple access control dsl for controllers.
167
170
  test_files:
171
+ - spec/lib/restrict/configuration_spec.rb
168
172
  - spec/lib/restrict/gatekeeper_spec.rb
169
173
  - spec/lib/restrict/rails/controller_spec.rb
170
174
  - spec/lib/restrict/restriction_spec.rb
171
175
  - spec/lib/restrict/rspec/matcher_spec.rb
176
+ - spec/lib/restrict_spec.rb
172
177
  - spec/spec_helper.rb