rolify_hier 0.0.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.
- checksums.yaml +7 -0
- data/README.md +91 -0
- data/Rakefile +37 -0
- data/lib/generators/rolify_hier/initializer_generator.rb +13 -0
- data/lib/generators/rolify_hier/templates/initializer.rb +10 -0
- data/lib/rolify_hier/engine.rb +5 -0
- data/lib/rolify_hier/hier_role.rb +59 -0
- data/lib/rolify_hier/hier_roles.rb +24 -0
- data/lib/rolify_hier/version.rb +3 -0
- data/lib/rolify_hier.rb +21 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d3ed039bc8965adbed428dde0cc5f9e14cf1d876
|
4
|
+
data.tar.gz: eacfdae97a24d08305851f3b73b5f3c8eae638ba
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 29175aff3541dfea6e8500c0b96353a6a797db48c9ec0ff5f7bc0f5634a8ebff37b7ffb936904bdfb1b16f258ff84918ad647f2a5c4288fbb985094d6e3afcdd
|
7
|
+
data.tar.gz: 0d6692bde1a7f2eb5daedd875536acbc11a4f7a69219050dcc3d3d33324bdf5fbe8fe2898de40f40fdb61caafe8fe3db9a4b56dda0e642d76168e9eb70cd5c15
|
data/README.md
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# Rolify Hier
|
2
|
+
|
3
|
+
The very simple role hierarchy library for [rolify](https://github.com/RolifyCommunity/rolify)
|
4
|
+
|
5
|
+
## Requirements
|
6
|
+
|
7
|
+
* Rails >= 3.2
|
8
|
+
* [rolify](https://github.com/RolifyCommunity/rolify)
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this to your Gemfile.
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'rolify_hier'
|
16
|
+
```
|
17
|
+
|
18
|
+
## Getting Started
|
19
|
+
|
20
|
+
### 1. Configure role hierarchy
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
rails g rolify_hier:initializer
|
24
|
+
```
|
25
|
+
|
26
|
+
generates `config/initializers/rolify_hier.rb`:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
RolifyHier.config do
|
30
|
+
# role(:root) << role(:admin) << role(:user)
|
31
|
+
## or
|
32
|
+
# role(:root) << role(:admin)
|
33
|
+
# role(:admin) << role(:user)
|
34
|
+
## ->
|
35
|
+
## root has root, admin, user
|
36
|
+
## admin has admin, user
|
37
|
+
## user has user
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
If you want to configure 'king > bishop > knight > pawn' hierarchy, then write like below.
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
RolifyHier.config do
|
45
|
+
role(:king) << role(:bishop) << role(:knight) << role(:pawn)
|
46
|
+
|
47
|
+
## Also works equally
|
48
|
+
# role(:king) << role(:bishop)
|
49
|
+
# role(:bishop) << role(:knight) << role(:pawn)
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
### 2. Example
|
54
|
+
I assume that you already know rolify.
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
RolifyHier.config do
|
58
|
+
role(:king) << role(:bishop) << role(:knight) << role(:pawn)
|
59
|
+
end
|
60
|
+
|
61
|
+
class User < ActiveRecord::Base
|
62
|
+
include RolifyHier
|
63
|
+
rolify # for rolify
|
64
|
+
end
|
65
|
+
|
66
|
+
user = User.new
|
67
|
+
user.add_role :knight
|
68
|
+
user.hier_role? :pawn # true
|
69
|
+
user.hier_roles.has_role? :pawn # true. `hier_role?` equals `hier_roles.has_role?`
|
70
|
+
user.hier_role? :knight # true
|
71
|
+
user.hier_role? :bishop # false
|
72
|
+
user.hier_role? :king # false
|
73
|
+
|
74
|
+
# Multiple roles work
|
75
|
+
user2 = User.new
|
76
|
+
user2.add_role :pawn
|
77
|
+
user2.add_role :bishop
|
78
|
+
user2.hier_role? :pawn # true
|
79
|
+
user2.hier_role? :knight # true (because of bishop role)
|
80
|
+
user2.hier_role? :bishop # true
|
81
|
+
user2.hier_role? :king # false
|
82
|
+
```
|
83
|
+
|
84
|
+
## Author
|
85
|
+
Sputnik Gugja (sputnikgugja@gmail.com)
|
86
|
+
|
87
|
+
## License
|
88
|
+
|
89
|
+
This is free software released into the public domain (CC0 license).
|
90
|
+
|
91
|
+
See the `LICENSE` file.
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Rolify Hier'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
Bundler::GemHelper.install_tasks
|
26
|
+
|
27
|
+
require 'rake/testtask'
|
28
|
+
|
29
|
+
Rake::TestTask.new(:test) do |t|
|
30
|
+
t.libs << 'lib'
|
31
|
+
t.libs << 'test'
|
32
|
+
t.pattern = 'test/**/*_test.rb'
|
33
|
+
t.verbose = false
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
task default: :test
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module RolifyHier
|
2
|
+
module Generators
|
3
|
+
class InitializerGenerator < Rails::Generators::Base
|
4
|
+
desc "Creates a RolifyHier initializer in your application"
|
5
|
+
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
7
|
+
|
8
|
+
def copy_initializer
|
9
|
+
template "initializer.rb", "config/initializers/rolify_hier.rb"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module RolifyHier
|
2
|
+
class HierRole
|
3
|
+
@@roles = {}.with_indifferent_access
|
4
|
+
|
5
|
+
def self.[](name)
|
6
|
+
if @@roles.key? name
|
7
|
+
@@roles[name]
|
8
|
+
else
|
9
|
+
role = self.new(name)
|
10
|
+
@@roles[name] = role
|
11
|
+
role
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :name
|
16
|
+
attr_reader :sub
|
17
|
+
|
18
|
+
def initialize(name)
|
19
|
+
raise ArgumentError, 'name is nil' if name.nil?
|
20
|
+
@name = name
|
21
|
+
@sub = Set.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def <<(o)
|
25
|
+
check_arg_type(o)
|
26
|
+
include(o)
|
27
|
+
end
|
28
|
+
|
29
|
+
def include(o)
|
30
|
+
check_arg_type(o)
|
31
|
+
@sub << o
|
32
|
+
o
|
33
|
+
end
|
34
|
+
|
35
|
+
def include?(o)
|
36
|
+
check_arg_type(o)
|
37
|
+
@sub.include?(o)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Not hierarchic
|
41
|
+
def remove(o)
|
42
|
+
check_arg_type(o)
|
43
|
+
@sub.remove(o)
|
44
|
+
end
|
45
|
+
|
46
|
+
def reachable_roles
|
47
|
+
list = [self]
|
48
|
+
@sub.each do |e|
|
49
|
+
list += e.reachable_roles
|
50
|
+
end
|
51
|
+
list
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
def check_arg_type(o)
|
56
|
+
raise 'the argument is not an HierRole class instance' unless o.instance_of?(HierRole)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module RolifyHier
|
2
|
+
class HierRoles
|
3
|
+
attr_reader :roles
|
4
|
+
|
5
|
+
def initialize(hier_role_list)
|
6
|
+
@roles = hier_role_list
|
7
|
+
end
|
8
|
+
|
9
|
+
def has_role?(role_name)
|
10
|
+
reachable_roles.each do |e|
|
11
|
+
return true if e.name == role_name
|
12
|
+
end
|
13
|
+
false
|
14
|
+
end
|
15
|
+
|
16
|
+
def reachable_roles
|
17
|
+
list = []
|
18
|
+
@roles.each do |e|
|
19
|
+
list += e.reachable_roles
|
20
|
+
end
|
21
|
+
list
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/rolify_hier.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "rolify_hier/engine"
|
2
|
+
|
3
|
+
module RolifyHier
|
4
|
+
def self.config(&block)
|
5
|
+
class_eval(&block)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.role(name)
|
9
|
+
HierRole[name.to_sym]
|
10
|
+
end
|
11
|
+
|
12
|
+
# means 'has role hierarchically?'
|
13
|
+
def hier_role?(role_name)
|
14
|
+
hier_roles.has_role? role_name
|
15
|
+
end
|
16
|
+
|
17
|
+
def hier_roles
|
18
|
+
roles = roles(:select => :name).collect( HierRole[&:name] )
|
19
|
+
HierRoles.new roles
|
20
|
+
end
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rolify_hier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sputnik Gugja
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-30 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: The very simple role hierarchy library for rolify. fin
|
14
|
+
email:
|
15
|
+
- sputnikgugja@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.md
|
21
|
+
- Rakefile
|
22
|
+
- lib/generators/rolify_hier/initializer_generator.rb
|
23
|
+
- lib/generators/rolify_hier/templates/initializer.rb
|
24
|
+
- lib/rolify_hier.rb
|
25
|
+
- lib/rolify_hier/engine.rb
|
26
|
+
- lib/rolify_hier/hier_role.rb
|
27
|
+
- lib/rolify_hier/hier_roles.rb
|
28
|
+
- lib/rolify_hier/version.rb
|
29
|
+
homepage: https://github.com/sputnikgugja/rolify_hier
|
30
|
+
licenses:
|
31
|
+
- CC0
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project:
|
49
|
+
rubygems_version: 2.4.8
|
50
|
+
signing_key:
|
51
|
+
specification_version: 4
|
52
|
+
summary: The very simple role hierarchy library for rolify
|
53
|
+
test_files: []
|