Class: OpenRouter::Schema::SchemaBuilder
- Inherits:
-
Object
- Object
- OpenRouter::Schema::SchemaBuilder
- Defined in:
- lib/open_router/schema.rb
Overview
Internal class for building schemas with DSL
Instance Method Summary collapse
- #additional_properties(allowed = true) ⇒ Object
- #array(name, required: false, description: nil, items: nil, &block) ⇒ Object
- #boolean(name, required: false, description: nil, **options) ⇒ Object
-
#initialize ⇒ SchemaBuilder
constructor
A new instance of SchemaBuilder.
- #integer(name, required: false, description: nil, **options) ⇒ Object
- #no_additional_properties ⇒ Object
- #number(name, required: false, description: nil, **options) ⇒ Object
- #object(name, required: false, description: nil, &block) ⇒ Object
- #property(name, type, required: false, description: nil, **options) ⇒ Object
- #required(*field_names) ⇒ Object
- #strict(value = true) ⇒ Object
- #string(name, required: false, description: nil, **options) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ SchemaBuilder
Returns a new instance of SchemaBuilder.
189 190 191 192 193 194 195 196 197 198 |
# File 'lib/open_router/schema.rb', line 189 def initialize @schema = { type: "object", properties: {}, required: [] } @strict_mode = true # Set additionalProperties to false by default in strict mode @schema[:additionalProperties] = false end |
Instance Method Details
#additional_properties(allowed = true) ⇒ Object
205 206 207 |
# File 'lib/open_router/schema.rb', line 205 def additional_properties(allowed = true) @schema[:additionalProperties] = allowed end |
#array(name, required: false, description: nil, items: nil, &block) ⇒ Object
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/open_router/schema.rb', line 238 def array(name, required: false, description: nil, items: nil, &block) array_def = { type: "array" } array_def[:description] = description if description if items array_def[:items] = items elsif block_given? items_builder = ItemsBuilder.new items_builder.instance_eval(&block) array_def[:items] = items_builder.to_h end @schema[:properties][name] = array_def mark_required(name) if required end |
#boolean(name, required: false, description: nil, **options) ⇒ Object
234 235 236 |
# File 'lib/open_router/schema.rb', line 234 def boolean(name, required: false, description: nil, **) property(name, :boolean, required:, description:, **) end |
#integer(name, required: false, description: nil, **options) ⇒ Object
226 227 228 |
# File 'lib/open_router/schema.rb', line 226 def integer(name, required: false, description: nil, **) property(name, :integer, required:, description:, **) end |
#no_additional_properties ⇒ Object
209 210 211 |
# File 'lib/open_router/schema.rb', line 209 def no_additional_properties additional_properties(false) end |
#number(name, required: false, description: nil, **options) ⇒ Object
230 231 232 |
# File 'lib/open_router/schema.rb', line 230 def number(name, required: false, description: nil, **) property(name, :number, required:, description:, **) end |
#object(name, required: false, description: nil, &block) ⇒ Object
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 |
# File 'lib/open_router/schema.rb', line 254 def object(name, required: false, description: nil, &block) object_def = { type: "object", properties: {}, required: [] } object_def[:description] = description if description if block_given? object_builder = SchemaBuilder.new object_builder.instance_eval(&block) nested_schema = object_builder.to_h object_def[:properties] = nested_schema[:properties] object_def[:required] = nested_schema[:required] if nested_schema.key?(:additionalProperties) object_def[:additionalProperties] = nested_schema[:additionalProperties] end end @schema[:properties][name] = object_def mark_required(name) if required end |
#property(name, type, required: false, description: nil, **options) ⇒ Object
213 214 215 216 217 218 219 220 |
# File 'lib/open_router/schema.rb', line 213 def property(name, type, required: false, description: nil, **) prop_def = { type: type.to_s } prop_def[:description] = description if description prop_def.merge!() @schema[:properties][name] = prop_def mark_required(name) if required end |
#required(*field_names) ⇒ Object
278 279 280 |
# File 'lib/open_router/schema.rb', line 278 def required(*field_names) field_names.each { |name| mark_required(name) } end |
#strict(value = true) ⇒ Object
200 201 202 203 |
# File 'lib/open_router/schema.rb', line 200 def strict(value = true) @strict_mode = value additional_properties(!value) end |
#string(name, required: false, description: nil, **options) ⇒ Object
222 223 224 |
# File 'lib/open_router/schema.rb', line 222 def string(name, required: false, description: nil, **) property(name, :string, required:, description:, **) end |
#to_h ⇒ Object
282 283 284 |
# File 'lib/open_router/schema.rb', line 282 def to_h @schema.dup end |