eaco 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e72095b7ec920c9b83c284fa3c7331253733bbc8
4
- data.tar.gz: 40f6b7c39dc3796bf3495f57d7f4708d233037f4
3
+ metadata.gz: 064c893c7bbedea1c0ef2d5b26e28e9595b1c195
4
+ data.tar.gz: b3113b80fbe9d98dd6a25d2581ff42ed984e7510
5
5
  SHA512:
6
- metadata.gz: a8834f93d09048dad12cb0afd5dcae646b8dccb73c193320e6a9eb1bb4a7292b642ef0a02ec9db437616d8ecda44295237853b849138a9157d6e59af8fe7945b
7
- data.tar.gz: f107e5cef842ee26018c0fd148ae9ea4d4d91a64f49763b892c56ffe108ee6cc30276661254dadca5b3297c3bf83ce1b7a3075b0ff92ae8411952a1423281994
6
+ metadata.gz: 4673c887e41e8ce7df0b4886b4aa1a88f3eaa0b39f30d014cf74ba6524fdcd5f8d426bcc472ae5cbaf5314c23f39f8e0da978bdead17883f938dd825ac7b756f
7
+ data.tar.gz: bb14983548c641806fe0929ec99e7752fbf3391c24c872469f3f72f41ec627a26b17990622046d76365ac94e3262fa058fadf73ac1de68206f976e0dd65a96a8
data/Guardfile CHANGED
@@ -14,7 +14,7 @@ guard :rspec, version: 3, cmd: 'rspec' do
14
14
  watch('spec/spec_helper.rb') { "spec" }
15
15
 
16
16
  # When a source changes run its unit spec.
17
- watch(%r{^lib/(.+)\.rb$}) {|m| "spec/#{m[1]}_spec.rb"
17
+ watch(%r{^lib/(.+)\.rb$}) {|m| "spec/#{m[1]}_spec.rb" }
18
18
  end
19
19
 
20
20
  guard :cucumber do
@@ -22,13 +22,13 @@ guard :cucumber do
22
22
  watch(%r{^features/.+\.feature$})
23
23
 
24
24
  # When support code changes, rerun all features.
25
- watch(%r{^features/support/.+$}) { 'features' }
25
+ watch(%r{^features/support/.+$}) { 'features' }
26
26
 
27
27
  # When a step definition for a feature changes, rerun the corresponding feature.
28
28
  watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
29
29
  end
30
30
 
31
- guard :shell do
32
- # Rerun scenarios when source code changes
33
- watch(%r{^lib/.+\.rb$}) { 'cucumber' }
34
- end
31
+ #guard :shell do
32
+ # # Rerun scenarios when source code changes
33
+ # watch(%r{^lib/.+\.rb$}) { 'cucumber' }
34
+ #end
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # Eaco
2
2
 
3
- [![Build Status](https://travis-ci.org/ifad/eaco.svg)](https://travis-ci.org/ifad/eaco) *currently writing specs*
3
+ [![Build Status](https://travis-ci.org/ifad/eaco.svg)](https://travis-ci.org/ifad/eaco)
4
+ [![Coverage Status](https://coveralls.io/repos/ifad/eaco/badge.svg)](https://coveralls.io/r/ifad/eaco) (*currently writing specs*)
4
5
  [![Code Climate](https://codeclimate.com/github/ifad/eaco/badges/gpa.svg)](https://codeclimate.com/github/ifad/eaco)
5
6
  [![Inline docs](http://inch-ci.org/github/ifad/eaco.svg?branch=master)](http://inch-ci.org/github/ifad/eaco/master)
7
+ [![Gem Version](https://badge.fury.io/rb/eaco.svg)](http://badge.fury.io/rb/eaco)
6
8
 
7
9
  Eacus, the holder of the keys of Hades, is an ACL-based authorization
8
10
  framework for Ruby.
@@ -222,4 +224,8 @@ focus on a single release, use `appraisal rails-X.Y rake`, where `X.Y` can be
222
224
  4. Push to the branch (`git push origin my-new-feature`)
223
225
  5. Create a new Pull Request
224
226
 
227
+ ## Denominazione d'Origine Controllata
228
+
229
+ This software is Made in :italy:.
230
+
225
231
  [eaco-e-telamone]: http://upload.wikimedia.org/wikipedia/commons/7/70/Aeacus_telemon.jpg "Aeacus telemon by user Ravenous at en.wikipedia.org - Public domain through Wikimedia Commons - http://commons.wikimedia.org/wiki/File:Aeacus_telemon.jpg#mediaviewer/File:Aeacus_telemon.jpg"
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  ["bundler", "~> 1.6"],
22
22
  "rake", "byebug", "guard", "yard", "appraisal",
23
23
  "rspec", "guard-rspec", "yard-rspec",
24
- "cucumber", "guard-cucumber"
24
+ "cucumber", "guard-cucumber", "coveralls"
25
25
 
26
26
  ].each {|gem| spec.add_development_dependency *gem }
27
27
  end
@@ -2,9 +2,10 @@ Feature: Rails integration
2
2
  The framework should play nice with the most recent major Rails version
3
3
 
4
4
  Background:
5
- Given I am connected to the database
6
- And I have a schema defined
5
+ Given I have a Document resource defined as
6
+ """
7
+ authorize $MODEL, using: :pg_jsonb
8
+ """
7
9
 
8
10
  Scenario:
9
- When I authorize the Document model
10
11
  Then I should be able to set an ACL on it
@@ -0,0 +1,33 @@
1
+ Feature: Role-Based authorization
2
+ Access to a Resource by an Actor is determined by the
3
+ ACL set on the Resource and the Designators the Actor
4
+ is eligible.
5
+
6
+ Background:
7
+ Given I have a Document resource defined as
8
+ """
9
+ authorize $MODEL, using: :pg_jsonb do
10
+ roles :reader, :writer
11
+
12
+ permissions do
13
+ reader :read
14
+ writer reader, :write
15
+ end
16
+ end
17
+ """
18
+ And I have an User actor defined as
19
+ """
20
+ actor $MODEL do
21
+ designators do
22
+ user from: :id
23
+ end
24
+ end
25
+ """
26
+ Given I have an actor named Bob
27
+ And I have an actor named Tom
28
+
29
+ Scenario:
30
+ And I have a confidential one named "Supa Dupa Fly"
31
+ And I grant Bob access as a reader in quality of user
32
+ Then Bob should be able to read it
33
+ And Tom should not be able to read it
@@ -0,0 +1,30 @@
1
+ Given(/I have an (\w+) actor defined as/) do |model_name, author_definition|
2
+ @actor_model = find_model(model_name)
3
+
4
+ eval_dsl author_definition, @actor_model
5
+ end
6
+
7
+ Given(/I have an actor named (\w+)/) do |actor_name|
8
+ actor = @actor_model.new
9
+ actor.name = actor_name
10
+
11
+ @actors ||= {}
12
+ @actors[actor_name] = actor
13
+ end
14
+
15
+ When(/I grant (\w+) access as a (\w+) in quality of (\w+)/) do |actor_name, role_name, designator|
16
+ actor = @actors.fetch(actor_name)
17
+ @resource.grant role_name, designator, actor
18
+ @resource.save!
19
+ end
20
+
21
+ Then(/(\w+) should be able to (\w+) it/) do |actor_name, permission_name|
22
+ actor = @actors.fetch(actor_name)
23
+ actor.can? permission_name, @resource
24
+ end
25
+
26
+ Then(/(\w+) should not be able to (\w+) it/) do |actor_name, permission_name|
27
+ actor = @actors.fetch(actor_name)
28
+ actor.cannot? permission_name, @resource
29
+ end
30
+
@@ -1,15 +1,19 @@
1
- When(/I authorize the (\w+) model/) do |model_name|
2
- @model = Eaco::Cucumber::ActiveRecord.const_get(model_name)
1
+ When(/I have a (\w+) resource defined as/) do |model_name, resource_definition|
2
+ @resource_model = find_model(model_name)
3
3
 
4
- Eaco::DSL.authorize @model, using: :pg_jsonb
4
+ eval_dsl resource_definition, @resource_model
5
+ end
6
+
7
+ When(/I have a confidential one named "([\w\s]+)"/) do |name|
8
+ @resource = @resource_model.new(name: name)
5
9
  end
6
10
 
7
11
  Then(/I should be able to set an ACL on it/) do
8
- instance = @model.new
12
+ instance = @resource_model.new
9
13
 
10
14
  instance.acl = {foo: :bar}
11
15
  instance.save!
12
- instance = @model.find(instance.id)
16
+ instance = @resource_model.find(instance.id)
13
17
 
14
- instance.acl == {foo: :bar} && instance.acl.class.kind_of?(Eaco::ACL)
18
+ instance.acl == {foo: :bar} && instance.acl.class.kind_of?(@resource_model.acl)
15
19
  end
@@ -1,9 +1,24 @@
1
1
  require 'bundler/setup'
2
2
  require 'byebug'
3
+
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+
3
7
  require 'eaco'
4
8
  require 'eaco/cucumber'
5
9
 
6
- # Create a whole new world
10
+ ##
11
+ # Create a whole new world.
12
+ # @see {World}
13
+ # @!method World
7
14
  World do
8
15
  Eaco::Cucumber::World.new
9
16
  end
17
+
18
+ ##
19
+ # Recreate the schema before each feature, to start fresh.
20
+ # @see {ActiveRecord.define_schema!}
21
+ # @!method Before
22
+ Before do
23
+ Eaco::Cucumber::ActiveRecord.define_schema!
24
+ end
@@ -25,7 +25,7 @@ module Eaco
25
25
  # @return [ACL] this ACL
26
26
  #
27
27
  def initialize(definition = {})
28
- definition.each do |designator, role|
28
+ (definition || {}).each do |designator, role|
29
29
  self[designator] = role.intern
30
30
  end
31
31
  end
@@ -81,6 +81,16 @@ module Eaco
81
81
  def can?(action, resource)
82
82
  resource.allows?(action, self)
83
83
  end
84
+
85
+ ##
86
+ # Opposite of {#can?}.
87
+ #
88
+ # @param (see #can?)
89
+ # @return (see #can?)
90
+ #
91
+ def cannot?(*args)
92
+ !can?(*args)
93
+ end
84
94
  end
85
95
 
86
96
  end
@@ -19,13 +19,21 @@ module Eaco
19
19
  end
20
20
 
21
21
  ##
22
- # Checks whether the model is compatible. Looks up the
23
- # {#support_module} and includes it.
22
+ # Checks whether this model is compatible.
23
+ #
24
+ # Looks up the {#support_module} and, if found, includes it in the
25
+ # target model.
24
26
  #
25
27
  # @see #support_module
28
+ #
29
+ # @return [nil]
30
+ #
26
31
  def check!
27
- layer = support_module
28
- base.instance_eval { include layer }
32
+ mod = support_module
33
+ return unless mod
34
+ base.instance_eval { include mod }
35
+
36
+ nil
29
37
  end
30
38
 
31
39
  private
@@ -51,18 +59,12 @@ module Eaco
51
59
  # Tries to look up the support module for the {#active_record_version}
52
60
  # in the {Compatibility} namespace.
53
61
  #
54
- # @return [Module] the support module
55
- #
56
- # @raise [Eaco::Error] if not found.
62
+ # @return [Module] the support module or nil if not required.
57
63
  #
58
64
  # @see check!
59
65
  #
60
66
  def support_module
61
- unless self.class.const_defined?(support_module_name)
62
- raise Eaco::Error, <<-EOF
63
- Unsupported Active Record version: #{active_record_version}
64
- EOF
65
- end
67
+ return unless self.class.const_defined?(support_module_name)
66
68
 
67
69
  self.class.const_get support_module_name
68
70
  end
@@ -11,7 +11,6 @@ module Eaco
11
11
  ::ActiveRecord::Schema.define(version: '2015022301') do
12
12
  create_table 'documents', force: true do |t|
13
13
  t.string :name
14
- t.text :contents
15
14
  t.column :acl, :jsonb
16
15
  end
17
16
 
@@ -13,7 +13,7 @@ module Eaco
13
13
  # @see Eaco::Cucumber::World
14
14
  #
15
15
  class User < ::ActiveRecord::Base
16
- autoload :Designators, 'lib/eaco/cucumber/designators.rb'
16
+ autoload :Designators, 'eaco/cucumber/active_record/user/designators.rb'
17
17
 
18
18
  has_many :positions
19
19
  has_many :departments, through: :positions
@@ -0,0 +1,18 @@
1
+ module Eaco
2
+ module Cucumber
3
+ module ActiveRecord
4
+ class User
5
+
6
+ ##
7
+ # The example {Designator}s for the {User} class.
8
+ #
9
+ # @see World
10
+ #
11
+ module Designators
12
+ autoload :User, 'eaco/cucumber/active_record/user/designators/user.rb'
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,48 @@
1
+ module Eaco
2
+ module Cucumber
3
+ module ActiveRecord
4
+ class User
5
+ module Designators
6
+
7
+ ##
8
+ # The simplest {Designator}. It resolves actors by their unique ID,
9
+ # such as an autoincrementing ID in a relational database.
10
+ #
11
+ # The ID is available as the {Designator#value}. If the Designator
12
+ # is instantiated with a live instance (see {Designator#initialize})
13
+ # then it is re-used and a query to the database is avoided.
14
+ #
15
+ # The designator string representation for user 42 is +"user:42"+.
16
+ #
17
+ class User < Eaco::Designator
18
+ ##
19
+ # @return [String] the {User}'s name.
20
+ #
21
+ def describe(*)
22
+ "User '%s'" % [target_user.name]
23
+ end
24
+
25
+ ##
26
+ # @return [Array] this very {User} wrapped in an +Array+.
27
+ #
28
+ def resolve
29
+ [target_user]
30
+ end
31
+
32
+ private
33
+ ##
34
+ # Looks up this user by ID, and memoizes it using the
35
+ # {Designator#instance=} accessor.
36
+ #
37
+ # @return [User] this very user.
38
+ #
39
+ def target_user
40
+ self.instance ||= ActiveRecord::User.find(self.value)
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -130,6 +130,37 @@ module Eaco
130
130
  # Belonging to a department is the Designator of type +:department+
131
131
  #
132
132
  class World
133
+
134
+ ##
135
+ # Set up the World:
136
+ #
137
+ # * Connect to ActiveRecord
138
+ #
139
+ def initialize
140
+ Eaco::Cucumber::ActiveRecord.connect!
141
+ end
142
+
143
+ ##
144
+ # @return [Class] a model in the {ActiveRecord} namespace.
145
+ #
146
+ def find_model(model_name)
147
+ Eaco::Cucumber::ActiveRecord.const_get(model_name)
148
+ end
149
+
150
+ ##
151
+ # Evaluates the given {Eaco::DSL} code, substituting the
152
+ # +$MODEL+ string with the given model name.
153
+ #
154
+ # @param code [String] the DSL code to eval
155
+ # @param model [Class] the model name to substitute
156
+ #
157
+ # @return [void]
158
+ #
159
+ def eval_dsl(code, model)
160
+ # Sub in place to print final code when running cucumber
161
+ code.sub! '$MODEL', model.name
162
+ Eaco.eval! code, '(feature)'
163
+ end
133
164
  end
134
165
 
135
166
  end
@@ -194,7 +194,7 @@ module Eaco
194
194
  attr_reader :value
195
195
 
196
196
  # The instance given to {Designator#initialize}
197
- attr_reader :instance
197
+ attr_accessor :instance
198
198
 
199
199
  ##
200
200
  # Should return an extended description for this designator. You can then
@@ -7,19 +7,23 @@ module Eaco
7
7
  # Block-less DSL to set up the {ACL} machinery onto an authorized {Resource}.
8
8
  #
9
9
  # * Defines an {ACL} subclass in the Resource namespace
10
+ # ({#define_acl_subclass})
11
+ #
10
12
  # * Defines syntactic sugar on the ACL to easily retrieve {Actor}s with a
11
- # specific Role
13
+ # specific Role ({#define_role_getters})
14
+ #
12
15
  # * Installs {ACL} objects persistance for the supported ORMs
13
- # * Installs the authorized collection extraction strategy +.accessible_by+
16
+ # ({#install_persistance})
17
+ #
18
+ # * Installs the authorized collection extraction strategy
19
+ # +.accessible_by+ ({#install_strategy})
14
20
  #
15
21
  class ACL < Base
16
22
 
17
23
  ##
18
- # Performs ACL setup on the target Resource class.
24
+ # Performs ACL setup on the target Resource model.
19
25
  #
20
- # @see #define_acl_subclass
21
- # @see #define_role_getters
22
- # @see #install_persistance
26
+ # @return [nil]
23
27
  #
24
28
  def initialize(*)
25
29
  super
@@ -27,6 +31,9 @@ module Eaco
27
31
  define_acl_subclass
28
32
  define_role_getters
29
33
  install_persistance
34
+ install_strategy
35
+
36
+ nil
30
37
  end
31
38
 
32
39
  private
@@ -74,13 +81,11 @@ module Eaco
74
81
  end
75
82
 
76
83
  ##
77
- # Sets up the persistance layer for ACLs (+#acl+ and +#acl=+) and the
78
- # authorized collection extraction strategy (+.accessible_by+).
84
+ # Sets up the persistance layer for ACLs (+#acl+ and +#acl=+).
79
85
  #
80
- # All these APIs can be implemented directly in your models, as
81
- # long as the +acl+ accessor accepts and returns the model's ACL
82
- # subclass (see {.define_acl_subclass}); and the +.accessible_by+
83
- # returns an +Enumerable+ collection.
86
+ # These APIs can be implemented directly in your Resource model, as long
87
+ # as the +acl+ accessor accepts and returns the Resource model's ACL
88
+ # subclass (see {.define_acl_subclass})
84
89
  #
85
90
  # See each adapter for the details of the extraction strategies
86
91
  # they provide.
@@ -99,7 +104,18 @@ module Eaco
99
104
  accessor on <#{target}> that accepts and returns a <#{target.acl}>.
100
105
  EOF
101
106
  end
107
+ end
102
108
 
109
+ ##
110
+ # Sets up the authorized collection extraction strategy
111
+ # (+.accessible_by+).
112
+ #
113
+ # This API can be implemented directly in your model, as long as
114
+ # +.accessible_by+ returns an +Enumerable+ collection.
115
+ #
116
+ # @return [void]
117
+ #
118
+ def install_strategy
103
119
  unless target.respond_to?(:accessible_by)
104
120
  strategies = adapter ? adapter.strategies.keys : []
105
121
 
@@ -102,7 +102,7 @@ module Eaco
102
102
  #
103
103
  def roles(*keys)
104
104
  target_eval do
105
- @_roles = keys.flatten.freeze
105
+ @_roles = Set.new(keys.flatten).freeze
106
106
  end
107
107
  end
108
108
 
@@ -122,7 +122,7 @@ module Eaco
122
122
  # @return [nil]
123
123
  #
124
124
  def croak(msg)
125
- $stderr.puts fancy(msg)
125
+ $stderr.puts fancy(with_appraisal(msg))
126
126
  end
127
127
 
128
128
  ##
@@ -135,6 +135,20 @@ module Eaco
135
135
  raise RuntimeError, fancy(msg)
136
136
  end
137
137
 
138
+ ##
139
+ # Adds the current appraisal name to msg, if present
140
+ #
141
+ # @param msg [String]
142
+ # @return [String]
143
+ #
144
+ def with_appraisal(msg)
145
+ if appraisal
146
+ msg = "%s \033[1;31m[%s]" % [msg, appraisal]
147
+ end
148
+
149
+ return msg
150
+ end
151
+
138
152
  ##
139
153
  # Makes +msg+ fancy.
140
154
  #
@@ -142,7 +156,18 @@ module Eaco
142
156
  # @return [String]
143
157
  #
144
158
  def fancy(msg)
145
- ">>>\n>>> EACO: #{msg}\n>>>\n"
159
+ "\n\033[1;32m>>>\n>>> EACO: \033[1;37m#{msg}\033[1;32m\n>>>\n\033[0m"
160
+ end
161
+
162
+ ##
163
+ # @return [String] the current appraisal name, or nil
164
+ #
165
+ def appraisal
166
+ return unless running_appraisals?
167
+
168
+ gemfile = ENV['BUNDLE_GEMFILE']
169
+
170
+ File.basename(gemfile, '.*') if gemfile
146
171
  end
147
172
 
148
173
  ##
@@ -37,7 +37,7 @@ module Eaco
37
37
  # @param role [Symbol] role name.
38
38
  #
39
39
  def role?(role)
40
- role.to_sym.in?(roles)
40
+ roles.include?(role.to_sym)
41
41
  end
42
42
 
43
43
  ##
@@ -65,8 +65,8 @@ module Eaco
65
65
  end
66
66
 
67
67
  ##
68
- # @return [Symbol] the given +actor+ role in the given resource, or +nil+ if no
69
- # access is granted.
68
+ # @return [Symbol] the given +actor+ role in the given resource, or
69
+ # +nil+ if no access is granted.
70
70
  #
71
71
  # @param actor_or_designator [Actor or Designator]
72
72
  # @param resource [Resource]
@@ -103,28 +103,36 @@ module Eaco
103
103
  ##
104
104
  # The permissions defined for each role.
105
105
  #
106
- # @see DSL::Resource#initialize
106
+ # @return [Hash] the defined permissions, keyed by +role+
107
+ #
108
+ # @see DSL::Resource::Permissions
107
109
  #
108
110
  def permissions
109
111
  end
110
112
 
111
113
  # The defined roles.
112
114
  #
113
- # @see DSL::Resource#initialize
115
+ # @return [Set]
116
+ #
117
+ # @see DSL::Resource
114
118
  #
115
119
  def roles
116
120
  end
117
121
 
118
122
  # Roles' priority map keyed by role symbol.
119
123
  #
120
- # @see DSL::Resource#initialize
124
+ # @return [Hash]
125
+ #
126
+ # @see DSL::Resource
121
127
  #
122
128
  def roles_priority
123
129
  end
124
130
 
125
131
  # Role labels map keyed by role symbol
126
132
  #
127
- # @see DSL::Resource#initialize
133
+ # @return [Hash]
134
+ #
135
+ # @see DSL::Resource
128
136
  #
129
137
  def roles_with_labels
130
138
  end
@@ -2,6 +2,6 @@ module Eaco
2
2
 
3
3
  # Current version
4
4
  #
5
- VERSION = '0.5.0'
5
+ VERSION = '0.6.0'
6
6
 
7
7
  end
@@ -1,7 +1,11 @@
1
1
  require 'rspec'
2
- require 'eaco'
3
2
  require 'byebug'
4
3
 
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+
7
+ require 'eaco'
8
+
5
9
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
6
10
  #
7
11
  RSpec.configure do |config|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eaco
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcello Barnaba
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-24 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: coveralls
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  description:
168
182
  email:
169
183
  - vjt@openssl.it
@@ -185,7 +199,8 @@ files:
185
199
  - features/active_record.example.yml
186
200
  - features/active_record.travis.yml
187
201
  - features/rails_integration.feature
188
- - features/step_definitions/database.rb
202
+ - features/role_based_authorization.feature
203
+ - features/step_definitions/actor_definition.rb
189
204
  - features/step_definitions/resource_authorization.rb
190
205
  - features/support/env.rb
191
206
  - gemfiles/rails_3.2.gemfile
@@ -213,6 +228,8 @@ files:
213
228
  - lib/eaco/cucumber/active_record/position.rb
214
229
  - lib/eaco/cucumber/active_record/schema.rb
215
230
  - lib/eaco/cucumber/active_record/user.rb
231
+ - lib/eaco/cucumber/active_record/user/designators.rb
232
+ - lib/eaco/cucumber/active_record/user/designators/user.rb
216
233
  - lib/eaco/cucumber/world.rb
217
234
  - lib/eaco/designator.rb
218
235
  - lib/eaco/dsl.rb
@@ -273,7 +290,8 @@ test_files:
273
290
  - features/active_record.example.yml
274
291
  - features/active_record.travis.yml
275
292
  - features/rails_integration.feature
276
- - features/step_definitions/database.rb
293
+ - features/role_based_authorization.feature
294
+ - features/step_definitions/actor_definition.rb
277
295
  - features/step_definitions/resource_authorization.rb
278
296
  - features/support/env.rb
279
297
  - spec/eaco/acl_spec.rb
@@ -1,7 +0,0 @@
1
- Given(/I am connected to the database/) do
2
- Eaco::Cucumber::ActiveRecord.connect!
3
- end
4
-
5
- Given(/I have a schema defined/) do
6
- Eaco::Cucumber::ActiveRecord.define_schema!
7
- end