lockdown 1.2.1 → 1.2.2
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/lib/lockdown.rb +1 -1
- data/lib/lockdown/frameworks/rails.rb +10 -2
- data/lib/lockdown/helper.rb +17 -7
- data/lib/lockdown/rules.rb +0 -1
- data/rails_generators/lockdown/lockdown_generator.rb +2 -1
- data/spec/lockdown/database_spec.rb +10 -9
- data/spec/lockdown/frameworks/rails/controller_spec.rb +3 -21
- data/spec/lockdown/frameworks/rails_spec.rb +30 -70
- data/spec/lockdown/rules_spec.rb +6 -0
- data/spec/lockdown/session_spec.rb +2 -1
- data/spec/lockdown/system_spec.rb +2 -12
- metadata +2 -2
data/lib/lockdown.rb
CHANGED
@@ -66,12 +66,16 @@ module Lockdown
|
|
66
66
|
# cache_classes is true in production and testing, need to
|
67
67
|
# modify the ApplicationController
|
68
68
|
def controller_parent
|
69
|
-
if
|
69
|
+
if caching_classes?
|
70
70
|
ApplicationController
|
71
71
|
else
|
72
72
|
ActionController::Base
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
def caching_classes?
|
77
|
+
::Rails.configuration.cache_classes
|
78
|
+
end
|
75
79
|
|
76
80
|
# cache_classes is true in production and testing, need to
|
77
81
|
# do an instance eval instead
|
@@ -97,7 +101,11 @@ module Lockdown
|
|
97
101
|
include Lockdown::Frameworks::Rails::Controller
|
98
102
|
|
99
103
|
def skip_sync?
|
100
|
-
Lockdown::System.fetch(:skip_db_sync_in).include?(
|
104
|
+
Lockdown::System.fetch(:skip_db_sync_in).include?(framework_environment)
|
105
|
+
end
|
106
|
+
|
107
|
+
def framework_environment
|
108
|
+
::Rails.env
|
101
109
|
end
|
102
110
|
end # System
|
103
111
|
end # Rails
|
data/lib/lockdown/helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
|
1
3
|
module Lockdown
|
2
4
|
module Helper
|
3
5
|
def class_name_from_file(str)
|
@@ -10,34 +12,42 @@ module Lockdown
|
|
10
12
|
if str_sym.is_a?(Symbol)
|
11
13
|
titleize(str_sym)
|
12
14
|
else
|
13
|
-
|
15
|
+
str_sym.underscore.tr(' ','_').to_sym
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
17
19
|
def user_group_class
|
18
|
-
eval(
|
20
|
+
eval(user_group_model_string)
|
19
21
|
end
|
20
22
|
|
21
23
|
def user_groups_hbtm_reference
|
22
|
-
underscore
|
24
|
+
user_group_model_string.underscore.pluralize.to_sym
|
23
25
|
end
|
24
26
|
|
25
27
|
def user_group_id_reference
|
26
|
-
underscore
|
28
|
+
user_group_model_string.underscore + "_id"
|
27
29
|
end
|
28
30
|
|
29
31
|
def user_class
|
30
|
-
eval(
|
32
|
+
eval(user_model_string)
|
31
33
|
end
|
32
34
|
|
33
35
|
def users_hbtm_reference
|
34
|
-
underscore
|
36
|
+
user_model_string.underscore.pluralize.to_sym
|
35
37
|
end
|
36
38
|
|
37
39
|
def user_id_reference
|
38
|
-
underscore
|
40
|
+
user_model_string.underscore + "_id"
|
39
41
|
end
|
40
42
|
|
43
|
+
def user_group_model_string
|
44
|
+
Lockdown::System.fetch(:user_group_model) || "UserGroup"
|
45
|
+
end
|
46
|
+
|
47
|
+
def user_model_string
|
48
|
+
Lockdown::System.fetch(:user_model) || "User"
|
49
|
+
end
|
50
|
+
|
41
51
|
def get_string(value)
|
42
52
|
if value.respond_to?(:name)
|
43
53
|
string_name(value.name)
|
data/lib/lockdown/rules.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), %w[.. spec_helper])
|
2
2
|
|
3
|
+
class Permission; end;
|
4
|
+
|
3
5
|
describe Lockdown::Database do
|
4
|
-
before do
|
6
|
+
before do
|
5
7
|
Lockdown::System.stub!(:get_permissions).and_return([:permission])
|
6
8
|
Lockdown::System.stub!(:get_user_groups).and_return([:user_group])
|
9
|
+
@user_group_class = mock(:table_exists? => true, :find => false)
|
10
|
+
Lockdown.stub!(:user_group_class).and_return @user_group_class
|
11
|
+
|
7
12
|
end
|
8
13
|
|
9
14
|
describe "#sync_with_db" do
|
10
15
|
it "should call create_new_permissions, delete_extinct_permissions and maintain_user_groups" do
|
16
|
+
Permission.stub!(:table_exists?).and_return(true)
|
11
17
|
Lockdown::Database.should_receive :create_new_permissions
|
12
18
|
Lockdown::Database.should_receive :delete_extinct_permissions
|
13
19
|
Lockdown::Database.should_receive :maintain_user_groups
|
@@ -20,7 +26,6 @@ describe Lockdown::Database do
|
|
20
26
|
it "should create permission from @permissions" do
|
21
27
|
Lockdown::System.stub!(:permission_assigned_automatically?).and_return(false)
|
22
28
|
|
23
|
-
Permission = mock('Permission') unless defined?(Permission)
|
24
29
|
Permission.stub!(:find).and_return(false)
|
25
30
|
Permission.should_receive(:create).with(:name => 'Permission')
|
26
31
|
|
@@ -52,9 +57,7 @@ describe Lockdown::Database do
|
|
52
57
|
end
|
53
58
|
|
54
59
|
it "should create user group for non-existent user group" do
|
55
|
-
|
56
|
-
with(:first, :conditions => ["name = ?", "User Group"]).
|
57
|
-
and_return(false)
|
60
|
+
@user_group_class.should_receive(:find).and_return(false)
|
58
61
|
|
59
62
|
Lockdown::Database.should_receive(:create_user_group).
|
60
63
|
with("User Group",:user_group)
|
@@ -65,7 +68,7 @@ describe Lockdown::Database do
|
|
65
68
|
it "should sync user group permissions for existing user group" do
|
66
69
|
ug = mock('user group')
|
67
70
|
|
68
|
-
|
71
|
+
@user_group_class.should_receive(:find).
|
69
72
|
with(:first, :conditions => ["name = ?", "User Group"]).
|
70
73
|
and_return(ug)
|
71
74
|
|
@@ -84,9 +87,7 @@ describe Lockdown::Database do
|
|
84
87
|
ug = mock('user group')
|
85
88
|
ug.stub!(:id).and_return(123)
|
86
89
|
|
87
|
-
|
88
|
-
|
89
|
-
UserGroup.should_receive(:create).
|
90
|
+
@user_group_class.should_receive(:create).
|
90
91
|
with(:name => "some group").
|
91
92
|
and_return(ug)
|
92
93
|
|
@@ -14,24 +14,6 @@ describe Lockdown::Frameworks::Rails::Controller do
|
|
14
14
|
@lockdown = mock("lockdown")
|
15
15
|
end
|
16
16
|
|
17
|
-
describe "#available_actions" do
|
18
|
-
it "should return action_methods" do
|
19
|
-
post_controller = mock("PostController")
|
20
|
-
post_controller.stub!(:action_methods).and_return(@actions)
|
21
|
-
|
22
|
-
@controller.available_actions(post_controller).
|
23
|
-
should == @actions
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should eql public_instance_methods - hidden_actions unless action_methods" do
|
27
|
-
post_controller = mock("PostController")
|
28
|
-
post_controller.stub!(:public_instance_methods).and_return(["m1", "m2", "h1"])
|
29
|
-
post_controller.stub!(:hidden_actions).and_return(["h1"])
|
30
|
-
@controller.available_actions(post_controller).
|
31
|
-
should == ["m1", "m2"]
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
17
|
describe "#controller_name" do
|
36
18
|
it "should return action_methods" do
|
37
19
|
post_controller = mock("PostController")
|
@@ -122,7 +104,7 @@ describe Lockdown::Frameworks::Rails::Controller::Lock do
|
|
122
104
|
|
123
105
|
@controller.stub!(:request).and_return(request)
|
124
106
|
|
125
|
-
@controller.
|
107
|
+
@controller.send(:sent_from_uri).should == "/blip"
|
126
108
|
end
|
127
109
|
end
|
128
110
|
|
@@ -204,7 +186,7 @@ describe Lockdown::Frameworks::Rails::Controller::Lock do
|
|
204
186
|
describe "#redirect_back_or_default" do
|
205
187
|
it "should redirect to default without session[:prevpage]" do
|
206
188
|
@controller.should_receive(:redirect_to).with("/")
|
207
|
-
@controller.redirect_back_or_default
|
189
|
+
@controller.send :redirect_back_or_default, "/"
|
208
190
|
end
|
209
191
|
|
210
192
|
it "should redirect to session[:prevpage]" do
|
@@ -212,7 +194,7 @@ describe Lockdown::Frameworks::Rails::Controller::Lock do
|
|
212
194
|
path.stub!(:blank?).and_return(false)
|
213
195
|
@session[:prevpage] = path
|
214
196
|
@controller.should_receive(:redirect_to).with(path)
|
215
|
-
@controller.redirect_back_or_default
|
197
|
+
@controller.send :redirect_back_or_default, "/"
|
216
198
|
end
|
217
199
|
end
|
218
200
|
|
@@ -3,9 +3,10 @@ require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
|
3
3
|
describe Lockdown::Frameworks::Rails do
|
4
4
|
before do
|
5
5
|
@rails = Lockdown::Frameworks::Rails
|
6
|
+
|
6
7
|
@rails.stub!(:use_me?).and_return(true)
|
7
8
|
|
8
|
-
@lockdown = mock("lockdown")
|
9
|
+
@lockdown = mock("lockdown")
|
9
10
|
end
|
10
11
|
|
11
12
|
|
@@ -36,6 +37,7 @@ describe Lockdown::Frameworks::Rails do
|
|
36
37
|
ActionController::Base.should_receive(:rescue_from)
|
37
38
|
|
38
39
|
ActionController::Base.should_receive(:class_eval)
|
40
|
+
ActionController::Base.should_receive(:hide_action)
|
39
41
|
|
40
42
|
Lockdown::System.should_receive(:class_eval)
|
41
43
|
|
@@ -46,9 +48,16 @@ describe Lockdown::Frameworks::Rails do
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
51
|
+
RAILS_ROOT = "/shibby/dibby/do"
|
52
|
+
|
53
|
+
module ActionController; class Base; end end
|
54
|
+
|
55
|
+
class ApplicationController; end
|
56
|
+
|
57
|
+
module ActionView; class Base; end end
|
58
|
+
|
49
59
|
describe Lockdown::Frameworks::Rails::Environment do
|
50
60
|
|
51
|
-
RAILS_ROOT = "/shibby/dibby/do"
|
52
61
|
before do
|
53
62
|
@env = class Test; extend Lockdown::Frameworks::Rails::Environment; end
|
54
63
|
end
|
@@ -77,16 +86,20 @@ describe Lockdown::Frameworks::Rails::Environment do
|
|
77
86
|
end
|
78
87
|
|
79
88
|
describe "#controller_parent" do
|
80
|
-
it "should return ActionController::Base" do
|
81
|
-
|
82
|
-
|
89
|
+
it "should return ActionController::Base if not caching classes" do
|
90
|
+
@env.should_receive(:caching_classes?).and_return(false)
|
83
91
|
@env.controller_parent.should == ActionController::Base
|
84
92
|
end
|
93
|
+
|
94
|
+
it "should return ApplicationController if caching classes" do
|
95
|
+
@env.should_receive(:caching_classes?).and_return(true)
|
96
|
+
@env.controller_parent.should == ApplicationController
|
97
|
+
end
|
98
|
+
|
85
99
|
end
|
86
100
|
|
87
101
|
describe "#view_helper" do
|
88
102
|
it "should return ActionView::Base" do
|
89
|
-
module ActionView; class Base; end end
|
90
103
|
|
91
104
|
@env.view_helper.should == ActionView::Base
|
92
105
|
end
|
@@ -96,80 +109,27 @@ end
|
|
96
109
|
describe Lockdown::Frameworks::Rails::System do
|
97
110
|
class Test
|
98
111
|
extend Lockdown::Frameworks::Rails::System
|
99
|
-
class << self
|
100
|
-
attr_accessor :controller_classes
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
module Rails
|
105
|
-
module VERSION
|
106
|
-
MAJOR = 2
|
107
|
-
MINOR = 2
|
108
|
-
TINY = 2
|
109
|
-
end
|
110
112
|
end
|
111
113
|
|
112
114
|
before do
|
113
115
|
@env = Test
|
114
|
-
@env.controller_classes = {}
|
115
116
|
end
|
116
117
|
|
117
118
|
describe "#skip_sync?" do
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
describe "#maybe_load_framework_controller_parent" do
|
124
|
-
it "should call require_or_load with application.rb < 2.3" do
|
125
|
-
@env.should_receive(:require_or_load).with("application.rb")
|
126
|
-
|
127
|
-
@env.maybe_load_framework_controller_parent
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should call require_or_load with application_controller.rb >= 2.3" do
|
131
|
-
module Rails
|
132
|
-
module VERSION
|
133
|
-
MINOR = 3
|
134
|
-
TINY = 0
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
@env.should_receive(:require_or_load).with("application_controller.rb")
|
139
|
-
|
140
|
-
@env.maybe_load_framework_controller_parent
|
119
|
+
it "should return true if env == skip sync" do
|
120
|
+
Lockdown::System.stub!(:fetch).with(:skip_db_sync_in).and_return(['test'])
|
121
|
+
@env.should_receive(:framework_environment).and_return("test")
|
122
|
+
|
123
|
+
@env.skip_sync?.should == true
|
141
124
|
end
|
142
|
-
end
|
143
|
-
|
144
|
-
describe "#lockdown_load" do
|
145
|
-
it "should add class to controller classes" do
|
146
|
-
@env.stub!(:class_name_from_file).and_return("controller_class")
|
147
|
-
Lockdown.stub!(:qualified_const_get).and_return(:controller_class)
|
148
|
-
@env.stub!(:require_or_load)
|
149
|
-
|
150
|
-
@env.lockdown_load("controller_file")
|
151
125
|
|
152
|
-
|
126
|
+
it "should return false if env not in skip_sync" do
|
127
|
+
Lockdown::System.stub!(:fetch).with(:skip_db_sync_in).and_return(['test', 'ci'])
|
128
|
+
@env.should_receive(:framework_environment).and_return("qa")
|
129
|
+
|
130
|
+
@env.skip_sync?.should == false
|
153
131
|
end
|
132
|
+
|
154
133
|
end
|
155
134
|
|
156
|
-
describe "#require_or_load" do
|
157
|
-
it "should use Dependencies if not defined in ActiveSupport" do
|
158
|
-
module ActiveSupport; end
|
159
|
-
Dependencies = mock("dependencies") unless defined?(Dependencies)
|
160
|
-
|
161
|
-
Dependencies.should_receive(:require_or_load).with("controller_file")
|
162
|
-
|
163
|
-
@env.require_or_load("controller_file")
|
164
|
-
end
|
165
|
-
|
166
|
-
it "should use ActiveSupport::Dependencies if defined" do
|
167
|
-
module ActiveSupport; class Dependencies; end end
|
168
|
-
|
169
|
-
ActiveSupport::Dependencies.should_receive(:require_or_load).
|
170
|
-
with("controller_file")
|
171
|
-
|
172
|
-
@env.require_or_load("controller_file")
|
173
|
-
end
|
174
|
-
end
|
175
135
|
end
|
data/spec/lockdown/rules_spec.rb
CHANGED
@@ -54,6 +54,8 @@ describe Lockdown::Rules do
|
|
54
54
|
|
55
55
|
describe "#get_permissions" do
|
56
56
|
it "should return array of permission names as symbols" do
|
57
|
+
Lockdown.should_receive(:add_controller_method)
|
58
|
+
|
57
59
|
@rules.set_permission(:home_page)
|
58
60
|
@rules.set_permission(:user_management)
|
59
61
|
@rules.process_rules
|
@@ -64,6 +66,8 @@ describe Lockdown::Rules do
|
|
64
66
|
|
65
67
|
describe "#permission_exists?" do
|
66
68
|
it "should return true if permission exists" do
|
69
|
+
Lockdown.should_receive(:add_controller_method)
|
70
|
+
|
67
71
|
@rules.set_permission(:home_page)
|
68
72
|
@rules.process_rules
|
69
73
|
@rules.permission_exists?(:home_page).should be_true
|
@@ -99,6 +103,8 @@ describe Lockdown::Rules do
|
|
99
103
|
|
100
104
|
describe "#process_rules" do
|
101
105
|
it "should validate user_group permissions" do
|
106
|
+
Lockdown.should_receive(:add_controller_method)
|
107
|
+
|
102
108
|
@rules.set_user_group(:test_group, :a_perm)
|
103
109
|
error = "User Group: test_group, permission not found: a_perm"
|
104
110
|
|
@@ -64,7 +64,8 @@ describe Lockdown::Session do
|
|
64
64
|
it "should set the access_rights from the user list" do
|
65
65
|
array = ["posts/index", "posts/show"]
|
66
66
|
Lockdown::System.stub!(:access_rights_for_user).and_return(array)
|
67
|
-
|
67
|
+
usr = mock(:id => 1234)
|
68
|
+
@controller.stub!(:current_user).and_return(usr)
|
68
69
|
@controller.send(:add_lockdown_session_values)
|
69
70
|
@session[:access_rights].should == array
|
70
71
|
end
|
@@ -7,23 +7,13 @@ describe Lockdown::System do
|
|
7
7
|
Lockdown::System.options['test'] = "my test"
|
8
8
|
Lockdown::System.fetch('test').should == "my test"
|
9
9
|
end
|
10
|
-
|
11
|
-
it "should fetch the controller class" do
|
12
|
-
klass = mock("User Controller Class")
|
13
|
-
Lockdown.stub!(:controller_class_name).and_return(:users)
|
14
|
-
Lockdown::System.controller_classes = {}
|
15
|
-
Lockdown::System.controller_classes[:users] = klass
|
16
|
-
Lockdown::System.fetch_controller_class(:users).should equal(klass)
|
17
|
-
end
|
18
|
-
|
10
|
+
|
19
11
|
describe "#configure" do
|
20
12
|
it "should call the methods responsible for defining the rules" do
|
21
13
|
Lockdown::System.stub!(:skip_sync?).and_return(false)
|
22
14
|
|
23
15
|
Lockdown::System.should_receive :set_defaults
|
24
16
|
|
25
|
-
Lockdown::System.should_receive :load_controller_classes
|
26
|
-
|
27
17
|
Lockdown::System.should_receive :instance_eval
|
28
18
|
|
29
19
|
Lockdown::System.should_receive :process_rules
|
@@ -48,7 +38,7 @@ describe Lockdown::System do
|
|
48
38
|
|
49
39
|
it "should build the paths from the controller class if no methods specified" do
|
50
40
|
methods = ["new","edit","create","update"]
|
51
|
-
Lockdown
|
41
|
+
Lockdown.stub!(:fetch_controller_class)
|
52
42
|
Lockdown::System.stub!(:available_actions).
|
53
43
|
and_return(methods)
|
54
44
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lockdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Stone
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-16 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|