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.
147 148 149 150 151 152 153 154 155 156 |
# File 'lib/open_router/schema.rb', line 147 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
163 164 165 |
# File 'lib/open_router/schema.rb', line 163 def additional_properties(allowed = true) @schema[:additionalProperties] = allowed end |
#array(name, required: false, description: nil, items: nil, &block) ⇒ Object
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/open_router/schema.rb', line 196 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
192 193 194 |
# File 'lib/open_router/schema.rb', line 192 def boolean(name, required: false, description: nil, **) property(name, :boolean, required:, description:, **) end |
#integer(name, required: false, description: nil, **options) ⇒ Object
184 185 186 |
# File 'lib/open_router/schema.rb', line 184 def integer(name, required: false, description: nil, **) property(name, :integer, required:, description:, **) end |
#no_additional_properties ⇒ Object
167 168 169 |
# File 'lib/open_router/schema.rb', line 167 def no_additional_properties additional_properties(false) end |
#number(name, required: false, description: nil, **options) ⇒ Object
188 189 190 |
# File 'lib/open_router/schema.rb', line 188 def number(name, required: false, description: nil, **) property(name, :number, required:, description:, **) end |
#object(name, required: false, description: nil, &block) ⇒ Object
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/open_router/schema.rb', line 212 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
171 172 173 174 175 176 177 178 |
# File 'lib/open_router/schema.rb', line 171 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
236 237 238 |
# File 'lib/open_router/schema.rb', line 236 def required(*field_names) field_names.each { |name| mark_required(name) } end |
#strict(value = true) ⇒ Object
158 159 160 161 |
# File 'lib/open_router/schema.rb', line 158 def strict(value = true) @strict_mode = value additional_properties(!value) end |
#string(name, required: false, description: nil, **options) ⇒ Object
180 181 182 |
# File 'lib/open_router/schema.rb', line 180 def string(name, required: false, description: nil, **) property(name, :string, required:, description:, **) end |
#to_h ⇒ Object
240 241 242 |
# File 'lib/open_router/schema.rb', line 240 def to_h @schema.dup end |