credentials 2.2.1 → 2.2.2
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/VERSION +1 -1
- data/credentials.gemspec +4 -3
- data/lib/credentials/extensions/magic_methods.rb +28 -0
- data/lib/credentials/extensions/object.rb +7 -32
- data/lib/credentials/rulebook.rb +5 -1
- data/lib/credentials.rb +1 -0
- data/{init.rb → rails/init.rb} +0 -0
- data/spec/credentials_spec.rb +4 -0
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.2.
|
1
|
+
2.2.2
|
data/credentials.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{credentials}
|
8
|
-
s.version = "2.2.
|
8
|
+
s.version = "2.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matt Powell"]
|
12
|
-
s.date = %q{2009-11-
|
12
|
+
s.date = %q{2009-11-25}
|
13
13
|
s.description = %q{A generic actor/resource permission framework based on rules, not objects.}
|
14
14
|
s.email = %q{fauxparse@gmail.com.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,7 +24,6 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"credentials.gemspec",
|
27
|
-
"init.rb",
|
28
27
|
"install.rb",
|
29
28
|
"lib/credentials.rb",
|
30
29
|
"lib/credentials/allow_rule.rb",
|
@@ -32,9 +31,11 @@ Gem::Specification.new do |s|
|
|
32
31
|
"lib/credentials/errors.rb",
|
33
32
|
"lib/credentials/extensions/action_controller.rb",
|
34
33
|
"lib/credentials/extensions/configuration.rb",
|
34
|
+
"lib/credentials/extensions/magic_methods.rb",
|
35
35
|
"lib/credentials/extensions/object.rb",
|
36
36
|
"lib/credentials/rule.rb",
|
37
37
|
"lib/credentials/rulebook.rb",
|
38
|
+
"rails/init.rb",
|
38
39
|
"spec/.gitignore",
|
39
40
|
"spec/controllers/test_controller_spec.rb",
|
40
41
|
"spec/credentials_spec.rb",
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Credentials
|
2
|
+
module Extensions
|
3
|
+
# Allows you to use magic methods to test permissions.
|
4
|
+
# For example:
|
5
|
+
#
|
6
|
+
# class User
|
7
|
+
# credentials do |user|
|
8
|
+
# user.can :edit, :self
|
9
|
+
# end
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# user = User.new
|
13
|
+
# user.can_edit? user #=> true
|
14
|
+
module MagicMethods
|
15
|
+
def self.included(receiver) #:nodoc:
|
16
|
+
receiver.class_eval do
|
17
|
+
def method_missing(sym, *args)
|
18
|
+
if self.class != Object && self.class != Class && sym.to_s =~ /\Acan_(.*)\?\z/
|
19
|
+
can? $1.to_sym, *args
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -35,17 +35,19 @@ module Credentials
|
|
35
35
|
@credentials ||= Credentials::Rulebook.new(self)
|
36
36
|
if block_given?
|
37
37
|
@credentials.options.merge!(options) unless options.nil?
|
38
|
+
|
39
|
+
# Only include the magic methods for classes where 'credentials' is
|
40
|
+
# explicitly called with a block: otherwise, you get all kinds of
|
41
|
+
# RailsFails.
|
42
|
+
unless included_modules.include?(Credentials::Extensions::MagicMethods)
|
43
|
+
include Credentials::Extensions::MagicMethods
|
44
|
+
end
|
38
45
|
yield @credentials
|
39
46
|
else
|
40
47
|
raise ArgumentError, "you can only set options with a block" unless options.nil?
|
41
48
|
end
|
42
49
|
@credentials
|
43
50
|
end
|
44
|
-
|
45
|
-
def inherited_with_credentials(child_class) #:nodoc:
|
46
|
-
inherited_without_credentials(child_class) if child_class.respond_to? :inherited_without_credentials
|
47
|
-
child_class.instance_variable_set("@credentials", Rulebook.for(child_class))
|
48
|
-
end
|
49
51
|
end
|
50
52
|
|
51
53
|
# Returns true if the receiver has access to the specified resource or action.
|
@@ -54,35 +56,8 @@ module Credentials
|
|
54
56
|
end
|
55
57
|
alias_method :able_to?, :can?
|
56
58
|
|
57
|
-
# Allows you to use magic methods to test permissions.
|
58
|
-
# For example:
|
59
|
-
#
|
60
|
-
# class User
|
61
|
-
# credentials do |user|
|
62
|
-
# user.can :edit, :self
|
63
|
-
# end
|
64
|
-
# end
|
65
|
-
#
|
66
|
-
# user = User.new
|
67
|
-
# user.can_edit? user #=> true
|
68
|
-
def method_missing_with_credentials(sym, *args)
|
69
|
-
if sym.to_s =~ /\Acan_(.*)\?\z/
|
70
|
-
can? $1.to_sym, *args
|
71
|
-
else
|
72
|
-
method_missing_without_credentials sym, *args
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
59
|
def self.included(receiver) #:nodoc:
|
77
60
|
receiver.extend ClassMethods
|
78
|
-
|
79
|
-
receiver.send :alias_method, :method_missing_without_credentials, :method_missing
|
80
|
-
receiver.send :alias_method, :method_missing, :method_missing_with_credentials
|
81
|
-
|
82
|
-
class << receiver
|
83
|
-
alias_method :inherited_without_credentials, :inherited if respond_to? :inherited
|
84
|
-
alias_method :inherited, :inherited_with_credentials
|
85
|
-
end
|
86
61
|
end
|
87
62
|
end
|
88
63
|
end
|
data/lib/credentials/rulebook.rb
CHANGED
@@ -18,7 +18,11 @@ module Credentials
|
|
18
18
|
|
19
19
|
def initialize(klass)
|
20
20
|
self.klass = klass
|
21
|
-
@rules =
|
21
|
+
@rules = if klass.superclass.respond_to?(:credentials) && !klass.superclass.credentials.empty?
|
22
|
+
klass.superclass.credentials.rules.dup
|
23
|
+
else
|
24
|
+
[]
|
25
|
+
end
|
22
26
|
@options = {}
|
23
27
|
end
|
24
28
|
|
data/lib/credentials.rb
CHANGED
data/{init.rb → rails/init.rb}
RENAMED
File without changes
|
data/spec/credentials_spec.rb
CHANGED
@@ -50,6 +50,10 @@ describe Carnivore do
|
|
50
50
|
it "should not be able to eat another animal" do
|
51
51
|
@lion.should_not be_able_to :eat, @antelope
|
52
52
|
end
|
53
|
+
|
54
|
+
it "should be able to clean itself" do
|
55
|
+
@lion.should be_able_to :clean, @lion
|
56
|
+
end
|
53
57
|
end
|
54
58
|
|
55
59
|
describe "(hungry)" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: credentials
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Powell
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-25 00:00:00 +13:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -30,7 +30,6 @@ files:
|
|
30
30
|
- Rakefile
|
31
31
|
- VERSION
|
32
32
|
- credentials.gemspec
|
33
|
-
- init.rb
|
34
33
|
- install.rb
|
35
34
|
- lib/credentials.rb
|
36
35
|
- lib/credentials/allow_rule.rb
|
@@ -38,9 +37,11 @@ files:
|
|
38
37
|
- lib/credentials/errors.rb
|
39
38
|
- lib/credentials/extensions/action_controller.rb
|
40
39
|
- lib/credentials/extensions/configuration.rb
|
40
|
+
- lib/credentials/extensions/magic_methods.rb
|
41
41
|
- lib/credentials/extensions/object.rb
|
42
42
|
- lib/credentials/rule.rb
|
43
43
|
- lib/credentials/rulebook.rb
|
44
|
+
- rails/init.rb
|
44
45
|
- spec/.gitignore
|
45
46
|
- spec/controllers/test_controller_spec.rb
|
46
47
|
- spec/credentials_spec.rb
|