access_schema 0.4.0 → 0.5.0

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/.gitignore CHANGED
@@ -5,3 +5,4 @@ pkg/*
5
5
  *.swp
6
6
  *.swo
7
7
  .rvmrc
8
+ coverage
data/Gemfile CHANGED
@@ -7,6 +7,7 @@ group :development, :test do
7
7
  gem "rake"
8
8
 
9
9
  gem "rspec"
10
+ gem "simplecov", :require => false
10
11
  gem "rack-test"
11
12
  gem "guard"
12
13
  gem "guard-rspec"
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
- # AccessSchema gem - ACL/plans for your app
1
+ # AccessSchema gem - ACL and domain policies for your app
2
2
 
3
- AccessSchema provides decoupled from Rails and ORM agnostic tool
4
- to define ACL schemas with realy simple DSL.
3
+ AccessSchema is tool to add ACL and domain policy rules to an application. It is framework/ORM agnostic and provides declarative DSL.
5
4
 
6
5
  Inspired by [ya_acl](https://github.com/kaize/ya_acl)
7
6
 
@@ -9,104 +8,23 @@ Inspired by [ya_acl](https://github.com/kaize/ya_acl)
9
8
  gem install access_schema
10
9
  ```
11
10
 
12
- ## An example of use
13
-
14
-
15
- ### Accessing from application code
16
-
17
- In Rails controllers we usualy have a current_user and we can
18
- add some default options in helpers:
19
-
20
- ```ruby
21
- #access_schema_helper.rb
22
-
23
- class AccessSchemaHelper
24
-
25
- def role
26
- AccessSchema.schema(:plans).with_options({
27
- :role => Rails.development? && params[:debug_role] || current_user.try(:role) || :none
28
- })
29
- end
30
-
31
- def acl
32
- AccessSchema.schema(:acl).with_options({
33
- :role => current_user.try(:role) || :none,
34
- :user_id => current_user.try(:id)
35
- })
36
- end
37
-
38
- end
39
-
40
- ```
41
-
42
- So at may be used in controllers:
43
-
44
- ```ruby
45
- acl.require! review, :edit
46
- role.require! review, :mark_privileged
47
-
48
- ```
49
-
50
- Or views:
51
-
52
- ```ruby
53
- - if role.allow? review, :add_photo
54
- = render :partial => "add_photo"
55
- ```
56
-
57
-
58
- On the ather side there are no any current_user accessible. In a Service Layer for
59
- example. So we have to pass extra options:
60
-
61
-
62
- ```ruby
63
- #./app/services/review_service.rb
64
-
65
- class ReviewService < BaseSevice
66
-
67
- def mark_privileged(review_id, options)
68
-
69
- review = Review.find(review_id)
70
-
71
- acl = AccessSchema.schema(:acl).with_options(:roles => options[:actor].roles)
72
- acl.require! review, :mark_privileged
73
-
74
- plans = AccessSchema.schema(:plans).with_options(:plans => options[:actor].plans)
75
- plans.require! review, :mark_privileged
76
-
77
- review.privileged = true
78
- review.save!
79
-
80
- end
81
-
82
- def update(review_id, attrs)
83
-
84
- review = Review.find(review_id)
85
-
86
- acl = AccessSchema.schema(:acl).with_options(:roles => options[:actor].roles)
87
- acl.require! review, :edit
88
-
89
- plans = AccessSchema.schema(:plan).with_options(:plan => options[:actor].plan)
90
- plans.require! review, :edit, :new_attrs => attrs
91
-
92
- review.update_attributes(attrs)
93
-
94
- end
95
-
96
- end
97
-
98
- ```
11
+ ## An example of use with Rails
99
12
 
100
13
  ### Definition
101
14
 
102
15
  ```ruby
103
- # config/roles.rb
16
+ # config/policy.rb
104
17
 
105
18
  roles do
19
+
20
+ # Tariff plans
106
21
  role :none
107
22
  role :bulb
108
23
  role :flower
109
24
  role :bouquet
25
+
26
+ # To allow admin violate tariff plan rules
27
+ role :admin
110
28
  end
111
29
 
112
30
  asserts do
@@ -123,9 +41,10 @@ example. So we have to pass extra options:
123
41
 
124
42
  resource "Review" do
125
43
 
126
- privilege :mark_privileged, [:flower, :bouquet]
44
+ privilege :mark_featured, [:flower, :bouquet]
127
45
 
128
- privilege :add_photo, [:bouquet] do
46
+ # Admin is able to add over limit
47
+ privilege :add_photo, [:bouquet, :admin] do
129
48
  assert :photo_limit, [:none], :limit => 1
130
49
  assert :photo_limit, [:bulb], :limit => 5
131
50
  assert :photo_limit, [:flower], :limit => 10
@@ -154,27 +73,30 @@ example. So we have to pass extra options:
154
73
 
155
74
  end
156
75
 
157
- resource "Review" do
76
+ resource "ReviewsController" do
77
+
78
+ privilege :index
79
+ privilege :show
158
80
 
159
81
  privilege :edit, [:admin] do
160
82
  assert :owner, [:none]
161
83
  end
162
84
 
85
+ privilege :update, [:admin] do
86
+ assert :owner, [:none]
87
+ end
88
+
163
89
  end
164
90
  ```
165
91
 
166
- ## Configuration
167
-
168
- Configured schema can be accessed with AccessSchema.schema(name)
169
- anywhere in app. Alternatively it can be assempled with ServiceLocator.
170
-
92
+ ### Configuration
171
93
 
172
94
  ```ruby
173
95
  #config/initializers/access_schema.rb
174
96
 
175
97
  AccessSchema.configure do
176
98
 
177
- schema :plans, AccessSchema.build_file('config/plans.rb')
99
+ schema :policy, AccessSchema.build_file('config/policy.rb')
178
100
  schema :acl, AccessSchema.build_file('config/acl.rb')
179
101
 
180
102
  logger Rails.logger
@@ -183,4 +105,132 @@ anywhere in app. Alternatively it can be assempled with ServiceLocator.
183
105
 
184
106
  ```
185
107
 
108
+ ### Accessing from Rails application code
109
+
110
+ Define a helper:
111
+
112
+ ```ruby
113
+ #access_schema_helper.rb
114
+
115
+ class AccessSchemaHelper
116
+
117
+ # Use ACL in controllers:
118
+ #
119
+ # before_filter { required! :reviews, :delete }
120
+ #
121
+ # and views
122
+ #
123
+ # - if can? :reviews, :delete, :subject => review
124
+ # = link_to "Delete", review_path(review)
125
+ #
126
+
127
+ def required!(route_method, action = nil, options = {})
128
+
129
+ url_options = send "hash_for_#{route_method}_path"
130
+ resource = "#{url_options[:controller].to_s.camelize}Controller"
131
+
132
+ privilege = action || url_options[:action]
133
+ acl.require! resource, privilege, options
134
+
135
+ end
136
+
137
+ def can?(*args)
138
+ required!(*args)
139
+ rescue AccessSchema::NotAllowed => e
140
+ false
141
+ else
142
+ true
143
+ end
144
+
145
+ def acl
146
+
147
+ AccessSchema.schema(:acl).with_options({
148
+ roles: current_roles,
149
+ user_id: current_user.try(:id)
150
+ })
151
+
152
+ end
153
+
154
+ # Use in controllers and views
155
+ # tarifF plans or other domain logic policies
156
+ #
157
+ # policy.allow? review, :add_photo
158
+ #
159
+
160
+
161
+ def policy
162
+
163
+ # Policy have to check actor roles and subject owner state (tariff plans for example)
164
+ # to evaluate permission. So we pass proc and deal with particular subject to
165
+ # calculate roles.
166
+ #
167
+ roles_calculator = proc do |options|
168
+
169
+ plan = options[:subject].try(:owner).try(:plan)
170
+ plan ||= [ current_user.try(:plan) || :none ]
171
+ current_roles | plan
172
+
173
+ end
174
+
175
+ AccessSchema.schema(:policy).with_options({
176
+ roles: roles_calculator,
177
+ user_id: current_user.try(:id)
178
+ })
179
+
180
+ end
181
+
182
+ end
183
+
184
+ ```
185
+
186
+ But there are no current_user method in a Service Layer! So pass an extra option - actor:
187
+
188
+ ```ruby
189
+ #./app/services/base_service.rb
190
+ class BaseService
191
+
192
+ def policy(actor)
193
+
194
+ roles_calculator = proc do |options|
195
+
196
+ plan = options[:subject].try(:owner).try(:plan)
197
+ plan ||= [ actor.try(:plan) || :none ]
198
+ current_roles | plan
199
+
200
+ end
201
+
202
+ AccessSchema.schema(:policy).with_options({
203
+ roles: roles_calculator,
204
+ user_id: actor.try(:id)
205
+ })
206
+ end
207
+
208
+ end
209
+
210
+ #./app/services/review_service.rb
211
+
212
+ class ReviewService < BaseSevice
213
+
214
+ def mark_featured(review_id, actor)
215
+
216
+ review = Review.find(review_id)
217
+ policy(actor).require! review, :mark_featured
218
+
219
+ review.featured = true
220
+ review.save!
221
+
222
+ end
223
+
224
+ def update(review_id, attrs, actor)
225
+
226
+ review = Review.find(review_id)
227
+ policy(actor).require! review, :edit, :attrs => attrs
228
+
229
+ review.update_attributes(attrs)
230
+
231
+ end
232
+
233
+ end
234
+
235
+ ```
186
236
 
@@ -3,7 +3,7 @@ module AccessSchema
3
3
  class AssertsBuilder < BasicBuilder
4
4
 
5
5
  def assert(name, vars = [], &block)
6
- assert = Assert.new(name.to_sym, vars.map(&:to_sym), &block)
6
+ assert = Assert.new(name.to_s, vars.map(&:to_sym), &block)
7
7
  schema.add_assert(assert)
8
8
  end
9
9
 
@@ -2,7 +2,7 @@ module AccessSchema
2
2
  class PrivilegeBuilder < BasicBuilder
3
3
 
4
4
  def assert(name, roles = [], options = {})
5
- expectation = Expectation.new(name.to_sym, roles.map(&:to_sym), options)
5
+ expectation = Expectation.new(name.to_s, roles.map(&:to_s), options)
6
6
  schema.add_expectation(expectation)
7
7
  end
8
8
 
@@ -2,7 +2,7 @@ module AccessSchema
2
2
  class ResourceBuilder < BasicBuilder
3
3
 
4
4
  def privilege(name, roles = [], &block)
5
- privilege = Privilege.new(name.to_sym, roles.map(&:to_sym))
5
+ privilege = Privilege.new(name.to_s, roles.map(&:to_s))
6
6
  if block_given?
7
7
  builder = PrivilegeBuilder.new(privilege)
8
8
  builder.instance_eval(&block)
@@ -2,7 +2,7 @@ module AccessSchema
2
2
  class RolesBuilder < BasicBuilder
3
3
 
4
4
  def role(role)
5
- schema.add_role(role.to_sym)
5
+ schema.add_role(role.to_s)
6
6
  end
7
7
 
8
8
  end
@@ -24,7 +24,7 @@ module AccessSchema
24
24
  end
25
25
 
26
26
  def resource(name, &block)
27
- resource = Resource.new(name.to_sym)
27
+ resource = Resource.new(name.to_s)
28
28
  builder = ResourceBuilder.new(resource)
29
29
  builder.instance_eval(&block)
30
30
  schema.add_resource(resource)
@@ -9,7 +9,7 @@ module AccessSchema
9
9
 
10
10
  class NotAllowedError < AccessError; end
11
11
 
12
- class NoRoleError < CheckError; end
12
+ class InvalidRolesError < CheckError; end
13
13
  class NoResourceError < CheckError; end
14
14
  class NoPrivilegeError < CheckError; end
15
15
 
@@ -11,7 +11,7 @@ module AccessSchema
11
11
  end
12
12
 
13
13
  def for?(roles)
14
- (@roles & roles).size > 0
14
+ @roles.empty? || (@roles & roles).size > 0
15
15
  end
16
16
 
17
17
  end
@@ -16,7 +16,11 @@ module AccessSchema
16
16
  def allow?(roles)
17
17
  (@roles & roles).size > 0 || begin
18
18
  checklist = @expectations.select { |exp| exp.for?(roles) }
19
- checklist.length > 0 && checklist.all? { |exp| yield(exp) }
19
+ if checklist.length > 0
20
+ checklist.all? { |exp| yield(exp) }
21
+ else
22
+ @roles.empty?
23
+ end
20
24
  end
21
25
  end
22
26
 
@@ -10,10 +10,6 @@ module AccessSchema
10
10
  @schema.roles
11
11
  end
12
12
 
13
- def plans
14
- @schema.plans
15
- end
16
-
17
13
  def allow?(*args)
18
14
  @schema.allow?(*normalize_args(args))
19
15
  end
@@ -34,14 +30,13 @@ module AccessSchema
34
30
 
35
31
  roles, options = case args[2]
36
32
  when Hash, nil
37
- [@options[:role] || @options[:plan], args[2] || {}]
33
+ [@options[:roles], args[2] || {}]
38
34
  else
39
35
  [args[2], args[3] || {}]
40
36
  end
41
37
 
42
38
  options_to_pass = @options.dup
43
- options_to_pass.delete :plan
44
- options_to_pass.delete :role
39
+ options_to_pass.delete :roles
45
40
 
46
41
  [resource, privilege, roles, options_to_pass.merge(options)]
47
42
  end
@@ -2,7 +2,6 @@ module AccessSchema
2
2
  class Schema
3
3
 
4
4
  attr_reader :roles
5
- alias :plans :roles
6
5
 
7
6
  def initialize
8
7
  @roles = []
@@ -39,27 +38,47 @@ module AccessSchema
39
38
  def normalize_args(args)
40
39
 
41
40
  options = args.last.is_a?(Hash) ? args.pop : {}
42
- privilege = args[1].to_sym
43
-
41
+ privilege = args[1].to_s
44
42
  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
- roles = normalize_roles_order(roles)
50
43
 
51
44
  case args[0]
52
45
  when String, Symbol
53
- resource = args[0].to_sym
54
- [resource, privilege, roles, options]
46
+ resource = args[0].to_s
55
47
  else
56
- resource = args[0].class.name.to_sym
57
- [resource, privilege, roles, options.merge(:subject => args[0])]
48
+ resource = args[0].class.name.to_s
49
+ options.merge!(:subject => args[0])
50
+ end
51
+
52
+ roles = calculate_roles(roles, options)
53
+
54
+ if (self.roles & roles).empty?
55
+ raise InvalidRolesError.new(:roles => roles)
56
+ end
57
+
58
+ roles = sort_roles(roles)
59
+
60
+ [resource, privilege, roles, options]
61
+ end
62
+
63
+ def calculate_roles(roles, check_options)
64
+
65
+ roles = if roles.respond_to?(:call)
66
+ roles.call(check_options.dup)
67
+ elsif !roles.respond_to?(:map)
68
+ [ roles ]
69
+ else
70
+ roles
71
+ end
72
+
73
+ unless roles.respond_to?(:map)
74
+ raise InvalidRolesError.new(:result => roles)
58
75
  end
59
76
 
77
+ roles.map(&:to_s)
78
+
60
79
  end
61
80
 
62
- def normalize_roles_order(roles)
81
+ def sort_roles(roles)
63
82
  @roles.select do |role|
64
83
  roles.include? role
65
84
  end
@@ -67,8 +86,8 @@ module AccessSchema
67
86
 
68
87
  def check!(resource_name, privilege_name, roles, options)
69
88
 
70
- resouce_name = resource_name.to_sym
71
- privilege_name = privilege_name.to_sym
89
+ resouce_name = resource_name.to_s
90
+ privilege_name = privilege_name.to_s
72
91
 
73
92
  resource = @resources[resource_name]
74
93
 
@@ -110,8 +129,6 @@ module AccessSchema
110
129
 
111
130
  end
112
131
 
113
- private
114
-
115
132
  def logger
116
133
  AccessSchema.config.logger
117
134
  end
@@ -1,3 +1,3 @@
1
1
  module AccessSchema
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -13,14 +13,14 @@ describe AccessSchema::Proxy do
13
13
  describe "#with_options" do
14
14
 
15
15
  before do
16
- @schema = @proxy.with_options(:plan => [:flower], :user_id => 1)
16
+ @schema = @proxy.with_options(:roles => [:flower], :user_id => 1)
17
17
  end
18
18
 
19
- it "allows to not specify plan for schema calls" do
19
+ it "allows to not specify roles for schema calls" do
20
20
  @schema.allow?("Review", :mark_featured).should be_true
21
21
  end
22
22
 
23
- it "but it accepts plan too" do
23
+ it "but it accepts roles too" do
24
24
  @schema.allow?("Review", :mark_featured, :flower).should be_true
25
25
  @schema.allow?("Review", :mark_featured, :none).should be_false
26
26
  end
@@ -25,9 +25,6 @@ describe AccessSchema::SchemaBuilder do
25
25
 
26
26
  end
27
27
 
28
-
29
- class Review; end
30
-
31
28
  describe AccessSchema::SchemaBuilder, "produced schema example" do
32
29
 
33
30
  before do
@@ -37,10 +34,10 @@ describe AccessSchema::SchemaBuilder, "produced schema example" do
37
34
  end
38
35
 
39
36
  it "creates roles" do
40
- @schema.roles.should == [:none, :bulb, :flower, :bouquet, :admin, :user]
37
+ @schema.roles.should ==%w(none bulb flower bouquet admin user)
41
38
  end
42
39
 
43
- context "when checking against plan 'none'" do
40
+ context "when checking against role 'none'" do
44
41
 
45
42
  it "does not allows to mark featured" do
46
43
  @schema.allow?(@review, :mark_featured, :none).should be_false
@@ -58,7 +55,7 @@ describe AccessSchema::SchemaBuilder, "produced schema example" do
58
55
 
59
56
  end
60
57
 
61
- context "when checking against plan 'bulb'" do
58
+ context "when checking against role 'bulb'" do
62
59
 
63
60
  it "does not allow to mark featured" do
64
61
  @schema.allow?(@review, :mark_featured, :bulb).should be_false
@@ -76,7 +73,7 @@ describe AccessSchema::SchemaBuilder, "produced schema example" do
76
73
 
77
74
  end
78
75
 
79
- context "when checking against plan 'flower'" do
76
+ context "when checking against role 'flower'" do
80
77
 
81
78
  it "allows to mark featured" do
82
79
  @schema.allow?(@review, :mark_featured, :flower).should be_true
@@ -94,7 +91,7 @@ describe AccessSchema::SchemaBuilder, "produced schema example" do
94
91
 
95
92
  end
96
93
 
97
- context "when checking against plan 'bouquet'" do
94
+ context "when checking against role 'bouquet'" do
98
95
 
99
96
  it "allows to mark featured" do
100
97
  @schema.allow?(@review, :mark_featured, :bouquet).should be_true
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe AccessSchema::Schema, "errors rising" do
3
+ describe AccessSchema::Schema do
4
4
 
5
5
  before do
6
6
  @schema = AccessSchema::SchemaBuilder.build_file('spec/schema_example.rb')
7
7
  end
8
8
 
9
- describe "#add_plan" do
9
+ describe "#add_role" do
10
10
 
11
11
  it "raises error if duplicate"
12
12
 
@@ -21,7 +21,7 @@ describe AccessSchema::Schema, "errors rising" do
21
21
  describe "#add_feature" do
22
22
 
23
23
  it "raises error if duplicate"
24
- it "raises error for invalid plan"
24
+ it "raises error for invalid role"
25
25
  it "raises error for invalid assert"
26
26
 
27
27
  end
@@ -37,15 +37,24 @@ describe AccessSchema::Schema, "errors rising" do
37
37
  it "raises exception on invalid role" do
38
38
  lambda {
39
39
  @schema.allow? "Review", :mark_featured, :invalid
40
- }.should raise_error(AccessSchema::NoRoleError)
40
+ }.should raise_error(AccessSchema::InvalidRolesError)
41
41
 
42
42
  lambda {
43
43
  @schema.allow? "Review", :mark_featured
44
- }.should raise_error(AccessSchema::NoRoleError)
44
+ }.should raise_error(AccessSchema::InvalidRolesError)
45
45
  end
46
46
 
47
47
  it "raises exception on invalid feature"
48
48
 
49
+ it "passes is no roles and asserts are specified in privilege definition" do
50
+ @schema.should be_allow("Review", :view, [:user])
51
+ end
52
+
53
+ it "checks assert if no roles specified in assert definition" do
54
+ @schema.should be_allow("Review", :echo_privilege, [:user], :result => true)
55
+ @schema.should_not be_allow("Review", :echo_privilege, [:user], :result => false)
56
+ end
57
+
49
58
  end
50
59
 
51
60
  describe "privilege union for multiple roles" do
@@ -68,6 +77,57 @@ describe AccessSchema::Schema, "errors rising" do
68
77
 
69
78
  end
70
79
 
80
+ describe "dynamic roles calculation" do
81
+
82
+ it "accepts proc as roles" do
83
+
84
+ lambda {
85
+ roles_calculator = proc { [:admin] }
86
+ @schema.allow? "Review", :update, roles_calculator
87
+ }.should_not raise_error
88
+
89
+ end
90
+
91
+ it "passes options hash with subject into proc" do
92
+
93
+ @passed_options = nil
94
+ roles_calculator = proc do |options|
95
+ @passed_options = options
96
+ [:admin]
97
+ end
98
+ subject = Review.new
99
+ @schema.allow? subject, :update, roles_calculator, :option1 => :value1
100
+ @passed_options.should be
101
+ @passed_options[:subject].should == subject
102
+ @passed_options[:option1].should == :value1
103
+
104
+ end
105
+
106
+ it "passes a copy of options hash" do
107
+
108
+ @passed_options = {:option1 => :value1}
109
+ roles_calculator = proc do |options|
110
+ options[:option1] = :changed_value
111
+ [:admin]
112
+ end
113
+
114
+ @schema.allow? "Review", :update, roles_calculator
115
+
116
+ @passed_options[:option1].should == :value1
117
+
118
+ end
119
+
120
+ it "raises error if none array returned from proc" do
121
+
122
+ lambda {
123
+ roles_calculator = proc { :admin }
124
+ @schema.allow? "Review", :update, roles_calculator
125
+ }.should raise_error(AccessSchema::InvalidRolesError)
126
+
127
+ end
128
+
129
+ end
130
+
71
131
  describe "#require!" do
72
132
 
73
133
  it "raises en error is feature is nt allowed"
@@ -84,13 +144,13 @@ describe AccessSchema::Schema, "errors rising" do
84
144
  it "logs check arguments with debug level" do
85
145
  @logger.log_only_level = "debug"
86
146
  @schema.allow? "Review", :mark_featured, :flower
87
- @logger.output.should == "AccessSchema: check PASSED: {:resource=>:Review, :privilege=>:mark_featured, :roles=>[:flower], :options=>{}}"
147
+ @logger.output.should == "AccessSchema: check PASSED: {:resource=>\"Review\", :privilege=>\"mark_featured\", :roles=>[\"flower\"], :options=>{}}"
88
148
  end
89
149
 
90
150
  it "logs check fail with info level" do
91
151
  @logger.log_only_level = "info"
92
152
  @schema.allow? "Review", :mark_featured, :none
93
- @logger.output.should == "AccessSchema: check FAILED: {:resource=>:Review, :privilege=>:mark_featured, :roles=>[:none], :options=>{}, :failed_asserts=>{}}"
153
+ @logger.output.should == "AccessSchema: check FAILED: {:resource=>\"Review\", :privilege=>\"mark_featured\", :roles=>[\"none\"], :options=>{}, :failed_asserts=>{}}"
94
154
  end
95
155
  end
96
156
 
@@ -19,6 +19,10 @@ asserts do
19
19
  false
20
20
  end
21
21
 
22
+ assert :echo, [:result] do
23
+ result
24
+ end
25
+
22
26
  end
23
27
 
24
28
  resource "Review" do
@@ -35,4 +39,10 @@ resource "Review" do
35
39
  assert :false, [:user]
36
40
  end
37
41
 
42
+ privilege :view
43
+
44
+ privilege :echo_privilege do
45
+ assert :echo
46
+ end
47
+
38
48
  end
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,14 @@
1
1
  require 'rspec'
2
+ Dir[File.expand_path('../support/**/*', __FILE__)].each { |f| require f }
3
+
4
+ require 'simplecov'
5
+
6
+ SimpleCov.start
7
+
2
8
  require 'access_schema'
3
9
 
4
10
  require 'access_schema/loggers/test_logger'
5
11
 
6
- Dir[File.expand_path('../support/**/*', __FILE__)].each { |f| require f }
7
12
 
8
13
  RSpec.configure do |config|
9
14
  end
@@ -0,0 +1,3 @@
1
+ class Review
2
+ end
3
+
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.4.0
4
+ version: 0.5.0
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-26 00:00:00.000000000 Z
12
+ date: 2012-04-01 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
@@ -55,6 +55,7 @@ files:
55
55
  - spec/access_schema_spec.rb
56
56
  - spec/schema_example.rb
57
57
  - spec/spec_helper.rb
58
+ - spec/support/review.rb
58
59
  homepage: ''
59
60
  licenses: []
60
61
  post_install_message:
@@ -69,7 +70,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
69
70
  version: '0'
70
71
  segments:
71
72
  - 0
72
- hash: -3729396007705609250
73
+ hash: -4292309596279283833
73
74
  required_rubygems_version: !ruby/object:Gem::Requirement
74
75
  none: false
75
76
  requirements:
@@ -78,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
79
  version: '0'
79
80
  segments:
80
81
  - 0
81
- hash: -3729396007705609250
82
+ hash: -4292309596279283833
82
83
  requirements: []
83
84
  rubyforge_project: access_schema
84
85
  rubygems_version: 1.8.16
@@ -94,3 +95,4 @@ test_files:
94
95
  - spec/access_schema_spec.rb
95
96
  - spec/schema_example.rb
96
97
  - spec/spec_helper.rb
98
+ - spec/support/review.rb