expressir 2.1.13 → 2.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +7 -82
- data/.rubocop_todo.yml +15 -74
- data/Gemfile +4 -5
- data/expressir.gemspec +3 -1
- data/lib/expressir/express/cache.rb +4 -6
- data/lib/expressir/express/formatter.rb +92 -63
- data/lib/expressir/express/model_visitor.rb +10 -9
- data/lib/expressir/express/parser.rb +10 -8
- data/lib/expressir/express/resolve_references_model_visitor.rb +0 -3
- data/lib/expressir/express/visitor.rb +2 -1
- data/lib/expressir/liquid.rb +0 -17
- data/lib/expressir/model/cache.rb +9 -8
- data/lib/expressir/model/data_types/aggregate.rb +6 -11
- data/lib/expressir/model/data_types/array.rb +14 -20
- data/lib/expressir/model/data_types/bag.rb +10 -14
- data/lib/expressir/model/data_types/binary.rb +8 -11
- data/lib/expressir/model/data_types/boolean.rb +6 -1
- data/lib/expressir/model/data_types/enumeration.rb +10 -14
- data/lib/expressir/model/data_types/enumeration_item.rb +3 -5
- data/lib/expressir/model/data_types/generic.rb +4 -6
- data/lib/expressir/model/data_types/generic_entity.rb +4 -6
- data/lib/expressir/model/data_types/integer.rb +6 -1
- data/lib/expressir/model/data_types/list.rb +12 -17
- data/lib/expressir/model/data_types/logical.rb +6 -1
- data/lib/expressir/model/data_types/number.rb +6 -1
- data/lib/expressir/model/data_types/real.rb +6 -8
- data/lib/expressir/model/data_types/select.rb +12 -17
- data/lib/expressir/model/data_types/set.rb +10 -14
- data/lib/expressir/model/data_types/string.rb +8 -11
- data/lib/expressir/model/declarations/attribute.rb +17 -26
- data/lib/expressir/model/declarations/constant.rb +8 -14
- data/lib/expressir/model/declarations/entity.rb +18 -29
- data/lib/expressir/model/declarations/function.rb +25 -39
- data/lib/expressir/model/declarations/interface.rb +12 -16
- data/lib/expressir/model/declarations/interface_item.rb +7 -11
- data/lib/expressir/model/declarations/interfaced_item.rb +11 -18
- data/lib/expressir/model/declarations/parameter.rb +8 -14
- data/lib/expressir/model/declarations/procedure.rb +23 -36
- data/lib/expressir/model/declarations/remark_item.rb +8 -11
- data/lib/expressir/model/declarations/rule.rb +27 -42
- data/lib/expressir/model/declarations/schema.rb +59 -58
- data/lib/expressir/model/declarations/schema_version.rb +7 -10
- data/lib/expressir/model/declarations/schema_version_item.rb +7 -10
- data/lib/expressir/model/declarations/subtype_constraint.rb +12 -20
- data/lib/expressir/model/declarations/type.rb +10 -17
- data/lib/expressir/model/declarations/unique_rule.rb +6 -11
- data/lib/expressir/model/declarations/variable.rb +8 -14
- data/lib/expressir/model/declarations/where_rule.rb +6 -11
- data/lib/expressir/model/expressions/aggregate_initializer.rb +6 -8
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +8 -11
- data/lib/expressir/model/expressions/binary_expression.rb +40 -42
- data/lib/expressir/model/expressions/entity_constructor.rb +8 -11
- data/lib/expressir/model/expressions/function_call.rb +8 -11
- data/lib/expressir/model/expressions/interval.rb +16 -22
- data/lib/expressir/model/expressions/query_expression.rb +8 -14
- data/lib/expressir/model/expressions/unary_expression.rb +11 -14
- data/lib/expressir/model/identifier.rb +8 -25
- data/lib/expressir/model/literals/binary.rb +6 -8
- data/lib/expressir/model/literals/integer.rb +6 -8
- data/lib/expressir/model/literals/logical.rb +9 -11
- data/lib/expressir/model/literals/real.rb +6 -8
- data/lib/expressir/model/literals/string.rb +8 -11
- data/lib/expressir/model/model_element.rb +164 -131
- data/lib/expressir/model/references/attribute_reference.rb +8 -11
- data/lib/expressir/model/references/group_reference.rb +8 -11
- data/lib/expressir/model/references/index_reference.rb +10 -14
- data/lib/expressir/model/references/simple_reference.rb +10 -13
- data/lib/expressir/model/repository.rb +5 -7
- data/lib/expressir/model/statements/alias.rb +8 -14
- data/lib/expressir/model/statements/assignment.rb +8 -11
- data/lib/expressir/model/statements/case.rb +10 -14
- data/lib/expressir/model/statements/case_action.rb +7 -10
- data/lib/expressir/model/statements/compound.rb +6 -8
- data/lib/expressir/model/statements/escape.rb +6 -1
- data/lib/expressir/model/statements/if.rb +10 -14
- data/lib/expressir/model/statements/null.rb +6 -1
- data/lib/expressir/model/statements/procedure_call.rb +8 -11
- data/lib/expressir/model/statements/repeat.rb +16 -26
- data/lib/expressir/model/statements/return.rb +6 -8
- data/lib/expressir/model/statements/skip.rb +6 -1
- data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +12 -16
- data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +6 -8
- data/lib/expressir/model.rb +1 -8
- data/lib/expressir/version.rb +1 -1
- data/lib/expressir.rb +7 -3
- metadata +32 -89
- data/lib/expressir/liquid/cache_drop.rb +0 -20
- data/lib/expressir/liquid/data_type_drop.rb +0 -8
- data/lib/expressir/liquid/data_types/aggregate_drop.rb +0 -21
- data/lib/expressir/liquid/data_types/array_drop.rb +0 -34
- data/lib/expressir/liquid/data_types/bag_drop.rb +0 -26
- data/lib/expressir/liquid/data_types/binary_drop.rb +0 -22
- data/lib/expressir/liquid/data_types/boolean_drop.rb +0 -10
- data/lib/expressir/liquid/data_types/enumeration_drop.rb +0 -30
- data/lib/expressir/liquid/data_types/enumeration_item_drop.rb +0 -17
- data/lib/expressir/liquid/data_types/generic_drop.rb +0 -17
- data/lib/expressir/liquid/data_types/generic_entity_drop.rb +0 -17
- data/lib/expressir/liquid/data_types/integer_drop.rb +0 -10
- data/lib/expressir/liquid/data_types/list_drop.rb +0 -30
- data/lib/expressir/liquid/data_types/logical_drop.rb +0 -10
- data/lib/expressir/liquid/data_types/number_drop.rb +0 -10
- data/lib/expressir/liquid/data_types/real_drop.rb +0 -18
- data/lib/expressir/liquid/data_types/select_drop.rb +0 -34
- data/lib/expressir/liquid/data_types/set_drop.rb +0 -26
- data/lib/expressir/liquid/data_types/string_drop.rb +0 -22
- data/lib/expressir/liquid/declaration_drop.rb +0 -8
- data/lib/expressir/liquid/declarations/attribute_drop.rb +0 -37
- data/lib/expressir/liquid/declarations/constant_drop.rb +0 -25
- data/lib/expressir/liquid/declarations/entity_drop.rb +0 -65
- data/lib/expressir/liquid/declarations/function_drop.rb +0 -93
- data/lib/expressir/liquid/declarations/interface_drop.rb +0 -30
- data/lib/expressir/liquid/declarations/interface_item_drop.rb +0 -22
- data/lib/expressir/liquid/declarations/interfaced_item_drop.rb +0 -34
- data/lib/expressir/liquid/declarations/parameter_drop.rb +0 -25
- data/lib/expressir/liquid/declarations/procedure_drop.rb +0 -89
- data/lib/expressir/liquid/declarations/remark_item_drop.rb +0 -22
- data/lib/expressir/liquid/declarations/rule_drop.rb +0 -105
- data/lib/expressir/liquid/declarations/schema_drop.rb +0 -131
- data/lib/expressir/liquid/declarations/schema_version_drop.rb +0 -26
- data/lib/expressir/liquid/declarations/schema_version_item_drop.rb +0 -22
- data/lib/expressir/liquid/declarations/subtype_constraint_drop.rb +0 -37
- data/lib/expressir/liquid/declarations/type_drop.rb +0 -37
- data/lib/expressir/liquid/declarations/unique_rule_drop.rb +0 -21
- data/lib/expressir/liquid/declarations/variable_drop.rb +0 -25
- data/lib/expressir/liquid/declarations/where_rule_drop.rb +0 -21
- data/lib/expressir/liquid/expression_drop.rb +0 -8
- data/lib/expressir/liquid/expressions/aggregate_initializer_drop.rb +0 -24
- data/lib/expressir/liquid/expressions/aggregate_initializer_item_drop.rb +0 -22
- data/lib/expressir/liquid/expressions/binary_expression_drop.rb +0 -26
- data/lib/expressir/liquid/expressions/entity_constructor_drop.rb +0 -26
- data/lib/expressir/liquid/expressions/function_call_drop.rb +0 -26
- data/lib/expressir/liquid/expressions/interval_drop.rb +0 -34
- data/lib/expressir/liquid/expressions/query_expression_drop.rb +0 -25
- data/lib/expressir/liquid/expressions/unary_expression_drop.rb +0 -22
- data/lib/expressir/liquid/identifier_drop.rb +0 -33
- data/lib/expressir/liquid/literal_drop.rb +0 -8
- data/lib/expressir/liquid/literals/binary_drop.rb +0 -18
- data/lib/expressir/liquid/literals/integer_drop.rb +0 -18
- data/lib/expressir/liquid/literals/logical_drop.rb +0 -18
- data/lib/expressir/liquid/literals/real_drop.rb +0 -18
- data/lib/expressir/liquid/literals/string_drop.rb +0 -22
- data/lib/expressir/liquid/model_element_drop.rb +0 -33
- data/lib/expressir/liquid/reference_drop.rb +0 -8
- data/lib/expressir/liquid/references/attribute_reference_drop.rb +0 -22
- data/lib/expressir/liquid/references/group_reference_drop.rb +0 -22
- data/lib/expressir/liquid/references/index_reference_drop.rb +0 -26
- data/lib/expressir/liquid/references/simple_reference_drop.rb +0 -22
- data/lib/expressir/liquid/repository_drop.rb +0 -25
- data/lib/expressir/liquid/statement_drop.rb +0 -8
- data/lib/expressir/liquid/statements/alias_drop.rb +0 -29
- data/lib/expressir/liquid/statements/assignment_drop.rb +0 -22
- data/lib/expressir/liquid/statements/case_action_drop.rb +0 -26
- data/lib/expressir/liquid/statements/case_drop.rb +0 -30
- data/lib/expressir/liquid/statements/compound_drop.rb +0 -22
- data/lib/expressir/liquid/statements/escape_drop.rb +0 -10
- data/lib/expressir/liquid/statements/if_drop.rb +0 -34
- data/lib/expressir/liquid/statements/null_drop.rb +0 -10
- data/lib/expressir/liquid/statements/procedure_call_drop.rb +0 -26
- data/lib/expressir/liquid/statements/repeat_drop.rb +0 -45
- data/lib/expressir/liquid/statements/return_drop.rb +0 -18
- data/lib/expressir/liquid/statements/skip_drop.rb +0 -10
- data/lib/expressir/liquid/supertype_expression_drop.rb +0 -8
- data/lib/expressir/liquid/supertype_expressions/binary_supertype_expression_drop.rb +0 -26
- data/lib/expressir/liquid/supertype_expressions/oneof_supertype_expression_drop.rb +0 -22
- data/lib/expressir/model/data_type.rb +0 -9
- data/lib/expressir/model/declaration.rb +0 -9
- data/lib/expressir/model/expression.rb +0 -9
- data/lib/expressir/model/literal.rb +0 -9
- data/lib/expressir/model/reference.rb +0 -9
- data/lib/expressir/model/statement.rb +0 -9
- data/lib/expressir/model/supertype_expression.rb +0 -9
@@ -1,5 +1,3 @@
|
|
1
|
-
require_relative "../model"
|
2
|
-
|
3
1
|
module Expressir
|
4
2
|
module Express
|
5
3
|
class Formatter
|
@@ -57,7 +55,7 @@ module Expressir
|
|
57
55
|
# Formats Express model into an Express code
|
58
56
|
# @param [Model::ModelElement] node
|
59
57
|
# @return [String]
|
60
|
-
def format(node)
|
58
|
+
def format(node) # rubocop:disable Metrics/MethodLength
|
61
59
|
case node
|
62
60
|
when Model::Repository
|
63
61
|
format_repository(node)
|
@@ -189,6 +187,18 @@ module Expressir
|
|
189
187
|
format_supertype_expressions_binary_supertype_expression(node)
|
190
188
|
when Model::SupertypeExpressions::OneofSupertypeExpression
|
191
189
|
format_supertype_expressions_oneof_supertype_expression(node)
|
190
|
+
when Model::Declarations::SchemaVersionItem
|
191
|
+
# not implemented yet
|
192
|
+
when Model::Declarations::InterfacedItem
|
193
|
+
# not implemented yet
|
194
|
+
when Model::Declarations::RemarkItem
|
195
|
+
# not implemented yet
|
196
|
+
when Model::Cache
|
197
|
+
# not implemented yet
|
198
|
+
when Model::ModelElement
|
199
|
+
# not implemented yet
|
200
|
+
when NilClass
|
201
|
+
# not implemented yet
|
192
202
|
else
|
193
203
|
warn "#{node.class.name} format not implemented"
|
194
204
|
""
|
@@ -198,7 +208,7 @@ module Expressir
|
|
198
208
|
private
|
199
209
|
|
200
210
|
def format_repository(node)
|
201
|
-
node.schemas
|
211
|
+
node.schemas&.map { |x| format(x) }&.join("\n\n")
|
202
212
|
end
|
203
213
|
|
204
214
|
def format_declarations_attribute(node)
|
@@ -265,9 +275,15 @@ module Expressir
|
|
265
275
|
end
|
266
276
|
|
267
277
|
def format_declarations_entity(node)
|
268
|
-
|
269
|
-
|
270
|
-
|
278
|
+
if node.attributes.nil?
|
279
|
+
explicit_attributes = []
|
280
|
+
derived_attributes = []
|
281
|
+
inverse_attributes = []
|
282
|
+
else
|
283
|
+
explicit_attributes = node.attributes.select { |x| x.kind == Model::Declarations::Attribute::EXPLICIT }
|
284
|
+
derived_attributes = node.attributes.select { |x| x.kind == Model::Declarations::Attribute::DERIVED }
|
285
|
+
inverse_attributes = node.attributes.select { |x| x.kind == Model::Declarations::Attribute::INVERSE }
|
286
|
+
end
|
271
287
|
|
272
288
|
[
|
273
289
|
[
|
@@ -314,7 +330,7 @@ module Expressir
|
|
314
330
|
].join("")),
|
315
331
|
].join("")
|
316
332
|
end,
|
317
|
-
*if node.subtype_of
|
333
|
+
*if node.subtype_of&.length&.positive?
|
318
334
|
[
|
319
335
|
"\n",
|
320
336
|
indent([
|
@@ -345,13 +361,13 @@ module Expressir
|
|
345
361
|
indent(inverse_attributes.map { |x| format(x) }.join("\n")),
|
346
362
|
]
|
347
363
|
end,
|
348
|
-
*if node.unique_rules
|
364
|
+
*if node.unique_rules&.length&.positive?
|
349
365
|
[
|
350
366
|
"UNIQUE",
|
351
367
|
indent(node.unique_rules.map { |x| format(x) }.join("\n")),
|
352
368
|
]
|
353
369
|
end,
|
354
|
-
*if node.where_rules
|
370
|
+
*if node.where_rules&.length&.positive?
|
355
371
|
[
|
356
372
|
"WHERE",
|
357
373
|
indent(node.where_rules.map { |x| format(x) }.join("\n")),
|
@@ -370,7 +386,7 @@ module Expressir
|
|
370
386
|
"FUNCTION",
|
371
387
|
" ",
|
372
388
|
node.id,
|
373
|
-
*if node.parameters
|
389
|
+
*if node.parameters&.length&.positive?
|
374
390
|
parameter_indent = INDENT_CHAR * "FUNCTION #{node.id}(".length
|
375
391
|
[
|
376
392
|
"(",
|
@@ -384,22 +400,22 @@ module Expressir
|
|
384
400
|
format(node.return_type),
|
385
401
|
";",
|
386
402
|
].join(""),
|
387
|
-
*if node.types
|
403
|
+
*if node.types&.length&.positive?
|
388
404
|
indent(node.types.map { |x| format(x) }.join("\n"))
|
389
405
|
end,
|
390
|
-
*if node.entities
|
406
|
+
*if node.entities&.length&.positive?
|
391
407
|
indent(node.entities.map { |x| format(x) }.join("\n"))
|
392
408
|
end,
|
393
|
-
*if node.subtype_constraints
|
409
|
+
*if node.subtype_constraints&.length&.positive?
|
394
410
|
indent(node.subtype_constraints.map { |x| format(x) }.join("\n"))
|
395
411
|
end,
|
396
|
-
*if node.functions
|
412
|
+
*if node.functions&.length&.positive?
|
397
413
|
indent(node.functions.map { |x| format(x) }.join("\n"))
|
398
414
|
end,
|
399
|
-
*if node.procedures
|
415
|
+
*if node.procedures&.length&.positive?
|
400
416
|
indent(node.procedures.map { |x| format(x) }.join("\n"))
|
401
417
|
end,
|
402
|
-
*if node.constants
|
418
|
+
*if node.constants&.length&.positive?
|
403
419
|
indent([
|
404
420
|
"CONSTANT",
|
405
421
|
indent(node.constants.map { |x| format(x) }.join("\n")),
|
@@ -409,7 +425,7 @@ module Expressir
|
|
409
425
|
].join(""),
|
410
426
|
].join("\n"))
|
411
427
|
end,
|
412
|
-
*if node.variables
|
428
|
+
*if node.variables&.length&.positive?
|
413
429
|
indent([
|
414
430
|
"LOCAL",
|
415
431
|
indent(node.variables.map { |x| format(x) }.join("\n")),
|
@@ -419,7 +435,7 @@ module Expressir
|
|
419
435
|
].join(""),
|
420
436
|
].join("\n"))
|
421
437
|
end,
|
422
|
-
*if node.statements
|
438
|
+
*if node.statements&.length&.positive?
|
423
439
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
424
440
|
end,
|
425
441
|
[
|
@@ -439,7 +455,7 @@ module Expressir
|
|
439
455
|
"FROM",
|
440
456
|
" ",
|
441
457
|
format(node.schema),
|
442
|
-
*if node.items
|
458
|
+
*if node.items&.length&.positive?
|
443
459
|
item_indent = INDENT_CHAR * "(".length
|
444
460
|
[
|
445
461
|
"\n",
|
@@ -490,7 +506,7 @@ module Expressir
|
|
490
506
|
"PROCEDURE",
|
491
507
|
" ",
|
492
508
|
node.id,
|
493
|
-
*if node.parameters
|
509
|
+
*if node.parameters&.length&.positive?
|
494
510
|
parameter_indent = INDENT_CHAR * "PROCEDURE #{node.id}(".length
|
495
511
|
[
|
496
512
|
"(",
|
@@ -500,22 +516,22 @@ module Expressir
|
|
500
516
|
end,
|
501
517
|
";",
|
502
518
|
].join(""),
|
503
|
-
*if node.types
|
519
|
+
*if node.types&.length&.positive?
|
504
520
|
indent(node.types.map { |x| format(x) }.join("\n"))
|
505
521
|
end,
|
506
|
-
*if node.entities
|
522
|
+
*if node.entities&.length&.positive?
|
507
523
|
indent(node.entities.map { |x| format(x) }.join("\n"))
|
508
524
|
end,
|
509
|
-
*if node.subtype_constraints
|
525
|
+
*if node.subtype_constraints&.length&.positive?
|
510
526
|
indent(node.subtype_constraints.map { |x| format(x) }.join("\n"))
|
511
527
|
end,
|
512
|
-
*if node.functions
|
528
|
+
*if node.functions&.length&.positive?
|
513
529
|
indent(node.functions.map { |x| format(x) }.join("\n"))
|
514
530
|
end,
|
515
|
-
*if node.procedures
|
531
|
+
*if node.procedures&.length&.positive?
|
516
532
|
indent(node.procedures.map { |x| format(x) }.join("\n"))
|
517
533
|
end,
|
518
|
-
*if node.constants
|
534
|
+
*if node.constants&.length&.positive?
|
519
535
|
indent([
|
520
536
|
"CONSTANT",
|
521
537
|
indent(node.constants.map { |x| format(x) }.join("\n")),
|
@@ -525,7 +541,7 @@ module Expressir
|
|
525
541
|
].join(""),
|
526
542
|
].join("\n"))
|
527
543
|
end,
|
528
|
-
*if node.variables
|
544
|
+
*if node.variables&.length&.positive?
|
529
545
|
indent([
|
530
546
|
"LOCAL",
|
531
547
|
indent(node.variables.map { |x| format(x) }.join("\n")),
|
@@ -535,7 +551,7 @@ module Expressir
|
|
535
551
|
].join(""),
|
536
552
|
].join("\n"))
|
537
553
|
end,
|
538
|
-
*if node.statements
|
554
|
+
*if node.statements&.length&.positive?
|
539
555
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
540
556
|
end,
|
541
557
|
[
|
@@ -546,6 +562,7 @@ module Expressir
|
|
546
562
|
end
|
547
563
|
|
548
564
|
def format_declarations_rule(node)
|
565
|
+
node.applies_to ||= []
|
549
566
|
[
|
550
567
|
[
|
551
568
|
"RULE",
|
@@ -559,22 +576,22 @@ module Expressir
|
|
559
576
|
")",
|
560
577
|
";",
|
561
578
|
].join(""),
|
562
|
-
*if node.types
|
579
|
+
*if node.types&.length&.positive?
|
563
580
|
indent(node.types.map { |x| format(x) }.join("\n"))
|
564
581
|
end,
|
565
|
-
*if node.entities
|
582
|
+
*if node.entities&.length&.positive?
|
566
583
|
indent(node.entities.map { |x| format(x) }.join("\n"))
|
567
584
|
end,
|
568
|
-
*if node.subtype_constraints
|
585
|
+
*if node.subtype_constraints&.length&.positive?
|
569
586
|
indent(node.subtype_constraints.map { |x| format(x) }.join("\n"))
|
570
587
|
end,
|
571
|
-
*if node.functions
|
588
|
+
*if node.functions&.length&.positive?
|
572
589
|
indent(node.functions.map { |x| format(x) }.join("\n"))
|
573
590
|
end,
|
574
|
-
*if node.procedures
|
591
|
+
*if node.procedures&.length&.positive?
|
575
592
|
indent(node.procedures.map { |x| format(x) }.join("\n"))
|
576
593
|
end,
|
577
|
-
*if node.constants
|
594
|
+
*if node.constants&.length&.positive?
|
578
595
|
indent([
|
579
596
|
"CONSTANT",
|
580
597
|
indent(node.constants.map { |x| format(x) }.join("\n")),
|
@@ -584,7 +601,7 @@ module Expressir
|
|
584
601
|
].join(""),
|
585
602
|
].join("\n"))
|
586
603
|
end,
|
587
|
-
*if node.variables
|
604
|
+
*if node.variables&.length&.positive?
|
588
605
|
indent([
|
589
606
|
"LOCAL",
|
590
607
|
indent(node.variables.map { |x| format(x) }.join("\n")),
|
@@ -594,10 +611,10 @@ module Expressir
|
|
594
611
|
].join(""),
|
595
612
|
].join("\n"))
|
596
613
|
end,
|
597
|
-
*if node.statements
|
614
|
+
*if node.statements&.length&.positive?
|
598
615
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
599
616
|
end,
|
600
|
-
*if node.where_rules
|
617
|
+
*if node.where_rules&.length&.positive?
|
601
618
|
[
|
602
619
|
"WHERE",
|
603
620
|
indent(node.where_rules.map { |x| format(x) }.join("\n")),
|
@@ -624,7 +641,7 @@ module Expressir
|
|
624
641
|
end,
|
625
642
|
";",
|
626
643
|
].join(""),
|
627
|
-
*if node.interfaces
|
644
|
+
*if node.interfaces&.length&.positive?
|
628
645
|
[
|
629
646
|
"",
|
630
647
|
node.interfaces.map { |x| format(x) }.join("\n"),
|
@@ -635,7 +652,7 @@ module Expressir
|
|
635
652
|
|
636
653
|
def format_declarations_schema(node)
|
637
654
|
schema_declarations = [
|
638
|
-
*if node.constants
|
655
|
+
*if node.constants&.length&.positive?
|
639
656
|
[
|
640
657
|
"CONSTANT",
|
641
658
|
indent(node.constants.map { |x| format(x) }.join("\n")),
|
@@ -645,19 +662,19 @@ module Expressir
|
|
645
662
|
].join(""),
|
646
663
|
].join("\n")
|
647
664
|
end,
|
648
|
-
*if node.types
|
665
|
+
*if node.types&.length&.positive?
|
649
666
|
node.types.map { |x| format(x) }
|
650
667
|
end,
|
651
|
-
*if node.entities
|
668
|
+
*if node.entities&.length&.positive?
|
652
669
|
node.entities.map { |x| format(x) }
|
653
670
|
end,
|
654
|
-
*if node.subtype_constraints
|
671
|
+
*if node.subtype_constraints&.length&.positive?
|
655
672
|
node.subtype_constraints.map { |x| format(x) }
|
656
673
|
end,
|
657
|
-
*if node.functions
|
674
|
+
*if node.functions&.length&.positive?
|
658
675
|
node.functions.map { |x| format(x) }
|
659
676
|
end,
|
660
|
-
*if node.rules
|
677
|
+
*if node.rules&.length&.positive?
|
661
678
|
node.rules.map { |x| format(x) }
|
662
679
|
end,
|
663
680
|
*if node.procedures&.length&.positive?
|
@@ -667,7 +684,7 @@ module Expressir
|
|
667
684
|
|
668
685
|
[
|
669
686
|
format_declarations_schema_head(node),
|
670
|
-
*if schema_declarations
|
687
|
+
*if schema_declarations&.length&.positive?
|
671
688
|
[
|
672
689
|
"",
|
673
690
|
schema_declarations.join("\n\n"),
|
@@ -710,7 +727,7 @@ module Expressir
|
|
710
727
|
";",
|
711
728
|
].join(""))
|
712
729
|
end,
|
713
|
-
*if node.total_over
|
730
|
+
*if node.total_over&.length&.positive?
|
714
731
|
indent([
|
715
732
|
"TOTAL_OVER",
|
716
733
|
"(",
|
@@ -744,7 +761,7 @@ module Expressir
|
|
744
761
|
format(node.underlying_type),
|
745
762
|
";",
|
746
763
|
].join(""),
|
747
|
-
*if node.where_rules
|
764
|
+
*if node.where_rules&.length&.positive?
|
748
765
|
[
|
749
766
|
"WHERE",
|
750
767
|
indent(node.where_rules.map { |x| format(x) }.join("\n")),
|
@@ -758,6 +775,7 @@ module Expressir
|
|
758
775
|
end
|
759
776
|
|
760
777
|
def format_declarations_unique_rule(node)
|
778
|
+
node.attributes ||= []
|
761
779
|
[
|
762
780
|
*if node.id
|
763
781
|
[
|
@@ -805,6 +823,7 @@ module Expressir
|
|
805
823
|
end
|
806
824
|
|
807
825
|
def format_expressions_aggregate_initializer(node)
|
826
|
+
node.items ||= []
|
808
827
|
[
|
809
828
|
"[",
|
810
829
|
node.items.map { |x| format(x) }.join(", "),
|
@@ -870,6 +889,7 @@ module Expressir
|
|
870
889
|
end
|
871
890
|
|
872
891
|
def format_expressions_entity_constructor(node)
|
892
|
+
node.parameters ||= []
|
873
893
|
[
|
874
894
|
format(node.entity),
|
875
895
|
"(",
|
@@ -927,7 +947,7 @@ module Expressir
|
|
927
947
|
"|",
|
928
948
|
" ",
|
929
949
|
format(node.expression),
|
930
|
-
*format_remarks(node).instance_eval { |x| x
|
950
|
+
*format_remarks(node).instance_eval { |x| x&.length&.positive? ? ["\n", *x, "\n"] : x },
|
931
951
|
")",
|
932
952
|
].join("")
|
933
953
|
end
|
@@ -1038,7 +1058,7 @@ module Expressir
|
|
1038
1058
|
format(node.expression),
|
1039
1059
|
";",
|
1040
1060
|
].join(""),
|
1041
|
-
*if node.statements
|
1061
|
+
*if node.statements&.length&.positive?
|
1042
1062
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
1043
1063
|
end,
|
1044
1064
|
*format_remarks(node),
|
@@ -1063,7 +1083,7 @@ module Expressir
|
|
1063
1083
|
def format_statements_procedure_call(node)
|
1064
1084
|
[
|
1065
1085
|
format(node.procedure),
|
1066
|
-
*if node.parameters
|
1086
|
+
*if node.parameters&.length&.positive?
|
1067
1087
|
[
|
1068
1088
|
"(",
|
1069
1089
|
node.parameters.map { |x| format(x) }.join(", "),
|
@@ -1083,7 +1103,7 @@ module Expressir
|
|
1083
1103
|
" ",
|
1084
1104
|
"OF",
|
1085
1105
|
].join(""),
|
1086
|
-
*if node.actions
|
1106
|
+
*if node.actions&.length&.positive?
|
1087
1107
|
node.actions.map { |x| format(x) }
|
1088
1108
|
end,
|
1089
1109
|
*if node.otherwise_statement
|
@@ -1104,6 +1124,7 @@ module Expressir
|
|
1104
1124
|
end
|
1105
1125
|
|
1106
1126
|
def format_statements_case_action(node)
|
1127
|
+
node.labels ||= []
|
1107
1128
|
[
|
1108
1129
|
[
|
1109
1130
|
node.labels.map { |x| format(x) }.join(", "),
|
@@ -1115,9 +1136,10 @@ module Expressir
|
|
1115
1136
|
end
|
1116
1137
|
|
1117
1138
|
def format_statements_compound(node)
|
1139
|
+
node.statements ||= []
|
1118
1140
|
[
|
1119
1141
|
"BEGIN",
|
1120
|
-
*if node.statements
|
1142
|
+
*if node.statements&.length&.positive?
|
1121
1143
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
1122
1144
|
end,
|
1123
1145
|
[
|
@@ -1143,10 +1165,10 @@ module Expressir
|
|
1143
1165
|
" ",
|
1144
1166
|
"THEN",
|
1145
1167
|
].join(""),
|
1146
|
-
*if node.statements
|
1168
|
+
*if node.statements&.length&.positive?
|
1147
1169
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
1148
1170
|
end,
|
1149
|
-
*if node.else_statements
|
1171
|
+
*if node.else_statements&.length&.positive?
|
1150
1172
|
[
|
1151
1173
|
"ELSE",
|
1152
1174
|
indent(node.else_statements.map { |x| format(x) }.join("\n")),
|
@@ -1164,6 +1186,7 @@ module Expressir
|
|
1164
1186
|
end
|
1165
1187
|
|
1166
1188
|
def format_statements_repeat(node)
|
1189
|
+
node.statements ||= []
|
1167
1190
|
[
|
1168
1191
|
[
|
1169
1192
|
"REPEAT",
|
@@ -1207,7 +1230,7 @@ module Expressir
|
|
1207
1230
|
end,
|
1208
1231
|
";",
|
1209
1232
|
].join(""),
|
1210
|
-
*if node.statements
|
1233
|
+
*if node.statements&.length&.positive?
|
1211
1234
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
1212
1235
|
end,
|
1213
1236
|
*format_remarks(node),
|
@@ -1271,6 +1294,7 @@ module Expressir
|
|
1271
1294
|
end
|
1272
1295
|
|
1273
1296
|
def format_supertype_expressions_oneof_supertype_expression(node)
|
1297
|
+
node.operands ||= []
|
1274
1298
|
[
|
1275
1299
|
"ONEOF",
|
1276
1300
|
"(",
|
@@ -1374,7 +1398,7 @@ module Expressir
|
|
1374
1398
|
"BASED_ON",
|
1375
1399
|
" ",
|
1376
1400
|
format(node.based_on),
|
1377
|
-
*if node.items
|
1401
|
+
*if node.items&.length&.positive?
|
1378
1402
|
item_indent = INDENT_CHAR * "(".length
|
1379
1403
|
[
|
1380
1404
|
" ",
|
@@ -1390,7 +1414,7 @@ module Expressir
|
|
1390
1414
|
].join("")
|
1391
1415
|
else
|
1392
1416
|
[
|
1393
|
-
*if node.items
|
1417
|
+
*if node.items&.length&.positive?
|
1394
1418
|
item_indent = INDENT_CHAR * "(".length
|
1395
1419
|
[
|
1396
1420
|
" ",
|
@@ -1489,6 +1513,7 @@ module Expressir
|
|
1489
1513
|
end
|
1490
1514
|
|
1491
1515
|
def format_data_types_select(node)
|
1516
|
+
node.items ||= []
|
1492
1517
|
[
|
1493
1518
|
*if node.extensible
|
1494
1519
|
[
|
@@ -1509,7 +1534,7 @@ module Expressir
|
|
1509
1534
|
"BASED_ON",
|
1510
1535
|
" ",
|
1511
1536
|
format(node.based_on),
|
1512
|
-
*if node.items
|
1537
|
+
*if node.items&.length&.positive?
|
1513
1538
|
item_indent = INDENT_CHAR * "(".length
|
1514
1539
|
[
|
1515
1540
|
" ",
|
@@ -1525,7 +1550,7 @@ module Expressir
|
|
1525
1550
|
].join("")
|
1526
1551
|
else
|
1527
1552
|
[
|
1528
|
-
*if node.items
|
1553
|
+
*if node.items&.length&.positive?
|
1529
1554
|
item_indent = INDENT_CHAR * "(".length
|
1530
1555
|
[
|
1531
1556
|
"\n",
|
@@ -1582,6 +1607,8 @@ module Expressir
|
|
1582
1607
|
end
|
1583
1608
|
|
1584
1609
|
def indent(str)
|
1610
|
+
return if str.nil?
|
1611
|
+
|
1585
1612
|
str.split("\n").map { |x| "#{INDENT}#{x}" }.join("\n")
|
1586
1613
|
end
|
1587
1614
|
|
@@ -1610,7 +1637,9 @@ module Expressir
|
|
1610
1637
|
end
|
1611
1638
|
|
1612
1639
|
def format_remarks(node)
|
1613
|
-
if node.class.method_defined?(:remarks) && !@no_remarks
|
1640
|
+
if node.class.method_defined?(:remarks) && !@no_remarks &&
|
1641
|
+
!node.remarks.nil?
|
1642
|
+
|
1614
1643
|
node.remarks.map do |remark|
|
1615
1644
|
format_remark(node, remark)
|
1616
1645
|
end
|
@@ -1622,9 +1651,9 @@ module Expressir
|
|
1622
1651
|
def format_scope_remarks(node)
|
1623
1652
|
[
|
1624
1653
|
*format_remarks(node),
|
1625
|
-
*node
|
1654
|
+
*node&.children&.select do |x|
|
1626
1655
|
!x.is_a? Model::DataTypes::EnumerationItem or node.is_a? Model::Declarations::Type
|
1627
|
-
end
|
1656
|
+
end&.flat_map { |x| format_scope_remarks(x) },
|
1628
1657
|
]
|
1629
1658
|
end
|
1630
1659
|
end
|
@@ -1,20 +1,21 @@
|
|
1
|
-
require_relative "../model"
|
2
|
-
|
3
1
|
module Expressir
|
4
2
|
module Express
|
5
3
|
# @abstract
|
6
4
|
class ModelVisitor
|
7
5
|
def visit(node)
|
8
|
-
node.class.
|
9
|
-
|
6
|
+
node.class.attributes.each_key do |symbol|
|
7
|
+
next if ::Expressir::Model::ModelElement::SKIP_ATTRIBUTES.include?(symbol)
|
8
|
+
|
9
|
+
value = node.send(symbol)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
case value
|
12
|
+
when Array
|
13
|
+
value.each do |val|
|
14
|
+
if val.is_a? Model::ModelElement
|
15
|
+
visit(val)
|
15
16
|
end
|
16
17
|
end
|
17
|
-
|
18
|
+
when Model::ModelElement
|
18
19
|
visit(value)
|
19
20
|
end
|
20
21
|
end
|
@@ -1,6 +1,4 @@
|
|
1
1
|
require "parslet"
|
2
|
-
require_relative "resolve_references_model_visitor"
|
3
|
-
require_relative "../model"
|
4
2
|
|
5
3
|
module Expressir
|
6
4
|
module Express
|
@@ -388,9 +386,12 @@ module Expressir
|
|
388
386
|
# @param [Boolean] skip_references skip resolving references
|
389
387
|
# @param [Boolean] include_source attach original source code to model elements
|
390
388
|
# @return [Model::Repository]
|
391
|
-
def self.from_file(file, skip_references: nil, include_source: nil) # rubocop:disable Metrics/AbcSize
|
389
|
+
def self.from_file(file, skip_references: nil, include_source: nil, root_path: nil) # rubocop:disable Metrics/AbcSize
|
392
390
|
source = File.read file
|
393
391
|
|
392
|
+
# remove root path from file path
|
393
|
+
schema_file = root_path ? Pathname.new(file.to_s).relative_path_from(root_path).to_s : file.to_s
|
394
|
+
|
394
395
|
begin
|
395
396
|
ast = Parser.new.parse source
|
396
397
|
rescue Parslet::ParseFailed => e
|
@@ -399,11 +400,12 @@ module Expressir
|
|
399
400
|
end
|
400
401
|
|
401
402
|
visitor = Expressir::Express::Visitor.new(source, include_source: include_source)
|
402
|
-
|
403
|
-
@repository = transformed
|
403
|
+
@repository = visitor.visit_ast ast, :top
|
404
404
|
|
405
405
|
@repository.schemas.each do |schema|
|
406
|
-
schema.file =
|
406
|
+
schema.file = schema_file
|
407
|
+
schema.file_basename = File.basename(schema_file, ".exp")
|
408
|
+
schema.formatted = schema.to_s(no_remarks: true)
|
407
409
|
end
|
408
410
|
|
409
411
|
unless skip_references
|
@@ -419,10 +421,10 @@ module Expressir
|
|
419
421
|
# @param [Boolean] skip_references skip resolving references
|
420
422
|
# @param [Boolean] include_source attach original source code to model elements
|
421
423
|
# @return [Model::Repository]
|
422
|
-
def self.from_files(files, skip_references: nil, include_source: nil)
|
424
|
+
def self.from_files(files, skip_references: nil, include_source: nil, root_path: nil)
|
423
425
|
schemas = files.each_with_index.map do |file, _i|
|
424
426
|
# start = Time.now
|
425
|
-
repository = from_file(file, skip_references: true)
|
427
|
+
repository = from_file(file, skip_references: true, root_path: root_path)
|
426
428
|
# STDERR.puts "#{i+1}/#{files.length} #{file} #{Time.now - start}"
|
427
429
|
repository.schemas
|
428
430
|
end.flatten
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require_relative "../model"
|
2
1
|
require "set"
|
3
2
|
|
4
3
|
# reference type is not recognized
|
@@ -232,8 +231,10 @@ module Expressir
|
|
232
231
|
# check if path can create implicit informal proposition
|
233
232
|
# see https://github.com/lutaml/expressir/issues/50
|
234
233
|
if parent_node.class.method_defined?(:informal_propositions) && current_path.match(/^IP\d+$/)
|
234
|
+
parent_node.informal_propositions ||= []
|
235
235
|
parent_node.informal_propositions << remark_item
|
236
236
|
else
|
237
|
+
parent_node.remark_items ||= []
|
237
238
|
parent_node.remark_items << remark_item
|
238
239
|
end
|
239
240
|
parent_node.reset_children_by_id
|
data/lib/expressir/liquid.rb
CHANGED
@@ -1,18 +1 @@
|
|
1
1
|
require "liquid"
|
2
|
-
|
3
|
-
require_relative "liquid/model_element_drop"
|
4
|
-
|
5
|
-
require_relative "liquid/cache_drop"
|
6
|
-
require_relative "liquid/data_type_drop"
|
7
|
-
require_relative "liquid/declaration_drop"
|
8
|
-
require_relative "liquid/expression_drop"
|
9
|
-
require_relative "liquid/literal_drop"
|
10
|
-
require_relative "liquid/reference_drop"
|
11
|
-
require_relative "liquid/statement_drop"
|
12
|
-
require_relative "liquid/supertype_expression_drop"
|
13
|
-
require_relative "liquid/identifier_drop"
|
14
|
-
require_relative "liquid/repository_drop"
|
15
|
-
|
16
|
-
Dir[File.join(__dir__, "liquid", "**", "*.rb")].sort.each do |f|
|
17
|
-
require f
|
18
|
-
end
|
@@ -2,15 +2,16 @@ module Expressir
|
|
2
2
|
module Model
|
3
3
|
# Cache content object with Expressir version
|
4
4
|
class Cache < ModelElement
|
5
|
-
|
6
|
-
|
5
|
+
attribute :version, :string
|
6
|
+
attribute :root_path, :string
|
7
|
+
attribute :content, ModelElement
|
8
|
+
attribute :_class, :string, default: -> { send(:name) }
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@content = options[:content]
|
10
|
+
key_value do
|
11
|
+
map "_class", to: :_class, render_default: true
|
12
|
+
map "version", to: :version
|
13
|
+
map "root_path", to: :root_path
|
14
|
+
map "content", to: :content
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|