Class: Kumi::Core::Export::NodeRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/kumi/core/export/node_registry.rb

Constant Summary collapse

SERIALIZATION_MAP =

Maps AST classes to JSON type names

{
  "Kumi::Syntax::Root" => "root",
  "Kumi::Syntax::InputDeclaration" => "field_declaration",
  "Kumi::Syntax::ValueDeclaration" => "attribute_declaration",
  "Kumi::Syntax::TraitDeclaration" => "trait_declaration",
  "Kumi::Syntax::CallExpression" => "call_expression",
  "Kumi::Syntax::ArrayExpression" => "list_expression",
  "Kumi::Syntax::HashExpression" => "hash_expression",
  "Kumi::Syntax::CascadeExpression" => "cascade_expression",
  "Kumi::Syntax::CaseExpression" => "when_case_expression",
  "Kumi::Syntax::Literal" => "literal",
  "Kumi::Syntax::InputReference" => "field_reference",
  "Kumi::Syntax::DeclarationReference" => "binding_reference"
}.freeze
DESERIALIZATION_MAP =

Maps JSON type names back to AST classes (using new canonical class names)

{
  "root" => "Kumi::Syntax::Root",
  "field_declaration" => "Kumi::Syntax::InputDeclaration",
  "attribute_declaration" => "Kumi::Syntax::ValueDeclaration",
  "trait_declaration" => "Kumi::Syntax::TraitDeclaration",
  "call_expression" => "Kumi::Syntax::CallExpression",
  "list_expression" => "Kumi::Syntax::ArrayExpression",
  "hash_expression" => "Kumi::Syntax::HashExpression",
  "cascade_expression" => "Kumi::Syntax::CascadeExpression",
  "when_case_expression" => "Kumi::Syntax::CaseExpression",
  "literal" => "Kumi::Syntax::Literal",
  "field_reference" => "Kumi::Syntax::InputReference",
  "binding_reference" => "Kumi::Syntax::DeclarationReference"
}.freeze

Class Method Summary collapse

Class Method Details

.class_for_type(type_name) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/kumi/core/export/node_registry.rb', line 44

def self.class_for_type(type_name)
  class_name = DESERIALIZATION_MAP[type_name] or
    raise Kumi::Core::Export::Errors::DeserializationError, "Unknown type name: #{type_name}"

  # Resolve the class from string name
  class_name.split("::").reduce(Object) { |const, name| const.const_get(name) }
end

.type_name_for(node) ⇒ Object



39
40
41
42
# File 'lib/kumi/core/export/node_registry.rb', line 39

def self.type_name_for(node)
  SERIALIZATION_MAP[node.class.name] or
    raise Kumi::Core::Export::Errors::SerializationError, "Unknown node type: #{node.class.name}"
end