Module: Liminal::Schema
- Defined in:
- lib/liminal/schema.rb
Overview
Validation, normalization, and non-mutating composition for OpenAPI Schema Objects.
Class Method Summary collapse
- .all_of(*schemas) ⇒ Object
- .exactly_one(schema, *names) ⇒ Object
- .normalize(schema, dialect: :openapi_3_0) ⇒ Object
- .required(schema, *names) ⇒ Object
Class Method Details
.all_of(*schemas) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/liminal/schema.rb', line 47 def all_of(*schemas) if schemas.empty? raise InvalidSchemaCompositionError, "all_of requires at least one OpenAPI Schema Object." end normalize({"allOf" => schemas.map { |schema| normalize_composition_input(schema) }}) end |
.exactly_one(schema, *names) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/liminal/schema.rb', line 36 def exactly_one(schema, *names) result = normalize_composition_input(schema) normalized_names = normalize_names(names, minimum: 2) constraint = { "oneOf" => normalized_names.map { |name| {"required" => [name]} } } return normalize(result.merge(constraint)) unless result.key?("oneOf") || result.key?("$ref") all_of(result, constraint) end |
.normalize(schema, dialect: :openapi_3_0) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/liminal/schema.rb', line 9 def normalize(schema, dialect: :openapi_3_0) unless schema.is_a?(Hash) raise InvalidSchemaError, "Schema Object must be a Hash; received #{schema.class}." end validator = build_dialect(dialect) normalized = Internal::Normalizer.normalize_keys(schema) validator.validate!(normalized) validator.order(normalized) rescue Dialects::OpenAPI30::InvalidFragmentError => e raise InvalidSchemaError, "Invalid OpenAPI 3.0 Schema Object: #{e.}." end |
.required(schema, *names) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/liminal/schema.rb', line 23 def required(schema, *names) result = normalize_composition_input(schema) normalized_names = normalize_names(names, minimum: 1) constraint = {"required" => normalized_names} if result.key?("$ref") all_of(result, constraint) else result["required"] = (Array(result["required"]) | normalized_names) normalize(result) end end |