cantango 0.8.7 → 0.8.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +4 -5
- data/VERSION +1 -1
- data/cantango.gemspec +2 -2
- data/lib/cantango.rb +4 -0
- data/lib/cantango/configuration/hash_registry.rb +2 -3
- data/lib/cantango/configuration/permit_registry.rb +15 -0
- data/lib/cantango/configuration/permits.rb +2 -0
- data/lib/cantango/permission_engine/loader/base.rb +3 -1
- data/lib/cantango/permit_engine.rb +4 -1
- data/lib/cantango/permit_engine/builder/base.rb +5 -2
- data/lib/cantango/permit_engine/builder/special_permits.rb +1 -0
- data/lib/cantango/permit_engine/executor/abstract.rb +4 -0
- data/lib/cantango/permit_engine/executor/base.rb +3 -36
- data/lib/cantango/permit_engine/factory.rb +16 -5
- data/lib/cantango/permit_engine/finder.rb +38 -13
- data/lib/cantango/permits/account_permit.rb +20 -1
- data/lib/cantango/permits/account_permit/builder.rb +12 -2
- data/lib/cantango/permits/permit.rb +4 -2
- data/lib/cantango/permits/role_group_permit.rb +13 -0
- data/lib/cantango/permits/role_group_permit/builder.rb +6 -1
- data/lib/cantango/permits/role_permit.rb +14 -1
- data/lib/cantango/permits/role_permit/builder.rb +5 -0
- data/lib/cantango/permits/user_permit.rb +19 -1
- data/lib/cantango/permits/user_permit/builder.rb +13 -3
- metadata +33 -33
data/README.textile
CHANGED
@@ -35,13 +35,12 @@ Run bundler in a terminal/console from the folder of your Gemfile (root folder o
|
|
35
35
|
|
36
36
|
@$ bundle@
|
37
37
|
|
38
|
-
h2. Update Oct
|
38
|
+
h2. Update Oct 6, 2011
|
39
39
|
|
40
|
-
Version *0.8.
|
40
|
+
Version *0.8.8* has been released.
|
41
41
|
|
42
|
-
*
|
43
|
-
|
44
|
-
Now you can easily track which engines and permits are executed and which permits granted or declined certain abilities
|
42
|
+
* Fixed some bugs when using :user and :account permits
|
43
|
+
* Enhanced Permits debugging so you can now track the execution flow of the Permits engine.
|
45
44
|
|
46
45
|
h2. Quickstart
|
47
46
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.8
|
data/cantango.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cantango"
|
8
|
-
s.version = "0.8.
|
8
|
+
s.version = "0.8.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup", "Stanislaw Pankevich"]
|
12
|
-
s.date = "2011-10-
|
12
|
+
s.date = "2011-10-06"
|
13
13
|
s.description = "Define your permission rules as role- or role group specific permits.\nIntegrates well with multiple Devise user acounts.\nIncludes rules caching.\nStore permissions in yaml file or key-value store"
|
14
14
|
s.email = "kmandrup@gmail.com, s.pankevich@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/cantango.rb
CHANGED
@@ -32,12 +32,12 @@ module CanTango
|
|
32
32
|
|
33
33
|
def [] label
|
34
34
|
raise "Must be a label" if !label.kind_of_label?
|
35
|
-
registered[label]
|
35
|
+
registered[label.to_s]
|
36
36
|
end
|
37
37
|
|
38
38
|
def []= label, value
|
39
39
|
raise "Must be a label" if !label.kind_of_label?
|
40
|
-
registered[label] = value
|
40
|
+
registered[label.to_s] = value
|
41
41
|
end
|
42
42
|
|
43
43
|
def register hash
|
@@ -56,7 +56,6 @@ module CanTango
|
|
56
56
|
def default= hash
|
57
57
|
@default = Hashie::Mash.new hash
|
58
58
|
end
|
59
|
-
|
60
59
|
end
|
61
60
|
end
|
62
61
|
end
|
@@ -9,6 +9,21 @@ module CanTango
|
|
9
9
|
}
|
10
10
|
end
|
11
11
|
|
12
|
+
def registered_for type, name = nil
|
13
|
+
name ? registered_by(type)[name.to_s] : registered_by(type)
|
14
|
+
end
|
15
|
+
|
16
|
+
def registered_by type
|
17
|
+
send(type).registered
|
18
|
+
end
|
19
|
+
|
20
|
+
def all
|
21
|
+
[user, account, role, role_group]
|
22
|
+
end
|
23
|
+
|
24
|
+
def show_all
|
25
|
+
all.map(&:registered)
|
26
|
+
end
|
12
27
|
end
|
13
28
|
end
|
14
29
|
end
|
@@ -19,7 +19,9 @@ module CanTango
|
|
19
19
|
|
20
20
|
def register_permit_class(permit_name, permit_clazz, permit_type, account_name)
|
21
21
|
registry = account_name ? self.send(account_name.to_sym) : self
|
22
|
+
puts "Registering #{permit_type} permit: #{permit_name} of class #{permit_clazz}" if CanTango.debug?
|
22
23
|
registry.send(permit_type)[permit_name] = permit_clazz
|
24
|
+
puts registry.send(permit_type).inspect if CanTango.debug?
|
23
25
|
end
|
24
26
|
|
25
27
|
def allowed candidate, actions, subjects, *extra_args
|
@@ -13,12 +13,14 @@ module CanTango
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def file_name= file
|
16
|
-
raise "Couldn't find permissions file: #{file}" if file.nil? || !File.file?(file)
|
16
|
+
raise "Couldn't find permissions file: #{file}. Either disable Permission engine or add this file." if file.nil? || !File.file?(file)
|
17
17
|
@file_name = file
|
18
18
|
end
|
19
19
|
|
20
20
|
def yml_content
|
21
21
|
YAML.load_file(file_name)
|
22
|
+
rescue
|
23
|
+
raise "Couldn't load permissions file: #{file_name}. Either disable Permission engine or add this file."
|
22
24
|
end
|
23
25
|
|
24
26
|
module ClassMethods
|
@@ -8,7 +8,10 @@ module CanTango
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def execute!
|
11
|
-
|
11
|
+
if CanTango.config.debug.on?
|
12
|
+
puts "Permit Engine executing..."
|
13
|
+
puts "No permits found!" if permits.empty?
|
14
|
+
end
|
12
15
|
# CanTango.config.permits.clear_executed! # should there be an option clear before each execution?
|
13
16
|
permits.each do |permit|
|
14
17
|
CanTango.config.permits.was_executed(permit, ability) if CanTango.config.debug.on?
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module CanTango
|
2
2
|
class PermitEngine < Engine
|
3
3
|
module Builder
|
4
|
+
class CreatePermitError < StandardError; end;
|
5
|
+
|
4
6
|
class Base
|
5
7
|
attr_accessor :ability
|
6
8
|
|
@@ -21,7 +23,7 @@ module CanTango
|
|
21
23
|
self.class.to_s.gsub(/::Builder/, '').constantize
|
22
24
|
end
|
23
25
|
|
24
|
-
# Tries to create a new permit for the given
|
26
|
+
# Tries to create a new permit for the given name
|
25
27
|
# If no permit Class can be found, it should return nil
|
26
28
|
# @param [Symbol] the name
|
27
29
|
# @return the permit Class or nil if not found
|
@@ -29,12 +31,13 @@ module CanTango
|
|
29
31
|
begin
|
30
32
|
permit_clazz(name).new ability
|
31
33
|
rescue RuntimeError => e
|
32
|
-
#
|
34
|
+
# puts "Error instantiating Permit instance for #{name}, cause: #{e}" if CanTango.debug?
|
33
35
|
nil
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
39
|
def permit_clazz name
|
40
|
+
puts "Permit Finder: #{finder}" if CanTango.debug?
|
38
41
|
finder.new(subject, name).get_permit
|
39
42
|
end
|
40
43
|
|
@@ -4,46 +4,13 @@ module CanTango
|
|
4
4
|
class Base < Abstract
|
5
5
|
# execute the permit
|
6
6
|
def execute!
|
7
|
-
|
8
|
-
#role_group_execution
|
9
|
-
end
|
10
|
-
|
11
|
-
# only execute the permit if the user has the role of the permit or is for any role
|
12
|
-
def role_execution
|
13
|
-
permit? if permit_for_user_role? || permit_for_user_group?
|
14
|
-
end
|
15
|
-
|
16
|
-
def permit_for_user_role?
|
17
|
-
subject_in_role? || role == :any
|
18
|
-
end
|
19
|
-
|
20
|
-
def role_group_execution
|
21
|
-
# could also use #user.is_member_of?
|
22
|
-
permit? if permit_for_user_group?
|
23
|
-
end
|
24
|
-
|
25
|
-
def permit_for_user_group?
|
26
|
-
subject_in_role_group? || false
|
7
|
+
valid_for?(subject) ? permit? : not_candidate_permit
|
27
8
|
end
|
28
9
|
|
29
10
|
protected
|
30
11
|
|
31
|
-
def
|
32
|
-
|
33
|
-
return subject.send(roles_list_meth).include? role if subject.respond_to? roles_list_meth
|
34
|
-
false
|
35
|
-
end
|
36
|
-
|
37
|
-
def subject_in_role_group?
|
38
|
-
return subject.send(has_role_group_meth, role) if subject.respond_to? has_role_group_meth
|
39
|
-
return subject.send(role_groups_list_meth).include? role if subject.respond_to? role_groups_list_meth
|
40
|
-
false
|
41
|
-
end
|
42
|
-
|
43
|
-
include CanTango::Helpers::RoleMethods
|
44
|
-
|
45
|
-
def role
|
46
|
-
permit.role
|
12
|
+
def not_candidate_permit
|
13
|
+
puts "Permit #{permit} is not valid for #{subject}" if CanTango.debug?
|
47
14
|
end
|
48
15
|
end
|
49
16
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module CanTango
|
2
2
|
class PermitEngine < Engine
|
3
3
|
class Factory
|
4
|
-
attr_accessor :ability
|
4
|
+
attr_accessor :ability
|
5
5
|
|
6
6
|
# creates the factory for the ability
|
7
7
|
# note that the ability contains the roles and role groups of the user (or account)
|
@@ -11,10 +11,21 @@ module CanTango
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def build!
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
puts "PermitEngine Factory: No permits could be built" if permits.empty? && CanTango.debug?
|
15
|
+
permits
|
16
|
+
end
|
17
|
+
|
18
|
+
def permits
|
19
|
+
@permits ||= builders.inject([]) do |permits, builder|
|
20
|
+
puts "++ Permit Builder: #{builder_class builder}"
|
21
|
+
built_permits = permits_built_with(builder)
|
22
|
+
puts "== Permits built: #{built_permits.size}"
|
23
|
+
permits = permits + built_permits if built_permits
|
24
|
+
end.flatten
|
25
|
+
end
|
26
|
+
|
27
|
+
def permits_built_with builder
|
28
|
+
create_builder(builder).build
|
18
29
|
end
|
19
30
|
|
20
31
|
def create_builder builder
|
@@ -6,7 +6,7 @@ module CanTango
|
|
6
6
|
|
7
7
|
def initialize user_account, name
|
8
8
|
@user_account = user_account
|
9
|
-
@name = name
|
9
|
+
@name = name.to_s.underscore.to_sym
|
10
10
|
end
|
11
11
|
|
12
12
|
def get_permit
|
@@ -17,37 +17,62 @@ module CanTango
|
|
17
17
|
protected
|
18
18
|
|
19
19
|
def find_error
|
20
|
-
"Permit for #{type} #{name} could not be loaded. Define
|
20
|
+
"Permit for #{type} #{name} could not be loaded. Define class: #{permit_class} (or wrapped in account scope)"
|
21
21
|
end
|
22
22
|
|
23
23
|
def retrieve_permit
|
24
|
-
@found_permit ||=
|
24
|
+
@found_permit ||= permits_to_try.first
|
25
|
+
end
|
26
|
+
|
27
|
+
def permits_to_try
|
28
|
+
[account_permit, permit].compact
|
25
29
|
end
|
26
30
|
|
27
|
-
def account_permit name
|
28
|
-
|
29
31
|
# TODO: User/Account cases should be handled somehow following is just interim measure
|
32
|
+
def account_permit
|
30
33
|
return nil if !user_account.class.name =~ /Account/
|
31
|
-
|
34
|
+
found = account_permits_by(type)[name]
|
35
|
+
debug_msg account_permit_msg(found)
|
36
|
+
found
|
32
37
|
rescue
|
33
38
|
nil
|
34
39
|
end
|
35
40
|
|
36
|
-
def
|
37
|
-
permits
|
41
|
+
def account_permit_msg found
|
42
|
+
found.nil? ? "no account permits found for #{name}" : "account permits registered for name: #{name} -> #{found}"
|
38
43
|
end
|
39
44
|
|
40
|
-
def
|
41
|
-
|
45
|
+
def permit
|
46
|
+
found = registered_permits.registered_for type, name
|
47
|
+
debug_msg permit_msg(found)
|
48
|
+
found
|
49
|
+
end
|
50
|
+
|
51
|
+
def debug_msg msg
|
52
|
+
puts msg if CanTango.debug?
|
53
|
+
end
|
54
|
+
|
55
|
+
def permit_msg found
|
56
|
+
found.nil? ? "no permits found for #{name}" : "permits registered for name: #{name} -> #{found}"
|
42
57
|
end
|
43
58
|
|
44
|
-
|
59
|
+
def account_permits_by type
|
60
|
+
account_permits_for_account.registered_for(type)
|
61
|
+
end
|
62
|
+
|
63
|
+
def permits_by type
|
64
|
+
registered_permits.registered_for(type)
|
65
|
+
end
|
66
|
+
|
67
|
+
def registered_permits
|
68
|
+
CanTango.config.permits
|
69
|
+
end
|
45
70
|
|
46
71
|
def account_permits_for_account
|
47
|
-
|
72
|
+
registered_account_permits.send(account)
|
48
73
|
end
|
49
74
|
|
50
|
-
def
|
75
|
+
def registered_account_permits
|
51
76
|
CanTango.config.permits
|
52
77
|
end
|
53
78
|
|
@@ -44,8 +44,27 @@ module CanTango
|
|
44
44
|
def permit?
|
45
45
|
super
|
46
46
|
end
|
47
|
-
end
|
48
47
|
|
48
|
+
def valid_for? subject
|
49
|
+
debug_invalid if CanTango.debug? && !(subject_name == account_name)
|
50
|
+
subject_name == account_name
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def debug_invalid
|
56
|
+
puts "Not a valid permit for subject: (account class) #{subject_account} != #{permit_account} (permit account)"
|
57
|
+
end
|
58
|
+
|
59
|
+
def subject_name
|
60
|
+
nm = subject.class.name.sub(/.*(Account)$/, '')
|
61
|
+
nm.underscore.to_sym
|
62
|
+
end
|
63
|
+
|
64
|
+
def account_name
|
65
|
+
self.class.account_type_name(self.class)
|
66
|
+
end
|
67
|
+
end
|
49
68
|
end
|
50
69
|
end
|
51
70
|
|
@@ -8,8 +8,18 @@ module CanTango
|
|
8
8
|
# @return [Array<RoleGroupPermit::Base>] the role permits built for this ability
|
9
9
|
def build
|
10
10
|
return [] if !user_account
|
11
|
-
|
12
|
-
[]
|
11
|
+
puts debug_msg if CanTango.debug?
|
12
|
+
[permit].compact
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def debug_msg
|
18
|
+
permit ? "Building AccountPermit for #{user_account}, permit: #{permit}" : "Not building any AccountPermit"
|
19
|
+
end
|
20
|
+
|
21
|
+
def permit
|
22
|
+
create_permit(user_account.class.to_s)
|
13
23
|
end
|
14
24
|
end
|
15
25
|
end
|
@@ -21,7 +21,6 @@ module CanTango
|
|
21
21
|
clazz.to_s.gsub(/^([A-Za-z]+).*/, '\1').underscore.to_sym # first part of class name
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
24
|
def self.account_name clazz
|
26
25
|
return nil if clazz.name == clazz.name.demodulize
|
27
26
|
clazz.name.gsub(/::.*/,'').gsub(/(.*)Permits/, '\1').underscore.to_sym
|
@@ -34,11 +33,14 @@ module CanTango
|
|
34
33
|
ability_sync!
|
35
34
|
end
|
36
35
|
|
36
|
+
def valid_for? subject
|
37
|
+
raise NotImplementedError
|
38
|
+
end
|
39
|
+
|
37
40
|
def category label
|
38
41
|
config.models.by_category label
|
39
42
|
end
|
40
43
|
|
41
|
-
|
42
44
|
def any reg_exp
|
43
45
|
config.models.by_reg_exp reg_exp
|
44
46
|
end
|
@@ -44,6 +44,19 @@ module CanTango
|
|
44
44
|
super
|
45
45
|
end
|
46
46
|
|
47
|
+
def valid_for? subject
|
48
|
+
in_role_group? subject
|
49
|
+
end
|
50
|
+
|
51
|
+
protected
|
52
|
+
|
53
|
+
include CanTango::Helpers::RoleMethods
|
54
|
+
|
55
|
+
def in_role_group? subject
|
56
|
+
return subject.send(has_role_group_meth, role) if subject.respond_to? has_role_group_meth
|
57
|
+
return subject.send(role_groups_list_meth).include? role if subject.respond_to? role_groups_list_meth
|
58
|
+
false
|
59
|
+
end
|
47
60
|
end
|
48
61
|
end
|
49
62
|
end
|
@@ -8,8 +8,13 @@ module CanTango
|
|
8
8
|
# builds a list of Permits for each role group of the current ability user (or account)
|
9
9
|
# @return [Array<RoleGroupPermit::Base>] the role group permits built for this ability
|
10
10
|
def build
|
11
|
-
|
11
|
+
if roles.empty?
|
12
|
+
puts "Not building any RoleGroupPermit" if CanTango.debug?
|
13
|
+
return [] if role_groups.empty?
|
14
|
+
end
|
15
|
+
|
12
16
|
role_groups.inject([]) do |permits, role_group|
|
17
|
+
puts "Building RoleGroupPermit for #{role_group}" if CanTango.debug?
|
13
18
|
(permits << create_permit(role_group)) if valid?(role_group)
|
14
19
|
permits
|
15
20
|
end.compact
|
@@ -44,7 +44,20 @@ module CanTango
|
|
44
44
|
def permit?
|
45
45
|
super
|
46
46
|
end
|
47
|
-
end
|
48
47
|
|
48
|
+
def valid_for? subject
|
49
|
+
in_role? subject
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
include CanTango::Helpers::RoleMethods
|
55
|
+
|
56
|
+
def in_role? subject
|
57
|
+
return subject.send(has_role_meth, role) if subject.respond_to? has_role_meth
|
58
|
+
return subject.send(roles_list_meth).include? role if subject.respond_to? roles_list_meth
|
59
|
+
false
|
60
|
+
end
|
61
|
+
end
|
49
62
|
end
|
50
63
|
end
|
@@ -5,7 +5,12 @@ module CanTango
|
|
5
5
|
# builds a list of Permits for each role of the current ability user (or account)
|
6
6
|
# @return [Array<RoleGroupPermit::Base>] the role permits built for this ability
|
7
7
|
def build
|
8
|
+
if roles.empty?
|
9
|
+
puts "Not building any RolePermit" if CanTango.debug?
|
10
|
+
return [] if roles.empty?
|
11
|
+
end
|
8
12
|
roles.inject([]) do |permits, role|
|
13
|
+
puts "Building RolePermit for #{role}" if CanTango.debug?
|
9
14
|
(permits << create_permit(role)) if valid?(role.to_sym)
|
10
15
|
permits
|
11
16
|
end.compact
|
@@ -45,8 +45,26 @@ module CanTango
|
|
45
45
|
def permit?
|
46
46
|
super
|
47
47
|
end
|
48
|
-
end
|
49
48
|
|
49
|
+
def valid_for? subject
|
50
|
+
debug_invalid if CanTango.debug? && !(subject_user == permit_user)
|
51
|
+
subject_user == permit_user
|
52
|
+
end
|
53
|
+
|
54
|
+
protected
|
55
|
+
|
56
|
+
def debug_invalid
|
57
|
+
puts "Not a valid permit for subject: (user class) #{subject_user} != #{permit_user} (permit user)"
|
58
|
+
end
|
59
|
+
|
60
|
+
def subject_user
|
61
|
+
subject.class.name.underscore.to_sym
|
62
|
+
end
|
63
|
+
|
64
|
+
def permit_user
|
65
|
+
self.class.user_type_name(self.class)
|
66
|
+
end
|
67
|
+
end
|
50
68
|
end
|
51
69
|
end
|
52
70
|
|
@@ -5,10 +5,20 @@ module CanTango
|
|
5
5
|
# class NoAvailableRoles < StandardError; end
|
6
6
|
|
7
7
|
# builds a list of Permits for each role of the current ability user (or account)
|
8
|
-
# @return [Array<
|
8
|
+
# @return [Array<Permit::Base>] the role permits built for this ability
|
9
9
|
def build
|
10
|
-
|
11
|
-
[]
|
10
|
+
puts debug_msg if CanTango.debug?
|
11
|
+
[permit].compact
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def debug_msg
|
17
|
+
permit ? "Building UserPermit for #{user}, permit: #{permit}" : "Not building any UserPermit"
|
18
|
+
end
|
19
|
+
|
20
|
+
def permit
|
21
|
+
@permit ||= create_permit(user.class.to_s)
|
12
22
|
end
|
13
23
|
end
|
14
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cantango
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-06 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &2155232980 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 3.0.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2155232980
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: cancan
|
28
|
-
requirement: &
|
28
|
+
requirement: &2155230180 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '1.4'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2155230180
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sugar-high
|
39
|
-
requirement: &
|
39
|
+
requirement: &2155228180 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 0.6.0
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2155228180
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: sweetloader
|
50
|
-
requirement: &
|
50
|
+
requirement: &2155225700 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 0.1.0
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2155225700
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: hashie
|
61
|
-
requirement: &
|
61
|
+
requirement: &2155224820 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0.4'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2155224820
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec-rails
|
72
|
-
requirement: &
|
72
|
+
requirement: &2155223860 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: 2.6.1
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *2155223860
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: forgery
|
83
|
-
requirement: &
|
83
|
+
requirement: &2155222500 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '0.3'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *2155222500
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: factory_girl
|
94
|
-
requirement: &
|
94
|
+
requirement: &2155220720 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *2155220720
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: sqlite3
|
105
|
-
requirement: &
|
105
|
+
requirement: &2155219360 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ! '>='
|
@@ -110,10 +110,10 @@ dependencies:
|
|
110
110
|
version: '0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *2155219360
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: sourcify
|
116
|
-
requirement: &
|
116
|
+
requirement: &2155217480 !ruby/object:Gem::Requirement
|
117
117
|
none: false
|
118
118
|
requirements:
|
119
119
|
- - ! '>='
|
@@ -121,10 +121,10 @@ dependencies:
|
|
121
121
|
version: '0'
|
122
122
|
type: :development
|
123
123
|
prerelease: false
|
124
|
-
version_requirements: *
|
124
|
+
version_requirements: *2155217480
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: dkastner-moneta
|
127
|
-
requirement: &
|
127
|
+
requirement: &2155216560 !ruby/object:Gem::Requirement
|
128
128
|
none: false
|
129
129
|
requirements:
|
130
130
|
- - ! '>='
|
@@ -132,10 +132,10 @@ dependencies:
|
|
132
132
|
version: '1.0'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
|
-
version_requirements: *
|
135
|
+
version_requirements: *2155216560
|
136
136
|
- !ruby/object:Gem::Dependency
|
137
137
|
name: rspec
|
138
|
-
requirement: &
|
138
|
+
requirement: &2155215080 !ruby/object:Gem::Requirement
|
139
139
|
none: false
|
140
140
|
requirements:
|
141
141
|
- - ! '>='
|
@@ -143,10 +143,10 @@ dependencies:
|
|
143
143
|
version: 2.4.0
|
144
144
|
type: :development
|
145
145
|
prerelease: false
|
146
|
-
version_requirements: *
|
146
|
+
version_requirements: *2155215080
|
147
147
|
- !ruby/object:Gem::Dependency
|
148
148
|
name: jeweler
|
149
|
-
requirement: &
|
149
|
+
requirement: &2155213680 !ruby/object:Gem::Requirement
|
150
150
|
none: false
|
151
151
|
requirements:
|
152
152
|
- - ! '>='
|
@@ -154,10 +154,10 @@ dependencies:
|
|
154
154
|
version: 1.6.4
|
155
155
|
type: :development
|
156
156
|
prerelease: false
|
157
|
-
version_requirements: *
|
157
|
+
version_requirements: *2155213680
|
158
158
|
- !ruby/object:Gem::Dependency
|
159
159
|
name: bundler
|
160
|
-
requirement: &
|
160
|
+
requirement: &2155211640 !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
162
|
requirements:
|
163
163
|
- - ! '>='
|
@@ -165,10 +165,10 @@ dependencies:
|
|
165
165
|
version: 1.0.1
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
|
-
version_requirements: *
|
168
|
+
version_requirements: *2155211640
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: rdoc
|
171
|
-
requirement: &
|
171
|
+
requirement: &2155209840 !ruby/object:Gem::Requirement
|
172
172
|
none: false
|
173
173
|
requirements:
|
174
174
|
- - ! '>='
|
@@ -176,7 +176,7 @@ dependencies:
|
|
176
176
|
version: '0'
|
177
177
|
type: :development
|
178
178
|
prerelease: false
|
179
|
-
version_requirements: *
|
179
|
+
version_requirements: *2155209840
|
180
180
|
description: ! 'Define your permission rules as role- or role group specific permits.
|
181
181
|
|
182
182
|
Integrates well with multiple Devise user acounts.
|
@@ -822,7 +822,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
822
822
|
version: '0'
|
823
823
|
segments:
|
824
824
|
- 0
|
825
|
-
hash:
|
825
|
+
hash: 4099714977896474782
|
826
826
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
827
827
|
none: false
|
828
828
|
requirements:
|