arrthorizer 0.1.0.pre
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.
- data/.gitignore +21 -0
- data/.travis.yml +6 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +32 -0
- data/Rakefile +8 -0
- data/arrthorizer.gemspec +24 -0
- data/config.ru +7 -0
- data/lib/arrthorizer/arrthorizer_exception.rb +11 -0
- data/lib/arrthorizer/context.rb +65 -0
- data/lib/arrthorizer/context_builder.rb +11 -0
- data/lib/arrthorizer/context_role.rb +31 -0
- data/lib/arrthorizer/permission.rb +14 -0
- data/lib/arrthorizer/privilege.rb +44 -0
- data/lib/arrthorizer/rails/configuration.rb +67 -0
- data/lib/arrthorizer/rails/controller_action.rb +45 -0
- data/lib/arrthorizer/rails/controller_concern.rb +70 -0
- data/lib/arrthorizer/rails/controller_configuration.rb +36 -0
- data/lib/arrthorizer/rails/controller_context_builder.rb +39 -0
- data/lib/arrthorizer/rails.rb +24 -0
- data/lib/arrthorizer/registry.rb +30 -0
- data/lib/arrthorizer/role.rb +31 -0
- data/lib/arrthorizer/roles.rb +19 -0
- data/lib/arrthorizer/version.rb +3 -0
- data/lib/arrthorizer.rb +28 -0
- data/lib/generators/arrthorizer/install/USAGE +9 -0
- data/lib/generators/arrthorizer/install/install_generator.rb +62 -0
- data/lib/generators/arrthorizer/install/templates/config.yml +49 -0
- data/spec/arrthorizer_exception/inner_spec.rb +21 -0
- data/spec/context/equals_spec.rb +44 -0
- data/spec/context/merge_spec.rb +37 -0
- data/spec/context_builder/build_spec.rb +12 -0
- data/spec/context_role/to_key_spec.rb +21 -0
- data/spec/context_spec.rb +49 -0
- data/spec/controllers/some_controller_spec.rb +79 -0
- data/spec/integration/registry/missing_handler_spec.rb +25 -0
- data/spec/integration/role_spec.rb +17 -0
- data/spec/internal/app/assets/images/rails.png +0 -0
- data/spec/internal/app/assets/javascripts/application.js +15 -0
- data/spec/internal/app/assets/javascripts/test.js.coffee +3 -0
- data/spec/internal/app/assets/stylesheets/application.css +13 -0
- data/spec/internal/app/assets/stylesheets/test.css.scss +3 -0
- data/spec/internal/app/controllers/application_controller.rb +3 -0
- data/spec/internal/app/controllers/some_controller.rb +17 -0
- data/spec/internal/app/helpers/application_helper.rb +2 -0
- data/spec/internal/app/helpers/test_helper.rb +2 -0
- data/spec/internal/app/mailers/.gitkeep +0 -0
- data/spec/internal/app/models/.gitkeep +0 -0
- data/spec/internal/app/roles/namespaced/context_role.rb +9 -0
- data/spec/internal/app/roles/unnamespaced_context_role.rb +6 -0
- data/spec/internal/app/views/layouts/application.html.erb +11 -0
- data/spec/internal/app/views/some/some_action.html.erb +2 -0
- data/spec/internal/config/application.rb +65 -0
- data/spec/internal/config/arrthorizer.yml +9 -0
- data/spec/internal/config/boot.rb +6 -0
- data/spec/internal/config/database.yml +25 -0
- data/spec/internal/config/environment.rb +5 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/db/schema.rb +3 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/permission/grant_spec.rb +14 -0
- data/spec/privilege/accessible_to_spec.rb +32 -0
- data/spec/privilege/get_spec.rb +35 -0
- data/spec/privilege/initialize_spec.rb +15 -0
- data/spec/privilege/make_accessible_to_spec.rb +22 -0
- data/spec/rails/.gitkeep +0 -0
- data/spec/rails/controller_action/initialize_spec.rb +42 -0
- data/spec/rails/controller_action/key_for_spec.rb +17 -0
- data/spec/rails/controller_action/to_key_spec.rb +14 -0
- data/spec/rails/controller_concern/arrthorizer_context_spec.rb +22 -0
- data/spec/rails/controller_concern/authorize_spec.rb +113 -0
- data/spec/rails/controller_concern/integration_spec.rb +75 -0
- data/spec/rails/controller_concern/to_prepare_context_spec.rb +38 -0
- data/spec/rails/controller_configuration/initialize_spec.rb +19 -0
- data/spec/role/get_spec.rb +29 -0
- data/spec/role/shared_examples/finding_the_right_role.rb +6 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/reset.rb +26 -0
- metadata +244 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
# SQLite version 3.x
|
2
|
+
# gem install sqlite3
|
3
|
+
#
|
4
|
+
# Ensure the SQLite 3 gem is defined in your Gemfile
|
5
|
+
# gem 'sqlite3'
|
6
|
+
development:
|
7
|
+
adapter: sqlite3
|
8
|
+
database: db/development.sqlite3
|
9
|
+
pool: 5
|
10
|
+
timeout: 5000
|
11
|
+
|
12
|
+
# Warning: The database defined as "test" will be erased and
|
13
|
+
# re-generated from your development database when you run "rake".
|
14
|
+
# Do not set this db to the same as development or production.
|
15
|
+
test:
|
16
|
+
adapter: sqlite3
|
17
|
+
database: db/test.sqlite3
|
18
|
+
pool: 5
|
19
|
+
timeout: 5000
|
20
|
+
|
21
|
+
production:
|
22
|
+
adapter: sqlite3
|
23
|
+
database: db/production.sqlite3
|
24
|
+
pool: 5
|
25
|
+
timeout: 5000
|
@@ -0,0 +1 @@
|
|
1
|
+
*.log
|
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Permission do
|
4
|
+
describe :grant do
|
5
|
+
let(:privilege) { Arrthorizer::Privilege.new(name: "privilege") }
|
6
|
+
let(:role) { UnnamespacedContextRole }
|
7
|
+
|
8
|
+
it "adds the role to the privilege set" do
|
9
|
+
Arrthorizer::Permission.grant(privilege, to: role)
|
10
|
+
|
11
|
+
expect(privilege).to be_accessible_to(role)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Privilege do
|
4
|
+
subject(:privilege) { Arrthorizer::Privilege.new(name: "some privilege") }
|
5
|
+
|
6
|
+
let(:role) { Namespaced::ContextRole }
|
7
|
+
let(:other_role) { UnnamespacedContextRole }
|
8
|
+
|
9
|
+
describe :accessible_to? do
|
10
|
+
context "when a Role was configured to have access to this privilege" do
|
11
|
+
before :each do
|
12
|
+
privilege.make_accessible_to(role)
|
13
|
+
end
|
14
|
+
|
15
|
+
context "and that Role is provided" do
|
16
|
+
let(:arg) { role }
|
17
|
+
|
18
|
+
it "returns true" do
|
19
|
+
expect(privilege.accessible_to?(arg)).to be_true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "and the name of that Role is provided" do
|
24
|
+
let(:arg) { role.name }
|
25
|
+
|
26
|
+
it "returns true" do
|
27
|
+
expect(privilege.accessible_to?(arg)).to be_true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Privilege do
|
4
|
+
describe :get do
|
5
|
+
context "when the privilege set does not exist" do
|
6
|
+
it "raises a Privilege::NotFound error" do
|
7
|
+
expect {
|
8
|
+
Arrthorizer::Privilege.get("computer_says_no")
|
9
|
+
}.to raise_error(Arrthorizer::Registry::NotFound)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when the privilege set with the given name exists" do
|
14
|
+
let(:name) { "computer_says_hi" }
|
15
|
+
|
16
|
+
before do
|
17
|
+
@privilege = Arrthorizer::Privilege.new(name: name)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns that privilege set" do
|
21
|
+
Arrthorizer::Privilege.get(name).should be @privilege
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when the parameter is already a privilege set" do
|
26
|
+
before do
|
27
|
+
@privilege = Arrthorizer::Privilege.new(name: "irrelevant")
|
28
|
+
end
|
29
|
+
|
30
|
+
specify "that privilege set is returned" do
|
31
|
+
Arrthorizer::Privilege.get(@privilege).should be @privilege
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Privilege do
|
4
|
+
describe :initialize do
|
5
|
+
let(:role) { UnnamespacedContextRole }
|
6
|
+
let(:roles) { [ role ] }
|
7
|
+
let(:name) { "some name" }
|
8
|
+
|
9
|
+
subject(:privilege) { Arrthorizer::Privilege.new(name: name, roles: roles) }
|
10
|
+
|
11
|
+
it "makes itself accessible to each provided role" do
|
12
|
+
expect(privilege).to be_accessible_to(role)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Privilege do
|
4
|
+
describe :make_accessible_to do
|
5
|
+
let(:privilege) { Arrthorizer::Privilege.new(name: "privilege") }
|
6
|
+
let(:role) { UnnamespacedContextRole }
|
7
|
+
|
8
|
+
it "makes the privilege accessible to the role" do
|
9
|
+
expect {
|
10
|
+
privilege.make_accessible_to(role)
|
11
|
+
}.to change { privilege.accessible_to?(role) }.to(true)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "does not make it accessible to a different role" do
|
15
|
+
unrelated_role = Namespaced::ContextRole
|
16
|
+
|
17
|
+
expect {
|
18
|
+
privilege.make_accessible_to(role)
|
19
|
+
}.not_to change { privilege.accessible_to?(unrelated_role) }.to(true)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/rails/.gitkeep
ADDED
File without changes
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Rails::ControllerAction do
|
4
|
+
let(:controller_name) { 'some_controller' }
|
5
|
+
let(:action_name) { 'some_action' }
|
6
|
+
|
7
|
+
let(:definition) { { controller: controller_name, action: action_name } }
|
8
|
+
|
9
|
+
describe :initialize do
|
10
|
+
context "when all parameters are properly specified" do
|
11
|
+
it "does not raise an error" do
|
12
|
+
expect {
|
13
|
+
Arrthorizer::Rails::ControllerAction.new(definition)
|
14
|
+
}.not_to raise_error
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when the controller is not properly specified" do
|
19
|
+
before :each do
|
20
|
+
definition.delete(:controller)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "raises an Arrthorizer::Rails::ControllerAction::ControllerNotDefined" do
|
24
|
+
expect {
|
25
|
+
Arrthorizer::Rails::ControllerAction.new(definition)
|
26
|
+
}.to raise_error(Arrthorizer::Rails::ControllerAction::ControllerNotDefined)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when the action is not properly specified" do
|
31
|
+
before :each do
|
32
|
+
definition.delete(:action)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "does raises an Arrthorizer::Rails::ControllerAction::ActionNotDefined" do
|
36
|
+
expect {
|
37
|
+
Arrthorizer::Rails::ControllerAction.new(definition)
|
38
|
+
}.to raise_error(Arrthorizer::Rails::ControllerAction::ActionNotDefined)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Rails::ControllerAction do
|
4
|
+
describe :key_for do
|
5
|
+
context "when the controller lives in a separate namespace" do
|
6
|
+
let(:controller_path) { 'namespace/controller_name' }
|
7
|
+
let(:controller_path_regex) { %r(#{controller_path}) }
|
8
|
+
let(:controller) { double('some_controller', controller_path: controller_path, action_name: 'some_action') }
|
9
|
+
|
10
|
+
specify "that namespace is made part of the key" do
|
11
|
+
key = Arrthorizer::Rails::ControllerAction.key_for(controller)
|
12
|
+
|
13
|
+
expect(key).to match(%r(#{controller_path}))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Rails::ControllerAction do
|
4
|
+
describe :to_key do
|
5
|
+
let(:controller) { "forum/topics" }
|
6
|
+
let(:action) { "create" }
|
7
|
+
|
8
|
+
subject(:controller_action) { Arrthorizer::Rails::ControllerAction.new(controller: controller, action: action) }
|
9
|
+
|
10
|
+
it "joins controller and action into a 'hash shorthand'" do
|
11
|
+
expect(controller_action.to_key).to eql("#{controller}##{action}")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Rails::ControllerConcern do
|
4
|
+
let(:controller_class) { Class.new(SomeController) }
|
5
|
+
let(:controller) { controller_class.new }
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
controller_class.to_prepare_context do |c|
|
9
|
+
c.defaults do
|
10
|
+
params
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
controller.stub(:request).and_return(ActionDispatch::TestRequest.new)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe :arrthorizer_context do
|
18
|
+
it "returns an Arrthorizer::Context" do
|
19
|
+
controller.send(:arrthorizer_context).should be_a Arrthorizer::Context
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Arrthorizer::Rails::ControllerConcern do
|
4
|
+
let(:controller_class) { Class.new(SomeController) }
|
5
|
+
let(:controller) { controller_class.new }
|
6
|
+
let(:controller_action){ Arrthorizer::Rails::ControllerAction.new(controller: controller_path, action: action_name)}
|
7
|
+
|
8
|
+
let(:action_name){ "some_action" }
|
9
|
+
let(:controller_path){ "some" }
|
10
|
+
let(:current_user){ double("user") }
|
11
|
+
let(:context){ double("context") }
|
12
|
+
|
13
|
+
before do
|
14
|
+
controller.stub(:action_name).and_return(action_name)
|
15
|
+
controller.stub(:current_user).and_return(current_user)
|
16
|
+
controller.stub(:arrthorizer_context).and_return(context)
|
17
|
+
controller.stub(:controller_path).and_return(controller_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
describe :authorize do
|
21
|
+
context "when no privilege has been defined for the action" do
|
22
|
+
it "is forbidden" do
|
23
|
+
expect(controller).to receive(:forbidden)
|
24
|
+
|
25
|
+
controller.send(:authorize)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when a privilege has been defined for the action" do
|
30
|
+
let(:privilege){ Arrthorizer::Privilege.new(name: "test privilege") }
|
31
|
+
let(:permitted_roles){ Arrthorizer::Registry.new }
|
32
|
+
|
33
|
+
before do
|
34
|
+
controller_action.stub(:privilege).and_return(privilege)
|
35
|
+
privilege.stub(:permitted_roles).and_return(permitted_roles)
|
36
|
+
end
|
37
|
+
|
38
|
+
context "but the privilege has no permitted roles" do
|
39
|
+
it "is forbidden" do
|
40
|
+
expect(controller).to receive(:forbidden)
|
41
|
+
|
42
|
+
controller.send(:authorize)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "and the privilege has a permitted role" do
|
47
|
+
let(:role){ Arrthorizer::Role.new }
|
48
|
+
|
49
|
+
before do
|
50
|
+
role.stub(:name).and_return('some_role')
|
51
|
+
permitted_roles.add(role)
|
52
|
+
end
|
53
|
+
|
54
|
+
context "and the role applies to the user" do
|
55
|
+
before do
|
56
|
+
role.stub(:applies_to_user?).with(current_user, context).and_return(true)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "is not forbidden" do
|
60
|
+
expect(controller).not_to receive(:forbidden)
|
61
|
+
|
62
|
+
controller.send(:authorize)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "and the role does not apply to the user" do
|
67
|
+
before do
|
68
|
+
role.stub(:applies_to_user?).with(current_user, context).and_return(false)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "is forbidden" do
|
72
|
+
expect(controller).to receive(:forbidden)
|
73
|
+
|
74
|
+
controller.send(:authorize)
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when the privilege has another permitted role" do
|
78
|
+
let(:another_role){ Arrthorizer::Role.new }
|
79
|
+
|
80
|
+
before do
|
81
|
+
another_role.stub(:name).and_return('another_role')
|
82
|
+
permitted_roles.add(another_role)
|
83
|
+
end
|
84
|
+
|
85
|
+
context "and the role applies to the user" do
|
86
|
+
before do
|
87
|
+
another_role.stub(:applies_to_user?).with(current_user, context).and_return(true)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "is not forbidden" do
|
91
|
+
expect(controller).not_to receive(:forbidden)
|
92
|
+
|
93
|
+
controller.send(:authorize)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context "and the role does not apply to the user" do
|
98
|
+
before do
|
99
|
+
another_role.stub(:applies_to_user?).with(current_user, context).and_return(false)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "is forbidden" do
|
103
|
+
expect(controller).to receive(:forbidden)
|
104
|
+
|
105
|
+
controller.send(:authorize)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
require 'arrthorizer/rails'
|
4
|
+
|
5
|
+
describe Arrthorizer::Rails do
|
6
|
+
describe "controller integration" do
|
7
|
+
let(:controller_class) { Class.new(ApplicationController) do def index; end end}
|
8
|
+
|
9
|
+
describe "each controller class" do
|
10
|
+
it "responds to :prepare_context" do
|
11
|
+
controller_class.should respond_to :to_prepare_context
|
12
|
+
end
|
13
|
+
|
14
|
+
it "responds to :arrthorizer_configuration" do
|
15
|
+
controller_class.should respond_to :arrthorizer_configuration
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "each controller" do
|
20
|
+
let(:controller) { controller_class.new }
|
21
|
+
|
22
|
+
it "responds to :arrthorizer_context" do
|
23
|
+
controller.should respond_to :arrthorizer_context
|
24
|
+
end
|
25
|
+
|
26
|
+
context "when it has a proper configuration for context building" do
|
27
|
+
let(:injected_params) { { some_param: 1 } }
|
28
|
+
let(:current_action) { 'some_action' }
|
29
|
+
|
30
|
+
before :each do
|
31
|
+
controller.stub(:params).and_return injected_params
|
32
|
+
|
33
|
+
controller.stub(:action_name).and_return(current_action)
|
34
|
+
end
|
35
|
+
|
36
|
+
context "and there is no specific configuration for the current action" do
|
37
|
+
before :each do
|
38
|
+
controller_class.to_prepare_context do |c|
|
39
|
+
c.defaults do
|
40
|
+
params # this is an example config which can be easily tested
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "uses the 'default' config to build an Arrthorizer context" do
|
46
|
+
controller.send(:arrthorizer_context).should == Arrthorizer::Context(injected_params)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "and there is a specific configuration for the current action" do
|
51
|
+
let(:action_specific_config) { { some_extra_key: 'some_value' }}
|
52
|
+
|
53
|
+
before :each do
|
54
|
+
controller_class.to_prepare_context do |c|
|
55
|
+
c.defaults do
|
56
|
+
params
|
57
|
+
end
|
58
|
+
|
59
|
+
c.for_action(current_action) do
|
60
|
+
arrthorizer_defaults.merge(some_extra_key: 'some_value')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it "uses the more specific configuration for the current action" do
|
66
|
+
context_hash = injected_params.merge(action_specific_config)
|
67
|
+
expected_context = Arrthorizer::Context(context_hash)
|
68
|
+
|
69
|
+
controller.send(:arrthorizer_context).should == expected_context
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Rails::ControllerConcern do
|
4
|
+
describe :to_prepare_context do
|
5
|
+
let(:controller_class) { Class.new(ApplicationController) }
|
6
|
+
let(:expected_controller_configuration_type) { Arrthorizer::Rails::ControllerConfiguration }
|
7
|
+
|
8
|
+
it "adds a ControllerConfiguration to the class" do
|
9
|
+
expected_controller_configuration = an_instance_of(expected_controller_configuration_type)
|
10
|
+
|
11
|
+
expect {
|
12
|
+
controller_class.to_prepare_context do end
|
13
|
+
}.to change { controller_class.arrthorizer_configuration }.to(expected_controller_configuration)
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when we are dealing with a subclassed controller" do
|
17
|
+
let(:controller_subclass) { Class.new(controller_class) }
|
18
|
+
|
19
|
+
before :each do
|
20
|
+
controller_class.to_prepare_context do end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "does not alter the context config for the superclass" do
|
24
|
+
expect {
|
25
|
+
controller_subclass.to_prepare_context do end
|
26
|
+
}.not_to change { controller_class.arrthorizer_configuration }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when no configuration block is provided" do
|
31
|
+
specify "an Arrthorizer::Rails::ControllerConfiguration::Error is raised" do
|
32
|
+
expect {
|
33
|
+
controller_class.to_prepare_context
|
34
|
+
}.to raise_error(Arrthorizer::Rails::ControllerConfiguration::Error)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Arrthorizer::Rails::ControllerConfiguration do
|
4
|
+
describe :initialize do
|
5
|
+
it "yields the new instance to the builder block" do
|
6
|
+
expect { |block|
|
7
|
+
Arrthorizer::Rails::ControllerConfiguration.new(&block)
|
8
|
+
}.to yield_with_args(an_instance_of(Arrthorizer::Rails::ControllerConfiguration))
|
9
|
+
end
|
10
|
+
|
11
|
+
context "when no builder block is provided" do
|
12
|
+
specify "an Arrthorizer::Rails::ControllerConfiguration::Error is raised" do
|
13
|
+
expect {
|
14
|
+
Arrthorizer::Rails::ControllerConfiguration.new
|
15
|
+
}.to raise_error(Arrthorizer::Rails::ControllerConfiguration::Error)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
require_relative 'shared_examples/finding_the_right_role.rb'
|
4
|
+
|
5
|
+
describe Arrthorizer::Role do
|
6
|
+
describe :get do
|
7
|
+
describe "fetching ContextRoles" do
|
8
|
+
let(:expected_role) { Namespaced::ContextRole.instance } # provided by the internal Rails app
|
9
|
+
|
10
|
+
context "when a ContextRole class is provided" do
|
11
|
+
it_behaves_like "finding the right Role" do
|
12
|
+
let(:arg) { expected_role.class }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when a String representing a ContextRole instance is provided" do
|
17
|
+
it_behaves_like "finding the right Role" do
|
18
|
+
let(:arg) { expected_role.to_key }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when a ContextRole instance is provided" do
|
23
|
+
it_behaves_like "finding the right Role" do
|
24
|
+
let(:arg) { expected_role }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'combustion'
|
5
|
+
|
6
|
+
Combustion.initialize! :active_record, :action_controller,
|
7
|
+
:action_view
|
8
|
+
|
9
|
+
require 'rspec/rails'
|
10
|
+
|
11
|
+
Dir.glob('./spec/support/**/*.rb') do |file|
|
12
|
+
require file
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir.glob('./spec/fixtures/**/*.rb') do |file|
|
16
|
+
require file
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpec.configure do |config|
|
20
|
+
config.use_transactional_fixtures = true
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Arrthorizer
|
2
|
+
module Rails
|
3
|
+
module Resetter
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def reset!
|
7
|
+
Arrthorizer::Rails::ControllerAction.send(:registry).reset!
|
8
|
+
|
9
|
+
Arrthorizer::Rails::Configuration.load
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Registry
|
15
|
+
def reset!
|
16
|
+
self.storage = Hash.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
RSpec.configure do |config|
|
22
|
+
config.before :each do
|
23
|
+
Arrthorizer::Rails::Resetter.reset!
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|