Class: Liminal::Internal::Normalizer
- Inherits:
-
Object
- Object
- Liminal::Internal::Normalizer
- Defined in:
- lib/liminal/internal/normalizer.rb
Overview
Resolves private predicate constraints after type fragments have merged.
Constant Summary collapse
- CONSTRAINTS_KEY =
"__liminal_constraints__"
Class Method Summary collapse
Instance Method Summary collapse
- #call(fragment, path: []) ⇒ Object
-
#initialize(source_name:) ⇒ Normalizer
constructor
A new instance of Normalizer.
Constructor Details
#initialize(source_name:) ⇒ Normalizer
Returns a new instance of Normalizer.
50 51 52 |
# File 'lib/liminal/internal/normalizer.rb', line 50 def initialize(source_name:) @source_name = source_name end |
Class Method Details
.constraint(name, argument = UNSET) ⇒ Object
15 16 17 18 |
# File 'lib/liminal/internal/normalizer.rb', line 15 def constraint(name, argument = UNSET) entry = argument.equal?(UNSET) ? [name] : [name, argument] {CONSTRAINTS_KEY => [entry.freeze]} end |
.normalize_keys(value, path = []) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/liminal/internal/normalizer.rb', line 20 def normalize_keys(value, path = []) case value when Hash original_keys = {} value.each_with_object({}) do |(key, item), normalized| unless key.is_a?(String) || key.is_a?(Symbol) raise InvalidSchemaError, "OpenAPI object key #{key.inspect} at #{Path.display(path)} must be a String or Symbol." end normalized_key = key.to_s.dup if original_keys.key?(normalized_key) raise InvalidSchemaError, "OpenAPI object keys #{original_keys.fetch(normalized_key).inspect} and #{key.inspect} " \ "both normalize to #{normalized_key.inspect} at #{Path.display(path)}." end original_keys[normalized_key] = key normalized[normalized_key] = normalize_keys(item, path + [normalized_key]) end when Array value.map.with_index { |item, index| normalize_keys(item, path + [index]) } when String value.dup else value end end |
Instance Method Details
#call(fragment, path: []) ⇒ Object
54 55 56 |
# File 'lib/liminal/internal/normalizer.rb', line 54 def call(fragment, path: []) normalize_schema(self.class.normalize_keys(fragment), path) end |