Class: Lutaml::Uml::Parsers::Dsl

Inherits:
Parslet::Parser
  • Object
show all
Includes:
Converter::DslToUml
Defined in:
lib/lutaml/uml/parsers/dsl.rb

Overview

Class for parsing LutaML dsl into Lutaml::Uml::Document

Constant Summary collapse

KEYWORDS =
%w[
  abstract
  aggregation
  association
  association
  attribute
  bidirectional
  class
  composition
  data_type
  dependency
  diagram
  directional
  enum
  fontname
  generalizes
  include
  interface
  member
  member_type
  method
  owner
  owner_type
  primitive
  private
  protected
  public
  realizes
  static
  title
  caption
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Converter::DslToUml

#create_uml_association, #create_uml_associations, #create_uml_attribute, #create_uml_attributes, #create_uml_cardinality, #create_uml_class, #create_uml_classes, #create_uml_constraint, #create_uml_constraints, #create_uml_data_type, #create_uml_data_types, #create_uml_diagram, #create_uml_diagrams, #create_uml_document, #create_uml_enum, #create_uml_enums, #create_uml_members, #create_uml_operation, #create_uml_operations, #create_uml_package, #create_uml_packages, #create_uml_value, #create_uml_values, #set_model_attribute, #set_uml_model

Class Method Details

.parse(io, options = {}) ⇒ Lutaml::Uml::Document

Parameters:

  • io (String)
    • LutaML string representation

    Hash

    options - options for parsing

Returns:



23
24
25
# File 'lib/lutaml/uml/parsers/dsl.rb', line 23

def self.parse(io, options = {})
  new.parse(io, options)
end

Instance Method Details

#parse(input_file, _options = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/lutaml/uml/parsers/dsl.rb', line 27

def parse(input_file, _options = {})
  data = Lutaml::Uml::Parsers::DslPreprocessor.call(input_file)
  # https://kschiess.github.io/parslet/tricks.html#Reporter engines
  # Parslet::ErrorReporter::Deepest allows more
  # detailed display of error
  reporter = Parslet::ErrorReporter::Deepest.new
  hash = DslTransform.new.apply(super(data, reporter: reporter))
  create_uml_document(hash)
rescue Parslet::ParseFailed => e
  raise(ParsingError,
        "#{e.message}\ncause: #{e.parse_failure_cause.ascii_tree}")
end