cantango 0.8.9 → 0.8.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.9
1
+ 0.8.9.1
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.9"
8
+ s.version = "0.8.9.1"
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-08"
12
+ s.date = "2011-10-11"
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
@@ -33,6 +33,15 @@ module CanTango
33
33
  config.permits.denied candidate, actions, subjects, *extra_args
34
34
  end
35
35
 
36
+ def debug_permits_registry
37
+ puts "permits registry:" << CanTango.config.permits.show_all.inspect
38
+ end
39
+
40
+ def debug_ability candidate, actions, subjects, *extra_args
41
+ puts "permits allowed:" << permits_allowed(candidate, actions, subjects, *extra_args).inspect
42
+ puts "permits denied:" << permits_denied(candidate, actions, subjects, *extra_args).inspect
43
+ end
44
+
36
45
  def clear_permits_executed!
37
46
  config.permits.clear_executed!
38
47
  end
@@ -18,6 +18,10 @@ module CanTango
18
18
  end
19
19
  end
20
20
 
21
+ def available_models
22
+ ar_models.map(&:name)
23
+ end
24
+
21
25
  private
22
26
 
23
27
  def try_model model_string
@@ -30,10 +34,6 @@ module CanTango
30
34
  available_models.grep reg_exp
31
35
  end
32
36
 
33
- def available_models
34
- ar_models.map(&:name)
35
- end
36
-
37
37
  def ar_models
38
38
  # Sugar-high #to_strings didn't work here!
39
39
  ActiveRecord::Base.descendants
@@ -1,7 +1,7 @@
1
1
  module CanTango
2
2
  module Rails
3
3
  module Helpers
4
- autoload_modules :ControllerHelper, :ViewHelper, :BaseHelper #, :RestHelper
4
+ autoload_modules :ControllerHelper, :ViewHelper, :BaseHelper, :RestHelper
5
5
  end
6
6
  end
7
7
  end
@@ -4,7 +4,7 @@ module CanTango
4
4
  module BaseHelper
5
5
  def self.included(base)
6
6
  include_apis(base)
7
- # base.send :include, CanTango::Rails::Helpers::RestHelper
7
+ base.send :include, CanTango::Rails::Helpers::RestHelper
8
8
  base.extend ClassMethods
9
9
  end
10
10
 
@@ -1,4 +1,4 @@
1
- class RestHelper
1
+ module CanTango::Rails::Helpers::RestHelper
2
2
  CanTango.config.models.available_models.each do |model|
3
3
  class_eval %{
4
4
  def delete_#{model}_path obj, options = {}
@@ -16,19 +16,19 @@ class RestHelper
16
16
  def link_to_delete obj, user_type, options = {}
17
17
  return unless send(:"#{user_type}_can?", :delete, obj)
18
18
  # use i18n translation on label
19
- link_to t(".delete"), send action_method(obj, :delete), obj, options
19
+ link_to t(".delete"), rest_action(obj, :delete, options)
20
20
  end
21
21
 
22
22
  def link_to_edit obj, user_type, options = {}
23
23
  return unless send(:"#{user_type}_can?", :edit, obj)
24
24
  # use i18n translation on label
25
- link_to t(".edit"), send action_method(obj, :edit), obj, options
25
+ link_to t(".edit"), rest_action(obj, :edit, options)
26
26
  end
27
27
 
28
28
  def link_to_view obj, user_type, options = {}
29
29
  return unless send(:"#{user_type}_can?", :edit, obj)
30
30
  # use i18n translation on label
31
- link_to t(".view"), send view_method(obj), obj, options)
31
+ link_to t(".view"), send(view_method(obj), obj, options)
32
32
  end
33
33
 
34
34
  protected
@@ -37,6 +37,10 @@ class RestHelper
37
37
  "#{obj.class.to_s.underscore}_path"
38
38
  end
39
39
 
40
+ def rest_action obj, action, options
41
+ send action_method(obj, :edit), obj, options
42
+ end
43
+
40
44
  def action_method obj, action
41
45
  "#{action}_#{obj.class.to_s.underscore}_path"
42
46
  end
@@ -11,6 +11,7 @@ module Cantango
11
11
  CAN_ACTIONS.each do |action|
12
12
  class_eval %{
13
13
  class_option :#{action}, :type => :array, :default => [], :desc => "Models allowed to #{action}"
14
+ class_option :not_#{action}, :type => :array, :default => [], :desc => "Models not allowed to #{action}"
14
15
  }
15
16
  end
16
17
 
@@ -30,7 +31,28 @@ module Cantango
30
31
  }
31
32
  end
32
33
 
34
+ CAN_ACTIONS.each do |action|
35
+ class_eval %{
36
+ def not_#{action}
37
+ options[:not_#{action}]
38
+ end
39
+ }
40
+ end
41
+
33
42
  def rules_logic
43
+ can_logic
44
+ cannot_logic
45
+ end
46
+
47
+ def can_logic
48
+ CAN_ACTIONS.map do |action|
49
+ send(action).map do |c|
50
+ "can(:#{action}, #{act_model(c)})"
51
+ end.join("\n ")
52
+ end.join("\n")
53
+ end
54
+
55
+ def cannot_logic
34
56
  CAN_ACTIONS.map do |action|
35
57
  send(action).map do |c|
36
58
  "can(:#{action}, #{act_model(c)})"
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.9
4
+ version: 0.8.9.1
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-08 00:00:00.000000000Z
13
+ date: 2011-10-11 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2158311360 !ruby/object:Gem::Requirement
17
+ requirement: &2158386120 !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: *2158311360
25
+ version_requirements: *2158386120
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cancan
28
- requirement: &2158310420 !ruby/object:Gem::Requirement
28
+ requirement: &2158385620 !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: *2158310420
36
+ version_requirements: *2158385620
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: sugar-high
39
- requirement: &2158309000 !ruby/object:Gem::Requirement
39
+ requirement: &2158385140 !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: *2158309000
47
+ version_requirements: *2158385140
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: sweetloader
50
- requirement: &2158307620 !ruby/object:Gem::Requirement
50
+ requirement: &2158384640 !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: *2158307620
58
+ version_requirements: *2158384640
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: hashie
61
- requirement: &2158305560 !ruby/object:Gem::Requirement
61
+ requirement: &2158384080 !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: *2158305560
69
+ version_requirements: *2158384080
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec-rails
72
- requirement: &2158304220 !ruby/object:Gem::Requirement
72
+ requirement: &2158383580 !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: *2158304220
80
+ version_requirements: *2158383580
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: forgery
83
- requirement: &2158302900 !ruby/object:Gem::Requirement
83
+ requirement: &2158383100 !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: *2158302900
91
+ version_requirements: *2158383100
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: factory_girl
94
- requirement: &2158302380 !ruby/object:Gem::Requirement
94
+ requirement: &2158382600 !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: *2158302380
102
+ version_requirements: *2158382600
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: sqlite3
105
- requirement: &2158301860 !ruby/object:Gem::Requirement
105
+ requirement: &2158382080 !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: *2158301860
113
+ version_requirements: *2158382080
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: sourcify
116
- requirement: &2158301260 !ruby/object:Gem::Requirement
116
+ requirement: &2158381580 !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: *2158301260
124
+ version_requirements: *2158381580
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: dkastner-moneta
127
- requirement: &2158296100 !ruby/object:Gem::Requirement
127
+ requirement: &2158381100 !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: *2158296100
135
+ version_requirements: *2158381100
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rspec
138
- requirement: &2158294880 !ruby/object:Gem::Requirement
138
+ requirement: &2158380580 !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: *2158294880
146
+ version_requirements: *2158380580
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: jeweler
149
- requirement: &2158293680 !ruby/object:Gem::Requirement
149
+ requirement: &2158380100 !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: *2158293680
157
+ version_requirements: *2158380100
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: bundler
160
- requirement: &2158292980 !ruby/object:Gem::Requirement
160
+ requirement: &2158379600 !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: *2158292980
168
+ version_requirements: *2158379600
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: rdoc
171
- requirement: &2158291700 !ruby/object:Gem::Requirement
171
+ requirement: &2158379000 !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: *2158291700
179
+ version_requirements: *2158379000
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: -3737746753132701377
825
+ hash: 575876604542998821
826
826
  required_rubygems_version: !ruby/object:Gem::Requirement
827
827
  none: false
828
828
  requirements: