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