class Basic101::ArgumentChecker

Public Class Methods

new(args, required_types, optional_types) click to toggle source
# File lib/basic101/argument_checker.rb, line 7
def initialize(args, required_types, optional_types)
  @args = args
  @required_types = required_types
  @optional_types = optional_types
end

Public Instance Methods

check() click to toggle source
# File lib/basic101/argument_checker.rb, line 13
def check
  check_count
  check_types
end

Private Instance Methods

check_count() click to toggle source
# File lib/basic101/argument_checker.rb, line 20
def check_count
  unless count_range.include?(@args.size)
    message = "Wrong number of arguments "\
    "(#{@args.size} instead of #{expected_count})"
    raise InvalidArgumentError, message
  end
end
check_types() click to toggle source
# File lib/basic101/argument_checker.rb, line 28
def check_types
  @args.zip(types[0..@args.size]).each do |arg, type|
    unless arg.is_a?(type)
      raise InvalidArgumentError,
      "Expected #{type.type_name} but got #{arg.type_name}"
    end
  end
end
count_range() click to toggle source
# File lib/basic101/argument_checker.rb, line 45
def count_range
  min_count..max_count
end
expected_count() click to toggle source
# File lib/basic101/argument_checker.rb, line 37
def expected_count
  if min_count == max_count
    min_count
  else
    count_range
  end
end
max_count() click to toggle source
# File lib/basic101/argument_checker.rb, line 53
def max_count
  types.size
end
min_count() click to toggle source
# File lib/basic101/argument_checker.rb, line 49
def min_count
  @required_types.size
end
types() click to toggle source
# File lib/basic101/argument_checker.rb, line 57
def types
  @required_types + @optional_types
end