Module: RubyPi::Schema
- Defined in:
- lib/ruby_pi/tools/schema.rb
Class Method Summary collapse
-
.array(description: nil, required: false, items: nil, min_items: nil, max_items: nil, unique_items: nil) ⇒ Hash
Builds a JSON Schema for an array property.
-
.boolean(description = nil, required: false) ⇒ Hash
Builds a JSON Schema for a boolean property.
-
.integer(description = nil, required: false, minimum: nil, maximum: nil, enum: nil) ⇒ Hash
Builds a JSON Schema for an integer property.
-
.number(description = nil, required: false, minimum: nil, maximum: nil, enum: nil) ⇒ Hash
Builds a JSON Schema for a number (float/decimal) property.
-
.object(**properties) ⇒ Hash
Builds a JSON Schema for an object with named properties.
-
.string(description = nil, required: false, enum: nil, format: nil, min_length: nil, max_length: nil, pattern: nil) ⇒ Hash
Builds a JSON Schema for a string property.
Class Method Details
.array(description: nil, required: false, items: nil, min_items: nil, max_items: nil, unique_items: nil) ⇒ Hash
Builds a JSON Schema for an array property.
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/ruby_pi/tools/schema.rb', line 115 def array(description: nil, required: false, items: nil, min_items: nil, max_items: nil, unique_items: nil) schema = { type: "array" } schema[:description] = description if description # Strip internal _required flag from item schemas if present schema[:items] = sanitize(items) if items schema[:minItems] = min_items if min_items schema[:maxItems] = max_items if max_items schema[:uniqueItems] = unique_items unless unique_items.nil? schema[:_required] = true if required schema end |
.boolean(description = nil, required: false) ⇒ Hash
Builds a JSON Schema for a boolean property.
99 100 101 102 103 104 |
# File 'lib/ruby_pi/tools/schema.rb', line 99 def boolean(description = nil, required: false) schema = { type: "boolean" } schema[:description] = description if description schema[:_required] = true if required schema end |
.integer(description = nil, required: false, minimum: nil, maximum: nil, enum: nil) ⇒ Hash
Builds a JSON Schema for an integer property.
66 67 68 69 70 71 72 73 74 |
# File 'lib/ruby_pi/tools/schema.rb', line 66 def integer(description = nil, required: false, minimum: nil, maximum: nil, enum: nil) schema = { type: "integer" } schema[:description] = description if description schema[:minimum] = minimum if minimum schema[:maximum] = maximum if maximum schema[:enum] = enum if enum schema[:_required] = true if required schema end |
.number(description = nil, required: false, minimum: nil, maximum: nil, enum: nil) ⇒ Hash
Builds a JSON Schema for a number (float/decimal) property.
84 85 86 87 88 89 90 91 92 |
# File 'lib/ruby_pi/tools/schema.rb', line 84 def number(description = nil, required: false, minimum: nil, maximum: nil, enum: nil) schema = { type: "number" } schema[:description] = description if description schema[:minimum] = minimum if minimum schema[:maximum] = maximum if maximum schema[:enum] = enum if enum schema[:_required] = true if required schema end |
.object(**properties) ⇒ Hash
Builds a JSON Schema for an object with named properties.
Each keyword argument key is a property name, and its value is a schema hash produced by one of the other builder methods (‘.string`, `.integer`, etc.). Properties marked with `required: true` are collected into the top-level “required” array.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/ruby_pi/tools/schema.rb', line 137 def object(**properties) required_fields = [] cleaned_properties = {} properties.each do |name, prop_schema| # Extract and consume the internal _required flag if prop_schema[:_required] required_fields << name.to_s end # Store a sanitized copy (without _required) under the property name cleaned_properties[name] = sanitize(prop_schema) end schema = { type: "object", properties: cleaned_properties } schema[:required] = required_fields unless required_fields.empty? schema end |
.string(description = nil, required: false, enum: nil, format: nil, min_length: nil, max_length: nil, pattern: nil) ⇒ Hash
Builds a JSON Schema for a string property.
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ruby_pi/tools/schema.rb', line 45 def string(description = nil, required: false, enum: nil, format: nil, min_length: nil, max_length: nil, pattern: nil) schema = { type: "string" } schema[:description] = description if description schema[:enum] = enum if enum schema[:format] = format if format schema[:minLength] = min_length if min_length schema[:maxLength] = max_length if max_length schema[:pattern] = pattern if pattern schema[:_required] = true if required schema end |