cantango 0.8.7 → 0.8.8

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.
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 5, 2011
38
+ h2. Update Oct 6, 2011
39
39
 
40
- Version *0.8.7* has been released.
40
+ Version *0.8.8* has been released.
41
41
 
42
- * Enhanced Permits and Engines debugging.
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.7
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.7"
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-05"
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
@@ -40,6 +40,10 @@ module CanTango
40
40
  def debug!
41
41
  config.debug.set :on
42
42
  end
43
+
44
+ def debug?
45
+ config.debug.on?
46
+ end
43
47
  end
44
48
  end
45
49
 
@@ -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
- puts "Permit Engine executing..." if CanTango.config.debug.on?
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 role
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
- #raise "Error instantiating Permit instance for role #{role}, cause #{e}"
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
 
@@ -3,6 +3,7 @@ module CanTango
3
3
  module Builder
4
4
  class SpecialPermits < Base
5
5
  def build
6
+ puts "Building special permits"
6
7
  special_permits.map{|role| create_permit(role)}.compact
7
8
  end
8
9
 
@@ -18,6 +18,10 @@ module CanTango
18
18
 
19
19
  protected
20
20
 
21
+ def valid_for? subject
22
+ permit.valid_for?(subject) if permit
23
+ end
24
+
21
25
  def options
22
26
  permit.options
23
27
  end
@@ -4,46 +4,13 @@ module CanTango
4
4
  class Base < Abstract
5
5
  # execute the permit
6
6
  def execute!
7
- role_execution
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 subject_in_role?
32
- return subject.send(has_role_meth, role) if subject.respond_to? has_role_meth
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, :builders
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
- @builders ||= builders.inject([]) do |res, builder|
15
- res << create_builder(builder).build
16
- res
17
- end.flatten.compact
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 either class: #{account_permit_class} or #{permit_class}"
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 ||= [account_permit(name), permit(name)].compact.first
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
- account_permits_for_account.send(type).registered[name]
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 permit name
37
- permits.send(type).registered[name]
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 permits
41
- CanTango.config.permits
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
- # TODO: make proper account touching
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
- account_permits.send(account)
72
+ registered_account_permits.send(account)
48
73
  end
49
74
 
50
- def account_permits
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
- # raise NoAvailableRoles, "no available roles are defined" if available_roles.empty?
12
- [] << create_permit(user_account.class.to_s)
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
- # raise NoAvailableRoleGroups, "no available roles groups are defined" if available_role_groups.empty?
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<RoleGroupPermit::Base>] the role permits built for this ability
8
+ # @return [Array<Permit::Base>] the role permits built for this ability
9
9
  def build
10
- # raise NoAvailableRoles, "no available roles are defined" if available_roles.empty?
11
- [] << create_permit(user.class.to_s)
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.7
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-05 00:00:00.000000000Z
13
+ date: 2011-10-06 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2156522760 !ruby/object:Gem::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: *2156522760
25
+ version_requirements: *2155232980
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cancan
28
- requirement: &2156521480 !ruby/object:Gem::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: *2156521480
36
+ version_requirements: *2155230180
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: sugar-high
39
- requirement: &2156520860 !ruby/object:Gem::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: *2156520860
47
+ version_requirements: *2155228180
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: sweetloader
50
- requirement: &2156520260 !ruby/object:Gem::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: *2156520260
58
+ version_requirements: *2155225700
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: hashie
61
- requirement: &2156519760 !ruby/object:Gem::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: *2156519760
69
+ version_requirements: *2155224820
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec-rails
72
- requirement: &2156519280 !ruby/object:Gem::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: *2156519280
80
+ version_requirements: *2155223860
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: forgery
83
- requirement: &2156518640 !ruby/object:Gem::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: *2156518640
91
+ version_requirements: *2155222500
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: factory_girl
94
- requirement: &2156518140 !ruby/object:Gem::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: *2156518140
102
+ version_requirements: *2155220720
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: sqlite3
105
- requirement: &2156517640 !ruby/object:Gem::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: *2156517640
113
+ version_requirements: *2155219360
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: sourcify
116
- requirement: &2156516960 !ruby/object:Gem::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: *2156516960
124
+ version_requirements: *2155217480
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: dkastner-moneta
127
- requirement: &2156516480 !ruby/object:Gem::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: *2156516480
135
+ version_requirements: *2155216560
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rspec
138
- requirement: &2156516000 !ruby/object:Gem::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: *2156516000
146
+ version_requirements: *2155215080
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: jeweler
149
- requirement: &2156515440 !ruby/object:Gem::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: *2156515440
157
+ version_requirements: *2155213680
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: bundler
160
- requirement: &2156514780 !ruby/object:Gem::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: *2156514780
168
+ version_requirements: *2155211640
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: rdoc
171
- requirement: &2156514300 !ruby/object:Gem::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: *2156514300
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: -1292324301236027620
825
+ hash: 4099714977896474782
826
826
  required_rubygems_version: !ruby/object:Gem::Requirement
827
827
  none: false
828
828
  requirements: