Class: Desiru::Signature
- Inherits:
-
Object
show all
- Defined in:
- lib/desiru/signature.rb
Overview
Represents input/output specifications for modules Supports DSL-style signature strings like “question -> answer”
Defined Under Namespace
Classes: FieldHash, FieldWrapper
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(signature_string, descriptions: {}) ⇒ Signature
Returns a new instance of Signature.
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/desiru/signature.rb', line 79
def initialize(signature_string, descriptions: {})
@raw_signature = signature_string
@descriptions = descriptions
@input_fields = {}
@output_fields = {}
@input_fields_wrapper = FieldHash.new
@output_fields_wrapper = FieldHash.new
parse_signature!
end
|
Instance Attribute Details
#raw_signature ⇒ Object
Returns the value of attribute raw_signature.
65
66
67
|
# File 'lib/desiru/signature.rb', line 65
def raw_signature
@raw_signature
end
|
Instance Method Details
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/desiru/signature.rb', line 120
def coerce_inputs(inputs)
result = {}
@input_fields.each do |name, field|
value = inputs[name] || inputs[name.to_s]
result[name] = field.coerce(value)
end
result
end
|
#coerce_outputs(outputs) ⇒ Object
131
132
133
134
135
136
137
138
139
140
|
# File 'lib/desiru/signature.rb', line 131
def coerce_outputs(outputs)
result = {}
@output_fields.each do |name, field|
value = outputs[name] || outputs[name.to_s]
result[name] = field.coerce(value)
end
result
end
|
67
68
69
|
# File 'lib/desiru/signature.rb', line 67
def input_fields
@input_fields_wrapper
end
|
#output_fields ⇒ Object
Also known as:
outputs
71
72
73
|
# File 'lib/desiru/signature.rb', line 71
def output_fields
@output_fields_wrapper
end
|
#to_h ⇒ Object
142
143
144
145
146
147
148
|
# File 'lib/desiru/signature.rb', line 142
def to_h
{
signature: raw_signature,
inputs: @input_fields.transform_values(&:to_h),
outputs: @output_fields.transform_values(&:to_h)
}
end
|
#to_s ⇒ Object
150
151
152
|
# File 'lib/desiru/signature.rb', line 150
def to_s
raw_signature
end
|
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/desiru/signature.rb', line 90
def valid_inputs?(inputs)
missing = required_input_fields - inputs.keys.map(&:to_sym)
raise SignatureError, "Missing required inputs: #{missing.join(', ')}" if missing.any?
inputs.each do |name, value|
field = @input_fields[name.to_sym]
next unless field
field.valid?(value)
end
true
end
|
#valid_outputs?(outputs) ⇒ Boolean
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/desiru/signature.rb', line 105
def valid_outputs?(outputs)
missing = required_output_fields - outputs.keys.map(&:to_sym)
raise ValidationError, "Missing required outputs: #{missing.join(', ')}" if missing.any?
outputs.each do |name, value|
field = @output_fields[name.to_sym]
next unless field
field.valid?(value)
end
true
end
|