permissify 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -2
- data/lib/generators/permissify/ability/template/ability.rb +37 -34
- data/lib/permissify/ability.rb +46 -0
- data/spec/permissify/ability_spec.rb +42 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +16 -0
- metadata +7 -3
data/Gemfile
CHANGED
@@ -40,13 +40,15 @@
|
|
40
40
|
#
|
41
41
|
# gem 'authlogic', '>= 3.1.0'
|
42
42
|
|
43
|
-
source
|
43
|
+
source :rubygems
|
44
44
|
|
45
45
|
# gem "sqlite3"
|
46
46
|
# TODO : any activerecord version dependency?
|
47
47
|
# gem "activerecord", '~> 3.0.9', :require => "active_record"
|
48
|
-
gem "activerecord", :require => "active_record"
|
48
|
+
# gem "activerecord", :require => "active_record"
|
49
49
|
# gem "with_model", "~> 0.2.5"
|
50
50
|
# gem "meta_where"
|
51
51
|
|
52
52
|
gemspec
|
53
|
+
|
54
|
+
gem 'rspec'
|
@@ -1,39 +1,42 @@
|
|
1
|
-
# TODO :
|
1
|
+
# TODO : this could be an active record
|
2
|
+
# - needs to support a set of interfaces (all, all_for, others?)
|
2
3
|
class Ability
|
4
|
+
|
3
5
|
class << self
|
6
|
+
include Permissify::Abilities
|
4
7
|
include SystemFixtures::Abilities
|
5
|
-
@@abilities = []
|
6
|
-
|
7
|
-
def all; seed if @@abilities.empty?; @@abilities; end
|
8
|
-
|
9
|
-
def all_for(applicability_types)
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
def add_category(category, section, applicability=['Role'], actions=%w(View Create Update Delete), category_allows = :multiple)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
def create_permissions_hash(view_only_categories=[], remove_categories=[], applicability_types = 'Role')
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
def key_token(token); token.downcase.gsub('-','_').gsub(':','').gsub(' ',' ').gsub(' ','_'); end
|
31
|
-
def view_only(category); %w(create update delete).each{|action| @@permissions.delete("#{category}_#{action}")}; end
|
32
|
-
def remove(permission_prefix); @@permissions.keys.each{|key| @@permissions.delete(key) if key.starts_with?(permission_prefix)}; end
|
33
|
-
def add(key, category, section, action, applicability, number_of_values, position, default_values, admin_expression='', category_allows = :multiple)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
8
|
+
# @@abilities = []
|
9
|
+
#
|
10
|
+
# def all; seed if @@abilities.empty?; @@abilities; end
|
11
|
+
#
|
12
|
+
# def all_for(applicability_types)
|
13
|
+
# applicability_types = [applicability_types] if applicability_types.kind_of?(String)
|
14
|
+
# all.select{|a| (a[:applicability] & applicability_types) == applicability_types}
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# def add_category(category, section, applicability=['Role'], actions=%w(View Create Update Delete), category_allows = :multiple)
|
18
|
+
# actions = [actions] unless actions.kind_of?(Array)
|
19
|
+
# actions.collect do |action|
|
20
|
+
# add("#{key_token(category)}_#{key_token(action)}", category, section, action, applicability, 1, actions.index(action)+1, [false], '', category_allows)
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# def create_permissions_hash(view_only_categories=[], remove_categories=[], applicability_types = 'Role')
|
25
|
+
# @@permissions = {}
|
26
|
+
# all_for(applicability_types).each{|permission| @@permissions[permission[:key]] = {'0' => '1'}}
|
27
|
+
# view_only_categories.each{|category| view_only(category)}
|
28
|
+
# remove_categories.each{|category| remove(category)}
|
29
|
+
# @@permissions
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# private
|
33
|
+
# def key_token(token); token.downcase.gsub('-','_').gsub(':','').gsub(' ',' ').gsub(' ','_'); end
|
34
|
+
# def view_only(category); %w(create update delete).each{|action| @@permissions.delete("#{category}_#{action}")}; end
|
35
|
+
# def remove(permission_prefix); @@permissions.keys.each{|key| @@permissions.delete(key) if key.starts_with?(permission_prefix)}; end
|
36
|
+
# def add(key, category, section, action, applicability, number_of_values, position, default_values, admin_expression='', category_allows = :multiple)
|
37
|
+
# @@abilities << { :key => key, :category => category, :section => section, :action => action,
|
38
|
+
# :applicability => applicability, :number_of_values => number_of_values, :position => position,
|
39
|
+
# :default_values => default_values, :administration_expression => admin_expression, :category_allows => category_allows}
|
40
|
+
# end
|
38
41
|
end
|
39
42
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# TODO : this could be an active record
|
2
|
+
# - needs to support a set of interfaces (all, all_for, others?)
|
3
|
+
# - very specific hash structure
|
4
|
+
# - does this need to be a module?
|
5
|
+
module Permissify
|
6
|
+
module Ability
|
7
|
+
|
8
|
+
# class << self
|
9
|
+
# include SystemFixtures::Abilities
|
10
|
+
@@abilities = []
|
11
|
+
|
12
|
+
def clear; @@abilities = []; end
|
13
|
+
def all; seed if @@abilities.empty?; @@abilities; end
|
14
|
+
|
15
|
+
def all_for(applicability_types)
|
16
|
+
applicability_types = [applicability_types] if applicability_types.kind_of?(String)
|
17
|
+
all.select{|a| (a[:applicability] & applicability_types) == applicability_types}
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_category(category, section, applicability=['Role'], actions=%w(View Create Update Delete), category_allows = :multiple)
|
21
|
+
actions = [actions] unless actions.kind_of?(Array)
|
22
|
+
actions.collect do |action|
|
23
|
+
add("#{key_token(category)}_#{key_token(action)}", category, section, action, applicability, 1, actions.index(action)+1, [false], '', category_allows)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_permissions_hash(view_only_categories=[], remove_categories=[], applicability_types = 'Role')
|
28
|
+
@@permissions = {}
|
29
|
+
all_for(applicability_types).each{|permission| @@permissions[permission[:key]] = {'0' => '1'}}
|
30
|
+
view_only_categories.each{|category| view_only(category)}
|
31
|
+
remove_categories.each{|category| remove(category)}
|
32
|
+
@@permissions
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def key_token(token); token.downcase.gsub('-','_').gsub(':','').gsub(' ',' ').gsub(' ','_'); end
|
37
|
+
def view_only(category); %w(create update delete).each{|action| @@permissions.delete("#{category}_#{action}")}; end
|
38
|
+
def remove(permission_prefix); @@permissions.keys.each{|key| @@permissions.delete(key) if key.starts_with?(permission_prefix)}; end
|
39
|
+
def add(key, category, section, action, applicability, number_of_values, position, default_values, admin_expression='', category_allows = :multiple)
|
40
|
+
@@abilities << { :key => key, :category => category, :section => section, :action => action,
|
41
|
+
:applicability => applicability, :number_of_values => number_of_values, :position => position,
|
42
|
+
:default_values => default_values, :administration_expression => admin_expression, :category_allows => category_allows}
|
43
|
+
end
|
44
|
+
# end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ability do
|
4
|
+
describe "all" do
|
5
|
+
it "should return the correct number of abilities" do
|
6
|
+
Ability.all.size.should == 189
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# describe "all_for" do
|
11
|
+
# it "should return the correct number of abilities when invoked with 'Product' applicability type" do
|
12
|
+
# Ability.all_for('Product').size.should == 50
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# it "should return the correct number of abilities when invoked with 'Role' applicability type" do
|
16
|
+
# Ability.all_for('Role').size.should == 179
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# it "should return the correct number of abilities when invoked with both 'Product' and 'Role' applicability types" do
|
20
|
+
# Ability.all_for(%w(Product Role)).size.should == 40
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# it "should do the right set logic" do
|
24
|
+
# (Ability.all_for('Product') & Ability.all_for('Role')).should == Ability.all_for(%w(Product Role))
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# describe "create_permissions_hash" do
|
29
|
+
# it "should return the correct number of entries when full access to all Role permissions" do
|
30
|
+
# Ability.create_permissions_hash([], [], 'Role').keys.size.should == 179
|
31
|
+
# end
|
32
|
+
# it "should return the correct number of entries when full access to all Role permissions except view only to a single category" do
|
33
|
+
# Ability.create_permissions_hash(['loyalty_id'], [], 'Role').keys.size.should == 176
|
34
|
+
# end
|
35
|
+
# it "should return the correct number of entries when full access to all Role permissions except view only to a single category" do
|
36
|
+
# Ability.create_permissions_hash([], ['loyalty_id'], 'Role').keys.size.should == 175
|
37
|
+
# end
|
38
|
+
# it "should yield the expected difference" do
|
39
|
+
# (Ability.create_permissions_hash(['loyalty_id'], [], 'Role') - Ability.create_permissions_hash([], ['loyalty_id'], 'Role')).should == {"loyalty_id_view"=>{"0"=>"1"}}
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper.rb"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
require 'rubygems'
|
8
|
+
require 'bundler/setup'
|
9
|
+
|
10
|
+
require 'permissify'
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
14
|
+
config.run_all_when_everything_filtered = true
|
15
|
+
config.filter_run :focus
|
16
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: permissify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 14
|
10
|
+
version: 0.0.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Frederick Fix
|
@@ -101,12 +101,16 @@ files:
|
|
101
101
|
- lib/generators/permissify/views/template/roles_helper.rb
|
102
102
|
- lib/generators/permissify/views/USAGE
|
103
103
|
- lib/generators/permissify/views/views_generator.rb
|
104
|
+
- lib/permissify/ability.rb
|
104
105
|
- lib/permissify/aggregate.rb
|
105
106
|
- lib/permissify/controller.rb
|
106
107
|
- lib/permissify/model.rb
|
107
108
|
- lib/permissify/model_class.rb
|
108
109
|
- lib/permissify/roles.rb
|
109
110
|
- lib/permissify.rb
|
111
|
+
- spec/permissify/ability_spec.rb
|
112
|
+
- spec/spec.opts
|
113
|
+
- spec/spec_helper.rb
|
110
114
|
- CHANGELOG.rdoc
|
111
115
|
- Gemfile
|
112
116
|
- LICENSE
|