class KWAttr
Constants
- RUBY_ENGINE
- VERSION
Public Class Methods
keywords_for_error(keywords)
click to toggle source
# File lib/kwattr.rb, line 64 def keywords_for_error(keywords) keywords.map(&:inspect) end
new()
click to toggle source
# File lib/kwattr.rb, line 4 def initialize @required = [] @defaults = {} end
Public Instance Methods
initializer(attrs, opts)
click to toggle source
Calls superclass method
# File lib/kwattr.rb, line 9 def initializer(attrs, opts) required_attrs = @required defaults = @defaults required_attrs.concat(attrs).uniq! defaults.merge!(opts) iv_cache = Hash.new { |h, k| h[k] = :"@#{k}" } verbose, $VERBOSE = $VERBOSE, false define_method :initialize do |*args, **kwargs, &block| required = required_attrs.dup defaults.merge(kwargs).each_pair do |key, value| next unless required.delete(key) || defaults.key?(key) kwargs.delete(key) instance_variable_set iv_cache[key], value end unless required.empty? super_required = [] initialize = method(:initialize) initialize.super_method.parameters.each do |type, name| super_required << name if type == :keyreq && !kwargs.key?(name) end required.unshift(*super_required) raise ArgumentError, "missing keyword#{'s' if required.size > 1}: #{KWAttr.keywords_for_error(required).join(', ')}" end begin if kwargs.empty? super(*args, &block) else super(*args, **kwargs, &block) end rescue ArgumentError arity = method(:initialize).super_method.arity if !kwargs.empty? && arity != -1 && arity == args.size raise ArgumentError, "unknown keyword#{'s' if kwargs.size > 1}: #{KWAttr.keywords_for_error(kwargs.keys).join(', ')}" end raise end end $VERBOSE = verbose end
inspect()
click to toggle source
# File lib/kwattr.rb, line 57 def inspect "<KWAttr:#{'%#016x'%(object_id<<1)} @required=#{@required.inspect}, @defaults=#{@defaults.inspect}>" end