canable 0.1 → 0.1.1

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/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.