class Yoda::Model::FunctionSignatures::ParameterList

Attributes

parameters[R]

@return [Array<(String, String)>]

Public Class Methods

new(parameters) click to toggle source

@param parameters [Array<(String, String)>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 9
def initialize(parameters)
  fail ArgumentError, parameters unless parameters.all? { |param| param.is_a?(Array) }
  @parameters = parameters
end

Public Instance Methods

block_parameter() click to toggle source

@return [String, nil]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 65
def block_parameter
  parameter_options[:block_parameter]
end
each(*args, &proc) click to toggle source

@return [Enumerator<(String, String)>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 20
def each(*args, &proc)
  to_a.each(*args, &proc)
end
keyword_rest_parameter() click to toggle source

@return [String, nil]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 60
def keyword_rest_parameter
  parameter_options[:keyword_rest_parameter]
end
optional_keyword_parameters() click to toggle source

@return [Array<(String, String)>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 50
def optional_keyword_parameters
  parameter_options[:optional_keyword_parameters]
end
optional_parameters() click to toggle source

@return [Array<(String, String)>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 40
def optional_parameters
  parameter_options[:optional_parameters]
end
parameter_names() click to toggle source

@return [Array<String>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 25
def parameter_names
  parameters.map(&:first)
end
parameter_options() click to toggle source

@return [Hash{ Symbol => Object }]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 70
def parameter_options
  @parameter_options ||= begin
    options = {
      required_parameters: [],
      optional_parameters: [],
      rest_parameter: nil,
      post_parameters: [],
      required_keyword_parameters: [],
      optional_keyword_parameters: [],
      keyword_rest_parameter: nil,
      block_parameter: nil,
    }
    parameters.each_with_object(options) do |(name, default), obj|
      if name.to_s.start_with?('**')
        obj[:keyword_rest_parameter] ||= name.to_s.gsub(/\A\*\*/, '')
      elsif name.to_s.start_with?('*')
        obj[:rest_parameter] ||= name.to_s.gsub(/\A\*/, '')
      elsif name.to_s.start_with?('&')
        obj[:block_parameter] ||= name.to_s.gsub(/\A\&/, '')
      elsif name.to_s.end_with?(':')
        if default && !default.empty?
          obj[:optional_keyword_parameters].push([name.to_s.gsub(/:\Z/, ''), default])
        else
          obj[:required_keyword_parameters].push(name.to_s.gsub(/:\Z/, ''))
        end
      elsif default && !default.empty?
        obj[:optional_parameters].push([name, default])
      elsif obj[:rest_parameter]
        obj[:post_parameters].push(name.to_s)
      else
        obj[:required_parameters].push(name.to_s)
      end
    end
  end
end
post_parameters() click to toggle source

@return [Array<String>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 35
def post_parameters
  parameter_options[:post_parameters]
end
required_keyword_parameters() click to toggle source

@return [Array<String>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 45
def required_keyword_parameters
  parameter_options[:required_keyword_parameters]
end
required_parameters() click to toggle source

@return [Array<String>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 30
def required_parameters
  parameter_options[:required_parameters]
end
rest_parameter() click to toggle source

@return [String, nil]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 55
def rest_parameter
  parameter_options[:rest_parameter]
end
to_a() click to toggle source

@return [Array<(String, String)>]

# File lib/yoda/model/function_signatures/parameter_list.rb, line 15
def to_a
  parameters
end