authoreyes 0.2.1 → 0.2.2

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: 6aa29842232cabee5e1657ec96b6b9a691073e7b
4
- data.tar.gz: 9ed619116c26b67aa9f3c9dd3d1e4d7480e82b7c
3
+ metadata.gz: 7be13cd0becb63d94264c6dfb29cbe2dd27aef29
4
+ data.tar.gz: d01d1328cf588685dbd013b12a2479988d21eb88
5
5
  SHA512:
6
- metadata.gz: e6191f4c46865ff31009ecdad20232240700e79a51be00f1ad73346b4f96415e404297ccae1a519cb5619a3f041d819294e43e85b41341ce93069bb154187a24
7
- data.tar.gz: 3580773d5184bcd805586440c15b48082dd9795c778d252d26e58b0ccf5e7ba3e5e1022117403a00386c00b905579ec18ea400e1c3d46b5c4ff4321335048d06
6
+ metadata.gz: f8deb67b53bfe0082cb034b72d02a8319b6903c901eed415f1c9eab5effad1b0e4618ba9e347f1aad0dd1098114cd0921df9977732de1ce73ea4f7977340da16
7
+ data.tar.gz: ad6eef6945afbf09c4efc5822184d7fff1b5d009ba875beb6988999497ee5bb74a581d46428fc124235f09bab19040b9fbccd6843dd113f30a2a524c44a0f76e
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  /test/dummy/tmp/
11
11
  /test/dummy/log/
12
12
  *.gem
13
+ *.log
@@ -3,3 +3,5 @@ language: ruby
3
3
  rvm:
4
4
  - 2.3.0
5
5
  before_install: gem install bundler -v 1.12.5
6
+ after_success:
7
+ - bundle exec codeclimate-test-reporter
data/Gemfile CHANGED
@@ -5,7 +5,8 @@ gemspec
5
5
  gem 'rails', '~> 5.0'
6
6
 
7
7
  group :test do
8
- gem "codeclimate-test-reporter", require: nil
8
+ gem 'codeclimate-test-reporter', '~> 1.0.0'
9
+ gem 'simplecov'
9
10
  gem 'minitest-spec-rails'
10
11
  gem 'minitest-rails-capybara'
11
12
  gem 'capybara_minitest_spec'
data/Rakefile CHANGED
@@ -14,11 +14,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
15
15
  end
16
16
 
17
-
18
-
19
-
20
-
21
-
22
17
  require 'bundler/gem_tasks'
23
18
 
24
19
  require 'rake/testtask'
@@ -30,5 +25,4 @@ Rake::TestTask.new(:test) do |t|
30
25
  t.verbose = false
31
26
  end
32
27
 
33
-
34
28
  task default: :test
@@ -17,7 +17,6 @@ Gem::Specification.new do |spec|
17
17
  spec.homepage = 'https://www.github.com/tektite-software/authoreyes'
18
18
  spec.license = 'MIT'
19
19
 
20
-
21
20
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
21
  spec.bindir = 'exe'
23
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -33,5 +32,4 @@ Gem::Specification.new do |spec|
33
32
  spec.add_development_dependency 'sqlite3'
34
33
  spec.add_development_dependency 'devise'
35
34
  spec.add_development_dependency 'byebug'
36
-
37
35
  end
@@ -1,20 +1,20 @@
1
1
  authorization do
2
2
  role :guest do
3
3
  # add permissions for guests here, e.g.
4
- #has_permission_on :conferences, :to => :read
4
+ # has_permission_on :conferences, :to => :read
5
5
  end
6
6
 
7
7
  # permissions on other roles, such as
8
- #role :admin do
8
+ # role :admin do
9
9
  # has_permission_on :conferences, :to => :manage
10
- #end
10
+ # end
11
11
  end
12
12
 
13
13
  privileges do
14
14
  # default privilege hierarchies to facilitate RESTful Rails apps
15
- privilege :manage, :includes => [:create, :read, :update, :delete]
16
- privilege :read, :includes => [:index, :show]
17
- privilege :create, :includes => :new
18
- privilege :update, :includes => :edit
19
- privilege :delete, :includes => :destroy
15
+ privilege :manage, includes: [:create, :read, :update, :delete]
16
+ privilege :read, includes: [:index, :show]
17
+ privilege :create, includes: :new
18
+ privilege :update, includes: :edit
19
+ privilege :delete, includes: :destroy
20
20
  end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "authoreyes"
3
+ require 'bundler/setup'
4
+ require 'authoreyes'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "authoreyes"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
data/bin/test CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- $: << File.expand_path(File.expand_path('../../test', __FILE__))
2
+ $LOAD_PATH << File.expand_path(File.expand_path('../../test', __FILE__))
3
3
 
4
4
  require 'bundler/setup'
5
5
  require 'rails/test_unit/minitest_plugin'
@@ -3,7 +3,7 @@ module Authoreyes
3
3
  # Represents a pseudo-user to facilitate anonymous users in applications
4
4
  class AnonymousUser
5
5
  attr_reader :role_symbols
6
- def initialize (roles = [Authorization.default_role])
6
+ def initialize(roles = [Authorization.default_role])
7
7
  @role_symbols = roles
8
8
  end
9
9
  end
@@ -4,20 +4,20 @@ module Authoreyes
4
4
  # attr_conditions_hash of form
5
5
  # { :object_attribute => [operator, value_block], ... }
6
6
  # { :object_attribute => { :attr => ... } }
7
- def initialize (conditions_hash)
7
+ def initialize(conditions_hash)
8
8
  @conditions_hash = conditions_hash
9
9
  end
10
10
 
11
- def initialize_copy (from)
11
+ def initialize_copy(_from)
12
12
  @conditions_hash = deep_hash_clone(@conditions_hash)
13
13
  end
14
14
 
15
- def validate? (attr_validator, object = nil, hash = nil)
15
+ def validate?(attr_validator, object = nil, hash = nil)
16
16
  object ||= attr_validator.object
17
17
  return false unless object
18
18
 
19
- if ( Authorization.is_a_association_proxy?(object) &&
20
- object.respond_to?(:empty?) )
19
+ if Authorization.is_a_association_proxy?(object) &&
20
+ object.respond_to?(:empty?)
21
21
  return false if object.empty?
22
22
  object.each do |member|
23
23
  return true if validate?(attr_validator, member, hash)
@@ -32,12 +32,12 @@ module Authoreyes
32
32
  attr_value.any? do |inner_value|
33
33
  validate?(attr_validator, inner_value, value)
34
34
  end
35
- elsif attr_value == nil
35
+ elsif attr_value.nil?
36
36
  raise NilAttributeValueError, "Attribute #{attr.inspect} is nil in #{object.inspect}."
37
37
  else
38
38
  validate?(attr_validator, attr_value, value)
39
39
  end
40
- elsif value.is_a?(Array) and value.length == 2 and value.first.is_a?(Symbol)
40
+ elsif value.is_a?(Array) && value.length == 2 && value.first.is_a?(Symbol)
41
41
  evaluated = if value[1].is_a?(Proc)
42
42
  attr_validator.evaluate(value[1])
43
43
  else
@@ -52,41 +52,41 @@ module Authoreyes
52
52
  begin
53
53
  attr_value.include?(evaluated)
54
54
  rescue NoMethodError => e
55
- raise AuthorizationUsageError, "Operator contains requires a " +
56
- "subclass of Enumerable as attribute value, got: #{attr_value.inspect} " +
57
- "contains #{evaluated.inspect}: #{e}"
55
+ raise AuthorizationUsageError, 'Operator contains requires a ' \
56
+ "subclass of Enumerable as attribute value, got: #{attr_value.inspect} " \
57
+ "contains #{evaluated.inspect}: #{e}"
58
58
  end
59
59
  when :does_not_contain
60
60
  begin
61
61
  !attr_value.include?(evaluated)
62
62
  rescue NoMethodError => e
63
- raise AuthorizationUsageError, "Operator does_not_contain requires a " +
64
- "subclass of Enumerable as attribute value, got: #{attr_value.inspect} " +
65
- "does_not_contain #{evaluated.inspect}: #{e}"
63
+ raise AuthorizationUsageError, 'Operator does_not_contain requires a ' \
64
+ "subclass of Enumerable as attribute value, got: #{attr_value.inspect} " \
65
+ "does_not_contain #{evaluated.inspect}: #{e}"
66
66
  end
67
67
  when :intersects_with
68
68
  begin
69
69
  !(evaluated.to_set & attr_value.to_set).empty?
70
70
  rescue NoMethodError => e
71
- raise AuthorizationUsageError, "Operator intersects_with requires " +
72
- "subclasses of Enumerable, got: #{attr_value.inspect} " +
73
- "intersects_with #{evaluated.inspect}: #{e}"
71
+ raise AuthorizationUsageError, 'Operator intersects_with requires ' \
72
+ "subclasses of Enumerable, got: #{attr_value.inspect} " \
73
+ "intersects_with #{evaluated.inspect}: #{e}"
74
74
  end
75
75
  when :is_in
76
76
  begin
77
77
  evaluated.include?(attr_value)
78
78
  rescue NoMethodError => e
79
- raise AuthorizationUsageError, "Operator is_in requires a " +
80
- "subclass of Enumerable as value, got: #{attr_value.inspect} " +
81
- "is_in #{evaluated.inspect}: #{e}"
79
+ raise AuthorizationUsageError, 'Operator is_in requires a ' \
80
+ "subclass of Enumerable as value, got: #{attr_value.inspect} " \
81
+ "is_in #{evaluated.inspect}: #{e}"
82
82
  end
83
83
  when :is_not_in
84
84
  begin
85
85
  !evaluated.include?(attr_value)
86
86
  rescue NoMethodError => e
87
- raise AuthorizationUsageError, "Operator is_not_in requires a " +
88
- "subclass of Enumerable as value, got: #{attr_value.inspect} " +
89
- "is_not_in #{evaluated.inspect}: #{e}"
87
+ raise AuthorizationUsageError, 'Operator is_not_in requires a ' \
88
+ "subclass of Enumerable as value, got: #{attr_value.inspect} " \
89
+ "is_not_in #{evaluated.inspect}: #{e}"
90
90
  end
91
91
  when :lt
92
92
  attr_value && attr_value < evaluated
@@ -100,32 +100,32 @@ module Authoreyes
100
100
  raise AuthorizationError, "Unknown operator #{value[0]}"
101
101
  end
102
102
  else
103
- raise AuthorizationError, "Wrong conditions hash format"
103
+ raise AuthorizationError, 'Wrong conditions hash format'
104
104
  end
105
105
  end
106
106
  end
107
107
 
108
108
  # resolves all the values in condition_hash
109
- def obligation (attr_validator, hash = nil)
109
+ def obligation(attr_validator, hash = nil)
110
110
  hash = (hash || @conditions_hash).clone
111
111
  hash.each do |attr, value|
112
112
  if value.is_a?(Hash)
113
113
  hash[attr] = obligation(attr_validator, value)
114
- elsif value.is_a?(Array) and value.length == 2
114
+ elsif value.is_a?(Array) && value.length == 2
115
115
  hash[attr] = [value[0], attr_validator.evaluate(value[1])]
116
116
  else
117
- raise AuthorizationError, "Wrong conditions hash format"
117
+ raise AuthorizationError, 'Wrong conditions hash format'
118
118
  end
119
119
  end
120
120
  hash
121
121
  end
122
122
 
123
- def to_long_s (hash = nil)
123
+ def to_long_s(hash = nil)
124
124
  if hash
125
125
  hash.inject({}) do |memo, key_val|
126
126
  key, val = key_val
127
127
  memo[key] = case val
128
- when Array then "#{val[0]} { #{val[1].respond_to?(:to_ruby) ? val[1].to_ruby.gsub(/^proc \{\n?(.*)\n?\}$/m, '\1') : "..."} }"
128
+ when Array then "#{val[0]} { #{val[1].respond_to?(:to_ruby) ? val[1].to_ruby.gsub(/^proc \{\n?(.*)\n?\}$/m, '\1') : '...'} }"
129
129
  when Hash then to_long_s(val)
130
130
  end
131
131
  memo
@@ -136,17 +136,16 @@ module Authoreyes
136
136
  end
137
137
 
138
138
  protected
139
- def object_attribute_value (object, attr)
140
- begin
141
- object.send(attr)
142
- rescue ArgumentError, NoMethodError => e
143
- raise AuthorizationUsageError, "Error occurred while validating attribute ##{attr} on #{object.inspect}: #{e}.\n" +
144
- "Please check your authorization rules and ensure the attribute is correctly spelled and \n" +
145
- "corresponds to a method on the model you are authorizing for."
146
- end
139
+
140
+ def object_attribute_value(object, attr)
141
+ object.send(attr)
142
+ rescue ArgumentError, NoMethodError => e
143
+ raise AuthorizationUsageError, "Error occurred while validating attribute ##{attr} on #{object.inspect}: #{e}.\n" \
144
+ "Please check your authorization rules and ensure the attribute is correctly spelled and \n" \
145
+ 'corresponds to a method on the model you are authorizing for.'
147
146
  end
148
147
 
149
- def deep_hash_clone (hash)
148
+ def deep_hash_clone(hash)
150
149
  hash.inject({}) do |memo, (key, val)|
151
150
  memo[key] = case val
152
151
  when Hash
@@ -5,17 +5,17 @@ module Authoreyes
5
5
  class AttributeWithPermission < Attribute
6
6
  # E.g. privilege :read, attr_or_hash either :attribute or
7
7
  # { :attribute => :deeper_attribute }
8
- def initialize (privilege, attr_or_hash, context = nil)
8
+ def initialize(privilege, attr_or_hash, context = nil)
9
9
  @privilege = privilege
10
10
  @context = context
11
11
  @attr_hash = attr_or_hash
12
12
  end
13
13
 
14
- def initialize_copy (from)
14
+ def initialize_copy(_from)
15
15
  @attr_hash = deep_hash_clone(@attr_hash) if @attr_hash.is_a?(Hash)
16
16
  end
17
17
 
18
- def validate? (attr_validator, object = nil, hash_or_attr = nil)
18
+ def validate?(attr_validator, object = nil, hash_or_attr = nil)
19
19
  object ||= attr_validator.object
20
20
  hash_or_attr ||= @attr_hash
21
21
  return false unless object
@@ -28,15 +28,15 @@ module Authoreyes
28
28
  raise NilAttributeValueError, "Attribute #{hash_or_attr.inspect} is nil in #{object.inspect}."
29
29
  when Enumerable
30
30
  attr_value.any? do |inner_value|
31
- attr_validator.engine.permit? @privilege, :object => inner_value, :user => attr_validator.user
31
+ attr_validator.engine.permit? @privilege, object: inner_value, user: attr_validator.user
32
32
  end
33
33
  else
34
- attr_validator.engine.permit? @privilege, :object => attr_value, :user => attr_validator.user
34
+ attr_validator.engine.permit? @privilege, object: attr_value, user: attr_validator.user
35
35
  end
36
36
  when Hash
37
37
  hash_or_attr.all? do |attr, sub_hash|
38
38
  attr_value = object_attribute_value(object, attr)
39
- if attr_value == nil
39
+ if attr_value.nil?
40
40
  raise NilAttributeValueError, "Attribute #{attr.inspect} is nil in #{object.inspect}."
41
41
  elsif attr_value.is_a?(Enumerable)
42
42
  attr_value.any? do |inner_value|
@@ -47,14 +47,14 @@ module Authoreyes
47
47
  end
48
48
  end
49
49
  when NilClass
50
- attr_validator.engine.permit? @privilege, :object => object, :user => attr_validator.user
50
+ attr_validator.engine.permit? @privilege, object: object, user: attr_validator.user
51
51
  else
52
52
  raise AuthorizationError, "Wrong conditions hash format: #{hash_or_attr.inspect}"
53
53
  end
54
54
  end
55
55
 
56
56
  # may return an array of obligations to be OR'ed
57
- def obligation (attr_validator, hash_or_attr = nil, path = [])
57
+ def obligation(attr_validator, hash_or_attr = nil, path = [])
58
58
  hash_or_attr ||= @attr_hash
59
59
  case hash_or_attr
60
60
  when Symbol
@@ -71,23 +71,23 @@ module Authoreyes
71
71
  end
72
72
 
73
73
  obligations = attr_validator.engine.obligations(@privilege,
74
- :context => @context,
75
- :user => attr_validator.user)
74
+ context: @context,
75
+ user: attr_validator.user)
76
76
 
77
- obligations.collect {|obl| {hash_or_attr => obl} }
77
+ obligations.collect { |obl| { hash_or_attr => obl } }
78
78
  when Hash
79
79
  obligations_array_attrs = []
80
80
  obligations =
81
- hash_or_attr.inject({}) do |all, pair|
82
- attr, sub_hash = pair
83
- all[attr] = obligation(attr_validator, sub_hash, path + [attr])
84
- if all[attr].length > 1
85
- obligations_array_attrs << attr
86
- else
87
- all[attr] = all[attr].first
88
- end
89
- all
81
+ hash_or_attr.inject({}) do |all, pair|
82
+ attr, sub_hash = pair
83
+ all[attr] = obligation(attr_validator, sub_hash, path + [attr])
84
+ if all[attr].length > 1
85
+ obligations_array_attrs << attr
86
+ else
87
+ all[attr] = all[attr].first
90
88
  end
89
+ all
90
+ end
91
91
  obligations = [obligations]
92
92
  obligations_array_attrs.each do |attr|
93
93
  next_array_size = obligations.first[attr].length
@@ -102,8 +102,8 @@ module Authoreyes
102
102
  obligations
103
103
  when NilClass
104
104
  attr_validator.engine.obligations(@privilege,
105
- :context => attr_validator.context,
106
- :user => attr_validator.user)
105
+ context: attr_validator.context,
106
+ user: attr_validator.user)
107
107
  else
108
108
  raise AuthorizationError, "Wrong conditions hash format: #{hash_or_attr.inspect}"
109
109
  end
@@ -114,10 +114,11 @@ module Authoreyes
114
114
  end
115
115
 
116
116
  private
117
- def self.reflection_for_path (parent_model, path)
117
+
118
+ def self.reflection_for_path(parent_model, path)
118
119
  reflection = path.empty? ? parent_model : begin
119
120
  parent = reflection_for_path(parent_model, path[0..-2])
120
- if !parent.respond_to?(:proxy_reflection) and parent.respond_to?(:klass)
121
+ if !parent.respond_to?(:proxy_reflection) && parent.respond_to?(:klass)
121
122
  parent.klass.reflect_on_association(path.last)
122
123
  else
123
124
  parent.reflect_on_association(path.last)
@@ -2,10 +2,10 @@ module Authoreyes
2
2
  module Authorization
3
3
  class AuthorizationRule
4
4
  attr_reader :attributes, :contexts, :role, :privileges, :join_operator,
5
- :source_file, :source_line
5
+ :source_file, :source_line
6
6
 
7
- def initialize (role, privileges = [], contexts = nil, join_operator = :or,
8
- options = {})
7
+ def initialize(role, privileges = [], contexts = nil, join_operator = :or,
8
+ options = {})
9
9
  @role = role
10
10
  @privileges = Set.new(privileges)
11
11
  @contexts = Set.new((contexts && !contexts.is_a?(Array) ? [contexts] : contexts))
@@ -15,28 +15,28 @@ module Authoreyes
15
15
  @source_line = options[:source_line]
16
16
  end
17
17
 
18
- def initialize_copy (from)
18
+ def initialize_copy(_from)
19
19
  @privileges = @privileges.clone
20
20
  @contexts = @contexts.clone
21
- @attributes = @attributes.collect {|attribute| attribute.clone }
21
+ @attributes = @attributes.collect(&:clone)
22
22
  end
23
23
 
24
- def append_privileges (privs)
24
+ def append_privileges(privs)
25
25
  @privileges.merge(privs)
26
26
  end
27
27
 
28
- def append_attribute (attribute)
28
+ def append_attribute(attribute)
29
29
  @attributes << attribute
30
30
  end
31
31
 
32
- def matches? (roles, privs, context = nil)
32
+ def matches?(roles, privs, context = nil)
33
33
  roles = [roles] unless roles.is_a?(Array)
34
- @contexts.include?(context) and roles.include?(@role) and
35
- not (@privileges & privs).empty?
34
+ @contexts.include?(context) && roles.include?(@role) &&
35
+ !(@privileges & privs).empty?
36
36
  end
37
37
 
38
- def validate? (attr_validator, skip_attribute = false)
39
- skip_attribute or @attributes.empty? or
38
+ def validate?(attr_validator, skip_attribute = false)
39
+ skip_attribute || @attributes.empty? ||
40
40
  @attributes.send(@join_operator == :and ? :all? : :any?) do |attr|
41
41
  begin
42
42
  attr.validate?(attr_validator)
@@ -46,7 +46,7 @@ module Authoreyes
46
46
  end
47
47
  end
48
48
 
49
- def obligations (attr_validator)
49
+ def obligations(attr_validator)
50
50
  exceptions = []
51
51
  obligations = @attributes.collect do |attr|
52
52
  begin
@@ -57,13 +57,13 @@ module Authoreyes
57
57
  end
58
58
  end
59
59
 
60
- if exceptions.length > 0 and (@join_operator == :and or exceptions.length == @attributes.length)
61
- raise NotAuthorized, "Missing authorization in collecting obligations: #{exceptions.map(&:to_s) * ", "}"
60
+ if !exceptions.empty? && (@join_operator == :and || exceptions.length == @attributes.length)
61
+ raise NotAuthorized, "Missing authorization in collecting obligations: #{exceptions.map(&:to_s) * ', '}"
62
62
  end
63
63
 
64
- if @join_operator == :and and !obligations.empty?
64
+ if @join_operator == :and && !obligations.empty?
65
65
  # cross product of OR'ed obligations in arrays
66
- arrayed_obligations = obligations.map {|obligation| obligation.is_a?(Hash) ? [obligation] : obligation}
66
+ arrayed_obligations = obligations.map { |obligation| obligation.is_a?(Hash) ? [obligation] : obligation }
67
67
  merged_obligations = arrayed_obligations.first
68
68
  arrayed_obligations[1..-1].each do |inner_obligations|
69
69
  previous_merged_obligations = merged_obligations
@@ -81,9 +81,8 @@ module Authoreyes
81
81
  end
82
82
 
83
83
  def to_long_s
84
- attributes.collect {|attr| attr.to_long_s } * "; "
84
+ attributes.collect(&:to_long_s) * '; '
85
85
  end
86
86
  end
87
-
88
87
  end
89
88
  end
@@ -10,8 +10,8 @@ module Authoreyes
10
10
  reset!
11
11
  end
12
12
 
13
- def initialize_copy(source)
14
- @rules = @rules.collect {|rule| rule.clone}
13
+ def initialize_copy(_source)
14
+ @rules = @rules.collect(&:clone)
15
15
  reset!
16
16
  end
17
17
 
@@ -28,7 +28,7 @@ module Authoreyes
28
28
  reset!
29
29
  end
30
30
 
31
- def << rule
31
+ def <<(rule)
32
32
  @rules << rule
33
33
  reset!
34
34
  end
@@ -38,8 +38,9 @@ module Authoreyes
38
38
  end
39
39
 
40
40
  private
41
+
41
42
  def reset!
42
- @cached_auth_rules =nil
43
+ @cached_auth_rules = nil
43
44
  end
44
45
 
45
46
  def cached_auth_rules
@@ -18,7 +18,7 @@ module Authoreyes
18
18
  options = {
19
19
  reader: nil
20
20
  }.merge(options)
21
- #@auth_rules = AuthorizationRuleSet.new reader.auth_rules_reader.auth_rules
21
+ # @auth_rules = AuthorizationRuleSet.new reader.auth_rules_reader.auth_rules
22
22
  @reader = ::Authoreyes::Parser::DSLParser.factory(options[:reader] || AUTH_DSL_FILES)
23
23
  end
24
24
 
@@ -75,18 +75,18 @@ module Authoreyes
75
75
  # Should NotAuthorized exceptions be raised
76
76
  # Defaults to true.
77
77
  #
78
- def permit! (privilege, options = {})
78
+ def permit!(privilege, options = {})
79
79
  return true if Authorization.ignore_access_control
80
80
  options = {
81
- :object => nil,
82
- :skip_attribute_test => false,
83
- :context => nil,
84
- :bang => true
81
+ object: nil,
82
+ skip_attribute_test: false,
83
+ context: nil,
84
+ bang: true
85
85
  }.merge(options)
86
86
 
87
87
  # Make sure we're handling all privileges as symbols.
88
- privilege = privilege.is_a?( Array ) ?
89
- privilege.flatten.collect { |priv| priv.to_sym } :
88
+ privilege = privilege.is_a?(Array) ?
89
+ privilege.flatten.collect(&:to_sym) :
90
90
  privilege.to_sym
91
91
 
92
92
  # Convert context to symbol as well
@@ -102,18 +102,22 @@ module Authoreyes
102
102
  # Example: permit!( :edit, :object => user.posts )
103
103
  #
104
104
  if Authorization.is_a_association_proxy?(options[:object]) && options[:object].respond_to?(:new)
105
- options[:object] = (Rails.version < "3.0" ? options[:object] : options[:object].where(nil)).new
105
+ options[:object] = (Rails.version < '3.0' ? options[:object] : options[:object].where(nil)).new
106
106
  end
107
107
 
108
- options[:context] ||= options[:object] && (
109
- options[:object].class.respond_to?(:decl_auth_context) ?
110
- options[:object].class.decl_auth_context :
111
- options[:object].class.name.tableize.to_sym
112
- ) rescue NoMethodError
108
+ begin
109
+ options[:context] ||= options[:object] && (
110
+ options[:object].class.respond_to?(:decl_auth_context) ?
111
+ options[:object].class.decl_auth_context :
112
+ options[:object].class.name.tableize.to_sym
113
+ )
114
+ rescue
115
+ NoMethodError
116
+ end
113
117
 
114
118
  user, roles, privileges = user_roles_privleges_from_options(privilege, options)
115
119
 
116
- return true if roles.is_a?(Array) and not (roles & omnipotent_roles).empty?
120
+ return true if roles.is_a?(Array) && !(roles & omnipotent_roles).empty?
117
121
 
118
122
  # find a authorization rule that matches for at least one of the roles and
119
123
  # at least one of the given privileges
@@ -127,9 +131,9 @@ module Authoreyes
127
131
 
128
132
  if options[:bang]
129
133
  if rules.empty?
130
- raise NotAuthorized, "No matching rules found for #{privilege} for #{user.inspect} " +
131
- "(roles #{roles.inspect}, privileges #{privileges.inspect}, " +
132
- "context #{options[:context].inspect})."
134
+ raise NotAuthorized, "No matching rules found for #{privilege} for #{user.inspect} " \
135
+ "(roles #{roles.inspect}, privileges #{privileges.inspect}, " \
136
+ "context #{options[:context].inspect})."
133
137
  else
134
138
  raise AttributeAuthorizationError, "#{privilege} not allowed for #{user.inspect} on #{(options[:object] || options[:context]).inspect}."
135
139
  end
@@ -140,8 +144,8 @@ module Authoreyes
140
144
 
141
145
  # Calls permit! but doesn't raise authorization errors. If no exception is
142
146
  # raised, permit? returns true and yields to the optional block.
143
- def permit? (privilege, options = {}) # :yields:
144
- if permit!(privilege, options.merge(:bang=> false))
147
+ def permit?(privilege, options = {}) # :yields:
148
+ if permit!(privilege, options.merge(bang: false))
145
149
  yield if block_given?
146
150
  true
147
151
  else
@@ -165,13 +169,13 @@ module Authoreyes
165
169
  # [:+context+] See permit!
166
170
  # [:+user+] See permit!
167
171
  #
168
- def obligations (privilege, options = {})
169
- options = {:context => nil}.merge(options)
172
+ def obligations(privilege, options = {})
173
+ options = { context: nil }.merge(options)
170
174
  user, roles, privileges = user_roles_privleges_from_options(privilege, options)
171
175
 
172
- permit!(privilege, :skip_attribute_test => true, :user => user, :context => options[:context])
176
+ permit!(privilege, skip_attribute_test: true, user: user, context: options[:context])
173
177
 
174
- return [] if roles.is_a?(Array) and not (roles & omnipotent_roles).empty?
178
+ return [] if roles.is_a?(Array) && !(roles & omnipotent_roles).empty?
175
179
 
176
180
  attr_validator = AttributeValidator.new(self, user, nil, privilege, options[:context])
177
181
  matching_auth_rules(roles, privileges, options[:context]).collect do |rule|
@@ -182,31 +186,31 @@ module Authoreyes
182
186
  # Returns the description for the given role. The description may be
183
187
  # specified with the authorization rules. Returns +nil+ if none was
184
188
  # given.
185
- def description_for (role)
189
+ def description_for(role)
186
190
  role_descriptions[role]
187
191
  end
188
192
 
189
193
  # Returns the title for the given role. The title may be
190
194
  # specified with the authorization rules. Returns +nil+ if none was
191
195
  # given.
192
- def title_for (role)
196
+ def title_for(role)
193
197
  role_titles[role]
194
198
  end
195
199
 
196
200
  # Returns the role symbols of the given user.
197
- def roles_for (user)
201
+ def roles_for(user)
198
202
  user ||= Authorization.current_user
199
203
  raise AuthorizationUsageError, "User object doesn't respond to roles (#{user.inspect})" \
200
- if !user.respond_to?(:role_symbols) and !user.respond_to?(:roles)
204
+ if !user.respond_to?(:role_symbols) && !user.respond_to?(:roles)
201
205
 
202
- Rails.logger.info("The use of user.roles is deprecated. Please add a method " +
203
- "role_symbols to your User model.") if defined?(Rails) and Rails.respond_to?(:logger) and !user.respond_to?(:role_symbols)
206
+ Rails.logger.info('The use of user.roles is deprecated. Please add a method ' \
207
+ 'role_symbols to your User model.') if defined?(Rails) && Rails.respond_to?(:logger) && !user.respond_to?(:role_symbols)
204
208
 
205
209
  roles = user.respond_to?(:role_symbols) ? user.role_symbols : user.roles
206
210
 
207
- raise AuthorizationUsageError, "User.#{user.respond_to?(:role_symbols) ? 'role_symbols' : 'roles'} " +
208
- "doesn't return an Array of Symbols (#{roles.inspect})" \
209
- if !roles.is_a?(Array) or (!roles.empty? and !roles[0].is_a?(Symbol))
211
+ raise AuthorizationUsageError, "User.#{user.respond_to?(:role_symbols) ? 'role_symbols' : 'roles'} " \
212
+ "doesn't return an Array of Symbols (#{roles.inspect})" \
213
+ if !roles.is_a?(Array) || (!roles.empty? && !roles[0].is_a?(Symbol))
210
214
 
211
215
  (roles.empty? ? [Authorization.default_role] : roles)
212
216
  end
@@ -218,7 +222,13 @@ module Authoreyes
218
222
 
219
223
  def self.development_reload?
220
224
  if Rails.env.development?
221
- mod_time = AUTH_DSL_FILES.map { |m| File.mtime(m) rescue Time.at(0) }.flatten.max
225
+ mod_time = AUTH_DSL_FILES.map do |m|
226
+ begin
227
+ File.mtime(m)
228
+ rescue
229
+ Time.at(0)
230
+ end
231
+ end.flatten.max
222
232
  @@auth_dsl_last_modified ||= mod_time
223
233
  if mod_time > @@auth_dsl_last_modified
224
234
  @@auth_dsl_last_modified = mod_time
@@ -230,8 +240,8 @@ module Authoreyes
230
240
  # Returns an instance of Engine, which is created if there isn't one
231
241
  # yet. If +dsl_file+ is given, it is passed on to Engine.new and
232
242
  # a new instance is always created.
233
- def self.instance (dsl_file = nil)
234
- if dsl_file or development_reload?
243
+ def self.instance(dsl_file = nil)
244
+ if dsl_file || development_reload?
235
245
  @@instance = new(dsl_file)
236
246
  else
237
247
  @@instance ||= new
@@ -240,7 +250,7 @@ module Authoreyes
240
250
 
241
251
  class AttributeValidator # :nodoc:
242
252
  attr_reader :user, :object, :engine, :context, :privilege
243
- def initialize (engine, user, object = nil, privilege = nil, context = nil)
253
+ def initialize(engine, user, object = nil, privilege = nil, context = nil)
244
254
  @engine = engine
245
255
  @user = user
246
256
  @object = object
@@ -248,33 +258,34 @@ module Authoreyes
248
258
  @context = context
249
259
  end
250
260
 
251
- def evaluate (value_block)
252
- # TODO cache?
261
+ def evaluate(value_block)
262
+ # TODO: cache?
253
263
  instance_eval(&value_block)
254
264
  end
255
265
  end
256
266
 
257
267
  private
268
+
258
269
  def user_roles_privleges_from_options(privilege, options)
259
270
  options = {
260
- :user => nil,
261
- :context => nil,
262
- :user_roles => nil
271
+ user: nil,
272
+ context: nil,
273
+ user_roles: nil
263
274
  }.merge(options)
264
275
  user = options[:user] || Authorization.current_user
265
276
  privileges = privilege.is_a?(Array) ? privilege : [privilege]
266
277
 
267
- raise AuthorizationUsageError, "No user object given (#{user.inspect}) or " +
268
- "set through Authorization.current_user" unless user
278
+ raise AuthorizationUsageError, "No user object given (#{user.inspect}) or " \
279
+ 'set through Authorization.current_user' unless user
269
280
 
270
281
  roles = options[:user_roles] || flatten_roles(roles_for(user))
271
282
  privileges = flatten_privileges privileges, options[:context]
272
283
  [user, roles, privileges]
273
284
  end
274
285
 
275
- def flatten_roles (roles, flattened_roles = Set.new)
276
- # TODO caching?
277
- roles.reject {|role| flattened_roles.include?(role)}.each do |role|
286
+ def flatten_roles(roles, flattened_roles = Set.new)
287
+ # TODO: caching?
288
+ roles.reject { |role| flattened_roles.include?(role) }.each do |role|
278
289
  flattened_roles << role
279
290
  flatten_roles(role_hierarchy[role], flattened_roles) if role_hierarchy[role]
280
291
  end
@@ -282,10 +293,10 @@ module Authoreyes
282
293
  end
283
294
 
284
295
  # Returns the privilege hierarchy flattened for given privileges in context.
285
- def flatten_privileges (privileges, context = nil, flattened_privileges = Set.new)
286
- # TODO caching?
287
- raise AuthorizationUsageError, "No context given or inferable from object" unless context
288
- privileges.reject {|priv| flattened_privileges.include?(priv)}.each do |priv|
296
+ def flatten_privileges(privileges, context = nil, flattened_privileges = Set.new)
297
+ # TODO: caching?
298
+ raise AuthorizationUsageError, 'No context given or inferable from object' unless context
299
+ privileges.reject { |priv| flattened_privileges.include?(priv) }.each do |priv|
289
300
  flattened_privileges << priv
290
301
  flatten_privileges(rev_priv_hierarchy[[priv, nil]], context, flattened_privileges) if rev_priv_hierarchy[[priv, nil]]
291
302
  flatten_privileges(rev_priv_hierarchy[[priv, context]], context, flattened_privileges) if rev_priv_hierarchy[[priv, context]]
@@ -293,7 +304,7 @@ module Authoreyes
293
304
  flattened_privileges.to_a
294
305
  end
295
306
 
296
- def matching_auth_rules (roles, privileges, context)
307
+ def matching_auth_rules(roles, privileges, context)
297
308
  auth_rules.matching(roles, privileges, context)
298
309
  end
299
310
  end
@@ -1,6 +1,5 @@
1
1
  module Authoreyes
2
2
  # This module contains all helpers for views, controllers, and models
3
3
  module Helpers
4
-
5
4
  end
6
5
  end
@@ -14,7 +14,6 @@ module Authoreyes
14
14
 
15
15
  # TODO: Implement this!
16
16
  def filter_resource_access(options = {})
17
-
18
17
  end
19
18
 
20
19
  ActionController::Base.send(:define_method, :redirect_if_unauthorized) do
@@ -36,16 +35,24 @@ module Authoreyes
36
35
  end
37
36
  end
38
37
 
38
+ ActionController::Metal.send(:define_method, :authorization_object) do
39
+ if params[:id].present?
40
+ begin
41
+ controller_name.singularize.capitalize.constantize.find(params[:id])
42
+ rescue NameError
43
+ logger.warn '[Authoreyes] Could not interpolate object!'
44
+ end
45
+ end
46
+ end
47
+
39
48
  ActionController::API.send(:define_method, :render_unauthorized) do
40
49
  begin
41
- permitted_to! action_name
50
+ permitted_to! action_name, authorization_object
42
51
  rescue Authoreyes::Authorization::NotAuthorized => e
43
- puts e
44
- response_object = ActiveModelSerializers::Model.new()
45
- response_object.attributes.merge!({
46
- action: action_name,
47
- controller: controller_name
48
- })
52
+ logger.warn "[Authoreyes] #{e}"
53
+ response_object = ActiveModelSerializers::Model.new
54
+ response_object.attributes.merge!(action: action_name,
55
+ controller: controller_name)
49
56
  response_object.errors.add :action, e
50
57
  # Assumes ActiveModel::Serializers is used.
51
58
  # If not used, you will have to override `render_unauthorized`
@@ -94,22 +101,21 @@ module Authoreyes
94
101
  context = object = nil
95
102
  if object_or_sym.nil?
96
103
  context = controller_name.to_sym
97
- elsif !Authorization.is_a_association_proxy?(object_or_sym) and object_or_sym.is_a?(Symbol)
104
+ elsif !Authorization.is_a_association_proxy?(object_or_sym) && object_or_sym.is_a?(Symbol)
98
105
  context = object_or_sym
99
106
  else
100
107
  object = object_or_sym
101
108
  end
102
109
 
103
- result = {:object => object,
104
- :context => context,
105
- :skip_attribute_test => object.nil?,
106
- :bang => bang}.merge(options)
110
+ result = { object: object,
111
+ context: context,
112
+ # :skip_attribute_test => object.nil?,
113
+ bang: bang }.merge(options)
107
114
  result[:user] = current_user unless result.key?(:user)
108
115
  result
109
116
  end
110
117
 
111
118
  class_methods do
112
-
113
119
  end
114
120
  end
115
121
  end
@@ -9,9 +9,9 @@ module Authoreyes
9
9
  # constructs a data model of its contents.
10
10
  module Parser
11
11
  # Signals that the specified file to load was not found.
12
- class DSLFileNotFoundError < Exception; end
12
+ class DSLFileNotFoundError < RuntimeError; end
13
13
  # Signals errors that occur while reading and parsing an authorization DSL
14
- class DSLError < Exception; end
14
+ class DSLError < RuntimeError; end
15
15
  # Signals errors in the syntax of an authorization DSL.
16
16
  class DSLSyntaxError < DSLError; end
17
17
  end
@@ -34,7 +34,7 @@ module Authoreyes
34
34
  #
35
35
  class AuthorizationRulesParser
36
36
  attr_reader :roles, :role_hierarchy, :auth_rules,
37
- :role_descriptions, :role_titles, :omnipotent_roles # :nodoc:
37
+ :role_descriptions, :role_titles, :omnipotent_roles # :nodoc:
38
38
 
39
39
  def initialize # :nodoc:
40
40
  @current_role = nil
@@ -48,7 +48,7 @@ module Authoreyes
48
48
  @auth_rules = ::Authoreyes::Authorization::AuthorizationRuleSet.new
49
49
  end
50
50
 
51
- def initialize_copy (from) # :nodoc:
51
+ def initialize_copy(from) # :nodoc:
52
52
  [
53
53
  :roles,
54
54
  :role_hierarchy,
@@ -61,7 +61,7 @@ module Authoreyes
61
61
  end
62
62
  end
63
63
 
64
- def append_role (role, options = {}) # :nodoc:
64
+ def append_role(role, options = {}) # :nodoc:
65
65
  @roles << role unless @roles.include? role
66
66
  @role_titles[role] = options[:title] if options[:title]
67
67
  @role_descriptions[role] =
@@ -74,7 +74,7 @@ module Authoreyes
74
74
  # has_permissions_on ...
75
75
  # end
76
76
  #
77
- def role (role, options = {}, &block)
77
+ def role(role, options = {})
78
78
  append_role role, options
79
79
  @current_role = role
80
80
  yield
@@ -92,8 +92,8 @@ module Authoreyes
92
92
  # has_permission_on :employees, :to => :read
93
93
  # end
94
94
  #
95
- def includes (*roles)
96
- raise DSLError, "includes only in role blocks" if @current_role.nil?
95
+ def includes(*roles)
96
+ raise DSLError, 'includes only in role blocks' if @current_role.nil?
97
97
  @role_hierarchy[@current_role] ||= []
98
98
  @role_hierarchy[@current_role] += roles.flatten
99
99
  end
@@ -127,27 +127,27 @@ module Authoreyes
127
127
  # of the has_permission_on block. May be :+and+ or :+or+.
128
128
  # Defaults to :+or+.
129
129
  #
130
- def has_permission_on (*args, &block)
130
+ def has_permission_on(*args)
131
131
  options = args.extract_options!
132
132
  context = args.flatten
133
133
 
134
- raise DSLError, "has_permission_on only allowed in role blocks" if @current_role.nil?
135
- options = {:to => [], :join_by => :or}.merge(options)
134
+ raise DSLError, 'has_permission_on only allowed in role blocks' if @current_role.nil?
135
+ options = { to: [], join_by: :or }.merge(options)
136
136
 
137
137
  privs = options[:to]
138
138
  privs = [privs] unless privs.is_a?(Array)
139
- raise DSLError, "has_permission_on either needs a block or :to option" if !block_given? and privs.empty?
139
+ raise DSLError, 'has_permission_on either needs a block or :to option' if !block_given? && privs.empty?
140
140
 
141
141
  file, line = file_and_line_number_from_call_stack
142
142
  rule = ::Authoreyes::Authorization::AuthorizationRule.new(@current_role, privs, context, options[:join_by],
143
- :source_file => file, :source_line => line)
143
+ source_file: file, source_line: line)
144
144
  @auth_rules << rule
145
145
  if block_given?
146
146
  @current_rule = rule
147
147
  yield
148
148
  raise DSLError, "has_permission_on block
149
149
  content specifies no privileges" if rule.privileges.empty?
150
- # TODO ensure?
150
+ # TODO: ensure?
151
151
  @current_rule = nil
152
152
  end
153
153
  end
@@ -157,7 +157,7 @@ module Authoreyes
157
157
  # has_omnipotence
158
158
  # end
159
159
  def has_omnipotence
160
- raise DSLError, "has_omnipotence only allowed in role blocks" if @current_role.nil?
160
+ raise DSLError, 'has_omnipotence only allowed in role blocks' if @current_role.nil?
161
161
  @omnipotent_roles << @current_role
162
162
  end
163
163
 
@@ -166,8 +166,8 @@ module Authoreyes
166
166
  # description "To be assigned to administrative personnel"
167
167
  # has_permission_on ...
168
168
  # end
169
- def description (text)
170
- raise DSLError, "description only allowed in role blocks" if @current_role.nil?
169
+ def description(text)
170
+ raise DSLError, 'description only allowed in role blocks' if @current_role.nil?
171
171
  role_descriptions[@current_role] = text
172
172
  end
173
173
 
@@ -176,8 +176,8 @@ module Authoreyes
176
176
  # title "Administrator"
177
177
  # has_permission_on ...
178
178
  # end
179
- def title (text)
180
- raise DSLError, "title only allowed in role blocks" if @current_role.nil?
179
+ def title(text)
180
+ raise DSLError, 'title only allowed in role blocks' if @current_role.nil?
181
181
  role_titles[@current_role] = text
182
182
  end
183
183
 
@@ -189,8 +189,8 @@ module Authoreyes
189
189
  # to :create, :read, :update, :delete
190
190
  # end
191
191
  # end
192
- def to (*privs)
193
- raise DSLError, "to only allowed in has_permission_on blocks" if @current_rule.nil?
192
+ def to(*privs)
193
+ raise DSLError, 'to only allowed in has_permission_on blocks' if @current_rule.nil?
194
194
  @current_rule.append_privileges(privs.flatten)
195
195
  end
196
196
 
@@ -248,8 +248,8 @@ module Authoreyes
248
248
  # if_attribute :type => "special"
249
249
  # if_attribute :id => [1,2]
250
250
  #
251
- def if_attribute (attr_conditions_hash)
252
- raise DSLError, "if_attribute only in has_permission blocks" if @current_rule.nil?
251
+ def if_attribute(attr_conditions_hash)
252
+ raise DSLError, 'if_attribute only in has_permission blocks' if @current_rule.nil?
253
253
  parse_attribute_conditions_hash!(attr_conditions_hash)
254
254
  @current_rule.append_attribute ::Authoreyes::Authorization::Attribute.new(attr_conditions_hash)
255
255
  end
@@ -300,37 +300,37 @@ module Authoreyes
300
300
  # if_permitted_to :read, :home_branch, :context => :branches
301
301
  # if_permitted_to :read, :branch => :main_company, :context => :companies
302
302
  #
303
- def if_permitted_to (privilege, attr_or_hash = nil, options = {})
304
- raise DSLError, "if_permitted_to only in has_permission blocks" if @current_rule.nil?
303
+ def if_permitted_to(privilege, attr_or_hash = nil, options = {})
304
+ raise DSLError, 'if_permitted_to only in has_permission blocks' if @current_rule.nil?
305
305
  options[:context] ||= attr_or_hash.delete(:context) if attr_or_hash.is_a?(Hash)
306
306
  # only :context option in attr_or_hash:
307
- attr_or_hash = nil if attr_or_hash.is_a?(Hash) and attr_or_hash.empty?
307
+ attr_or_hash = nil if attr_or_hash.is_a?(Hash) && attr_or_hash.empty?
308
308
  @current_rule.append_attribute ::Authoreyes::Authorization::AttributeWithPermission.new(privilege,
309
- attr_or_hash, options[:context])
309
+ attr_or_hash, options[:context])
310
310
  end
311
311
 
312
312
  # In an if_attribute statement, is says that the value has to be
313
313
  # met exactly by the if_attribute attribute. For information on the block
314
314
  # argument, see if_attribute.
315
- def is (&block)
315
+ def is(&block)
316
316
  [:is, block]
317
317
  end
318
318
 
319
319
  # The negation of is.
320
- def is_not (&block)
320
+ def is_not(&block)
321
321
  [:is_not, block]
322
322
  end
323
323
 
324
324
  # In an if_attribute statement, contains says that the value has to be
325
325
  # part of the collection specified by the if_attribute attribute.
326
326
  # For information on the block argument, see if_attribute.
327
- def contains (&block)
327
+ def contains(&block)
328
328
  [:contains, block]
329
329
  end
330
330
 
331
331
  # The negation of contains. Currently, query rewriting is disabled
332
332
  # for does_not_contain.
333
- def does_not_contain (&block)
333
+ def does_not_contain(&block)
334
334
  [:does_not_contain, block]
335
335
  end
336
336
 
@@ -338,51 +338,52 @@ module Authoreyes
338
338
  # one of the values has to be part of the collection specified by the
339
339
  # if_attribute attribute. The value block needs to evaluate to an
340
340
  # Enumerable. For information on the block argument, see if_attribute.
341
- def intersects_with (&block)
341
+ def intersects_with(&block)
342
342
  [:intersects_with, block]
343
343
  end
344
344
 
345
345
  # In an if_attribute statement, is_in says that the value has to
346
346
  # contain the attribute value.
347
347
  # For information on the block argument, see if_attribute.
348
- def is_in (&block)
348
+ def is_in(&block)
349
349
  [:is_in, block]
350
350
  end
351
351
 
352
352
  # The negation of is_in.
353
- def is_not_in (&block)
353
+ def is_not_in(&block)
354
354
  [:is_not_in, block]
355
355
  end
356
356
 
357
357
  # Less than
358
- def lt (&block)
358
+ def lt(&block)
359
359
  [:lt, block]
360
360
  end
361
361
 
362
362
  # Less than or equal to
363
- def lte (&block)
363
+ def lte(&block)
364
364
  [:lte, block]
365
365
  end
366
366
 
367
367
  # Greater than
368
- def gt (&block)
368
+ def gt(&block)
369
369
  [:gt, block]
370
370
  end
371
371
 
372
372
  # Greater than or equal to
373
- def gte (&block)
373
+ def gte(&block)
374
374
  [:gte, block]
375
375
  end
376
376
 
377
377
  private
378
- def parse_attribute_conditions_hash! (hash)
378
+
379
+ def parse_attribute_conditions_hash!(hash)
379
380
  merge_hash = {}
380
381
  hash.each do |key, value|
381
382
  if value.is_a?(Hash)
382
383
  parse_attribute_conditions_hash!(value)
383
384
  elsif !value.is_a?(Array)
384
385
  merge_hash[key] = [:is, proc { value }]
385
- elsif value.is_a?(Array) and !value[0].is_a?(Symbol)
386
+ elsif value.is_a?(Array) && !value[0].is_a?(Symbol)
386
387
  merge_hash[key] = [:is_in, proc { value }]
387
388
  end
388
389
  end
@@ -391,8 +392,8 @@ module Authoreyes
391
392
 
392
393
  def file_and_line_number_from_call_stack
393
394
  caller_parts = caller(2).first.split(':')
394
- [caller_parts[0] == "(eval)" ? nil : caller_parts[0],
395
- caller_parts[1] && caller_parts[1].to_i]
395
+ [caller_parts[0] == '(eval)' ? nil : caller_parts[0],
396
+ caller_parts[1] && caller_parts[1].to_i]
396
397
  end
397
398
  end
398
399
  end
@@ -13,7 +13,7 @@ module Authoreyes
13
13
  @auth_rules_reader = AuthorizationRulesParser.new
14
14
  end
15
15
 
16
- def initialize_copy (from) # :nodoc:
16
+ def initialize_copy(from) # :nodoc:
17
17
  @privileges_reader = from.privileges_reader.clone
18
18
  @auth_rules_reader = from.auth_rules_reader.clone
19
19
  end
@@ -40,8 +40,8 @@ module Authoreyes
40
40
  else
41
41
  DSLMethods.new(self).instance_eval(dsl_data)
42
42
  end
43
- rescue SyntaxError, NoMethodError, NameError => e
44
- raise DSLSyntaxError, "Illegal DSL syntax: #{e}"
43
+ rescue SyntaxError, NoMethodError, NameError => e
44
+ raise DSLSyntaxError, "Illegal DSL syntax: #{e}"
45
45
  end
46
46
 
47
47
  # Load and parse a DSL from the given file name.
@@ -59,7 +59,7 @@ module Authoreyes
59
59
 
60
60
  # Loads and parses DSL files and returns a new reader
61
61
  def self.load(dsl_files)
62
- # TODO cache reader in production mode?
62
+ # TODO: cache reader in production mode?
63
63
  reader = new
64
64
  dsl_files = [dsl_files].flatten
65
65
  dsl_files.each do |file|
@@ -3,7 +3,7 @@ module Authoreyes
3
3
  # The PrivilegeReader handles the part of the authorization DSL in
4
4
  # a +privileges+ block. Here, privilege hierarchies are defined.
5
5
  class PrivilegesReader
6
- # TODO handle privileges with separated context
6
+ # TODO: handle privileges with separated context
7
7
  attr_reader :privileges, :privilege_hierarchy # :nodoc:
8
8
 
9
9
  def initialize # :nodoc:
@@ -47,7 +47,7 @@ module Authoreyes
47
47
  # be used inside a privilege block.
48
48
  def includes(*privileges)
49
49
  raise DSLError,
50
- "includes only in privilege block" if @current_privelege.nil?
50
+ 'includes only in privilege block' if @current_privelege.nil?
51
51
  privileges.each do |priv|
52
52
  append_privilege priv
53
53
  @privilege_hierarchy[@current_privelege] ||= []
@@ -10,7 +10,7 @@ module Authoreyes
10
10
  # +auth_rules_file+ is the path of the authorization rules file.
11
11
  config.authoreyes = ActiveSupport::OrderedOptions.new
12
12
 
13
- initializer 'authoreyes.setup', before: 'authoreyes.engine' do |app|
13
+ initializer 'authoreyes.setup', before: 'authoreyes.engine' do |_app|
14
14
  # Set default Authoreyes options
15
15
  default_options = ActiveSupport::OrderedOptions.new
16
16
  default_options.auth_rules_file =
@@ -20,7 +20,7 @@ module Authoreyes
20
20
  # Validates options
21
21
  unless [nil, :whitelist, :blacklist].include? config.authoreyes.mode
22
22
  raise InvalidConfigurationOption,
23
- "Unrecognized mode. Valid options are :whitelist and :blacklist"
23
+ 'Unrecognized mode. Valid options are :whitelist and :blacklist'
24
24
  end
25
25
 
26
26
  # Merge user options with defaults
@@ -28,7 +28,7 @@ module Authoreyes
28
28
  end
29
29
 
30
30
  # Controller integration
31
- initializer 'authoreyes.in_controller' do |app|
31
+ initializer 'authoreyes.in_controller' do |_app|
32
32
  ActiveSupport.on_load :action_controller do
33
33
  if Rails.application.config.api_only
34
34
  before_action :render_unauthorized
@@ -1,3 +1,3 @@
1
1
  module Authoreyes
2
- VERSION = "0.2.1"
2
+ VERSION = '0.2.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authoreyes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tektite Software
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-08-03 00:00:00.000000000 Z
12
+ date: 2017-01-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails