eaco 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/.travis.yml +31 -3
- data/Appraisals +11 -1
- data/CHANGELOG.md +17 -0
- data/features/enterprise_authorization.feature +5 -1
- data/features/step_definitions/controller_steps.rb +10 -2
- data/features/support/env.rb +1 -0
- data/gemfiles/rails_3.2.gemfile +2 -2
- data/gemfiles/rails_4.0.gemfile +1 -1
- data/gemfiles/rails_4.1.gemfile +1 -1
- data/gemfiles/rails_4.2.gemfile +1 -1
- data/gemfiles/rails_5.0.gemfile +8 -0
- data/gemfiles/rails_5.1.gemfile +8 -0
- data/lib/eaco/adapters/active_record/compatibility.rb +10 -12
- data/lib/eaco/adapters/active_record/compatibility/sanitized.rb +22 -0
- data/lib/eaco/adapters/active_record/compatibility/v50.rb +25 -0
- data/lib/eaco/adapters/active_record/compatibility/v51.rb +30 -0
- data/lib/eaco/adapters/active_record/postgres_jsonb.rb +1 -1
- data/lib/eaco/controller.rb +6 -1
- data/lib/eaco/cucumber/active_record.rb +4 -2
- data/lib/eaco/dsl/acl.rb +2 -2
- data/lib/eaco/railtie.rb +8 -2
- data/lib/eaco/rake/default_task.rb +0 -1
- data/lib/eaco/rspec.rb +13 -0
- data/lib/eaco/version.rb +1 -1
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 956832fb8b74408d7ced40a87cd50c0e0ec92f41
|
4
|
+
data.tar.gz: 5dc7cc945adff2ceb6ced5c780be61f149ad95a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adf19b59716224cd22e09e703bf1535a2b9443df77b2d6c8e42294785af8bb8a12c5f6c82c6b58e7fcaa9cc79ae5425faf3417c94940a972c0f179572ef50927
|
7
|
+
data.tar.gz: 56c7b99cb00d0f4bb36bd646abf1ad000ba6a82a9d3f52747aa1743ee59ebf88aa6fd99a1f3390a4871ebbed53789d451712ef5a619126db53dce7e5a4e079e6
|
data/.travis.yml
CHANGED
@@ -1,13 +1,41 @@
|
|
1
1
|
rvm:
|
2
|
-
- 2.1
|
3
|
-
- 2.2
|
4
|
-
- 2.3.
|
2
|
+
- 2.1.10
|
3
|
+
- 2.2.7
|
4
|
+
- 2.3.4
|
5
|
+
- 2.4.1
|
5
6
|
|
6
7
|
gemfile:
|
7
8
|
- gemfiles/rails_3.2.gemfile
|
8
9
|
- gemfiles/rails_4.0.gemfile
|
9
10
|
- gemfiles/rails_4.1.gemfile
|
10
11
|
- gemfiles/rails_4.2.gemfile
|
12
|
+
- gemfiles/rails_5.0.gemfile
|
13
|
+
- gemfiles/rails_5.1.gemfile
|
14
|
+
|
15
|
+
matrix:
|
16
|
+
exclude:
|
17
|
+
- rvm: 2.1.10
|
18
|
+
gemfile: gemfiles/rails_5.0.gemfile
|
19
|
+
- rvm: 2.1.10
|
20
|
+
gemfile: gemfiles/rails_5.1.gemfile
|
21
|
+
|
22
|
+
- rvm: 2.3.4
|
23
|
+
gemfile: gemfiles/rails_3.2.gemfile
|
24
|
+
- rvm: 2.3.4
|
25
|
+
gemfile: gemfiles/rails_4.0.gemfile
|
26
|
+
- rvm: 2.3.4
|
27
|
+
gemfile: gemfiles/rails_4.1.gemfile
|
28
|
+
- rvm: 2.3.4
|
29
|
+
gemfile: gemfiles/rails_4.2.gemfile
|
30
|
+
|
31
|
+
- rvm: 2.4.1
|
32
|
+
gemfile: gemfiles/rails_3.2.gemfile
|
33
|
+
- rvm: 2.4.1
|
34
|
+
gemfile: gemfiles/rails_4.0.gemfile
|
35
|
+
- rvm: 2.4.1
|
36
|
+
gemfile: gemfiles/rails_4.1.gemfile
|
37
|
+
- rvm: 2.4.1
|
38
|
+
gemfile: gemfiles/rails_4.2.gemfile
|
11
39
|
|
12
40
|
sudo: false
|
13
41
|
|
data/Appraisals
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Test against 3.2 ->
|
1
|
+
# Test against 3.2 -> 5.1
|
2
2
|
#
|
3
3
|
appraise 'rails-3.2' do
|
4
4
|
gem 'rails', '~> 3.2.0'
|
@@ -20,3 +20,13 @@ appraise 'rails-4.2' do
|
|
20
20
|
gem 'rails', '~> 4.2.0'
|
21
21
|
gem 'pg'
|
22
22
|
end
|
23
|
+
|
24
|
+
appraise 'rails-5.0' do
|
25
|
+
gem 'rails', '~> 5.0.0'
|
26
|
+
gem 'pg'
|
27
|
+
end
|
28
|
+
|
29
|
+
appraise 'rails-5.1' do
|
30
|
+
gem 'rails', '~> 5.1.0'
|
31
|
+
gem 'pg'
|
32
|
+
end
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/) and this
|
6
|
+
project adheres to [Semantic Versioning](http://semver.org/)
|
7
|
+
|
8
|
+
## 1.1.1 - 2017-03-08
|
9
|
+
|
10
|
+
### Fixed
|
11
|
+
* Fix ActionDispatch::Reloader.to_prepare deprecation
|
12
|
+
|
13
|
+
## 1.1.0 - 2016-09-27
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
* Add support for Rails 5.
|
@@ -199,7 +199,11 @@ Feature: Role-based, flexible authorization
|
|
199
199
|
Scenario: Authorizing a controller
|
200
200
|
When I have an authorized Controller defined as
|
201
201
|
"""
|
202
|
-
|
202
|
+
if ActionPack::VERSION::MAJOR == 5
|
203
|
+
before_action :find_document
|
204
|
+
else
|
205
|
+
before_filter :find_document
|
206
|
+
end
|
203
207
|
|
204
208
|
authorize :show, [:document, :read ]
|
205
209
|
authorize :edit, [:document, :write]
|
@@ -14,9 +14,17 @@ When(/I invoke the Controller "(.+?)" action with query string "(.+?)"$/) do |ac
|
|
14
14
|
|
15
15
|
@controller.current_user = @current_user
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
#:nocov:
|
18
|
+
if Rails::VERSION::MAJOR < 5
|
19
|
+
@controller.request = ActionDispatch::TestRequest.new('QUERY_STRING' => query).tap do |request|
|
20
|
+
request.params.update('action' => @action_name)
|
21
|
+
end
|
22
|
+
else
|
23
|
+
@controller.request = ActionDispatch::TestRequest.create('QUERY_STRING' => query).tap do |request|
|
24
|
+
request.action = @action_name
|
25
|
+
end
|
19
26
|
end
|
27
|
+
#:nocov:
|
20
28
|
|
21
29
|
@controller.response = ActionDispatch::TestResponse.new
|
22
30
|
end
|
data/features/support/env.rb
CHANGED
data/gemfiles/rails_3.2.gemfile
CHANGED
data/gemfiles/rails_4.0.gemfile
CHANGED
data/gemfiles/rails_4.1.gemfile
CHANGED
data/gemfiles/rails_4.2.gemfile
CHANGED
@@ -10,8 +10,11 @@ module Eaco
|
|
10
10
|
autoload :V40, 'eaco/adapters/active_record/compatibility/v40.rb'
|
11
11
|
autoload :V41, 'eaco/adapters/active_record/compatibility/v41.rb'
|
12
12
|
autoload :V42, 'eaco/adapters/active_record/compatibility/v42.rb'
|
13
|
+
autoload :V50, 'eaco/adapters/active_record/compatibility/v50.rb'
|
14
|
+
autoload :V51, 'eaco/adapters/active_record/compatibility/v51.rb'
|
13
15
|
|
14
|
-
autoload :Scoped,
|
16
|
+
autoload :Scoped, 'eaco/adapters/active_record/compatibility/scoped.rb'
|
17
|
+
autoload :Sanitized, 'eaco/adapters/active_record/compatibility/sanitized.rb'
|
15
18
|
|
16
19
|
##
|
17
20
|
# Memoizes the given +model+ for later {#check!} calls.
|
@@ -23,7 +26,7 @@ module Eaco
|
|
23
26
|
end
|
24
27
|
|
25
28
|
##
|
26
|
-
# Checks whether
|
29
|
+
# Checks whether ActiveRecord::Base is compatible.
|
27
30
|
# Looks up the {#support_module} and includes it.
|
28
31
|
#
|
29
32
|
# @see #support_module
|
@@ -32,26 +35,21 @@ module Eaco
|
|
32
35
|
#
|
33
36
|
def check!
|
34
37
|
layer = support_module
|
35
|
-
|
38
|
+
::ActiveRecord::Base.instance_eval { include layer }
|
36
39
|
end
|
37
40
|
|
38
41
|
private
|
39
42
|
|
40
|
-
##
|
41
|
-
# @return [ActiveRecord::Base] associated with the model
|
42
|
-
#
|
43
|
-
def target
|
44
|
-
@model.base_class.superclass
|
45
|
-
end
|
46
|
-
|
47
43
|
##
|
48
44
|
# @return [String] the +ActiveRecord+ major and minor version numbers
|
49
45
|
#
|
50
46
|
# Example: "42" for 4.2
|
51
47
|
#
|
52
48
|
def active_record_version
|
53
|
-
|
54
|
-
|
49
|
+
[
|
50
|
+
::ActiveRecord::VERSION::MAJOR,
|
51
|
+
::ActiveRecord::VERSION::MINOR
|
52
|
+
].join
|
55
53
|
end
|
56
54
|
|
57
55
|
##
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Eaco
|
2
|
+
module Adapters
|
3
|
+
module ActiveRecord
|
4
|
+
class Compatibility
|
5
|
+
|
6
|
+
##
|
7
|
+
# Aliases `sanitize` as `connection.quote` for ActiveRecord >= 5.1.
|
8
|
+
#
|
9
|
+
module Sanitized
|
10
|
+
|
11
|
+
##
|
12
|
+
# Just returns +ActiveRecord::Base.connection.quote+.
|
13
|
+
#
|
14
|
+
def sanitize(d)
|
15
|
+
self.connection.quote(d)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Eaco
|
2
|
+
module Adapters
|
3
|
+
module ActiveRecord
|
4
|
+
class Compatibility
|
5
|
+
|
6
|
+
##
|
7
|
+
# Rails 5.0 support module.
|
8
|
+
#
|
9
|
+
# JSONB works correctly, but we need +.scoped+ so we revive it through
|
10
|
+
# the {Scoped} support module.
|
11
|
+
#
|
12
|
+
# @see Scoped
|
13
|
+
#
|
14
|
+
module V50
|
15
|
+
extend ActiveSupport::Concern
|
16
|
+
|
17
|
+
included do
|
18
|
+
extend Scoped
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Eaco
|
2
|
+
module Adapters
|
3
|
+
module ActiveRecord
|
4
|
+
class Compatibility
|
5
|
+
|
6
|
+
##
|
7
|
+
# Rails 5.1 support module.
|
8
|
+
#
|
9
|
+
# JSONB works correctly, but we need +.scoped+ so we revive it through
|
10
|
+
# the {Scoped} support module.
|
11
|
+
#
|
12
|
+
# @see Scoped
|
13
|
+
#
|
14
|
+
# Sanitize has dissapeared in favour of quote.
|
15
|
+
#
|
16
|
+
# @see Sanitized
|
17
|
+
#
|
18
|
+
module V51
|
19
|
+
extend ActiveSupport::Concern
|
20
|
+
|
21
|
+
included do
|
22
|
+
extend Scoped
|
23
|
+
extend Sanitized
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -25,7 +25,7 @@ module Eaco
|
|
25
25
|
def accessible_by(actor)
|
26
26
|
return scoped if actor.is_admin?
|
27
27
|
|
28
|
-
designators = actor.designators.map {|d|
|
28
|
+
designators = actor.designators.map {|d| sanitize(d) }
|
29
29
|
|
30
30
|
column = "#{connection.quote_table_name(table_name)}.acl"
|
31
31
|
|
data/lib/eaco/controller.rb
CHANGED
@@ -54,7 +54,12 @@ module Eaco
|
|
54
54
|
actions.each {|action| authorization_permissions.update(action => target)}
|
55
55
|
|
56
56
|
@_eaco_filter_installed ||= begin
|
57
|
-
|
57
|
+
if ActionPack::VERSION::MAJOR == 5
|
58
|
+
before_action :confront_eaco
|
59
|
+
else
|
60
|
+
before_filter :confront_eaco
|
61
|
+
end
|
62
|
+
|
58
63
|
true
|
59
64
|
end
|
60
65
|
end
|
@@ -95,11 +95,13 @@ module Eaco
|
|
95
95
|
#
|
96
96
|
# @raise [Errno::ENOENT] if the configuration file is not found.
|
97
97
|
#
|
98
|
+
# :nocov:
|
99
|
+
# This isn't ran by Travis as we set EACO_AR_CONFIG, so Coveralls raises
|
100
|
+
# a false positive.
|
98
101
|
def default_config_file
|
99
102
|
Pathname.new('features/active_record.yml').realpath
|
100
103
|
|
101
104
|
rescue Errno::ENOENT => error
|
102
|
-
# :nocov:
|
103
105
|
raise error.class.new, <<-EOF.squeeze(' ')
|
104
106
|
|
105
107
|
#{error.message}.
|
@@ -108,8 +110,8 @@ module Eaco
|
|
108
110
|
default location, or specify your configuration file location by
|
109
111
|
passing the `EACO_AR_CONFIG' environment variable.
|
110
112
|
EOF
|
111
|
-
# :nocov:
|
112
113
|
end
|
114
|
+
# :nocov:
|
113
115
|
|
114
116
|
##
|
115
117
|
# Establish ActiveRecord connection using the given configuration hash
|
data/lib/eaco/dsl/acl.rb
CHANGED
@@ -167,8 +167,8 @@ module Eaco
|
|
167
167
|
# @return [Class] the ORM base class.
|
168
168
|
#
|
169
169
|
def orm
|
170
|
-
if target.
|
171
|
-
|
170
|
+
if defined?(ActiveRecord::Base) && target.ancestors.include?(ActiveRecord::Base)
|
171
|
+
ActiveRecord::Base
|
172
172
|
else
|
173
173
|
target.superclass # Naive
|
174
174
|
end
|
data/lib/eaco/railtie.rb
CHANGED
@@ -18,13 +18,17 @@ module Eaco
|
|
18
18
|
# @!method parse_rules
|
19
19
|
#
|
20
20
|
initializer 'eaco.parse_rules' do
|
21
|
+
# :nocov:
|
21
22
|
Eaco.parse_default_rules_file!
|
22
23
|
|
23
24
|
unless Rails.configuration.cache_classes
|
24
|
-
|
25
|
-
Eaco.parse_default_rules_file!
|
25
|
+
if defined? ActiveSupport::Reloader
|
26
|
+
ActiveSupport::Reloader.to_prepare { Eaco.parse_default_rules_file! }
|
27
|
+
else
|
28
|
+
ActionDispatch::Reloader.to_prepare { Eaco.parse_default_rules_file! }
|
26
29
|
end
|
27
30
|
end
|
31
|
+
# :nocov:
|
28
32
|
end
|
29
33
|
|
30
34
|
##
|
@@ -33,6 +37,7 @@ module Eaco
|
|
33
37
|
# @!method install_controller_runtime
|
34
38
|
#
|
35
39
|
initializer 'eaco.install_controller_runtime' do
|
40
|
+
# :nocov:
|
36
41
|
ActiveSupport.on_load :action_controller do
|
37
42
|
|
38
43
|
ActionController::Base.instance_eval do
|
@@ -40,6 +45,7 @@ module Eaco
|
|
40
45
|
end
|
41
46
|
|
42
47
|
end
|
48
|
+
# :nocov:
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
data/lib/eaco/rspec.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
RSpec::Matchers.define :be_able_to do |*args|
|
2
|
+
match do |actor|
|
3
|
+
actor.can?(*args)
|
4
|
+
end
|
5
|
+
|
6
|
+
failure_message do |actor|
|
7
|
+
"expected to be able to #{args.map(&:inspect).join(" ")}"
|
8
|
+
end
|
9
|
+
|
10
|
+
failure_message_when_negated do |actor|
|
11
|
+
"expected not to be able to #{args.map(&:inspect).join(" ")}"
|
12
|
+
end
|
13
|
+
end
|
data/lib/eaco/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcello Barnaba
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -233,6 +233,7 @@ files:
|
|
233
233
|
- ".travis.yml"
|
234
234
|
- ".yardopts"
|
235
235
|
- Appraisals
|
236
|
+
- CHANGELOG.md
|
236
237
|
- Gemfile
|
237
238
|
- Guardfile
|
238
239
|
- LICENSE.txt
|
@@ -256,17 +257,22 @@ files:
|
|
256
257
|
- gemfiles/rails_4.0.gemfile
|
257
258
|
- gemfiles/rails_4.1.gemfile
|
258
259
|
- gemfiles/rails_4.2.gemfile
|
260
|
+
- gemfiles/rails_5.0.gemfile
|
261
|
+
- gemfiles/rails_5.1.gemfile
|
259
262
|
- lib/eaco.rb
|
260
263
|
- lib/eaco/acl.rb
|
261
264
|
- lib/eaco/actor.rb
|
262
265
|
- lib/eaco/adapters.rb
|
263
266
|
- lib/eaco/adapters/active_record.rb
|
264
267
|
- lib/eaco/adapters/active_record/compatibility.rb
|
268
|
+
- lib/eaco/adapters/active_record/compatibility/sanitized.rb
|
265
269
|
- lib/eaco/adapters/active_record/compatibility/scoped.rb
|
266
270
|
- lib/eaco/adapters/active_record/compatibility/v32.rb
|
267
271
|
- lib/eaco/adapters/active_record/compatibility/v40.rb
|
268
272
|
- lib/eaco/adapters/active_record/compatibility/v41.rb
|
269
273
|
- lib/eaco/adapters/active_record/compatibility/v42.rb
|
274
|
+
- lib/eaco/adapters/active_record/compatibility/v50.rb
|
275
|
+
- lib/eaco/adapters/active_record/compatibility/v51.rb
|
270
276
|
- lib/eaco/adapters/active_record/postgres_jsonb.rb
|
271
277
|
- lib/eaco/adapters/couchrest_model.rb
|
272
278
|
- lib/eaco/adapters/couchrest_model/couchdb_lucene.rb
|
@@ -299,6 +305,7 @@ files:
|
|
299
305
|
- lib/eaco/rake/default_task.rb
|
300
306
|
- lib/eaco/rake/utils.rb
|
301
307
|
- lib/eaco/resource.rb
|
308
|
+
- lib/eaco/rspec.rb
|
302
309
|
- lib/eaco/version.rb
|
303
310
|
- spec/eaco/acl_spec.rb
|
304
311
|
- spec/eaco/actor_spec.rb
|
@@ -333,7 +340,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
333
340
|
version: '0'
|
334
341
|
requirements: []
|
335
342
|
rubyforge_project:
|
336
|
-
rubygems_version: 2.4.5
|
343
|
+
rubygems_version: 2.4.5.1
|
337
344
|
signing_key:
|
338
345
|
specification_version: 4
|
339
346
|
summary: Authorization framework
|
@@ -364,4 +371,3 @@ test_files:
|
|
364
371
|
- spec/eaco/resource_spec.rb
|
365
372
|
- spec/eaco_spec.rb
|
366
373
|
- spec/spec_helper.rb
|
367
|
-
has_rdoc:
|