Class: Liminal::Compiler
- Inherits:
-
Object
- Object
- Liminal::Compiler
- Defined in:
- lib/liminal/compiler.rb
Overview
Coordinates AST adaptation, predicate compilation, overrides, and dialect validation. Raw dry-schema AST layout is intentionally absent here.
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(schema, dialect:, source_name:, exclude:, overrides:, predicates:) ⇒ Compiler
constructor
A new instance of Compiler.
Constructor Details
#initialize(schema, dialect:, source_name:, exclude:, overrides:, predicates:) ⇒ Compiler
Returns a new instance of Compiler.
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/liminal/compiler.rb', line 14 def initialize(schema, dialect:, source_name:, exclude:, overrides:, predicates:) @schema = schema @source_name = source_name || infer_source_name(schema) @dialect = build_dialect(dialect) @excluded_paths = normalize_exclusions(exclude) @overrides = normalize_overrides(overrides) @predicates = predicates validate_predicates! validate_path_configuration! @adapter = Adapters::DrySchemaV1.new @normalizer = Internal::Normalizer.new(source_name: @source_name) end |
Instance Method Details
#call ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/liminal/compiler.rb', line 27 def call validate_source! root = @adapter.call(@schema.to_ast) @known_paths = collect_paths(root) compiled = compile_node(root, []) check_unknown_paths! normalized = @normalizer.call(compiled) @dialect.validate!(normalized) @dialect.order(normalized) rescue Dialects::OpenAPI30::InvalidFragmentError => e raise Error, "Compiler produced an invalid OpenAPI 3.0 schema for #{@source_name}: #{e.}" end |