monarchy 1.1.5 → 2.0.0.pre.beta.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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +26 -0
- data/.gitignore +6 -6
- data/.rubocop.yml +3 -3
- data/CHANGELOG.md +11 -0
- data/Gemfile +4 -3
- data/Gemfile.lock +54 -53
- data/README.md +1 -0
- data/app/models/monarchy/hierarchy.rb +0 -1
- data/docs/acts_as_hierarchy.md +45 -0
- data/docs/acts_as_resource.md +103 -0
- data/docs/acts_as_user.md +52 -0
- data/docs/configuration.md +54 -0
- data/docs/installation.md +30 -0
- data/docs/usage.md +22 -0
- data/dummy/.rspec +2 -0
- data/dummy/README.rdoc +28 -0
- data/dummy/Rakefile +7 -0
- data/dummy/app/assets/images/.keep +0 -0
- data/dummy/app/assets/javascripts/application.js +13 -0
- data/dummy/app/assets/stylesheets/application.css +15 -0
- data/dummy/app/controllers/application_controller.rb +6 -0
- data/dummy/app/controllers/concerns/.keep +0 -0
- data/dummy/app/helpers/application_helper.rb +3 -0
- data/dummy/app/mailers/.keep +0 -0
- data/dummy/app/models/.keep +0 -0
- data/dummy/app/models/concerns/.keep +0 -0
- data/dummy/app/models/member.rb +4 -0
- data/dummy/app/models/memo.rb +5 -0
- data/dummy/app/models/project.rb +12 -0
- data/dummy/app/models/resource.rb +4 -0
- data/dummy/app/models/role.rb +4 -0
- data/dummy/app/models/status.rb +5 -0
- data/dummy/app/models/task.rb +5 -0
- data/dummy/app/models/user.rb +4 -0
- data/dummy/app/views/layouts/application.html.erb +14 -0
- data/dummy/bin/bundle +4 -0
- data/dummy/bin/rails +5 -0
- data/dummy/bin/rake +5 -0
- data/dummy/bin/setup +30 -0
- data/dummy/config/application.rb +25 -0
- data/dummy/config/boot.rb +6 -0
- data/dummy/config/database.yml +10 -0
- data/dummy/config/environment.rb +6 -0
- data/dummy/config/environments/development.rb +42 -0
- data/dummy/config/environments/production.rb +80 -0
- data/dummy/config/environments/test.rb +43 -0
- data/dummy/config/initializers/assets.rb +12 -0
- data/dummy/config/initializers/backtrace_silencers.rb +8 -0
- data/dummy/config/initializers/cookies_serializer.rb +4 -0
- data/dummy/config/initializers/filter_parameter_logging.rb +5 -0
- data/dummy/config/initializers/inflections.rb +17 -0
- data/dummy/config/initializers/mime_types.rb +5 -0
- data/dummy/config/initializers/monarchy.rb +46 -0
- data/dummy/config/initializers/session_store.rb +4 -0
- data/dummy/config/initializers/wrap_parameters.rb +15 -0
- data/dummy/config/locales/en.yml +23 -0
- data/dummy/config/routes.rb +57 -0
- data/dummy/config/secrets.yml +22 -0
- data/dummy/config.ru +5 -0
- data/dummy/db/migrate/20160220215254_monarchy_create_users.rb +7 -0
- data/dummy/db/migrate/20160221132205_monarchy_create_hierarchies.rb +22 -0
- data/dummy/db/migrate/20160221133215_monarchy_create_memberships.rb +38 -0
- data/dummy/db/migrate/20160221142305_create_memo_resource.rb +8 -0
- data/dummy/db/migrate/20160221142309_create_project_resource.rb +8 -0
- data/dummy/db/migrate/20160221154113_create_resource_resource.rb +8 -0
- data/dummy/db/migrate/20160306124820_add_memo_to_resource.rb +6 -0
- data/dummy/db/migrate/20160502212213_parent_as_setup.rb +7 -0
- data/dummy/db/migrate/20160815163909_task_model.rb +10 -0
- data/dummy/db/migrate/20160818205534_status.rb +9 -0
- data/dummy/db/schema.rb +111 -0
- data/dummy/lib/assets/.keep +0 -0
- data/dummy/public/404.html +67 -0
- data/dummy/public/422.html +67 -0
- data/dummy/public/500.html +66 -0
- data/dummy/public/favicon.ico +0 -0
- data/dummy/spec +1 -0
- data/lib/generators/templates/config.rb +44 -7
- data/lib/monarchy/acts_as_hierarchy.rb +12 -11
- data/lib/monarchy/acts_as_member.rb +8 -17
- data/lib/monarchy/acts_as_resource.rb +35 -22
- data/lib/monarchy/acts_as_user.rb +51 -39
- data/lib/monarchy/exceptions.rb +135 -0
- data/lib/monarchy/tasks.rb +1 -1
- data/lib/monarchy/validators.rb +83 -0
- data/lib/monarchy/version.rb +1 -1
- data/lib/monarchy.rb +21 -8
- data/monarchy.gemspec +4 -4
- metadata +85 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c68ab46ff143acf0dbf4724039a5eda03caad6a
|
4
|
+
data.tar.gz: 7bffa186ec4eddd5c42e08d9217197329f223c77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e2f56e8b44dc277700951c9fda570907ea47b1ba98e6050d3e2a256f2f42b5620b8e158087292f1c797255f0fda311fa2f43ccabf3eacb63ec635d9349e4dba
|
7
|
+
data.tar.gz: 406793fd9ad57d2c65872594840a7761c5592801ab536cd006b9fde3936b914177b61e78c1809c09fc9e12cb6f2d9ec80bf9d12de11ece9b92ba3a644f349f90
|
data/.codeclimate.yml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
---
|
2
|
+
engines:
|
3
|
+
brakeman:
|
4
|
+
enabled: true
|
5
|
+
bundler-audit:
|
6
|
+
enabled: true
|
7
|
+
duplication:
|
8
|
+
enabled: true
|
9
|
+
config:
|
10
|
+
languages:
|
11
|
+
- ruby
|
12
|
+
checks:
|
13
|
+
Similar code:
|
14
|
+
enabled: false
|
15
|
+
fixme:
|
16
|
+
enabled: true
|
17
|
+
rubocop:
|
18
|
+
enabled: true
|
19
|
+
ratings:
|
20
|
+
paths:
|
21
|
+
- Gemfile.lock
|
22
|
+
- "**.rb"
|
23
|
+
exclude_paths:
|
24
|
+
- spec/
|
25
|
+
- dummy/
|
26
|
+
- docs/
|
data/.gitignore
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
.bundle/
|
2
2
|
log/*.log
|
3
3
|
pkg/
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
dummy/log/*.log
|
5
|
+
dummy/db/*.sqlite3
|
6
|
+
dummy/db/*.sqlite3-journal
|
7
|
+
dummy/log/*.log
|
8
|
+
dummy/tmp/
|
9
|
+
dummy/.sass-cache
|
10
10
|
.DS_Store
|
11
11
|
coverage/
|
12
12
|
.lock-*
|
data/.rubocop.yml
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
AllCops:
|
2
2
|
TargetRubyVersion: 2.3
|
3
3
|
Exclude:
|
4
|
-
- '
|
5
|
-
- '
|
6
|
-
- '
|
4
|
+
- 'dummy/db/seeds.rb'
|
5
|
+
- 'dummy/db/migrate/**'
|
6
|
+
- 'dummy/db/schema.rb'
|
7
7
|
- 'lib/generators/templates/**/*'
|
8
8
|
Documentation:
|
9
9
|
Enabled: false
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
### 2.0.x LTS
|
2
|
+
- Docs in files
|
3
|
+
- Improve `.in` scope in AAR
|
4
|
+
- Change `.in` scope in AAH
|
5
|
+
- Now it takes `hierarchy` and returns array of `hierarchies`
|
6
|
+
- Update gems
|
7
|
+
- Add dynamic `hierarchy` class
|
8
|
+
- Add `users` relationship to AAH
|
9
|
+
- Add a validator for `hierarchy`
|
10
|
+
- Add new exceptions for `hierarchy`
|
11
|
+
- Fix scopes in `hierarchy`
|
data/Gemfile
CHANGED
@@ -16,11 +16,11 @@ gemspec
|
|
16
16
|
# gem 'byebug', group: [:development, :test]
|
17
17
|
|
18
18
|
group :development, :test do
|
19
|
-
gem 'sqlite3', '1.3.
|
20
|
-
gem 'rubocop', '0.
|
19
|
+
gem 'sqlite3', '1.3.12'
|
20
|
+
gem 'rubocop', '0.43.0'
|
21
21
|
gem 'pry-rails', '0.3.4'
|
22
22
|
gem 'shoulda-matchers', '3.1.1'
|
23
|
-
gem 'rspec-rails', '3.5.
|
23
|
+
gem 'rspec-rails', '3.5.2'
|
24
24
|
gem 'factory_girl_rails', '4.7.0'
|
25
25
|
gem 'ffaker', '2.2.0'
|
26
26
|
gem 'database_cleaner', '1.5.3'
|
@@ -28,3 +28,4 @@ group :development, :test do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
gem 'simplecov', '0.12.0', require: false, group: :test
|
31
|
+
gem 'codeclimate-test-reporter', group: :test, require: nil
|
data/Gemfile.lock
CHANGED
@@ -1,48 +1,48 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
monarchy (
|
4
|
+
monarchy (2.0.0.pre.beta.1)
|
5
5
|
active_record_union (= 1.2.0)
|
6
|
-
closure_tree (= 6.
|
7
|
-
configurations (= 2.2.
|
8
|
-
rails (~> 4.2, >= 4.2.
|
6
|
+
closure_tree (= 6.2.0)
|
7
|
+
configurations (= 2.2.1)
|
8
|
+
rails (~> 4.2, >= 4.2.7.1)
|
9
9
|
tqdm (= 0.3.0)
|
10
10
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
actionmailer (4.2.7)
|
15
|
-
actionpack (= 4.2.7)
|
16
|
-
actionview (= 4.2.7)
|
17
|
-
activejob (= 4.2.7)
|
14
|
+
actionmailer (4.2.7.1)
|
15
|
+
actionpack (= 4.2.7.1)
|
16
|
+
actionview (= 4.2.7.1)
|
17
|
+
activejob (= 4.2.7.1)
|
18
18
|
mail (~> 2.5, >= 2.5.4)
|
19
19
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
20
|
-
actionpack (4.2.7)
|
21
|
-
actionview (= 4.2.7)
|
22
|
-
activesupport (= 4.2.7)
|
20
|
+
actionpack (4.2.7.1)
|
21
|
+
actionview (= 4.2.7.1)
|
22
|
+
activesupport (= 4.2.7.1)
|
23
23
|
rack (~> 1.6)
|
24
24
|
rack-test (~> 0.6.2)
|
25
25
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
26
26
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
27
|
-
actionview (4.2.7)
|
28
|
-
activesupport (= 4.2.7)
|
27
|
+
actionview (4.2.7.1)
|
28
|
+
activesupport (= 4.2.7.1)
|
29
29
|
builder (~> 3.1)
|
30
30
|
erubis (~> 2.7.0)
|
31
31
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
32
32
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
33
33
|
active_record_union (1.2.0)
|
34
34
|
activerecord (>= 4.0)
|
35
|
-
activejob (4.2.7)
|
36
|
-
activesupport (= 4.2.7)
|
35
|
+
activejob (4.2.7.1)
|
36
|
+
activesupport (= 4.2.7.1)
|
37
37
|
globalid (>= 0.3.0)
|
38
|
-
activemodel (4.2.7)
|
39
|
-
activesupport (= 4.2.7)
|
38
|
+
activemodel (4.2.7.1)
|
39
|
+
activesupport (= 4.2.7.1)
|
40
40
|
builder (~> 3.1)
|
41
|
-
activerecord (4.2.7)
|
42
|
-
activemodel (= 4.2.7)
|
43
|
-
activesupport (= 4.2.7)
|
41
|
+
activerecord (4.2.7.1)
|
42
|
+
activemodel (= 4.2.7.1)
|
43
|
+
activesupport (= 4.2.7.1)
|
44
44
|
arel (~> 6.0)
|
45
|
-
activesupport (4.2.7)
|
45
|
+
activesupport (4.2.7.1)
|
46
46
|
i18n (~> 0.7)
|
47
47
|
json (~> 1.7, >= 1.7.7)
|
48
48
|
minitest (~> 5.1)
|
@@ -51,12 +51,14 @@ GEM
|
|
51
51
|
arel (6.0.3)
|
52
52
|
ast (2.3.0)
|
53
53
|
builder (3.2.2)
|
54
|
-
closure_tree (6.
|
54
|
+
closure_tree (6.2.0)
|
55
55
|
activerecord (>= 4.1.0)
|
56
56
|
with_advisory_lock (>= 3.0.0)
|
57
|
+
codeclimate-test-reporter (0.6.0)
|
58
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
57
59
|
coderay (1.1.1)
|
58
60
|
concurrent-ruby (1.0.2)
|
59
|
-
configurations (2.2.
|
61
|
+
configurations (2.2.1)
|
60
62
|
database_cleaner (1.5.3)
|
61
63
|
diff-lcs (1.2.5)
|
62
64
|
docile (1.1.5)
|
@@ -80,13 +82,11 @@ GEM
|
|
80
82
|
mime-types-data (~> 3.2015)
|
81
83
|
mime-types-data (3.2016.0521)
|
82
84
|
mini_portile2 (2.1.0)
|
83
|
-
minitest (5.9.
|
84
|
-
nokogiri (1.6.8)
|
85
|
+
minitest (5.9.1)
|
86
|
+
nokogiri (1.6.8.1)
|
85
87
|
mini_portile2 (~> 2.1.0)
|
86
|
-
|
87
|
-
parser (2.3.1.2)
|
88
|
+
parser (2.3.1.4)
|
88
89
|
ast (~> 2.2)
|
89
|
-
pkg-config (1.1.7)
|
90
90
|
powerpack (0.1.1)
|
91
91
|
pry (0.10.4)
|
92
92
|
coderay (~> 1.1.0)
|
@@ -97,16 +97,16 @@ GEM
|
|
97
97
|
rack (1.6.4)
|
98
98
|
rack-test (0.6.3)
|
99
99
|
rack (>= 1.0)
|
100
|
-
rails (4.2.7)
|
101
|
-
actionmailer (= 4.2.7)
|
102
|
-
actionpack (= 4.2.7)
|
103
|
-
actionview (= 4.2.7)
|
104
|
-
activejob (= 4.2.7)
|
105
|
-
activemodel (= 4.2.7)
|
106
|
-
activerecord (= 4.2.7)
|
107
|
-
activesupport (= 4.2.7)
|
100
|
+
rails (4.2.7.1)
|
101
|
+
actionmailer (= 4.2.7.1)
|
102
|
+
actionpack (= 4.2.7.1)
|
103
|
+
actionview (= 4.2.7.1)
|
104
|
+
activejob (= 4.2.7.1)
|
105
|
+
activemodel (= 4.2.7.1)
|
106
|
+
activerecord (= 4.2.7.1)
|
107
|
+
activesupport (= 4.2.7.1)
|
108
108
|
bundler (>= 1.3.0, < 2.0)
|
109
|
-
railties (= 4.2.7)
|
109
|
+
railties (= 4.2.7.1)
|
110
110
|
sprockets-rails
|
111
111
|
rails-deprecated_sanitizer (1.0.3)
|
112
112
|
activesupport (>= 4.2.0.alpha)
|
@@ -116,18 +116,18 @@ GEM
|
|
116
116
|
rails-deprecated_sanitizer (>= 1.0.1)
|
117
117
|
rails-html-sanitizer (1.0.3)
|
118
118
|
loofah (~> 2.0)
|
119
|
-
railties (4.2.7)
|
120
|
-
actionpack (= 4.2.7)
|
121
|
-
activesupport (= 4.2.7)
|
119
|
+
railties (4.2.7.1)
|
120
|
+
actionpack (= 4.2.7.1)
|
121
|
+
activesupport (= 4.2.7.1)
|
122
122
|
rake (>= 0.8.7)
|
123
123
|
thor (>= 0.18.1, < 2.0)
|
124
124
|
rainbow (2.1.0)
|
125
|
-
rake (11.
|
125
|
+
rake (11.3.0)
|
126
126
|
rspec (3.5.0)
|
127
127
|
rspec-core (~> 3.5.0)
|
128
128
|
rspec-expectations (~> 3.5.0)
|
129
129
|
rspec-mocks (~> 3.5.0)
|
130
|
-
rspec-core (3.5.
|
130
|
+
rspec-core (3.5.4)
|
131
131
|
rspec-support (~> 3.5.0)
|
132
132
|
rspec-expectations (3.5.0)
|
133
133
|
diff-lcs (>= 1.2.0, < 2.0)
|
@@ -135,7 +135,7 @@ GEM
|
|
135
135
|
rspec-mocks (3.5.0)
|
136
136
|
diff-lcs (>= 1.2.0, < 2.0)
|
137
137
|
rspec-support (~> 3.5.0)
|
138
|
-
rspec-rails (3.5.
|
138
|
+
rspec-rails (3.5.2)
|
139
139
|
actionpack (>= 3.0)
|
140
140
|
activesupport (>= 3.0)
|
141
141
|
railties (>= 3.0)
|
@@ -144,7 +144,7 @@ GEM
|
|
144
144
|
rspec-mocks (~> 3.5.0)
|
145
145
|
rspec-support (~> 3.5.0)
|
146
146
|
rspec-support (3.5.0)
|
147
|
-
rubocop (0.
|
147
|
+
rubocop (0.43.0)
|
148
148
|
parser (>= 2.3.1.1, < 3.0)
|
149
149
|
powerpack (~> 0.1)
|
150
150
|
rainbow (>= 1.99.1, < 3.0)
|
@@ -162,17 +162,17 @@ GEM
|
|
162
162
|
sprockets (3.7.0)
|
163
163
|
concurrent-ruby (~> 1.0)
|
164
164
|
rack (> 1, < 3)
|
165
|
-
sprockets-rails (3.
|
165
|
+
sprockets-rails (3.2.0)
|
166
166
|
actionpack (>= 4.0)
|
167
167
|
activesupport (>= 4.0)
|
168
168
|
sprockets (>= 3.0.0)
|
169
|
-
sqlite3 (1.3.
|
169
|
+
sqlite3 (1.3.12)
|
170
170
|
thor (0.19.1)
|
171
171
|
thread_safe (0.3.5)
|
172
172
|
tqdm (0.3.0)
|
173
173
|
tzinfo (1.2.2)
|
174
174
|
thread_safe (~> 0.1)
|
175
|
-
unicode-display_width (1.1.
|
175
|
+
unicode-display_width (1.1.1)
|
176
176
|
with_advisory_lock (3.0.0)
|
177
177
|
activerecord (>= 3.2)
|
178
178
|
thread_safe
|
@@ -182,22 +182,23 @@ PLATFORMS
|
|
182
182
|
|
183
183
|
DEPENDENCIES
|
184
184
|
bundler (~> 1.12)
|
185
|
+
codeclimate-test-reporter
|
185
186
|
database_cleaner (= 1.5.3)
|
186
187
|
factory_girl_rails (= 4.7.0)
|
187
188
|
ffaker (= 2.2.0)
|
188
189
|
monarchy!
|
189
190
|
pry-rails (= 0.3.4)
|
190
|
-
rake (~> 11.
|
191
|
+
rake (~> 11.3)
|
191
192
|
rspec (= 3.5.0)
|
192
|
-
rspec-rails (= 3.5.
|
193
|
-
rubocop (= 0.
|
193
|
+
rspec-rails (= 3.5.2)
|
194
|
+
rubocop (= 0.43.0)
|
194
195
|
shoulda-matchers (= 3.1.1)
|
195
196
|
simplecov (= 0.12.0)
|
196
|
-
sqlite3 (= 1.3.
|
197
|
+
sqlite3 (= 1.3.12)
|
197
198
|
tqdm (= 0.3.0)
|
198
199
|
|
199
200
|
RUBY VERSION
|
200
|
-
ruby 2.3.
|
201
|
+
ruby 2.3.1p112
|
201
202
|
|
202
203
|
BUNDLED WITH
|
203
|
-
1.
|
204
|
+
1.13.6
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
[](https://travis-ci.org/Exelord/Monarchy)
|
2
2
|
[](https://gemnasium.com/github.com/Exelord/Monarchy)
|
3
3
|
[](https://gitter.im/Exelord/Monarchy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
4
|
+
[](https://codeclimate.com/github/Exelord/Monarchy)
|
4
5
|
|
5
6
|
<p align="center">
|
6
7
|
<img align="center" src="monarchy.png?raw=true" alt="Sublime's custom image"/>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
## Hierarchy
|
2
|
+
`Hierarchy` is an internal model of `Monarchy` and should not be used unless it is really necessary.
|
3
|
+
|
4
|
+
> hmm... sounds like `private`
|
5
|
+
|
6
|
+
### Methods
|
7
|
+
** We do not recommend to use it but if yo have to: **
|
8
|
+
We are using [Closure Tree][e5c808aa] behind `Hierarchy` class. There is a bunch of methods and functions available behind the hood. Check their documentation.
|
9
|
+
|
10
|
+
[e5c808aa]: https://github.com/mceachen/closure_tree "Closure Tree"
|
11
|
+
|
12
|
+
### Scopes:
|
13
|
+
|
14
|
+
#### .accessible_for
|
15
|
+
You can select all hierarchies accessible for specific user by using a scope: `accessible_for`, eg:
|
16
|
+
``` ruby
|
17
|
+
Monarchy::Hierarchy.accessible_for(current_user) # returns [hierarchy1, hierarchy2, hierarchy5]
|
18
|
+
```
|
19
|
+
|
20
|
+
#### .in(resource, true)
|
21
|
+
You can select all hierarchies scoped into another by using scope: `in`:
|
22
|
+
|
23
|
+
- If the second argument is `true` (`true` is by default):
|
24
|
+
``` ruby
|
25
|
+
Monarchy::Hierarchy.in(project.hierarchy) # returns [hierarchy1, hierarchy2, hierarchy5]
|
26
|
+
```
|
27
|
+
It will returns for you all `hierarchies` which parent is `project.hierarchy` or one of his children.
|
28
|
+
|
29
|
+
- If the second argument is `false`:
|
30
|
+
``` ruby
|
31
|
+
Monarchy::Hierarchy.in(project.hierarchy, false) # returns [hierarchy1, hierarchy2]
|
32
|
+
```
|
33
|
+
It will returns for you all `hierarchies` which parent is `project.hierarchy`
|
34
|
+
|
35
|
+
|
36
|
+
## Relations
|
37
|
+
|
38
|
+
#### #members
|
39
|
+
Return all members explicitly granted to the hierarchy.
|
40
|
+
|
41
|
+
#### #users
|
42
|
+
Returns all users which have been granted explicitly to the hierarchy.
|
43
|
+
|
44
|
+
#### #resource
|
45
|
+
Returns a resource model of the hierarchy.
|
@@ -0,0 +1,103 @@
|
|
1
|
+
To generate a new resource you can use:
|
2
|
+
```
|
3
|
+
rails g monarchy:resource [resource_name]
|
4
|
+
```
|
5
|
+
or add to an existing model `acts_as_resource`, eg:
|
6
|
+
```ruby
|
7
|
+
class Resource < ActiveRecord::Base
|
8
|
+
acts_as_resource
|
9
|
+
end
|
10
|
+
```
|
11
|
+
|
12
|
+
##### - Options
|
13
|
+
You can pass an options to `acts_as_resource`:
|
14
|
+
- `parent_as: :association_name`
|
15
|
+
|
16
|
+
This let you directly assign parent when you assign an association,
|
17
|
+
eg:
|
18
|
+
``` ruby
|
19
|
+
class Task << ActiveRecord::Base
|
20
|
+
acts_as_resource parent_as: :project
|
21
|
+
belongs_to :project
|
22
|
+
end
|
23
|
+
|
24
|
+
task.update(project: Project.last)
|
25
|
+
task.parent # returns Project.last
|
26
|
+
```
|
27
|
+
|
28
|
+
## Methods
|
29
|
+
|
30
|
+
#### #parent
|
31
|
+
You can easily assign parent by using `parent=` method, eg:
|
32
|
+
``` ruby
|
33
|
+
resource.parent = Project.last
|
34
|
+
```
|
35
|
+
and read value by using `parent` method:
|
36
|
+
``` ruby
|
37
|
+
resource.parent # returns Project.last
|
38
|
+
```
|
39
|
+
|
40
|
+
Parents can be only models which have `acts_as_resource`
|
41
|
+
|
42
|
+
#### #children
|
43
|
+
You can easily assign children by using `children=` method, eg:
|
44
|
+
``` ruby
|
45
|
+
resource.children = [child1, child2, child3]
|
46
|
+
```
|
47
|
+
and read value by using `parent` method:
|
48
|
+
``` ruby
|
49
|
+
resource.children # returns [child1, child2, child3]
|
50
|
+
```
|
51
|
+
Children can be only models which have `acts_as_resource`
|
52
|
+
|
53
|
+
#### #ensure_hierarchy
|
54
|
+
It creates a hierarchy for resource model if it not exist and `automatic_hierarchy` flag is set to true.
|
55
|
+
If you want to bypass `automatic_hierarchy` flag you can pass `true` to the method params.
|
56
|
+
|
57
|
+
#### .default_role_name
|
58
|
+
Returns default role name for the class
|
59
|
+
|
60
|
+
#### .default_role
|
61
|
+
Returns default role object `Monarchy::Role` for the class
|
62
|
+
|
63
|
+
### Scopes:
|
64
|
+
|
65
|
+
#### .accessible_for
|
66
|
+
You can select all resources accessible for specyfic user by using scope: `accessible_for`, eg:
|
67
|
+
``` ruby
|
68
|
+
Resource.accessible_for(current_user) # returns [resource1, resource2, resource5]
|
69
|
+
```
|
70
|
+
|
71
|
+
#### .in(resource, true)
|
72
|
+
You can select all resources scoped into another by using scope: `in`:
|
73
|
+
|
74
|
+
- If the second argument is `true` (`true` is by default):
|
75
|
+
``` ruby
|
76
|
+
Resource.in(Project.first) # returns [resource1, resource5, resource6]
|
77
|
+
```
|
78
|
+
It will return for you all `resources` which parent is `Project.first` or one of his children.
|
79
|
+
|
80
|
+
- If the second argument is `false`:
|
81
|
+
``` ruby
|
82
|
+
Resource.in(Project.first, false) # returns [resource1, resource5]
|
83
|
+
```
|
84
|
+
It will return for you all `resources` which parent is `Project.first`
|
85
|
+
|
86
|
+
|
87
|
+
## Relations
|
88
|
+
|
89
|
+
#### #members
|
90
|
+
Return all members explicitly granted to the resource.
|
91
|
+
|
92
|
+
#### #users
|
93
|
+
Returns all users which have been granted explicitly to the resource.
|
94
|
+
|
95
|
+
#### #hierarchy
|
96
|
+
Returns a hierarchy model of the resource. (DO NOT USE UNLESS IS NECESSARY)
|
97
|
+
|
98
|
+
## Flags
|
99
|
+
Every class which is actually the resource (`acts_as_resource`) has available flags.
|
100
|
+
### .acting_as_resource
|
101
|
+
If a model class has `acts_as_resource` it returns `true` otherwise method is undefined.
|
102
|
+
### .parentize_name
|
103
|
+
If a model class has `acts_as_resource` it returns class name of the parent if has been set by 'parent_as' option.
|
@@ -0,0 +1,52 @@
|
|
1
|
+
You have to add it to your user model or the custom one specified in a config file.
|
2
|
+
|
3
|
+
``` ruby
|
4
|
+
class User < ActiveRecord::Base
|
5
|
+
acts_as_user
|
6
|
+
end
|
7
|
+
```
|
8
|
+
|
9
|
+
## Relations
|
10
|
+
|
11
|
+
#### .hierarchies
|
12
|
+
Return all hierarchies in which user is explicitly granted.
|
13
|
+
|
14
|
+
#### .members
|
15
|
+
Returns all memberships (`member` model) of the user
|
16
|
+
|
17
|
+
## Scopes
|
18
|
+
|
19
|
+
#### .accessible_for (user)
|
20
|
+
Returns all users accessible for the specific user
|
21
|
+
It includes all users from all resource which the user has any access.
|
22
|
+
|
23
|
+
## Methods
|
24
|
+
|
25
|
+
#### #roles_for(resource, inheritance = true)
|
26
|
+
Returns all roles for the user to the specific `resource`.
|
27
|
+
You can choose if this method should return also inherited roles or just these, granted explicitly.
|
28
|
+
|
29
|
+
#### #member_for(resource)
|
30
|
+
Returns a `member` object for the user in specyfic resource.
|
31
|
+
|
32
|
+
#### #grant(role_names, resource)
|
33
|
+
By this method, you can give the user an access to a specific resource.
|
34
|
+
You can specify a role name or an array of roles names.
|
35
|
+
**Remember to use `symbols`!**
|
36
|
+
|
37
|
+
#### #revoke_access(resource)
|
38
|
+
You can revoke total access of a user from the resource and his children by using this method.
|
39
|
+
Optionally you can specify `hierarchies` as the second argument from which user's members should be deleted.
|
40
|
+
|
41
|
+
#### #revoke_role(role_name, resource)
|
42
|
+
It revokes specified role from a user's member of the resource.
|
43
|
+
If is it last role and the default for the resource it will raise an error `Monarchy::Exceptions::RoleNotRevokable`. Otherwise, if it's just a last role it will remove the one and grant a user with default one.
|
44
|
+
|
45
|
+
**It guaranty that user will have always last role or a default one**
|
46
|
+
|
47
|
+
#### #revoke_role!(role_name, resource)
|
48
|
+
It behaves exactly like `#revoke_role` but with one difference during revoking last_role.
|
49
|
+
Depend on which `revoke_strategy` did you choose in configuration,
|
50
|
+
it will delete a member after revoking the last role or will revoke an access to the resource.
|
51
|
+
|
52
|
+
For more information check the [configuration page](https://github.com/Exelord/Monarchy/wiki/Configuration) and `revoke_strategy` property.
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Configuration file
|
2
|
+
|
3
|
+
You can configure Monarchy in `config/initializers/monarchy.rb` file. All available configuration options are already there and waiting for your orders.
|
4
|
+
|
5
|
+
``` ruby
|
6
|
+
Monarchy.configure do |config|
|
7
|
+
# REQUIRED SETTINGS
|
8
|
+
|
9
|
+
# You have to define which role will be the default one (read only) during inheritance.
|
10
|
+
# Example role: :guest
|
11
|
+
# Real case on resources:
|
12
|
+
# project: (you have no roles)
|
13
|
+
# section: (you have no roles)
|
14
|
+
# task: (you have a member role here)
|
15
|
+
# When you ask for user.roles_for(project) you will get a default role (:guest)
|
16
|
+
# in case when member role has inherited flag set to true
|
17
|
+
# Remember to create that role before setting it up eg:
|
18
|
+
# Monarchy::Role.create(name: :guest, inherited: false, level: 0)
|
19
|
+
config.inherited_default_role = nil # symbol
|
20
|
+
|
21
|
+
# You have to define user class name or an actor class which respond to acts_as_user in your model.
|
22
|
+
# Example of model:
|
23
|
+
# class User < ActiveRecord::Base
|
24
|
+
# acts_as_user
|
25
|
+
# end
|
26
|
+
config.user_class_name = '' # string
|
27
|
+
|
28
|
+
|
29
|
+
# OPTIONAL SETTINGS
|
30
|
+
|
31
|
+
# If you want to override Member or Role class you have add correct actors to class definition
|
32
|
+
# Available: acts_as_member, acts_as_role, acts_as_hierarchy
|
33
|
+
# Example:
|
34
|
+
# class Member < ActiveRecord::Base
|
35
|
+
# acts_as_member
|
36
|
+
# end
|
37
|
+
config.role_class_name = 'Monarchy::Role' # string
|
38
|
+
config.member_class_name = 'Monarchy::Member' # string
|
39
|
+
config.hierarchy_class_name = 'Monarchy::Hierarchy' # string
|
40
|
+
|
41
|
+
|
42
|
+
# If this option is setup to true all members bellow the destroying one, will be deleted.
|
43
|
+
config.members_access_revoke = false # boolean
|
44
|
+
|
45
|
+
# Set the revoke strategy using during '#revoke_role!' method
|
46
|
+
# Available: :revoke_member, :revoke_access
|
47
|
+
# Default: :revoke_member
|
48
|
+
# Info:
|
49
|
+
# :revoke_member - after revoking the last role from user's member remove the member
|
50
|
+
# :revoke_access - after revoking the last role from user's member
|
51
|
+
# remove the member, and all members bellow which belongs to the user
|
52
|
+
config.revoke_strategy = :revoke_member # symbol
|
53
|
+
end
|
54
|
+
```
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Installation
|
2
|
+
Add this line to your application's Gemfile:
|
3
|
+
|
4
|
+
```ruby
|
5
|
+
gem 'monarchy'
|
6
|
+
```
|
7
|
+
|
8
|
+
And then execute:
|
9
|
+
|
10
|
+
$ bundle
|
11
|
+
|
12
|
+
To create initials migrations and necessary files run:
|
13
|
+
```
|
14
|
+
rails g monarchy:setup
|
15
|
+
```
|
16
|
+
|
17
|
+
This will create for you:
|
18
|
+
|
19
|
+
1. Migrations:
|
20
|
+
- `monarchy_create_users`
|
21
|
+
- `monarchy_create_hierarchies`
|
22
|
+
- `monarchy_create_memberships`
|
23
|
+
2. Configuration file in `config/initializers/monarchy`
|
24
|
+
3. Default `User` model (optional)
|
25
|
+
|
26
|
+
**If you want to use your current `User` model just skip generation of: **
|
27
|
+
- `db/migrate/monarchy_create_users.rb`
|
28
|
+
- `app/models/user.rb`
|
29
|
+
|
30
|
+
And add to your current `User` model `acts_as_user`
|
data/docs/usage.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Usage
|
2
|
+
The only think you have to do is mark models to be one of part of Monarchy.
|
3
|
+
|
4
|
+
You can use 2 available markers:
|
5
|
+
|
6
|
+
1. `acts_as_user`
|
7
|
+
2. `acts_as_resource`
|
8
|
+
|
9
|
+
## Acts as user
|
10
|
+
For your current `User` model or freshly generated one, add or check if exist, `acts_as_user`.
|
11
|
+
``` ruby
|
12
|
+
class User < ActiveRecord::Base
|
13
|
+
acts_as_user
|
14
|
+
end
|
15
|
+
```
|
16
|
+
|
17
|
+
> Check documentation of [Acts as user] (https://github.com/Exelord/Monarchy/wiki/Acts-as-user)
|
18
|
+
|
19
|
+
## Acts as resource
|
20
|
+
For all models that you want to be accessible for users add `acts_as_resource`.
|
21
|
+
|
22
|
+
> Check documentation of [Acts as resource] (https://github.com/Exelord/Monarchy/wiki/Acts-as-resource)
|
data/dummy/.rspec
ADDED
data/dummy/README.rdoc
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|