Class: Kumi::Core::Export::NodeRegistry
- Inherits:
-
Object
- Object
- Kumi::Core::Export::NodeRegistry
- 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 |