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.
131 132 133 134 135 136 137 138 139 140 |
# File 'lib/open_router/schema.rb', line 131 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
147 148 149 |
# File 'lib/open_router/schema.rb', line 147 def additional_properties(allowed = true) @schema[:additionalProperties] = allowed end |
#array(name, required: false, description: nil, items: nil, &block) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/open_router/schema.rb', line 180 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
176 177 178 |
# File 'lib/open_router/schema.rb', line 176 def boolean(name, required: false, description: nil, **) property(name, :boolean, required:, description:, **) end |
#integer(name, required: false, description: nil, **options) ⇒ Object
168 169 170 |
# File 'lib/open_router/schema.rb', line 168 def integer(name, required: false, description: nil, **) property(name, :integer, required:, description:, **) end |
#no_additional_properties ⇒ Object
151 152 153 |
# File 'lib/open_router/schema.rb', line 151 def no_additional_properties additional_properties(false) end |
#number(name, required: false, description: nil, **options) ⇒ Object
172 173 174 |
# File 'lib/open_router/schema.rb', line 172 def number(name, required: false, description: nil, **) property(name, :number, required:, description:, **) end |
#object(name, required: false, description: nil, &block) ⇒ Object
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/open_router/schema.rb', line 196 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
155 156 157 158 159 160 161 162 |
# File 'lib/open_router/schema.rb', line 155 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
220 221 222 |
# File 'lib/open_router/schema.rb', line 220 def required(*field_names) field_names.each { |name| mark_required(name) } end |
#strict(value = true) ⇒ Object
142 143 144 145 |
# File 'lib/open_router/schema.rb', line 142 def strict(value = true) @strict_mode = value additional_properties(!value) end |
#string(name, required: false, description: nil, **options) ⇒ Object
164 165 166 |
# File 'lib/open_router/schema.rb', line 164 def string(name, required: false, description: nil, **) property(name, :string, required:, description:, **) end |
#to_h ⇒ Object
224 225 226 |
# File 'lib/open_router/schema.rb', line 224 def to_h @schema.dup end |