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