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 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: []