Class: AdvancedCodeGenerator::Parameter

Inherits:
Object
  • Object
show all
Defined in:
lib/advanced_code_generator/parameter.rb

Overview

Represents a single method parameter configuration.

This class encapsulates the metadata for a method parameter, including its type (required, optional, keyword, etc.), name, and default value. It’s used internally by CodeGenerator::MethodConfig to store parameter definitions that are later converted to Ruby method signatures.

Examples:

Parameter usage

param = CodeGenerator::Parameter.new(:required, :user_id)
param.to_ruby_param # => "user_id"

See Also:

  • CodeGenerator::MethodConfig

Constant Summary collapse

VALID_TYPES =

Valid parameter types for method definitions.

Returns:

  • (Array<Symbol>)
%i[required optional keyword_required keyword].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, name, default: nil) ⇒ Parameter

Initializes a new Parameter instance.

Examples:

# Required parameter
param = CodeGenerator::Parameter.new(:required, :id)

# Optional parameter with default
param = CodeGenerator::Parameter.new(:optional, :options, default: {})

# Required keyword parameter
param = CodeGenerator::Parameter.new(:keyword_required, :format)

# Optional keyword parameter
param = CodeGenerator::Parameter.new(:keyword, :timeout, default: 30)

Parameters:

  • type (Symbol)

    The parameter type (must be one of VALID_TYPES)

  • name (Symbol)

    The parameter name

  • default (Object, nil) (defaults to: nil)

    The default value for optional parameters (defaults to nil)

Raises:

  • (ArgumentError)

    If type is invalid or name is not a Symbol



50
51
52
53
54
55
56
57
# File 'lib/advanced_code_generator/parameter.rb', line 50

def initialize(type, name, default: nil)
  raise ArgumentError, "Invalid parameter type: #{type}" unless VALID_TYPES.include?(type)
  raise ArgumentError, 'Parameter name must be a Symbol' unless name.is_a?(Symbol)

  @type = type
  @name = name
  @default = default
end

Instance Attribute Details

#defaultObject? (readonly)

Returns The default value for optional parameters (nil for required parameters).

Returns:

  • (Object, nil)

    The default value for optional parameters (nil for required parameters)



29
30
31
# File 'lib/advanced_code_generator/parameter.rb', line 29

def default
  @default
end

#nameSymbol (readonly)

Returns The name of the parameter.

Returns:

  • (Symbol)

    The name of the parameter



26
27
28
# File 'lib/advanced_code_generator/parameter.rb', line 26

def name
  @name
end

#typeSymbol (readonly)

Returns The type of parameter (:required, :optional, :keyword_required, :keyword).

Returns:

  • (Symbol)

    The type of parameter (:required, :optional, :keyword_required, :keyword)



23
24
25
# File 'lib/advanced_code_generator/parameter.rb', line 23

def type
  @type
end

Instance Method Details

#ruby_param_nameSymbol

Returns the parameter name as a Symbol.

This is a convenience method that simply returns the #name attribute.

Examples:

param = CodeGenerator::Parameter.new(:required, :user_id)
param.ruby_param_name # => :user_id

Returns:

  • (Symbol)

    The parameter name



109
110
111
# File 'lib/advanced_code_generator/parameter.rb', line 109

def ruby_param_name
  name
end

#to_ruby_paramString

Converts the parameter configuration to a Ruby method parameter string.

This method generates the appropriate Ruby syntax for the parameter based on its type and configuration, which is used when defining methods with CodeGenerator::Generator.

Examples:

CodeGenerator::Parameter.new(:required, :name).to_ruby_param
# => "name"

CodeGenerator::Parameter.new(:optional, :options, default: {}).to_ruby_param
# => "options = {}"

CodeGenerator::Parameter.new(:keyword_required, :format).to_ruby_param
# => "format:"

CodeGenerator::Parameter.new(:keyword, :timeout, default: 30).to_ruby_param
# => "timeout: 30"

Returns:

  • (String)

    The Ruby parameter string



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/advanced_code_generator/parameter.rb', line 79

def to_ruby_param
  case type
  when :required
    name.to_s
  when :optional
    if default.nil?
      "#{name} = nil"
    else
      "#{name} = #{default.inspect}"
    end
  when :keyword_required
    "#{name}:"
  when :keyword
    if default.nil?
      "#{name}: nil"
    else
      "#{name}: #{default.inspect}"
    end
  end
end