Class: Expressir::Express::Builders::AttributeDeclBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/expressir/express/builders/attribute_decl_builder.rb

Overview

Builds attribute_decl nodes.

Instance Method Summary collapse

Instance Method Details

#call(ast_data) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/expressir/express/builders/attribute_decl_builder.rb', line 8

def call(ast_data)
  id = Builder.build_optional(ast_data[:attribute_id])
  supertype_attribute = nil

  if ast_data[:redeclared_attribute].is_a?(Hash)
    redeclared = ast_data[:redeclared_attribute]
    if redeclared[:qualified_attribute].is_a?(Hash)
      supertype_attribute = Builder.build({ qualified_attribute: redeclared[:qualified_attribute] })

      if supertype_attribute.is_a?(Expressir::Model::References::AttributeReference)
        id ||= supertype_attribute.attribute&.id
      end
    end
    id = Builder.build_optional(redeclared[:attribute_id]) if redeclared[:attribute_id]
  end

  Expressir::Model::Declarations::Attribute.new(
    id: id,
    supertype_attribute: supertype_attribute,
  )
end