average_roles 0.0.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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +34 -0
  4. data/config/initializers/average_roles.rb +8 -0
  5. data/lib/average_roles.rb +25 -0
  6. data/lib/average_roles/engine.rb +4 -0
  7. data/lib/average_roles/models/concerns/role.rb +22 -0
  8. data/lib/average_roles/models/concerns/user.rb +130 -0
  9. data/lib/average_roles/version.rb +3 -0
  10. data/lib/tasks/average_roles_tasks.rake +4 -0
  11. data/test/average_roles_test.rb +7 -0
  12. data/test/dummy/README.rdoc +28 -0
  13. data/test/dummy/Rakefile +6 -0
  14. data/test/dummy/app/assets/javascripts/application.js +13 -0
  15. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  16. data/test/dummy/app/controllers/application_controller.rb +5 -0
  17. data/test/dummy/app/helpers/application_helper.rb +2 -0
  18. data/test/dummy/app/models/role.rb +3 -0
  19. data/test/dummy/app/models/user.rb +3 -0
  20. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  21. data/test/dummy/bin/bundle +3 -0
  22. data/test/dummy/bin/rails +4 -0
  23. data/test/dummy/bin/rake +4 -0
  24. data/test/dummy/config.ru +4 -0
  25. data/test/dummy/config/application.rb +24 -0
  26. data/test/dummy/config/boot.rb +5 -0
  27. data/test/dummy/config/database.yml +89 -0
  28. data/test/dummy/config/database.yml.travis +4 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/development.rb +37 -0
  31. data/test/dummy/config/environments/production.rb +78 -0
  32. data/test/dummy/config/environments/test.rb +39 -0
  33. data/test/dummy/config/initializers/assets.rb +8 -0
  34. data/test/dummy/config/initializers/average_roles.rb +8 -0
  35. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  36. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  37. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  38. data/test/dummy/config/initializers/inflections.rb +16 -0
  39. data/test/dummy/config/initializers/mime_types.rb +4 -0
  40. data/test/dummy/config/initializers/session_store.rb +3 -0
  41. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  42. data/test/dummy/config/locales/en.yml +23 -0
  43. data/test/dummy/config/routes.rb +56 -0
  44. data/test/dummy/config/secrets.yml +22 -0
  45. data/test/dummy/db/migrate/20140929035502_create_users.rb +9 -0
  46. data/test/dummy/db/migrate/20140929035606_create_roles.rb +13 -0
  47. data/test/dummy/db/migrate/20140929070323_create_roles_users.rb +8 -0
  48. data/test/dummy/db/schema.rb +34 -0
  49. data/test/dummy/log/development.log +15 -0
  50. data/test/dummy/log/test.log +18907 -0
  51. data/test/dummy/public/404.html +67 -0
  52. data/test/dummy/public/422.html +67 -0
  53. data/test/dummy/public/500.html +66 -0
  54. data/test/dummy/public/favicon.ico +0 -0
  55. data/test/dummy/test/fixtures/roles.yml +37 -0
  56. data/test/dummy/test/fixtures/users.yml +16 -0
  57. data/test/dummy/test/models/role_test.rb +81 -0
  58. data/test/dummy/test/models/user_test.rb +184 -0
  59. data/test/integration/navigation_test.rb +10 -0
  60. data/test/test_helper.rb +46 -0
  61. metadata +196 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,37 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ administrator:
4
+ name: Administrator
5
+ identifier: administrator
6
+ description: Administrator role
7
+ users: administrator
8
+ active: true
9
+
10
+ user:
11
+ name: User
12
+ identifier: user
13
+ description: User role
14
+ parent: administrator
15
+ users: user
16
+ active: true
17
+
18
+ guest:
19
+ name: Guest
20
+ identifier: guest
21
+ description: Guest role
22
+ parent: user
23
+ users: guest, user
24
+ active: true
25
+
26
+ no_user:
27
+ name: No User
28
+ identifier: no_user
29
+ description: No users have this role
30
+ active: true
31
+
32
+ super_user:
33
+ name: Super User
34
+ identifier: super_user
35
+ description: Super user role that will always return true when checking roles for the user that has this role
36
+ users: super_user
37
+ active: true
@@ -0,0 +1,16 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ administrator:
4
+ name: Administrator
5
+
6
+ user:
7
+ name: User
8
+
9
+ guest:
10
+ name: Guest
11
+
12
+ no_role:
13
+ name: No Roles
14
+
15
+ super_user:
16
+ name: Super User
@@ -0,0 +1,81 @@
1
+ require 'test_helper'
2
+
3
+ class RoleTest < ActiveSupport::TestCase
4
+
5
+ # Test that we actually have fixtures loaded
6
+ test "role fixtures loaded" do
7
+ record = Role.first
8
+ refute record == nil
9
+ end
10
+
11
+ # Relationships
12
+ test "parent relationship where no parent" do
13
+ record = Role.find_by identifier: 'administrator'
14
+ refute record.parent.present?
15
+ end
16
+
17
+ test "parent relationship where parent" do
18
+ record = Role.find_by identifier: 'user'
19
+ assert record.parent.present?
20
+ end
21
+
22
+ test "children relationship where no child" do
23
+ record = Role.find_by identifier: 'guest'
24
+ assert record.children.empty?
25
+ end
26
+
27
+ test "children relationship where child" do
28
+ record = Role.find_by identifier: 'user'
29
+ assert_equal 1, record.children.size
30
+ end
31
+
32
+ test "no users" do
33
+ record = Role.find_by identifier: 'no_user'
34
+ refute record.users.present?
35
+ end
36
+
37
+ test "users" do
38
+ record = Role.find_by identifier: 'administrator'
39
+ assert record.users.present?
40
+ end
41
+
42
+ # Validations
43
+ test "unique name" do
44
+ record = Role.new
45
+ record.name = 'Administrator'
46
+ record.identifier = 'admin'
47
+ record.description = 'Another administrator account'
48
+ refute record.save
49
+ end
50
+
51
+ test "unique identifier" do
52
+ record = Role.new
53
+ record.name = 'Admin'
54
+ record.identifier = 'administrator'
55
+ record.description = 'Another administrator account'
56
+ refute record.save
57
+ end
58
+
59
+ test "has description" do
60
+ record = Role.new
61
+ record.name = 'Admin'
62
+ record.identifier = 'admin'
63
+ refute record.save
64
+ end
65
+
66
+ test "savable" do
67
+ record = Role.new
68
+ record.name = 'New'
69
+ record.identifier = 'new'
70
+ record.description = 'A new account'
71
+ assert record.save
72
+ end
73
+
74
+ # Base methods
75
+ test "responds to all methods" do
76
+ record = Role.first
77
+ assert_respond_to record, :parent
78
+ assert_respond_to record, :children
79
+ end
80
+
81
+ end
@@ -0,0 +1,184 @@
1
+ require 'test_helper'
2
+
3
+ class UserTest < ActiveSupport::TestCase
4
+
5
+ # Test that we actually have fixtures loaded
6
+ test "user fixtures loaded" do
7
+ record = User.first
8
+ refute record == nil
9
+ end
10
+
11
+ # Relationships
12
+ test "no roles" do
13
+ record = User.find_by name: 'No Roles'
14
+ refute record.roles.present?
15
+ end
16
+
17
+ test "roles" do
18
+ record = User.find_by name: 'Administrator'
19
+ assert record.roles.present?
20
+ end
21
+
22
+ # Base methods
23
+ test "responds to all methods" do
24
+ record = User.first
25
+ assert_respond_to record, :roles_as
26
+ assert_respond_to record, :has_role?
27
+ assert_respond_to record, :has_roles?
28
+ assert_respond_to record, :has_at_least_one_role?
29
+ end
30
+
31
+
32
+ # Getting roles
33
+ test "get roles as" do
34
+ record = User.find_by name: 'Administrator'
35
+ role = Role.find_by identifier: 'administrator'
36
+ assert_equal [:administrator], record.roles_as(:identifiers)
37
+ assert_equal [role.id], record.roles_as(:ids)
38
+ assert_equal [role], record.roles_as(:objects)
39
+
40
+ record = User.find_by name: 'No Roles'
41
+ assert_equal [], record.roles_as(:identifiers)
42
+ assert_equal [], record.roles_as(:ids)
43
+ assert_equal [], record.roles_as(:objects)
44
+ end
45
+
46
+ # Testing for role
47
+ test "has role?" do
48
+ record = User.find_by name: 'Administrator'
49
+ role = Role.find_by identifier: 'administrator'
50
+ assert record.has_role?(:administrator)
51
+ assert record.has_role?(role.id)
52
+ assert record.has_role?(role)
53
+
54
+ role = Role.find_by identifier: 'guest'
55
+ refute record.has_role?(:guest)
56
+ refute record.has_role?(role.id)
57
+ refute record.has_role?(role)
58
+
59
+ record = User.find_by name: 'Super User'
60
+ assert record.has_role?(:guest)
61
+ assert record.has_role?(role.id)
62
+ assert record.has_role?(role)
63
+ end
64
+
65
+ # Testing for roles
66
+ test "has roles?" do
67
+ record = User.find_by name: 'User'
68
+ role_user = Role.find_by identifier: 'user'
69
+ role_guest = Role.find_by identifier: 'guest'
70
+ assert record.has_roles?([:user, :guest])
71
+ assert record.has_roles?([role_user.id, role_guest.id])
72
+ assert record.has_roles?([role_user, role_guest])
73
+
74
+ role_adminstrator = Role.find_by identifier: 'administrator'
75
+ refute record.has_roles?([:user, :guest, :administrator])
76
+ refute record.has_roles?([role_user.id, role_guest.id, role_adminstrator.id])
77
+ refute record.has_roles?([role_user, role_guest, role_adminstrator])
78
+
79
+ record = User.find_by name: 'Super User'
80
+ assert record.has_roles?([:user, :guest])
81
+ assert record.has_roles?([role_user.id, role_guest.id])
82
+ assert record.has_roles?([role_user, role_guest])
83
+ end
84
+
85
+ # Testing for at least one role
86
+ test "has at least one role?" do
87
+ record = User.find_by name: 'Guest'
88
+ role_user = Role.find_by identifier: 'user'
89
+ role_guest = Role.find_by identifier: 'guest'
90
+ assert record.has_at_least_one_role?([:user, :guest])
91
+ assert record.has_at_least_one_role?([role_user.id, role_guest.id])
92
+ assert record.has_at_least_one_role?([role_user, role_guest])
93
+
94
+ record = User.find_by name: 'Administrator'
95
+ refute record.has_at_least_one_role?([:user, :guest])
96
+ refute record.has_at_least_one_role?([role_user.id, role_guest.id])
97
+ refute record.has_at_least_one_role?([role_user, role_guest])
98
+
99
+ record = User.find_by name: 'Super User'
100
+ assert record.has_at_least_one_role?([:user, :guest])
101
+ assert record.has_at_least_one_role?([role_user.id, role_guest.id])
102
+ assert record.has_at_least_one_role?([role_user, role_guest])
103
+ end
104
+
105
+ # Getting roles and decendents of roles
106
+ test "get roles and descendents as" do
107
+ record = User.find_by name: 'Administrator'
108
+ role_administrator = Role.find_by identifier: 'administrator'
109
+ role_user = Role.find_by identifier: 'user'
110
+ role_guest = Role.find_by identifier: 'guest'
111
+ assert_equal [:administrator, :user, :guest], record.roles_and_descendents_as(:identifiers)
112
+ assert_equal [role_administrator.id, role_user.id, role_guest.id], record.roles_and_descendents_as(:ids)
113
+ assert_equal [role_administrator, role_user, role_guest], record.roles_and_descendents_as(:objects)
114
+
115
+ record = User.find_by name: 'No Roles'
116
+ assert_equal [], record.roles_and_descendents_as(:identifiers)
117
+ assert_equal [], record.roles_and_descendents_as(:ids)
118
+ assert_equal [], record.roles_and_descendents_as(:objects)
119
+ end
120
+
121
+ # Testing for role by descendents
122
+ test "has role by descendents?" do
123
+ record = User.find_by name: 'Administrator'
124
+ role = Role.find_by identifier: 'guest'
125
+ assert record.has_role_by_descendents?(:guest)
126
+ assert record.has_role_by_descendents?(role.id)
127
+ assert record.has_role_by_descendents?(role)
128
+
129
+ record = User.find_by name: 'User'
130
+ role = Role.find_by identifier: 'administrator'
131
+ refute record.has_role_by_descendents?(:administrator)
132
+ refute record.has_role_by_descendents?(role.id)
133
+ refute record.has_role_by_descendents?(role)
134
+
135
+ record = User.find_by name: 'Super User'
136
+ assert record.has_role_by_descendents?(:administrator)
137
+ assert record.has_role_by_descendents?(role.id)
138
+ assert record.has_role_by_descendents?(role)
139
+ end
140
+
141
+ # Testing for roles by descendents
142
+ test "has roles by descendents?" do
143
+ record = User.find_by name: 'Administrator'
144
+ role_user = Role.find_by identifier: 'user'
145
+ role_guest = Role.find_by identifier: 'guest'
146
+ assert record.has_roles_by_descendents?([:user, :guest])
147
+ assert record.has_roles_by_descendents?([role_user.id, role_guest.id])
148
+ assert record.has_roles_by_descendents?([role_user, role_guest])
149
+
150
+ record = User.find_by name: 'User'
151
+ role_administrator = Role.find_by identifier: 'administrator'
152
+ role_guest = Role.find_by identifier: 'guest'
153
+ refute record.has_roles_by_descendents?([:administrator, :guest])
154
+ refute record.has_roles_by_descendents?([role_administrator.id, role_guest.id])
155
+ refute record.has_roles_by_descendents?([role_administrator, role_guest])
156
+
157
+ record = User.find_by name: 'Super User'
158
+ assert record.has_roles_by_descendents?([:user, :guest])
159
+ assert record.has_roles_by_descendents?([role_user.id, role_guest.id])
160
+ assert record.has_roles_by_descendents?([role_user, role_guest])
161
+ end
162
+
163
+ # Testing has at least one role by descendents
164
+ test "has at least one role by descendents?" do
165
+ record = User.find_by name: 'User'
166
+ role_administrator = Role.find_by identifier: 'administrator'
167
+ role_guest = Role.find_by identifier: 'guest'
168
+ assert record.has_at_least_one_role_by_descendents?([:administrator, :guest])
169
+ assert record.has_at_least_one_role_by_descendents?([role_administrator.id, role_guest.id])
170
+ assert record.has_at_least_one_role_by_descendents?([role_administrator, role_guest])
171
+
172
+ record = User.find_by name: 'Guest'
173
+ role_administrator = Role.find_by identifier: 'administrator'
174
+ role_user = Role.find_by identifier: 'user'
175
+ refute record.has_at_least_one_role_by_descendents?([:administrator, :user])
176
+ refute record.has_at_least_one_role_by_descendents?([role_administrator.id, role_user.id])
177
+ refute record.has_at_least_one_role_by_descendents?([role_administrator, role_user])
178
+
179
+ record = User.find_by name: 'Super User'
180
+ assert record.has_at_least_one_role_by_descendents?([:administrator, :guest])
181
+ assert record.has_at_least_one_role_by_descendents?([role_administrator.id, role_guest.id])
182
+ assert record.has_at_least_one_role_by_descendents?([role_administrator, role_guest])
183
+ end
184
+ end