Class: Expressir::Express::Builders::ExplicitAttrBuilder
- Inherits:
-
Object
- Object
- Expressir::Express::Builders::ExplicitAttrBuilder
- Defined in:
- lib/expressir/express/builders/explicit_attr_builder.rb
Overview
Builds explicit_attr 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/expressir/express/builders/explicit_attr_builder.rb', line 8 def call(ast_data) list_data = ast_data[:list_of_attribute_decl] attr_decl_data = if list_data.is_a?(Hash) list_data[:attribute_decl] elsif list_data.is_a?(Array) list_data.filter_map do |item| item[:attribute_decl] if item.is_a?(Hash) end else ast_data[:attribute_decl] end attr_decls = Builder.ensure_array(attr_decl_data) optional = !ast_data[:t_optional].nil? type = Builder.build_optional(ast_data[:parameter_type]) attrs = attr_decls.map do |attr_data| Builder.build({ attribute_decl: attr_data }) end attrs.map do |attr| next attr unless attr.is_a?(Expressir::Model::Declarations::Attribute) attr_params = { id: attr.id, kind: Expressir::Model::Declarations::Attribute::EXPLICIT, supertype_attribute: attr.supertype_attribute, type: type, } attr_params[:optional] = true if optional # Preserve source information from the intermediate object attr_params[:source] = attr.source if attr.source if attr.source_offset attr_params[:source_offset] = attr.source_offset end Expressir::Model::Declarations::Attribute.new(**attr_params) end end |