rad_kit 0.0.8 → 0.0.9
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/components/captcha.rb +4 -4
- data/lib/components/kit.rb +5 -5
- data/lib/components/kit.yml +0 -2
- data/lib/components/models.rb +2 -5
- data/lib/components/models.yml +3 -0
- data/lib/kit/controller/authorized.rb +9 -8
- data/lib/kit/controller/captcha.rb +6 -6
- data/lib/kit/controller/localized.rb +2 -2
- data/lib/kit/gems.rb +12 -8
- data/lib/kit/i18n.rb +3 -3
- data/lib/kit/i18n/locales/ru/pluralization.rb +3 -3
- data/lib/kit/kit.rb +7 -7
- data/lib/kit/kit_text_utils.rb +6 -6
- data/lib/kit/misc/prepare_model.rb +4 -4
- data/lib/kit/models.rb +22 -5
- data/lib/kit/models/attachment_file.rb +27 -0
- data/lib/kit/models/{attachments_uploader_helper.rb → attachments_helper.rb} +34 -28
- data/lib/kit/models/authorized.rb +64 -63
- data/lib/kit/models/authorized_object.rb +70 -73
- data/lib/kit/models/base_file.rb +37 -0
- data/lib/kit/models/config.rb +30 -0
- data/lib/kit/models/indexes.rb +30 -0
- data/lib/kit/models/miscellaneous.rb +7 -1
- data/lib/kit/models/role.rb +17 -17
- data/lib/kit/models/tags.rb +71 -0
- data/lib/kit/models/tags_mixin.rb +39 -0
- data/lib/kit/mongodb_model.rb +13 -0
- data/lib/kit/mongodb_model/text_processor.rb +32 -0
- data/lib/kit/spec.rb +30 -30
- data/lib/kit/spec/items_controller_crud.rb +9 -9
- data/lib/kit/support.rb +1 -1
- data/lib/kit/tasks.rb +3 -7
- data/lib/text_utils.rb +2 -2
- data/lib/text_utils/code_highlighter.rb +17 -17
- data/lib/text_utils/custom_markdown.rb +7 -7
- data/lib/text_utils/ensure_utf.rb +3 -3
- data/lib/text_utils/format_qualifier.rb +2 -2
- data/lib/text_utils/html_sanitizer.rb +9 -9
- data/lib/text_utils/markdown.rb +9 -9
- data/lib/text_utils/pipe.rb +1 -1
- data/lib/text_utils/processor.rb +3 -3
- data/lib/text_utils/support.rb +3 -3
- data/lib/text_utils/truncate.rb +4 -4
- data/readme.md +3 -1
- data/spec/controller/authorization_spec.rb +45 -45
- data/spec/controller/captcha_spec.rb +18 -18
- data/spec/controller/comments_spec.rb +16 -14
- data/spec/controller/items_spec.rb +16 -17
- data/spec/i18n/i18n_spec.rb +5 -5
- data/spec/misc/kit_text_utils_spec.rb +5 -5
- data/spec/misc/prepare_model_spec.rb +6 -6
- data/spec/misc/user_error_spec.rb +8 -8
- data/spec/models/{attachments_uploader_helper_spec.rb → attachments_helper_spec.rb} +46 -50
- data/spec/models/{attachments_uploader_helper_spec → attachments_helper_spec}/v1/a.txt +0 -0
- data/spec/models/{attachments_uploader_helper_spec → attachments_helper_spec}/v1/b.txt +0 -0
- data/spec/models/{attachments_uploader_helper_spec → attachments_helper_spec}/v2/a.txt +0 -0
- data/spec/models/attachments_spec.rb +4 -7
- data/spec/models/authorization_spec.rb +15 -15
- data/spec/models/authorized_object_spec.rb +75 -75
- data/spec/models/item_spec.rb +44 -40
- data/spec/models/role_spec.rb +4 -4
- data/spec/models/tags_spec.rb +47 -21
- data/spec/models/uploader_spec.rb +13 -23
- data/spec/mongodb_model/text_processor_spec.rb +26 -0
- data/spec/spec_helper.rb +6 -4
- data/spec/spec_helper/factories.rb +3 -3
- data/spec/spec_helper/user.rb +4 -7
- data/spec/text_utils/code_highlighter_spec.rb +7 -7
- data/spec/text_utils/custom_markdown_spec.rb +14 -14
- data/spec/text_utils/format_qualifier_spec.rb +6 -6
- data/spec/text_utils/html_sanitizer_spec.rb +15 -15
- data/spec/text_utils/markdown_spec.rb +17 -17
- data/spec/text_utils/pipe_spec.rb +5 -5
- data/spec/text_utils/spec_helper.rb +1 -1
- data/spec/text_utils/text_processor_shared.rb +1 -1
- data/spec/text_utils/truncate_spec.rb +5 -5
- metadata +118 -114
- data/lib/kit/models/attachment_uploader.rb +0 -15
- data/lib/kit/models/file_uploader.rb +0 -26
- data/lib/kit/models_after.rb +0 -27
- data/lib/kit/mongoid.rb +0 -22
- data/lib/kit/mongoid/rad_miscellaneous.rb +0 -36
- data/lib/kit/mongoid/text_processor.rb +0 -44
- data/spec/mongoid/basic_spec.rb +0 -36
@@ -3,29 +3,29 @@ require "spec_helper"
|
|
3
3
|
describe "User Error" do
|
4
4
|
isolate :conveyors, :router, before: :all
|
5
5
|
|
6
|
-
before :all do
|
6
|
+
before :all do
|
7
7
|
rad.delete :conveyors
|
8
8
|
rad.conveyors.web do |web|
|
9
9
|
web.use Rad::Controller::Processors::ControllerCaller
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
class ::SomeModel
|
13
13
|
def self.find! id
|
14
14
|
id.should == 'some id'
|
15
15
|
SomeModel.new
|
16
16
|
end
|
17
17
|
end
|
18
|
-
end
|
18
|
+
end
|
19
19
|
after :all do
|
20
20
|
remove_constants %w(SomeModel ControllerSpec)
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
it "user error" do
|
24
24
|
class ::ControllerSpec
|
25
25
|
inherit Rad::Controller::Http
|
26
|
-
|
26
|
+
|
27
27
|
prepare_model SomeModel, id: :some_model, variable: 'some_model'
|
28
|
-
|
28
|
+
|
29
29
|
def action
|
30
30
|
@some_model.should_not == nil
|
31
31
|
render inline: 'ok'
|
@@ -1,27 +1,27 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "User Error" do
|
3
|
+
describe "User Error" do
|
4
4
|
isolate :conveyors, :router, before: :all
|
5
|
-
|
5
|
+
|
6
6
|
before(:all) do
|
7
7
|
rad.delete :conveyors
|
8
8
|
rad.conveyors.web do |web|
|
9
9
|
web.use Rad::Controller::Processors::ControllerCaller
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
after :all do
|
14
14
|
remove_constants %w(UserErrorSpec)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it "user error" do
|
18
18
|
class ::UserErrorSpec
|
19
19
|
inherit Rad::Controller::Http
|
20
|
-
|
20
|
+
|
21
21
|
def action
|
22
22
|
raise_user_error "some error"
|
23
|
-
end
|
24
|
-
|
23
|
+
end
|
24
|
+
|
25
25
|
protected
|
26
26
|
def catch_user_error
|
27
27
|
begin
|
@@ -32,7 +32,7 @@ describe "User Error" do
|
|
32
32
|
end
|
33
33
|
around :catch_user_error
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
ccall(UserErrorSpec, :action).should == "Catched some error"
|
37
37
|
end
|
38
38
|
end
|
@@ -1,50 +1,46 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "Attachments" do
|
4
|
-
|
5
|
-
with_mongoid
|
6
|
-
with_files
|
3
|
+
describe "Attachments" do
|
4
|
+
with_models
|
7
5
|
|
8
6
|
before :all do
|
9
|
-
class
|
7
|
+
class TheBaseFile < Models::BaseFile
|
10
8
|
end
|
11
|
-
|
9
|
+
|
12
10
|
class TheFile
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
inherit Mongo::Model, Mongo::Model::FileModel
|
12
|
+
|
13
|
+
mount_file :file, TheBaseFile
|
14
|
+
end
|
15
|
+
|
19
16
|
class ThePost
|
20
|
-
|
17
|
+
inherit Mongo::Model
|
18
|
+
|
19
|
+
def files; @files ||= [] end
|
20
|
+
mount_attachments(:files, :file){TheFile.new}
|
21
21
|
|
22
|
-
embeds_many :files, class_name: 'TheFile'
|
23
|
-
mount_embedded_uploader :files, :file
|
24
|
-
mount_attachments_uploader :files, :file
|
25
|
-
|
26
22
|
def sorted_files
|
27
|
-
files.sort{|a, b| a.file.
|
23
|
+
files.sort{|a, b| a.file.file.name <=> b.file.file.name}
|
28
24
|
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
after(:all){remove_constants :ThePost, :
|
32
|
-
|
25
|
+
end
|
26
|
+
end
|
27
|
+
after(:all){remove_constants :ThePost, :TheFile, :TheBaseFile}
|
28
|
+
|
33
29
|
before do
|
34
30
|
@a = File.open("#{spec_dir}/v1/a.txt")
|
35
31
|
@b = File.open("#{spec_dir}/v1/b.txt")
|
36
32
|
@a_v2 = File.open("#{spec_dir}/v2/a.txt")
|
37
33
|
end
|
38
|
-
after do
|
34
|
+
after do
|
39
35
|
@a.close if @a
|
40
36
|
@b.close if @b
|
41
37
|
@a_v2.close if @a_v2
|
42
38
|
end
|
43
|
-
|
39
|
+
|
44
40
|
def post_with_two_files
|
45
41
|
params = {
|
46
42
|
files_as_attachments: [@a, @b]
|
47
|
-
}
|
43
|
+
}
|
48
44
|
|
49
45
|
post = ThePost.new params
|
50
46
|
post.save!
|
@@ -52,56 +48,56 @@ describe "Attachments" do
|
|
52
48
|
post.files.size.should == 2
|
53
49
|
post
|
54
50
|
end
|
55
|
-
|
51
|
+
|
56
52
|
it "should add files" do
|
57
53
|
post = post_with_two_files
|
58
|
-
|
54
|
+
|
59
55
|
post.files.size.should == 2
|
60
56
|
a, b = post.sorted_files
|
61
|
-
a.file.path.should =~ /\/a\.txt/
|
62
|
-
b.file.path.should =~ /\/b\.txt/
|
57
|
+
a.file.file.path.should =~ /\/a\.txt/
|
58
|
+
b.file.file.path.should =~ /\/b\.txt/
|
63
59
|
end
|
64
|
-
|
60
|
+
|
65
61
|
it "should remove files" do
|
66
62
|
post = post_with_two_files
|
67
63
|
a, b = post.sorted_files
|
68
|
-
File.should exist(b.file.path)
|
69
|
-
|
64
|
+
File.should exist(file_model_storage.path + b.file.file.path)
|
65
|
+
|
70
66
|
params = {
|
71
67
|
files_as_attachments: ['a.txt']
|
72
|
-
}
|
73
|
-
post.
|
68
|
+
}
|
69
|
+
post.set(params).save!
|
74
70
|
post.reload
|
75
|
-
|
71
|
+
|
76
72
|
post.files.size.should == 1
|
77
|
-
post.files.first.file.path.should =~ /\/a\.txt/
|
78
|
-
|
73
|
+
post.files.first.file.file.path.should =~ /\/a\.txt/
|
74
|
+
|
79
75
|
# should also remove physical file
|
80
|
-
File.should_not exist(b.file.path)
|
76
|
+
File.should_not exist(file_model_storage.path + b.file.file.path)
|
81
77
|
end
|
82
|
-
|
78
|
+
|
83
79
|
it "should update files" do
|
84
80
|
post = post_with_two_files
|
85
|
-
|
81
|
+
|
86
82
|
params = {
|
87
83
|
files_as_attachments: [@a_v2, 'b.txt']
|
88
|
-
}
|
89
|
-
|
84
|
+
}
|
85
|
+
|
86
|
+
post.set(params).save!
|
90
87
|
post.reload
|
91
|
-
|
92
|
-
post.files.size.should == 2
|
88
|
+
|
93
89
|
a, b = post.sorted_files
|
94
|
-
a.file.path.should =~ /\/a\.txt/
|
95
|
-
File.read(a.file.path).should == 'a v2'
|
96
|
-
b.file.path.should =~ /\/b\.txt/
|
90
|
+
a.file.file.path.should =~ /\/a\.txt/
|
91
|
+
File.read(file_model_storage.path + a.file.file.path).should == 'a v2'
|
92
|
+
b.file.file.path.should =~ /\/b\.txt/
|
97
93
|
end
|
98
|
-
|
94
|
+
|
99
95
|
it "should provide :files_as_attachments getter" do
|
100
96
|
post = post_with_two_files
|
101
97
|
a, b = post.sorted_files
|
102
|
-
|
98
|
+
|
103
99
|
post.files_as_attachments.should == [
|
104
|
-
{name: 'a.txt', url: a.file.url},
|
100
|
+
{name: 'a.txt', url: a.file.url},
|
105
101
|
{name: 'b.txt', url: b.file.url}
|
106
102
|
]
|
107
103
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "Attachments" do
|
4
|
-
with_tmp_spec_dir
|
3
|
+
describe "Attachments" do
|
5
4
|
with_models
|
6
|
-
with_files
|
7
5
|
login_as :user
|
8
6
|
|
9
7
|
before do
|
@@ -12,13 +10,12 @@ describe "Attachments" do
|
|
12
10
|
after do
|
13
11
|
@a.close if @a
|
14
12
|
end
|
15
|
-
|
13
|
+
|
16
14
|
it "smoke test" do
|
17
15
|
item = Factory.create :item, name: 'my note', attachments_as_attachments: [@a]
|
18
16
|
item.reload
|
19
|
-
|
17
|
+
|
20
18
|
item.attachments.size.should == 1
|
21
|
-
|
22
|
-
item.attachments.first.file.path.should =~ /\/#{item.id}\/a\.txt/
|
19
|
+
item.attachments.first.file.file.path.should =~ /\/#{item._id}\/a\.txt/
|
23
20
|
end
|
24
21
|
end
|
@@ -1,30 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "Authorization" do
|
4
|
-
with_models
|
5
|
-
|
3
|
+
describe "Authorization" do
|
4
|
+
with_models
|
5
|
+
|
6
6
|
describe "Roles" do
|
7
|
-
it "user should have
|
7
|
+
it "user should have its name in roles" do
|
8
8
|
user = Factory.build :user, name: 'some_name'
|
9
9
|
user.roles.should include('user:some_name')
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it ":anonymous, :registered, :user roles" do
|
13
13
|
anonymous = Factory.build :anonymous
|
14
14
|
anonymous.roles.should == %w{anonymous user user:anonymous}
|
15
|
-
|
15
|
+
|
16
16
|
user = Factory.build :user, name: 'john'
|
17
17
|
user.roles.should == %w{registered user user:john}
|
18
|
-
|
18
|
+
|
19
19
|
admin = Factory.build :admin, name: 'john'
|
20
20
|
admin.roles.should == %w{admin manager member registered user user:john}
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
it "all managers should also have the member role, always" do
|
24
24
|
user = Factory.build :manager, name: 'john'
|
25
25
|
user.roles.should == %w{manager member registered user user:john}
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
it "handy methods" do
|
29
29
|
u = Factory.build :anonymous
|
30
30
|
u.roles.anonymous?.should be_true
|
@@ -32,7 +32,7 @@ describe "Authorization" do
|
|
32
32
|
u.roles.has?(:anonymous).should be_true
|
33
33
|
u.should have_role(:anonymous)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
it "add_role" do
|
37
37
|
u = Factory.build :member, name: 'john'
|
38
38
|
u.should_not have_role('manager')
|
@@ -40,8 +40,8 @@ describe "Authorization" do
|
|
40
40
|
u.save!
|
41
41
|
u.reload
|
42
42
|
u.should have_role('manager')
|
43
|
-
end
|
44
|
-
|
43
|
+
end
|
44
|
+
|
45
45
|
it "remove_role" do
|
46
46
|
u = Factory.build :manager, name: 'john'
|
47
47
|
u.remove_role :member
|
@@ -50,14 +50,14 @@ describe "Authorization" do
|
|
50
50
|
u.should_not have_role('manager')
|
51
51
|
u.should_not have_role('member')
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
it "should add also all lover roles" do
|
55
55
|
u = Factory.build :user, name: 'john'
|
56
56
|
u.roles.should_not include('member')
|
57
57
|
u.add_role :manager
|
58
58
|
u.roles.should include('member')
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
it "special case, admin role" do
|
62
62
|
u = Factory.build :user, name: 'john'
|
63
63
|
u.should_not have_role('manager')
|
@@ -67,7 +67,7 @@ describe "Authorization" do
|
|
67
67
|
u.should have_role('admin')
|
68
68
|
u.should have_role('manager')
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
it "major_roles" do
|
72
72
|
u = Factory.build :member, name: 'john'
|
73
73
|
u.add_role :director
|
@@ -1,110 +1,110 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "Authorized Object" do
|
3
|
+
describe "Authorized Object" do
|
4
4
|
with_models
|
5
|
-
|
6
|
-
before :all do
|
5
|
+
|
6
|
+
before :all do
|
7
7
|
class ::AModel
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
end
|
8
|
+
inherit Mongo::Model
|
9
|
+
inherit Models::AuthorizedObject
|
10
|
+
end
|
11
|
+
end
|
12
12
|
after(:all){remove_constants :AModel}
|
13
|
-
|
13
|
+
|
14
14
|
def custom_permissions= value
|
15
|
-
|
15
|
+
Models::Authorized.custom_permissions = value
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
after{self.custom_permissions = {}}
|
19
|
-
|
19
|
+
|
20
20
|
describe "Owner, Viewers, Collaborators" do
|
21
|
-
before do
|
21
|
+
before do
|
22
22
|
rad.delete :user
|
23
23
|
@user = Factory.create :user, name: 'auser'
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
it "should be abel to create objects (from error)" do
|
27
27
|
rad.user = @user
|
28
28
|
o = AModel.new
|
29
29
|
o.save!
|
30
|
-
end
|
31
|
-
|
30
|
+
end
|
31
|
+
|
32
32
|
it "should by default set current user_name as owner_name if there is current user" do
|
33
33
|
o = AModel.new
|
34
34
|
o.owner_name.should be_nil
|
35
|
-
|
35
|
+
|
36
36
|
rad.user = @user
|
37
37
|
o = AModel.new
|
38
38
|
o.owner_name.should == 'auser'
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
it "owner" do
|
42
42
|
o = AModel.new
|
43
43
|
o.owner = @user
|
44
|
-
o.owner_name.should == @user.name
|
45
|
-
o.viewers.should == %w{manager user:auser}
|
44
|
+
o.owner_name.should == @user.name
|
45
|
+
o.viewers.should == %w{manager user:auser}
|
46
46
|
o.should be_valid
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it 'viewers' do
|
50
50
|
o = AModel.new
|
51
51
|
o.owner = @user
|
52
52
|
o.add_viewer :user
|
53
53
|
o.viewers.should == %w{manager member user user:auser}
|
54
54
|
o.should be_valid
|
55
|
-
|
55
|
+
|
56
56
|
o.remove_viewer :user
|
57
57
|
o.viewers.should == %w{manager user:auser}
|
58
58
|
o.should be_valid
|
59
|
-
|
59
|
+
|
60
60
|
o.add_viewer :member
|
61
61
|
o.viewers.should == %w{manager member user:auser}
|
62
62
|
o.should be_valid
|
63
|
-
|
63
|
+
|
64
64
|
o.add_viewer :user
|
65
65
|
o.viewers.should == %w{manager member user user:auser}
|
66
66
|
o.should be_valid
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
it "duplicate roles (from error)" do
|
70
70
|
o = AModel.new
|
71
71
|
o.owner = @user
|
72
72
|
o.save!
|
73
|
-
|
73
|
+
|
74
74
|
o = AModel.first # don't use reload, it willn't catch this error
|
75
75
|
o.viewers.should == %w{manager user:auser}
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
it "collaborators" do
|
79
79
|
o = AModel.new
|
80
80
|
o.owner = @user
|
81
81
|
o.add_collaborator :member
|
82
82
|
o.collaborators.should == %w{member}
|
83
83
|
o.should be_valid
|
84
|
-
|
84
|
+
|
85
85
|
o.add_collaborator :director
|
86
86
|
o.collaborators.should == %w{member director}
|
87
87
|
o.should be_valid
|
88
|
-
|
88
|
+
|
89
89
|
o.remove_collaborator :member
|
90
90
|
o.collaborators.should == %w{director}
|
91
91
|
o.should be_valid
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
it "normalized_collaborators" do
|
95
95
|
o = AModel.new
|
96
96
|
o.owner = @user
|
97
97
|
o.add_collaborator :member
|
98
98
|
o.normalized_collaborators.should == %w{manager member user:auser}
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
it "anonymous should never be collaborator (from error)" do
|
102
102
|
@user = Factory.build :anonymous
|
103
103
|
o = AModel.new
|
104
104
|
o.owner = @user
|
105
105
|
o.normalized_collaborators.should == []
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
it "viewers and collaborators dependance" do
|
109
109
|
o = AModel.new
|
110
110
|
o.owner = @user
|
@@ -112,16 +112,16 @@ describe "Authorized Object" do
|
|
112
112
|
o.collaborators.should == %w{user}
|
113
113
|
o.viewers.should == %w{manager member user user:auser}
|
114
114
|
o.should be_valid
|
115
|
-
|
115
|
+
|
116
116
|
o.remove_viewer :member
|
117
117
|
o.viewers.should == %w{manager user user:auser}
|
118
118
|
o.collaborators.should == %w{user}
|
119
|
-
|
119
|
+
|
120
120
|
o.remove_viewer :user
|
121
121
|
o.viewers.should == %w{manager user:auser}
|
122
122
|
o.collaborators.should == %w{}
|
123
123
|
end
|
124
|
-
|
124
|
+
|
125
125
|
it "major viewers" do
|
126
126
|
o = AModel.new
|
127
127
|
o.owner = @user
|
@@ -130,31 +130,31 @@ describe "Authorized Object" do
|
|
130
130
|
o.viewers.should == %w{director manager member user:auser}
|
131
131
|
o.minor_viewers.should == %w{director member user:auser}
|
132
132
|
end
|
133
|
-
|
133
|
+
|
134
134
|
it "collaborators should be able to change object (from error)" do
|
135
135
|
col = Factory.create :member, name: 'collaborator'
|
136
|
-
|
136
|
+
|
137
137
|
o = AModel.new
|
138
|
-
o.owner = @user
|
138
|
+
o.owner = @user
|
139
139
|
col.can?(:update, o).should be_false
|
140
|
-
|
140
|
+
|
141
141
|
o.add_collaborator :member
|
142
|
-
o.
|
142
|
+
o._cache.clear
|
143
143
|
col.can?(:update, o).should be_true
|
144
144
|
@user.can?(:update, o).should be_true
|
145
|
-
|
145
|
+
|
146
146
|
o.save!
|
147
|
-
o = AModel.
|
147
|
+
o = AModel.by_id o._id
|
148
148
|
col.can?(:update, o).should be_true
|
149
149
|
@user.can?(:update, o).should be_true
|
150
150
|
end
|
151
|
-
|
151
|
+
|
152
152
|
it 'should allow to create public or private (by default) objects'
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
describe "Permissions" do
|
156
156
|
describe "General" do
|
157
|
-
before do
|
157
|
+
before do
|
158
158
|
self.custom_permissions = {'manage' => %w{manager}}
|
159
159
|
end
|
160
160
|
|
@@ -162,38 +162,38 @@ describe "Authorized Object" do
|
|
162
162
|
u = Models::User.new
|
163
163
|
u.can?(:manage, AModel)
|
164
164
|
end
|
165
|
-
|
165
|
+
|
166
166
|
it 'permissions' do
|
167
167
|
u = Factory.create :user
|
168
168
|
u.can?(:manage, AModel).should be_false
|
169
|
-
|
170
|
-
u = Factory.create :manager
|
169
|
+
|
170
|
+
u = Factory.create :manager
|
171
171
|
u.can?(:manage, AModel).should be_true
|
172
|
-
end
|
172
|
+
end
|
173
173
|
end
|
174
|
-
|
174
|
+
|
175
175
|
describe "as Owner" do
|
176
176
|
before do
|
177
177
|
self.custom_permissions = {'manage' => %w{manager owner}}
|
178
|
-
|
179
|
-
@user = Factory.create :user
|
180
|
-
|
181
|
-
@object = AModel.new
|
178
|
+
|
179
|
+
@user = Factory.create :user
|
180
|
+
|
181
|
+
@object = AModel.new
|
182
182
|
@owned_object = AModel.new
|
183
183
|
@owned_object.owner = @user
|
184
184
|
end
|
185
|
-
|
186
|
-
it "owner?" do
|
185
|
+
|
186
|
+
it "owner?" do
|
187
187
|
@user.should_not be_owner(@object)
|
188
|
-
@user.should be_owner(@owned_object)
|
188
|
+
@user.should be_owner(@owned_object)
|
189
189
|
end
|
190
|
-
|
190
|
+
|
191
191
|
it "anonymous should never be owner of anything" do
|
192
192
|
@user = Factory.build :anonymous
|
193
|
-
|
193
|
+
|
194
194
|
@owned_object = AModel.new
|
195
195
|
@owned_object.owner = @user
|
196
|
-
|
196
|
+
|
197
197
|
@user.should_not be_owner(@owned_object)
|
198
198
|
end
|
199
199
|
|
@@ -202,60 +202,60 @@ describe "Authorized Object" do
|
|
202
202
|
@user.can?(:manage, @owned_object).should be_true
|
203
203
|
end
|
204
204
|
end
|
205
|
-
|
205
|
+
|
206
206
|
describe "Special :view permission" do
|
207
|
-
before do
|
207
|
+
before do
|
208
208
|
# managers can see anything, always, it's hardcoded
|
209
209
|
self.custom_permissions = {'view' => %w{manager}}
|
210
210
|
end
|
211
|
-
|
211
|
+
|
212
212
|
it "user (public) viewers" do
|
213
213
|
user = Factory.create :user
|
214
|
-
|
214
|
+
|
215
215
|
o = AModel.new
|
216
216
|
o.stub!(:viewers){%w{user}}
|
217
|
-
|
217
|
+
|
218
218
|
user.can?(:view, o).should be_true
|
219
219
|
end
|
220
|
-
|
220
|
+
|
221
221
|
it "member viewers" do
|
222
222
|
self.custom_permissions = {'view' => []}
|
223
|
-
|
223
|
+
|
224
224
|
user = Factory.create :user
|
225
225
|
member = Factory.create :member
|
226
226
|
manager = Factory.create :manager
|
227
|
-
|
227
|
+
|
228
228
|
o = AModel.new
|
229
229
|
o.stub!(:viewers).and_return(%w{member manager})
|
230
|
-
|
230
|
+
|
231
231
|
user.can?(:view, o).should be_false
|
232
232
|
member.can?(:view, o).should be_true
|
233
233
|
manager.can?(:view, o).should be_true
|
234
234
|
end
|
235
|
-
|
235
|
+
|
236
236
|
it "owner (private) viewers" do
|
237
237
|
self.custom_permissions = {'view' => []}
|
238
|
-
|
238
|
+
|
239
239
|
owner = Factory.create :user, name: "aname"
|
240
240
|
user = Factory.create :user
|
241
241
|
member = Factory.create :member
|
242
242
|
manager = Factory.create :manager
|
243
|
-
|
243
|
+
|
244
244
|
o = AModel.new
|
245
245
|
o.stub!(:owner_name){owner.name}
|
246
246
|
o.stub!(:viewers){%w{user:aname manager}}
|
247
|
-
|
247
|
+
|
248
248
|
owner.can?(:view, o).should be_true
|
249
249
|
user.can?(:view, o).should be_false
|
250
250
|
member.can?(:view, o).should be_false
|
251
251
|
manager.can?(:view, o).should be_true
|
252
252
|
end
|
253
|
-
|
253
|
+
|
254
254
|
it "should correct works with non authorized objects (from error)" do
|
255
|
-
user = Factory.create :user
|
255
|
+
user = Factory.create :user
|
256
256
|
user.can?(:view, Object.new).should be_false
|
257
257
|
end
|
258
258
|
end
|
259
|
-
|
259
|
+
|
260
260
|
end
|
261
261
|
end
|