class Sho::ArgumentValidator

@private

Public Class Methods

new(*mandatory, **optional) click to toggle source
# File lib/sho/argument_validator.rb, line 6
def initialize(*mandatory, **optional)
  mandatory.all? { |m| m.is_a?(Symbol) } or
    fail ArgumentError, 'Mandatory arguments should be send as array of symbols'
  @mandatory = mandatory
  @optional = optional
end

Public Instance Methods

call(**params) click to toggle source
# File lib/sho/argument_validator.rb, line 13
def call(**params)
  guard_missing!(params)
  guard_unknown!(params)
  params.merge(@optional.reject { |key,| params.key?(key) })
end

Private Instance Methods

guard_missing!(**params) click to toggle source
# File lib/sho/argument_validator.rb, line 21
def guard_missing!(**params)
  (@mandatory - params.keys).tap do |missing|
    missing.empty? or fail ArgumentError, "missing keywords: #{missing.join(', ')}"
  end
end
guard_unknown!(**params) click to toggle source
# File lib/sho/argument_validator.rb, line 27
def guard_unknown!(**params)
  (params.keys - @mandatory - @optional.keys).tap do |unknown|
    unknown.empty? or fail ArgumentError, "unknown keywords: #{unknown.join(', ')}"
  end
end