class Validate::Arguments::ArgumentsGuard
Constants
- DEFAULT_VALUE
Public Class Methods
new(method, rules)
click to toggle source
# File lib/validate/arguments.rb, line 54 def initialize(method, rules) signature = [] assertions = [] method.parameters.each do |(kind, name)| case kind when :req signature << name.to_s when :opt signature << "#{name} = DEFAULT_VALUE" when :rest signature << "*#{name}" when :keyreq signature << "#{name}:" when :key signature << "#{name}: DEFAULT_VALUE" when :keyrest signature << "**#{name}" when :block signature << "&#{name}" else raise Error::ArgumentError, "unsupported parameter type #{kind}" end next unless rules.include?(name) assertions << "@rules[:#{name}].assert(#{name}, message: '#{name}') unless #{name}.eql?(DEFAULT_VALUE)" end singleton_class.class_eval(<<~RUBY, __FILE__, __LINE__) def enforce!(#{signature.join(', ')}) #{assertions.join("\n ")} end RUBY @rules = rules end