access_schema 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,16 @@
1
1
  module AccessSchema
2
2
 
3
- class Error < RuntimeError
4
- end
3
+ class Error < RuntimeError; end
5
4
 
6
- class NotAlowedError < Error; end
5
+ class DefinitionError < Error; end
6
+ class CheckError < Error; end
7
+ class AccessError < CheckError; end
7
8
 
8
9
 
10
+ class NotAlowedError < AccessError; end
11
+
12
+ class NoRoleError < CheckError; end
13
+ class NoResourceError < CheckError; end
14
+ class NoPrivilegeError < CheckError; end
15
+
9
16
  end
@@ -39,10 +39,14 @@ module AccessSchema
39
39
  def normalize_args(args)
40
40
 
41
41
  options = args.last.is_a?(Hash) ? args.pop : {}
42
- roles = args[2]
43
- roles = roles.respond_to?(:map) ? roles.map(&:to_sym) : [roles.to_sym]
44
42
  privilege = args[1].to_sym
45
43
 
44
+ roles = args[2]
45
+ roles = roles.respond_to?(:map) ? roles.map(&:to_sym) : [roles && roles.to_sym]
46
+
47
+ raise NoRoleError.new if (self.roles & roles).empty?
48
+
49
+
46
50
  case args[0]
47
51
  when String, Symbol
48
52
  namespace = args[0].to_sym
@@ -56,13 +60,17 @@ module AccessSchema
56
60
 
57
61
  def check!(namespace_name, element_name, roles, options)
58
62
 
63
+ existent_element = false
59
64
 
60
65
  allowed = for_element(namespace_name, element_name) do |element|
66
+ existent_element = true
61
67
  element.allow?(roles) do |expectation|
62
68
  check_assert(expectation, options)
63
69
  end
64
70
  end
65
71
 
72
+ raise NoPrivilegeError.new(:privilege => element_name.to_sym) unless existent_element
73
+
66
74
  format_log_payload = lambda {
67
75
  [
68
76
  "namespace = '#{namespace_name}'",
@@ -88,16 +96,22 @@ module AccessSchema
88
96
 
89
97
  def for_element(namespace, element)
90
98
  ns = namespace.to_sym
91
- fn = element.to_sym
92
- allowed = elements_for(ns).any? do |element|
93
- if element.name == fn
99
+ en = element.to_sym
100
+
101
+ elements_for(ns).any? do |element|
102
+ if element.name == en
94
103
  yield(element)
95
104
  end
96
105
  end
106
+
97
107
  end
98
108
 
99
109
  def elements_for(namespace)
100
- @namespaces[namespace].elements
110
+ if @namespaces.has_key?(namespace)
111
+ @namespaces[namespace].elements
112
+ else
113
+ raise NoResourceError.new(:resource => namespace)
114
+ end
101
115
  end
102
116
 
103
117
  private
@@ -1,3 +1,3 @@
1
1
  module AccessSchema
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
@@ -28,7 +28,22 @@ describe AccessSchema::Schema, "errors rising" do
28
28
 
29
29
  describe "#allow?" do
30
30
 
31
- it "raises exception on invalid namespace"
31
+ it "raises exception on invalid namespace" do
32
+ lambda {
33
+ @schema.allow? "Invalid", :mark_featured, :none
34
+ }.should raise_error(AccessSchema::NoResourceError)
35
+ end
36
+
37
+ it "raises exception on invalid role" do
38
+ lambda {
39
+ @schema.allow? "Review", :mark_featured, :invalid
40
+ }.should raise_error(AccessSchema::NoRoleError)
41
+
42
+ lambda {
43
+ @schema.allow? "Review", :mark_featured
44
+ }.should raise_error(AccessSchema::NoRoleError)
45
+ end
46
+
32
47
  it "raises exception on invalid feature"
33
48
 
34
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: access_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-19 00:00:00.000000000 Z
12
+ date: 2012-03-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: AccessSchema is a tool for ACL or tariff plans schema definition and
15
15
  checks
@@ -69,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
69
69
  version: '0'
70
70
  segments:
71
71
  - 0
72
- hash: -3306335106501165569
72
+ hash: -3043700016320745078
73
73
  required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  version: '0'
79
79
  segments:
80
80
  - 0
81
- hash: -3306335106501165569
81
+ hash: -3043700016320745078
82
82
  requirements: []
83
83
  rubyforge_project: access_schema
84
84
  rubygems_version: 1.8.16