canable 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -13,11 +13,10 @@ begin
13
13
  gem.homepage = "http://github.com/jnunemaker/canable"
14
14
  gem.authors = ["John Nunemaker"]
15
15
  gem.version = Canable::Version
16
- gem.add_development_dependency "shoulda", "2.10.2"
17
- gem.add_development_dependency "mongo_mapper", "0.7"
18
- gem.add_development_dependency "mocha", "0.9.8"
16
+ gem.add_development_dependency "shoulda", "~> 2.10.2"
17
+ gem.add_development_dependency "mocha", "~> 0.9.8"
18
+ gem.add_development_dependency "mongo_mapper"
19
19
  gem.add_development_dependency "yard", ">= 0"
20
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
21
20
  end
22
21
  Jeweler::GemcutterTasks.new
23
22
  rescue LoadError
@@ -1,5 +1,5 @@
1
1
  module Canable
2
- Version = '0.1'
2
+ Version = '0.1.1'
3
3
 
4
4
  # Module that holds all the can_action? methods.
5
5
  module Cans; end
@@ -11,8 +11,7 @@ module Canable
11
11
  module Enforcers
12
12
  def self.included(controller)
13
13
  controller.class_eval do
14
- Canable.actions.each do |can, able|
15
- delegate "can_#{can}?", :to => :current_user
14
+ Canable.cans.each do |can|
16
15
  helper_method "can_#{can}?" if controller.respond_to?(:helper_method)
17
16
  hide_action "can_#{can}?" if controller.respond_to?(:hide_action)
18
17
  end
@@ -32,6 +31,10 @@ module Canable
32
31
  @actions
33
32
  end
34
33
 
34
+ def self.cans
35
+ actions.keys
36
+ end
37
+
35
38
  # Adds an action to actions and the correct methods to can and able modules.
36
39
  #
37
40
  # @param [Symbol] can_method The name of the can_[action]? method.
@@ -63,6 +66,10 @@ module Canable
63
66
 
64
67
  def self.add_enforcer_method(can)
65
68
  Enforcers.module_eval <<-EOM
69
+ def can_#{can}?(resource)
70
+ current_user.can_#{can}?(resource)
71
+ end
72
+
66
73
  def enforce_#{can}_permission(resource)
67
74
  raise Canable::Transgression unless can_#{can}?(resource)
68
75
  end
@@ -1,8 +1,8 @@
1
1
  require 'test/unit'
2
2
 
3
- gem 'mocha', '0.9.8'
4
- gem 'shoulda', '2.10.2'
5
- gem 'mongo_mapper', '0.7'
3
+ gem 'mocha', '~> 0.9.8'
4
+ gem 'shoulda', '~> 2.10.2'
5
+ gem 'mongo_mapper'
6
6
 
7
7
  require 'mocha'
8
8
  require 'shoulda'
@@ -13,26 +13,22 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
13
13
  require 'canable'
14
14
 
15
15
  class Test::Unit::TestCase
16
- end
17
-
18
- def Doc(name=nil, &block)
19
- klass = Class.new do
20
- include MongoMapper::Document
21
- set_collection_name "test#{rand(20)}"
22
-
23
- if name
24
- class_eval "def self.name; '#{name}' end"
25
- class_eval "def self.to_s; '#{name}' end"
16
+ def Doc(name=nil, &block)
17
+ klass = Class.new do
18
+ include MongoMapper::Document
19
+ set_collection_name "test#{rand(20)}"
20
+
21
+ if name
22
+ class_eval "def self.name; '#{name}' end"
23
+ class_eval "def self.to_s; '#{name}' end"
24
+ end
26
25
  end
27
- end
28
26
 
29
- klass.class_eval(&block) if block_given?
30
- klass.collection.remove
31
- klass
27
+ klass.class_eval(&block) if block_given?
28
+ klass.collection.remove
29
+ klass
30
+ end
32
31
  end
33
32
 
34
- test_dir = File.expand_path(File.dirname(__FILE__) + '/../tmp')
35
- FileUtils.mkdir_p(test_dir) unless File.exist?(test_dir)
36
-
37
- MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, {:logger => Logger.new(test_dir + '/test.log')})
33
+ MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
38
34
  MongoMapper.database = 'test'
@@ -22,5 +22,10 @@ class TestCanable < Test::Unit::TestCase
22
22
  Canable.add(:publish, :publishable)
23
23
  assert_equal :publishable, Canable.actions[:publish]
24
24
  end
25
+
26
+ should "know cans" do
27
+ assert_equal %w(create destroy publish update view),
28
+ Canable.cans.map(&:to_s).sort
29
+ end
25
30
  end
26
31
  end
@@ -7,9 +7,19 @@ class EnforcersTest < Test::Unit::TestCase
7
7
  include Canable::Enforcers
8
8
  attr_accessor :current_user, :article
9
9
 
10
+ # Overriding example
11
+ def can_update?(resource)
12
+ return false if current_user.nil?
13
+ super
14
+ end
15
+
10
16
  def show
11
17
  enforce_view_permission(article)
12
18
  end
19
+
20
+ def update
21
+ enforce_update_permission(article)
22
+ end
13
23
  end
14
24
 
15
25
  @article = mock('article')
@@ -28,5 +38,10 @@ class EnforcersTest < Test::Unit::TestCase
28
38
  @user.expects(:can_view?).with(@article).returns(false)
29
39
  assert_raises(Canable::Transgression) { @controller.show }
30
40
  end
41
+
42
+ should "be able to override can_xx? method" do
43
+ @controller.current_user = nil
44
+ assert_raises(Canable::Transgression) { @controller.update }
45
+ end
31
46
  end
32
47
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canable
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 1
9
+ version: 0.1.1
5
10
  platform: ruby
6
11
  authors:
7
12
  - John Nunemaker
@@ -9,49 +14,61 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-27 00:00:00 -05:00
17
+ date: 2010-06-23 00:00:00 -04:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: shoulda
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
- - - "="
25
+ - - ~>
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 10
30
+ - 2
23
31
  version: 2.10.2
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: mongo_mapper
27
32
  type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "="
32
- - !ruby/object:Gem::Version
33
- version: "0.7"
34
- version:
33
+ version_requirements: *id001
35
34
  - !ruby/object:Gem::Dependency
36
35
  name: mocha
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
40
38
  requirements:
41
- - - "="
39
+ - - ~>
42
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 9
44
+ - 8
43
45
  version: 0.9.8
44
- version:
46
+ type: :development
47
+ version_requirements: *id002
45
48
  - !ruby/object:Gem::Dependency
46
- name: yard
49
+ name: mongo_mapper
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
47
58
  type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
59
+ version_requirements: *id003
60
+ - !ruby/object:Gem::Dependency
61
+ name: yard
62
+ prerelease: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
50
64
  requirements:
51
65
  - - ">="
52
66
  - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
53
69
  version: "0"
54
- version:
70
+ type: :development
71
+ version_requirements: *id004
55
72
  description: Simple permissions that I have used on my last several projects so I figured it was time to abstract and wrap up into something more easily reusable.
56
73
  email: nunemaker@gmail.com
57
74
  executables: []
@@ -87,18 +104,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
104
  requirements:
88
105
  - - ">="
89
106
  - !ruby/object:Gem::Version
107
+ segments:
108
+ - 0
90
109
  version: "0"
91
- version:
92
110
  required_rubygems_version: !ruby/object:Gem::Requirement
93
111
  requirements:
94
112
  - - ">="
95
113
  - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
96
116
  version: "0"
97
- version:
98
117
  requirements: []
99
118
 
100
119
  rubyforge_project:
101
- rubygems_version: 1.3.5
120
+ rubygems_version: 1.3.6
102
121
  signing_key:
103
122
  specification_version: 3
104
123
  summary: Simple permissions that I have used on my last several projects so I figured it was time to abstract and wrap up into something more easily reusable.