rolify_hier 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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,10 @@
1
+ RolifyHier.config do
2
+ # role(:root) << role(:admin) << role(:user)
3
+ ## or
4
+ # role(:root) << role(:admin)
5
+ # role(:admin) << role(:user)
6
+ ## ->
7
+ ## root has root, admin, user
8
+ ## admin has admin, user
9
+ ## user has user
10
+ end
@@ -0,0 +1,5 @@
1
+ module RolifyHier
2
+ class Engine < ::Rails::Engine
3
+ config.autoload_paths << File.expand_path("../../", __FILE__)
4
+ end
5
+ 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
@@ -0,0 +1,3 @@
1
+ module RolifyHier
2
+ VERSION = "0.0.2".freeze
3
+ end
@@ -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: []