Class: Expressir::Express::Builders::SchemaVersionBuilder

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

Overview

Builds schema_version_id nodes into SchemaVersion objects.

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/schema_version_builder.rb', line 8

def call(ast_data)
  string_val = Builder.build_optional(ast_data[:string_literal])
  value = string_val.is_a?(Expressir::Model::Literals::String) ? string_val.value : string_val.to_s

  items = nil
  if value.start_with?("{") && value.end_with?("}")
    parts = value[1..-2].split
    items = parts.map do |part|
      if (match = part.match(/^(.+)\((\d+)\)$/))
        Expressir::Model::Declarations::SchemaVersionItem.new(
          name: match[1], value: match[2],
        )
      elsif /^\d+$/.match?(part)
        Expressir::Model::Declarations::SchemaVersionItem.new(value: part)
      else
        Expressir::Model::Declarations::SchemaVersionItem.new(name: part)
      end
    end
  end

  Expressir::Model::Declarations::SchemaVersion.new(value: value,
                                                    items: items)
end