Class: Expressir::Express::Formatter

Direct Known Subclasses

PrettyFormatter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Expressir::Express::Formatters::DeclarationsFormatter

#format_declarations_attribute, #format_declarations_constant, #format_declarations_entity, #format_declarations_function, #format_declarations_informal_proposition_rule, #format_declarations_interface, #format_declarations_interface_item, #format_declarations_parameter, #format_declarations_procedure, #format_declarations_rule, #format_declarations_schema, #format_declarations_schema_head, #format_declarations_schema_version, #format_declarations_subtype_constraint, #format_declarations_type, #format_declarations_unique_rule, #format_declarations_variable, #format_declarations_where_rule, included

Methods included from Expressir::Express::Formatters::DataTypesFormatter

#format_data_types_aggregate, #format_data_types_array, #format_data_types_bag, #format_data_types_binary, #format_data_types_boolean, #format_data_types_enumeration, #format_data_types_enumeration_item, #format_data_types_generic, #format_data_types_generic_entity, #format_data_types_integer, #format_data_types_list, #format_data_types_logical, #format_data_types_number, #format_data_types_real, #format_data_types_select, #format_data_types_set, #format_data_types_string, included

Methods included from Expressir::Express::Formatters::ExpressionsFormatter

#format_expressions_aggregate_initializer, #format_expressions_aggregate_initializer_item, #format_expressions_binary_expression, #format_expressions_entity_constructor, #format_expressions_function_call, #format_expressions_interval, #format_expressions_query_expression, #format_expressions_unary_expression, included

Methods included from Expressir::Express::Formatters::StatementsFormatter

#format_statements_alias, #format_statements_assignment, #format_statements_case, #format_statements_case_action, #format_statements_compound, #format_statements_escape, #format_statements_if, #format_statements_null, #format_statements_procedure_call, #format_statements_repeat, #format_statements_return, #format_statements_skip, included

Methods included from Expressir::Express::Formatters::SupertypeExpressionsFormatter

#format_supertype_expressions_binary_supertype_expression, #format_supertype_expressions_oneof_supertype_expression, included

Methods included from Expressir::Express::Formatters::ReferencesFormatter

#format_references_attribute_reference, #format_references_group_reference, #format_references_index_reference, #format_references_simple_reference, included

Methods included from Expressir::Express::Formatters::LiteralsFormatter

#format_literals_binary, #format_literals_integer, #format_literals_logical, #format_literals_real, #format_literals_string, included

Methods included from Expressir::Express::Formatters::RemarkFormatter

#format_end_scope_remark, #format_inline_tail_remark, #format_preamble_remark, #format_preamble_remarks, #format_remark, #format_remarks, #format_untagged_remark

Methods included from Expressir::Express::Formatters::RemarkItemFormatter

#format_remark_item, included

Constructor Details

#initialize(no_remarks: false) ⇒ Formatter

Returns a new instance of Formatter.



73
74
75
# File 'lib/expressir/express/formatter.rb', line 73

def initialize(no_remarks: false)
  @no_remarks = no_remarks
end

Instance Attribute Details

#no_remarksObject

Returns the value of attribute no_remarks.



71
72
73
# File 'lib/expressir/express/formatter.rb', line 71

def no_remarks
  @no_remarks
end

Class Method Details

.format(node) ⇒ Object



77
78
79
# File 'lib/expressir/express/formatter.rb', line 77

def self.format(node)
  new.format(node)
end

.format_registryObject



7
8
9
# File 'lib/expressir/express/formatter.rb', line 7

def self.format_registry
  @format_registry || superclass&.format_registry
end

.register_formatter(model_class, method_name) ⇒ Object



11
12
13
# File 'lib/expressir/express/formatter.rb', line 11

def self.register_formatter(model_class, method_name)
  @format_registry[model_class] = method_name
end

Instance Method Details

#format(node) ⇒ Object



81
82
83
84
85
86
87
88
89
# File 'lib/expressir/express/formatter.rb', line 81

def format(node)
  return "" if node.nil?

  handler = self.class.format_registry[node.class]
  return public_send(handler, node) if handler

  warn "#{node.class.name} format not implemented"
  ""
end

#format_exp_file(node) ⇒ Object



100
101
102
103
# File 'lib/expressir/express/formatter.rb', line 100

def format_exp_file(node)
  result = node.schemas&.map { |x| format(x) }&.join("\n\n")
  result ? "#{result}\n" : ""
end

#format_noop(_node) ⇒ Object



91
92
93
# File 'lib/expressir/express/formatter.rb', line 91

def format_noop(_node)
  ""
end

#format_repository(node) ⇒ Object



95
96
97
98
# File 'lib/expressir/express/formatter.rb', line 95

def format_repository(node)
  result = node.files&.map { |f| format(f) }&.join("\n\n")
  result ? "#{result}\n" : ""
end

#indent(str) ⇒ Object



105
106
107
108
109
# File 'lib/expressir/express/formatter.rb', line 105

def indent(str)
  return if str.nil?

  str.split("\n").map { |x| "#{INDENT}#{x}" }.join("\n")
end