Class: Riffer::Tools::Param

Inherits:
Object
  • Object
show all
Defined in:
lib/riffer/tools/param.rb

Overview

Riffer::Tools::Param represents a single parameter definition for a tool.

Handles type validation and JSON Schema generation for individual parameters.

Constant Summary collapse

TYPE_MAPPINGS =

Maps Ruby types to JSON Schema type strings

{
  String => "string",
  Integer => "integer",
  Float => "number",
  TrueClass => "boolean",
  FalseClass => "boolean",
  Array => "array",
  Hash => "object"
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, type:, required:, description: nil, enum: nil, default: nil) ⇒ Param

: (name: Symbol, type: Class, required: bool, ?description: String?, ?enum: Array?, ?default: untyped) -> void



27
28
29
30
31
32
33
34
# File 'lib/riffer/tools/param.rb', line 27

def initialize(name:, type:, required:, description: nil, enum: nil, default: nil)
  @name = name.to_sym
  @type = type
  @required = required
  @description = description
  @enum = enum
  @default = default
end

Instance Attribute Details

#defaultObject (readonly)

: untyped



24
25
26
# File 'lib/riffer/tools/param.rb', line 24

def default
  @default
end

#descriptionObject (readonly)

: String?



22
23
24
# File 'lib/riffer/tools/param.rb', line 22

def description
  @description
end

#enumObject (readonly)

: Array?



23
24
25
# File 'lib/riffer/tools/param.rb', line 23

def enum
  @enum
end

#nameObject (readonly)

: Hash[Class, String]



19
20
21
# File 'lib/riffer/tools/param.rb', line 19

def name
  @name
end

#requiredObject (readonly)

: bool



21
22
23
# File 'lib/riffer/tools/param.rb', line 21

def required
  @required
end

#typeObject (readonly)

: Class



20
21
22
# File 'lib/riffer/tools/param.rb', line 20

def type
  @type
end

Instance Method Details

#to_json_schemaObject

Converts this parameter to JSON Schema format.

: () -> Hash[Symbol, untyped]



59
60
61
62
63
64
# File 'lib/riffer/tools/param.rb', line 59

def to_json_schema
  schema = {type: type_name}
  schema[:description] = description if description
  schema[:enum] = enum if enum
  schema
end

#type_nameObject

Returns the JSON Schema type name for this parameter.

: () -> String



52
53
54
# File 'lib/riffer/tools/param.rb', line 52

def type_name
  TYPE_MAPPINGS[type] || type.to_s.downcase
end

#valid_type?(value) ⇒ Boolean

Validates that a value matches the expected type.

: (untyped) -> bool

Returns:

  • (Boolean)


39
40
41
42
43
44
45
46
47
# File 'lib/riffer/tools/param.rb', line 39

def valid_type?(value)
  return true if value.nil? && !required

  if type == TrueClass || type == FalseClass
    value == true || value == false
  else
    value.is_a?(type)
  end
end