class Teyu::Argument

Constants

REQUIRED_SYMBOL
VARIABLE_NAME_REGEXP

Public Class Methods

new(params) click to toggle source
# File lib/teyu.rb, line 132
def initialize(params)
  @params = params
  validate
end

Public Instance Methods

arg_names() click to toggle source

@return [Array<Symbol>] names of arguments

# File lib/teyu.rb, line 145
def arg_names
  @arg_names ||= required_positional_args + required_keyword_args + optional_keyword_args.keys
end
keyword_args() click to toggle source

method(a!:, b: 'b') => [:a, :b] @return [Array<Symbol>] names of keyword arguments

# File lib/teyu.rb, line 157
def keyword_args
  @keyword_args ||= required_keyword_args + optional_keyword_args.keys
end
optional_keyword_args() click to toggle source

method(a: 'a', b: 'b') => { a: 'a', b: 'b' } @return [Hash] optional keyword arguments with their default values

# File lib/teyu.rb, line 170
def optional_keyword_args
  @optional_keyword_args ||= @params.select { |arg| arg.is_a?(Hash) }&.inject(:merge) || {}
end
required_keyword_args() click to toggle source

method(a!:, b!:) => [:a, :b] @return [Array<Symbol>] names of required keyword arguments

# File lib/teyu.rb, line 163
def required_keyword_args
  @required_keyword_args ||= @params.map(&:to_s).select { |arg| arg.end_with?(REQUIRED_SYMBOL) }
    .map { |arg| arg.delete_suffix(REQUIRED_SYMBOL).to_sym }
end
required_positional_args() click to toggle source

method(a, b) => [:a, :b] @return [Array<Symbol>] names of required positional arguments

# File lib/teyu.rb, line 151
def required_positional_args
  @required_positional_args ||= @params.take_while { |arg| !arg.is_a?(Hash) && !arg.to_s.end_with?(REQUIRED_SYMBOL) }
end

Private Instance Methods

validate() click to toggle source
# File lib/teyu.rb, line 137
        def validate
  invalid_variable_names = arg_names.reject { |name| VARIABLE_NAME_REGEXP.match?(name) }
  unless invalid_variable_names.empty?
    raise ArgumentError, "invalid variable names: #{invalid_variable_names.join(', ')}"
  end
end