Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Minor refactoring

  • Loading branch information...
commit 761d60528bf69bbb5e7ff7905e56f0d59fee369b 1 parent fd7dc05
@haines haines authored
Showing with 20 additions and 16 deletions.
  1. +20 −16 lib/draper/security.rb
View
36 lib/draper/security.rb
@@ -1,44 +1,48 @@
module Draper
class Security
def initialize
- @allowed = []
- @denied = []
+ @methods = []
end
def denies(*methods)
- raise ArgumentError, "Specify at least one method to blacklist when using denies" if methods.empty?
- self.strategy = :denies
- @denied += methods.map(&:to_sym)
+ apply_strategy :denies
+ add_methods methods
end
def denies_all
- self.strategy = :denies_all
+ apply_strategy :denies_all
end
def allows(*methods)
- raise ArgumentError, "Specify at least one method to whitelist when using allows" if methods.empty?
- self.strategy = :allows
- @allowed += methods.map(&:to_sym)
+ apply_strategy :allows
+ add_methods methods
end
def allow?(method)
case strategy
when :allows
- allowed.include?(method)
- when :denies, nil
- !denied.include?(method)
+ methods.include?(method)
+ when :denies
+ !methods.include?(method)
when :denies_all
false
+ when nil
+ true
end
end
private
- attr_reader :allowed, :denied, :strategy
+ attr_reader :methods, :strategy
- def strategy=(strategy)
- @strategy ||= strategy
- raise ArgumentError, "Use only one of 'allows', 'denies', or 'denies_all'." unless @strategy == strategy
+ def apply_strategy(new_strategy)
+ raise ArgumentError, "Use only one of 'allows', 'denies', or 'denies_all'." if strategy && strategy != new_strategy
+ @strategy = new_strategy
+ end
+
+ def add_methods(new_methods)
+ raise ArgumentError, "Specify at least one method when using #{strategy}" if new_methods.empty?
+ @methods += new_methods.map(&:to_sym)
end
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.