Class: Expressir::Express::Builders::UniqueRuleBuilder

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

Overview

Builds unique_rule 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
# File 'lib/expressir/express/builders/unique_rule_builder.rb', line 8

def call(ast_data)
  inner_data = ast_data[:unique_rule] || ast_data

  id = Builder.build_optional(inner_data[:rule_label_id])

  if inner_data[:list_of_referenced_attribute]
    attrs_data = inner_data[:list_of_referenced_attribute]
    if attrs_data.is_a?(Hash)
      ref_attrs = attrs_data[:referenced_attribute]
      ref_attrs = [ref_attrs] unless ref_attrs.is_a?(Array)
      attributes = ref_attrs.filter_map do |attr|
        Builder.build({ referenced_attribute: attr })
      end
    else
      attributes = Builder.build_children(attrs_data)
    end
  else
    attributes = Builder.build_children(inner_data[:referenced_attribute])
  end

  Expressir::Model::Declarations::UniqueRule.new(id: id,
                                                 attributes: attributes.compact)
end