expressir 0.2.10 → 0.2.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/exe/format +27 -0
  3. data/expressir.gemspec +1 -0
  4. data/lib/expressir/express_exp/formatter.rb +90 -100
  5. data/lib/expressir/express_exp/hyperlink_formatter.rb +29 -0
  6. data/lib/expressir/express_exp/parser.rb +7 -1
  7. data/lib/expressir/express_exp/schema_head_formatter.rb +14 -0
  8. data/lib/expressir/express_exp/visitor.rb +68 -80
  9. data/lib/expressir/model.rb +2 -2
  10. data/lib/expressir/model/attribute.rb +2 -0
  11. data/lib/expressir/model/constant.rb +2 -0
  12. data/lib/expressir/model/entity.rb +3 -2
  13. data/lib/expressir/model/enumeration_item.rb +2 -0
  14. data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -0
  15. data/lib/expressir/model/expressions/aggregate_item.rb +2 -0
  16. data/lib/expressir/model/expressions/attribute_reference.rb +2 -0
  17. data/lib/expressir/model/expressions/binary_expression.rb +2 -0
  18. data/lib/expressir/model/expressions/call.rb +2 -0
  19. data/lib/expressir/model/expressions/entity_constructor.rb +2 -0
  20. data/lib/expressir/model/expressions/group_reference.rb +2 -0
  21. data/lib/expressir/model/expressions/index_reference.rb +2 -0
  22. data/lib/expressir/model/expressions/interval.rb +2 -0
  23. data/lib/expressir/model/expressions/query_expression.rb +2 -1
  24. data/lib/expressir/model/expressions/simple_reference.rb +2 -0
  25. data/lib/expressir/model/expressions/unary_expression.rb +2 -0
  26. data/lib/expressir/model/function.rb +3 -8
  27. data/lib/expressir/model/identifier.rb +0 -1
  28. data/lib/expressir/model/informal_proposition.rb +2 -0
  29. data/lib/expressir/model/interface.rb +2 -0
  30. data/lib/expressir/model/{renamed_ref.rb → interface_item.rb} +4 -2
  31. data/lib/expressir/model/interfaced_item.rb +23 -0
  32. data/lib/expressir/model/literals/binary.rb +2 -0
  33. data/lib/expressir/model/literals/integer.rb +2 -0
  34. data/lib/expressir/model/literals/logical.rb +2 -0
  35. data/lib/expressir/model/literals/real.rb +2 -0
  36. data/lib/expressir/model/literals/string.rb +2 -0
  37. data/lib/expressir/model/model_element.rb +85 -12
  38. data/lib/expressir/model/parameter.rb +2 -0
  39. data/lib/expressir/model/procedure.rb +3 -8
  40. data/lib/expressir/model/repository.rb +2 -2
  41. data/lib/expressir/model/rule.rb +4 -9
  42. data/lib/expressir/model/schema.rb +45 -9
  43. data/lib/expressir/model/statements/alias.rb +2 -1
  44. data/lib/expressir/model/statements/assignment.rb +2 -0
  45. data/lib/expressir/model/statements/call.rb +2 -0
  46. data/lib/expressir/model/statements/case.rb +2 -0
  47. data/lib/expressir/model/statements/case_action.rb +2 -0
  48. data/lib/expressir/model/statements/compound.rb +2 -0
  49. data/lib/expressir/model/statements/if.rb +2 -0
  50. data/lib/expressir/model/statements/repeat.rb +2 -1
  51. data/lib/expressir/model/statements/return.rb +2 -0
  52. data/lib/expressir/model/subtype_constraint.rb +2 -1
  53. data/lib/expressir/model/type.rb +3 -6
  54. data/lib/expressir/model/types/aggregate.rb +2 -0
  55. data/lib/expressir/model/types/array.rb +2 -0
  56. data/lib/expressir/model/types/bag.rb +2 -0
  57. data/lib/expressir/model/types/binary.rb +2 -0
  58. data/lib/expressir/model/types/enumeration.rb +2 -0
  59. data/lib/expressir/model/types/generic.rb +2 -0
  60. data/lib/expressir/model/types/generic_entity.rb +2 -0
  61. data/lib/expressir/model/types/list.rb +2 -0
  62. data/lib/expressir/model/types/real.rb +2 -0
  63. data/lib/expressir/model/types/select.rb +2 -0
  64. data/lib/expressir/model/types/set.rb +2 -0
  65. data/lib/expressir/model/types/string.rb +2 -0
  66. data/lib/expressir/model/unique.rb +2 -0
  67. data/lib/expressir/model/variable.rb +2 -0
  68. data/lib/expressir/model/where.rb +2 -0
  69. data/lib/expressir/version.rb +1 -1
  70. data/original/examples/syntax/hyperlink.exp +23 -0
  71. data/original/examples/syntax/hyperlink_formatted.exp +51 -0
  72. data/original/examples/syntax/syntax.exp +18 -18
  73. data/original/examples/syntax/syntax_formatted.exp +32 -24
  74. data/spec/expressir/express_exp/{format_remark_spec.rb → formatter/remark_spec.rb} +2 -2
  75. data/spec/expressir/express_exp/{format_syntax_spec.rb → formatter/syntax_spec.rb} +2 -2
  76. data/spec/expressir/express_exp/hyperlink_formatter_spec.rb +24 -0
  77. data/spec/expressir/express_exp/{head_source_spec.rb → parser/head_source_spec.rb} +1 -1
  78. data/spec/expressir/express_exp/{parse_multiple_spec.rb → parser/multiple_spec.rb} +6 -1
  79. data/spec/expressir/express_exp/{parse_remark_spec.rb → parser/remark_spec.rb} +2 -2
  80. data/spec/expressir/express_exp/{source_spec.rb → parser/source_spec.rb} +1 -1
  81. data/spec/expressir/express_exp/{parse_syntax_spec.rb → parser/syntax_spec.rb} +98 -60
  82. data/spec/expressir/express_exp/schema_head_formatter_spec.rb +36 -0
  83. data/spec/expressir/model/{scope_spec.rb → model_element/find_spec.rb} +7 -2
  84. data/spec/expressir/model/model_element/hash_spec.rb +66 -0
  85. metadata +34 -14
  86. data/lib/expressir/model/scope.rb +0 -63
  87. data/spec/expressir/express_exp/ap233_spec.rb +0 -22
  88. data/spec/expressir/model/model_element_spec.rb +0 -59
@@ -61,21 +61,25 @@ ENTITY attribute_multiple_shorthand_entity;
61
61
  test : BOOLEAN;
62
62
  test2 : BOOLEAN;
63
63
  END_ENTITY;
64
- ENTITY attribute_redeclared_entity;
64
+ ENTITY attribute_redeclared_entity
65
+ SUBTYPE OF (attribute_entity);
65
66
  SELF\attribute_entity.test : BOOLEAN;
66
67
  END_ENTITY;
67
- ENTITY attribute_redeclared_renamed_entity;
68
+ ENTITY attribute_redeclared_renamed_entity
69
+ SUBTYPE OF (attribute_entity);
68
70
  SELF\attribute_entity.test RENAMED test2 : BOOLEAN;
69
71
  END_ENTITY;
70
72
  ENTITY derived_attribute_entity;
71
73
  DERIVE
72
74
  test : BOOLEAN := TRUE;
73
75
  END_ENTITY;
74
- ENTITY derived_attribute_redeclared_entity;
76
+ ENTITY derived_attribute_redeclared_entity
77
+ SUBTYPE OF (attribute_entity);
75
78
  DERIVE
76
79
  SELF\attribute_entity.test : BOOLEAN := TRUE;
77
80
  END_ENTITY;
78
- ENTITY derived_attribute_redeclared_renamed_entity;
81
+ ENTITY derived_attribute_redeclared_renamed_entity
82
+ SUBTYPE OF (attribute_entity);
79
83
  DERIVE
80
84
  SELF\attribute_entity.test RENAMED test2 : BOOLEAN := TRUE;
81
85
  END_ENTITY;
@@ -103,11 +107,13 @@ ENTITY inverse_attribute_bag_bound_entity;
103
107
  INVERSE
104
108
  test : BAG [1:9] OF attribute_entity FOR test;
105
109
  END_ENTITY;
106
- ENTITY inverse_attribute_redeclared_entity;
110
+ ENTITY inverse_attribute_redeclared_entity
111
+ SUBTYPE OF (attribute_entity);
107
112
  INVERSE
108
113
  SELF\attribute_entity.test : attribute_entity FOR test;
109
114
  END_ENTITY;
110
- ENTITY inverse_attribute_redeclared_renamed_entity;
115
+ ENTITY inverse_attribute_redeclared_renamed_entity
116
+ SUBTYPE OF (attribute_entity);
111
117
  INVERSE
112
118
  SELF\attribute_entity.test RENAMED test2 : attribute_entity FOR test;
113
119
  END_ENTITY;
@@ -121,11 +127,13 @@ ENTITY unique_label_entity;
121
127
  UNIQUE
122
128
  UR1 : test;
123
129
  END_ENTITY;
124
- ENTITY unique_qualified_entity;
130
+ ENTITY unique_redeclared_entity
131
+ SUBTYPE OF (attribute_entity);
125
132
  UNIQUE
126
133
  SELF\attribute_entity.test;
127
134
  END_ENTITY;
128
- ENTITY unique_label_qualified_entity;
135
+ ENTITY unique_label_redeclared_entity
136
+ SUBTYPE OF (attribute_entity);
129
137
  UNIQUE
130
138
  UR1 : SELF\attribute_entity.test;
131
139
  END_ENTITY;
@@ -331,13 +339,8 @@ PROCEDURE statements;
331
339
  ;
332
340
  END_ALIAS;
333
341
  END_PROCEDURE;
334
- PROCEDURE alias_attribute_reference_statement;
335
- ALIAS test FOR test.test;
336
- ;
337
- END_ALIAS;
338
- END_PROCEDURE;
339
342
  PROCEDURE alias_group_reference_statement;
340
- ALIAS test FOR test\test;
343
+ ALIAS test FOR test\test2;
341
344
  ;
342
345
  END_ALIAS;
343
346
  END_PROCEDURE;
@@ -351,14 +354,16 @@ PROCEDURE statements;
351
354
  ;
352
355
  END_ALIAS;
353
356
  END_PROCEDURE;
357
+ PROCEDURE alias_attribute_reference_statement;
358
+ ALIAS test FOR test.test2;
359
+ ;
360
+ END_ALIAS;
361
+ END_PROCEDURE;
354
362
  PROCEDURE assignment_simple_reference_statement;
355
363
  test := TRUE;
356
364
  END_PROCEDURE;
357
- PROCEDURE assignment_attribute_reference_statement;
358
- test.test := TRUE;
359
- END_PROCEDURE;
360
365
  PROCEDURE assignment_group_reference_statement;
361
- test\test := TRUE;
366
+ test\test2 := TRUE;
362
367
  END_PROCEDURE;
363
368
  PROCEDURE assignment_index_reference_statement;
364
369
  test[1] := TRUE;
@@ -366,6 +371,9 @@ PROCEDURE statements;
366
371
  PROCEDURE assignment_index2_reference_statement;
367
372
  test[1:9] := TRUE;
368
373
  END_PROCEDURE;
374
+ PROCEDURE assignment_attribute_reference_statement;
375
+ test.test2 := TRUE;
376
+ END_PROCEDURE;
369
377
  PROCEDURE case_statement;
370
378
  CASE test OF
371
379
  TRUE :
@@ -651,7 +659,7 @@ PROCEDURE expressions;
651
659
  and_or_expression : BOOLEAN := TRUE AND FALSE OR TRUE;
652
660
  parenthesis_or_and_expression : BOOLEAN := (TRUE OR FALSE) AND TRUE;
653
661
  and_parenthesis_or_expression : BOOLEAN := TRUE AND (FALSE OR TRUE);
654
- combine_expression : BOOLEAN := test || test;
662
+ combine_expression : BOOLEAN := test || test2;
655
663
  in_expression : BOOLEAN := TRUE IN [TRUE];
656
664
  like_expression : BOOLEAN := 'xxx' LIKE 'xxx';
657
665
  aggregate_initializer_expression : BOOLEAN := [4];
@@ -659,11 +667,11 @@ PROCEDURE expressions;
659
667
  complex_aggregate_initializer_expression : BOOLEAN := [4 + 2];
660
668
  complex_repeated_aggregate_initializer_expression : BOOLEAN := [4 + 2:4 + 2];
661
669
  call_expression : BOOLEAN := parameter_function(TRUE);
662
- simple_reference_expression : BOOLEAN := simple_string_expression;
663
- attribute_reference_expression : BOOLEAN := simple_string_expression.test;
664
- group_reference_expression : BOOLEAN := simple_string_expression\test;
665
- index_reference_expression : BOOLEAN := simple_string_expression[1];
666
- index2_reference_expression : BOOLEAN := simple_string_expression[1:9];
670
+ simple_reference_expression : BOOLEAN := test;
671
+ group_reference_expression : BOOLEAN := test\test2;
672
+ index_reference_expression : BOOLEAN := test[1];
673
+ index2_reference_expression : BOOLEAN := test[1:9];
674
+ attribute_reference_expression : BOOLEAN := test.test2;
667
675
  lt_lt_interval_expression : BOOLEAN := {1 < 5 < 9};
668
676
  lte_lt_interval_expression : BOOLEAN := {1 <= 5 < 9};
669
677
  lt_lte_interval_expression : BOOLEAN := {1 < 5 <= 9};
@@ -4,8 +4,8 @@ require "expressir/express_exp/formatter"
4
4
 
5
5
  RSpec.describe Expressir::ExpressExp::Formatter do
6
6
  describe ".format" do
7
- it "formats a file" do
8
- repo = Expressir::ExpressExp::Parser.from_exp(input_file)
7
+ it "formats remark" do
8
+ repo = Expressir::ExpressExp::Parser.from_file(input_file)
9
9
 
10
10
  result = Expressir::ExpressExp::Formatter.format(repo)
11
11
  expected_result = File.read(output_file)
@@ -4,8 +4,8 @@ require "expressir/express_exp/formatter"
4
4
 
5
5
  RSpec.describe Expressir::ExpressExp::Formatter do
6
6
  describe ".format" do
7
- it "formats a file" do
8
- repo = Expressir::ExpressExp::Parser.from_exp(input_file)
7
+ it "formats syntax" do
8
+ repo = Expressir::ExpressExp::Parser.from_file(input_file)
9
9
 
10
10
  result = Expressir::ExpressExp::Formatter.format(repo)
11
11
  expected_result = File.read(output_file)
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+ require "expressir/express_exp/parser"
3
+ require "expressir/express_exp/hyperlink_formatter"
4
+
5
+ RSpec.describe Expressir::ExpressExp::HyperlinkFormatter do
6
+ describe ".format" do
7
+ it "formats hyperlink" do
8
+ repo = Expressir::ExpressExp::Parser.from_file(input_file)
9
+
10
+ result = Expressir::ExpressExp::HyperlinkFormatter.format(repo)
11
+ expected_result = File.read(output_file)
12
+
13
+ expect(result).to eq(expected_result)
14
+ end
15
+ end
16
+
17
+ def input_file
18
+ @input_file ||= Expressir.root_path.join("original", "examples", "syntax", "hyperlink.exp")
19
+ end
20
+
21
+ def output_file
22
+ @output_file ||= Expressir.root_path.join("original", "examples", "syntax", "hyperlink_formatted.exp")
23
+ end
24
+ end
@@ -5,7 +5,7 @@ RSpec.describe Expressir::ExpressExp::Parser do
5
5
  describe ".head_source" do
6
6
  it "contains original head source" do
7
7
  input = File.read(sample_file)
8
- repo = Expressir::ExpressExp::Parser.from_exp(sample_file)
8
+ repo = Expressir::ExpressExp::Parser.from_file(sample_file)
9
9
 
10
10
  repo.schemas[0].tap do |x|
11
11
  start_index = x.source.index("SCHEMA")
@@ -3,15 +3,20 @@ require "expressir/express_exp/parser"
3
3
 
4
4
  RSpec.describe Expressir::ExpressExp::Parser do
5
5
  describe ".from_files" do
6
- it "build an instance from multiple files file" do
6
+ it "parses multiple files" do
7
7
  repo = Expressir::ExpressExp::Parser.from_files(sample_files)
8
8
 
9
9
  schemas = repo.schemas
10
10
  expect(schemas.count).to eq(5)
11
+ expect(schemas[0].file).to eq(sample_files[0])
11
12
  expect(schemas[0].id).to eq("syntax_schema")
13
+ expect(schemas[1].file).to eq(sample_files[1])
12
14
  expect(schemas[1].id).to eq("remark_schema")
15
+ expect(schemas[2].file).to eq(sample_files[2])
13
16
  expect(schemas[2].id).to eq("entity_schema")
17
+ expect(schemas[3].file).to eq(sample_files[2])
14
18
  expect(schemas[3].id).to eq("version_entity_schema")
19
+ expect(schemas[4].file).to eq(sample_files[2])
15
20
  expect(schemas[4].id).to eq("version_interface_entity_schema")
16
21
  end
17
22
  end
@@ -3,8 +3,8 @@ require "expressir/express_exp/parser"
3
3
 
4
4
  RSpec.describe Expressir::ExpressExp::Parser do
5
5
  describe ".from_file" do
6
- it "build an instance from a file" do
7
- repo = Expressir::ExpressExp::Parser.from_exp(sample_file)
6
+ it "parses remark" do
7
+ repo = Expressir::ExpressExp::Parser.from_file(sample_file)
8
8
 
9
9
  schema = repo.schemas.first
10
10
 
@@ -5,7 +5,7 @@ RSpec.describe Expressir::ExpressExp::Parser do
5
5
  describe ".source" do
6
6
  it "contains original source" do
7
7
  input = File.read(sample_file)
8
- repo = Expressir::ExpressExp::Parser.from_exp(sample_file)
8
+ repo = Expressir::ExpressExp::Parser.from_file(sample_file)
9
9
 
10
10
  schema = repo.schemas.first
11
11
  start_index = input.index("SCHEMA")
@@ -3,8 +3,8 @@ require "expressir/express_exp/parser"
3
3
 
4
4
  RSpec.describe Expressir::ExpressExp::Parser do
5
5
  describe ".from_file" do
6
- it "build an instance from a file" do
7
- repo = Expressir::ExpressExp::Parser.from_exp(sample_file)
6
+ it "parses syntax" do
7
+ repo = Expressir::ExpressExp::Parser.from_file(sample_file)
8
8
 
9
9
  schemas = repo.schemas
10
10
 
@@ -36,8 +36,9 @@ RSpec.describe Expressir::ExpressExp::Parser do
36
36
  expect(x.schema.id).to eq("contract_schema")
37
37
  expect(x.items).to be_instance_of(Array)
38
38
  expect(x.items.count).to eq(1)
39
- expect(x.items[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
40
- expect(x.items[0].id).to eq("contract")
39
+ expect(x.items[0]).to be_instance_of(Expressir::Model::InterfaceItem)
40
+ expect(x.items[0].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
41
+ expect(x.items[0].ref.id).to eq("contract")
41
42
  end
42
43
 
43
44
  interfaces[2].tap do |x|
@@ -47,10 +48,12 @@ RSpec.describe Expressir::ExpressExp::Parser do
47
48
  expect(x.schema.id).to eq("contract_schema")
48
49
  expect(x.items).to be_instance_of(Array)
49
50
  expect(x.items.count).to eq(2)
50
- expect(x.items[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
51
- expect(x.items[0].id).to eq("contract")
52
- expect(x.items[1]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
53
- expect(x.items[1].id).to eq("contract2")
51
+ expect(x.items[0]).to be_instance_of(Expressir::Model::InterfaceItem)
52
+ expect(x.items[0].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
53
+ expect(x.items[0].ref.id).to eq("contract")
54
+ expect(x.items[1]).to be_instance_of(Expressir::Model::InterfaceItem)
55
+ expect(x.items[1].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
56
+ expect(x.items[1].ref.id).to eq("contract2")
54
57
  end
55
58
 
56
59
  interfaces[3].tap do |x|
@@ -60,10 +63,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
60
63
  expect(x.schema.id).to eq("contract_schema")
61
64
  expect(x.items).to be_instance_of(Array)
62
65
  expect(x.items.count).to eq(1)
63
- expect(x.items[0]).to be_instance_of(Expressir::Model::RenamedRef)
66
+ expect(x.items[0]).to be_instance_of(Expressir::Model::InterfaceItem)
67
+ expect(x.items[0].id).to eq("contract2")
64
68
  expect(x.items[0].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
65
69
  expect(x.items[0].ref.id).to eq("contract")
66
- expect(x.items[0].id).to eq("contract2")
67
70
  end
68
71
 
69
72
  interfaces[4].tap do |x|
@@ -80,8 +83,9 @@ RSpec.describe Expressir::ExpressExp::Parser do
80
83
  expect(x.schema.id).to eq("contract_schema")
81
84
  expect(x.items).to be_instance_of(Array)
82
85
  expect(x.items.count).to eq(1)
83
- expect(x.items[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
84
- expect(x.items[0].id).to eq("contract")
86
+ expect(x.items[0]).to be_instance_of(Expressir::Model::InterfaceItem)
87
+ expect(x.items[0].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
88
+ expect(x.items[0].ref.id).to eq("contract")
85
89
  end
86
90
 
87
91
  interfaces[6].tap do |x|
@@ -91,10 +95,12 @@ RSpec.describe Expressir::ExpressExp::Parser do
91
95
  expect(x.schema.id).to eq("contract_schema")
92
96
  expect(x.items).to be_instance_of(Array)
93
97
  expect(x.items.count).to eq(2)
94
- expect(x.items[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
95
- expect(x.items[0].id).to eq("contract")
96
- expect(x.items[1]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
97
- expect(x.items[1].id).to eq("contract2")
98
+ expect(x.items[0]).to be_instance_of(Expressir::Model::InterfaceItem)
99
+ expect(x.items[0].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
100
+ expect(x.items[0].ref.id).to eq("contract")
101
+ expect(x.items[1]).to be_instance_of(Expressir::Model::InterfaceItem)
102
+ expect(x.items[1].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
103
+ expect(x.items[1].ref.id).to eq("contract2")
98
104
  end
99
105
 
100
106
  interfaces[7].tap do |x|
@@ -104,10 +110,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
104
110
  expect(x.schema.id).to eq("contract_schema")
105
111
  expect(x.items).to be_instance_of(Array)
106
112
  expect(x.items.count).to eq(1)
107
- expect(x.items[0]).to be_instance_of(Expressir::Model::RenamedRef)
113
+ expect(x.items[0]).to be_instance_of(Expressir::Model::InterfaceItem)
114
+ expect(x.items[0].id).to eq("contract2")
108
115
  expect(x.items[0].ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
109
116
  expect(x.items[0].ref.id).to eq("contract")
110
- expect(x.items[0].id).to eq("contract2")
111
117
  end
112
118
 
113
119
  # constants
@@ -242,6 +248,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
242
248
 
243
249
  entities.find{|x| x.id == "attribute_redeclared_entity"}.tap do |x|
244
250
  expect(x).to be_instance_of(Expressir::Model::Entity)
251
+ expect(x.subtype_of).to be_instance_of(Array)
252
+ expect(x.subtype_of.count).to eq(1)
253
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
254
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
245
255
  expect(x.attributes).to be_instance_of(Array)
246
256
  expect(x.attributes.count).to eq(1)
247
257
  expect(x.attributes[0]).to be_instance_of(Expressir::Model::Attribute)
@@ -259,6 +269,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
259
269
 
260
270
  entities.find{|x| x.id == "attribute_redeclared_renamed_entity"}.tap do |x|
261
271
  expect(x).to be_instance_of(Expressir::Model::Entity)
272
+ expect(x.subtype_of).to be_instance_of(Array)
273
+ expect(x.subtype_of.count).to eq(1)
274
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
275
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
262
276
  expect(x.attributes).to be_instance_of(Array)
263
277
  expect(x.attributes.count).to eq(1)
264
278
  expect(x.attributes[0]).to be_instance_of(Expressir::Model::Attribute)
@@ -289,6 +303,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
289
303
 
290
304
  entities.find{|x| x.id == "derived_attribute_redeclared_entity"}.tap do |x|
291
305
  expect(x).to be_instance_of(Expressir::Model::Entity)
306
+ expect(x.subtype_of).to be_instance_of(Array)
307
+ expect(x.subtype_of.count).to eq(1)
308
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
309
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
292
310
  expect(x.attributes).to be_instance_of(Array)
293
311
  expect(x.attributes.count).to eq(1)
294
312
  expect(x.attributes[0]).to be_instance_of(Expressir::Model::Attribute)
@@ -308,6 +326,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
308
326
 
309
327
  entities.find{|x| x.id == "derived_attribute_redeclared_renamed_entity"}.tap do |x|
310
328
  expect(x).to be_instance_of(Expressir::Model::Entity)
329
+ expect(x.subtype_of).to be_instance_of(Array)
330
+ expect(x.subtype_of.count).to eq(1)
331
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
332
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
311
333
  expect(x.attributes).to be_instance_of(Array)
312
334
  expect(x.attributes.count).to eq(1)
313
335
  expect(x.attributes[0]).to be_instance_of(Expressir::Model::Attribute)
@@ -421,6 +443,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
421
443
 
422
444
  entities.find{|x| x.id == "inverse_attribute_redeclared_entity"}.tap do |x|
423
445
  expect(x).to be_instance_of(Expressir::Model::Entity)
446
+ expect(x.subtype_of).to be_instance_of(Array)
447
+ expect(x.subtype_of.count).to eq(1)
448
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
449
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
424
450
  expect(x.attributes).to be_instance_of(Array)
425
451
  expect(x.attributes.count).to eq(1)
426
452
  expect(x.attributes[0]).to be_instance_of(Expressir::Model::Attribute)
@@ -441,6 +467,10 @@ RSpec.describe Expressir::ExpressExp::Parser do
441
467
 
442
468
  entities.find{|x| x.id == "inverse_attribute_redeclared_renamed_entity"}.tap do |x|
443
469
  expect(x).to be_instance_of(Expressir::Model::Entity)
470
+ expect(x.subtype_of).to be_instance_of(Array)
471
+ expect(x.subtype_of.count).to eq(1)
472
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
473
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
444
474
  expect(x.attributes).to be_instance_of(Array)
445
475
  expect(x.attributes.count).to eq(1)
446
476
  expect(x.attributes[0]).to be_instance_of(Expressir::Model::Attribute)
@@ -495,8 +525,12 @@ RSpec.describe Expressir::ExpressExp::Parser do
495
525
  expect(x.unique[0].attributes[0].id).to eq("test")
496
526
  end
497
527
 
498
- entities.find{|x| x.id == "unique_qualified_entity"}.tap do |x|
528
+ entities.find{|x| x.id == "unique_redeclared_entity"}.tap do |x|
499
529
  expect(x).to be_instance_of(Expressir::Model::Entity)
530
+ expect(x.subtype_of).to be_instance_of(Array)
531
+ expect(x.subtype_of.count).to eq(1)
532
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
533
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
500
534
  expect(x.unique).to be_instance_of(Array)
501
535
  expect(x.unique.count).to eq(1)
502
536
  expect(x.unique[0]).to be_instance_of(Expressir::Model::Unique)
@@ -524,8 +558,12 @@ RSpec.describe Expressir::ExpressExp::Parser do
524
558
  expect(x.unique[0].attributes[0].id).to eq("test")
525
559
  end
526
560
 
527
- entities.find{|x| x.id == "unique_label_qualified_entity"}.tap do |x|
561
+ entities.find{|x| x.id == "unique_label_redeclared_entity"}.tap do |x|
528
562
  expect(x).to be_instance_of(Expressir::Model::Entity)
563
+ expect(x.subtype_of).to be_instance_of(Array)
564
+ expect(x.subtype_of.count).to eq(1)
565
+ expect(x.subtype_of[0]).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
566
+ expect(x.subtype_of[0].id).to eq("attribute_entity")
529
567
  expect(x.unique).to be_instance_of(Array)
530
568
  expect(x.unique.count).to eq(1)
531
569
  expect(x.unique[0]).to be_instance_of(Expressir::Model::Unique)
@@ -1489,19 +1527,6 @@ RSpec.describe Expressir::ExpressExp::Parser do
1489
1527
  expect(x.statements[0]).to be_instance_of(Expressir::Model::Statements::Null)
1490
1528
  end
1491
1529
 
1492
- x.procedures.find{|x| x.id == "alias_attribute_reference_statement"}.statements[0].tap do |x|
1493
- expect(x).to be_instance_of(Expressir::Model::Statements::Alias)
1494
- expect(x.id).to eq("test")
1495
- expect(x.expression).to be_instance_of(Expressir::Model::Expressions::AttributeReference)
1496
- expect(x.expression.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1497
- expect(x.expression.ref.id).to eq("test")
1498
- expect(x.expression.attribute).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1499
- expect(x.expression.attribute.id).to eq("test")
1500
- expect(x.statements).to be_instance_of(Array)
1501
- expect(x.statements.count).to eq(1)
1502
- expect(x.statements[0]).to be_instance_of(Expressir::Model::Statements::Null)
1503
- end
1504
-
1505
1530
  x.procedures.find{|x| x.id == "alias_group_reference_statement"}.statements[0].tap do |x|
1506
1531
  expect(x).to be_instance_of(Expressir::Model::Statements::Alias)
1507
1532
  expect(x.id).to eq("test")
@@ -1509,7 +1534,7 @@ RSpec.describe Expressir::ExpressExp::Parser do
1509
1534
  expect(x.expression.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1510
1535
  expect(x.expression.ref.id).to eq("test")
1511
1536
  expect(x.expression.entity).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1512
- expect(x.expression.entity.id).to eq("test")
1537
+ expect(x.expression.entity.id).to eq("test2")
1513
1538
  expect(x.statements).to be_instance_of(Array)
1514
1539
  expect(x.statements.count).to eq(1)
1515
1540
  expect(x.statements[0]).to be_instance_of(Expressir::Model::Statements::Null)
@@ -1543,6 +1568,19 @@ RSpec.describe Expressir::ExpressExp::Parser do
1543
1568
  expect(x.statements[0]).to be_instance_of(Expressir::Model::Statements::Null)
1544
1569
  end
1545
1570
 
1571
+ x.procedures.find{|x| x.id == "alias_attribute_reference_statement"}.statements[0].tap do |x|
1572
+ expect(x).to be_instance_of(Expressir::Model::Statements::Alias)
1573
+ expect(x.id).to eq("test")
1574
+ expect(x.expression).to be_instance_of(Expressir::Model::Expressions::AttributeReference)
1575
+ expect(x.expression.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1576
+ expect(x.expression.ref.id).to eq("test")
1577
+ expect(x.expression.attribute).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1578
+ expect(x.expression.attribute.id).to eq("test2")
1579
+ expect(x.statements).to be_instance_of(Array)
1580
+ expect(x.statements.count).to eq(1)
1581
+ expect(x.statements[0]).to be_instance_of(Expressir::Model::Statements::Null)
1582
+ end
1583
+
1546
1584
  x.procedures.find{|x| x.id == "assignment_simple_reference_statement"}.statements[0].tap do |x|
1547
1585
  expect(x).to be_instance_of(Expressir::Model::Statements::Assignment)
1548
1586
  expect(x.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
@@ -1551,24 +1589,13 @@ RSpec.describe Expressir::ExpressExp::Parser do
1551
1589
  expect(x.expression.value).to eq(Expressir::Model::Literals::Logical::TRUE)
1552
1590
  end
1553
1591
 
1554
- x.procedures.find{|x| x.id == "assignment_attribute_reference_statement"}.statements[0].tap do |x|
1555
- expect(x).to be_instance_of(Expressir::Model::Statements::Assignment)
1556
- expect(x.ref).to be_instance_of(Expressir::Model::Expressions::AttributeReference)
1557
- expect(x.ref.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1558
- expect(x.ref.ref.id).to eq("test")
1559
- expect(x.ref.attribute).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1560
- expect(x.ref.attribute.id).to eq("test")
1561
- expect(x.expression).to be_instance_of(Expressir::Model::Literals::Logical)
1562
- expect(x.expression.value).to eq(Expressir::Model::Literals::Logical::TRUE)
1563
- end
1564
-
1565
1592
  x.procedures.find{|x| x.id == "assignment_group_reference_statement"}.statements[0].tap do |x|
1566
1593
  expect(x).to be_instance_of(Expressir::Model::Statements::Assignment)
1567
1594
  expect(x.ref).to be_instance_of(Expressir::Model::Expressions::GroupReference)
1568
1595
  expect(x.ref.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1569
1596
  expect(x.ref.ref.id).to eq("test")
1570
1597
  expect(x.ref.entity).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1571
- expect(x.ref.entity.id).to eq("test")
1598
+ expect(x.ref.entity.id).to eq("test2")
1572
1599
  expect(x.expression).to be_instance_of(Expressir::Model::Literals::Logical)
1573
1600
  expect(x.expression.value).to eq(Expressir::Model::Literals::Logical::TRUE)
1574
1601
  end
@@ -1597,6 +1624,17 @@ RSpec.describe Expressir::ExpressExp::Parser do
1597
1624
  expect(x.expression.value).to eq(Expressir::Model::Literals::Logical::TRUE)
1598
1625
  end
1599
1626
 
1627
+ x.procedures.find{|x| x.id == "assignment_attribute_reference_statement"}.statements[0].tap do |x|
1628
+ expect(x).to be_instance_of(Expressir::Model::Statements::Assignment)
1629
+ expect(x.ref).to be_instance_of(Expressir::Model::Expressions::AttributeReference)
1630
+ expect(x.ref.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1631
+ expect(x.ref.ref.id).to eq("test")
1632
+ expect(x.ref.attribute).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
1633
+ expect(x.ref.attribute.id).to eq("test2")
1634
+ expect(x.expression).to be_instance_of(Expressir::Model::Literals::Logical)
1635
+ expect(x.expression.value).to eq(Expressir::Model::Literals::Logical::TRUE)
1636
+ end
1637
+
1600
1638
  x.procedures.find{|x| x.id == "case_statement"}.statements[0].tap do |x|
1601
1639
  expect(x).to be_instance_of(Expressir::Model::Statements::Case)
1602
1640
  expect(x.expression).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
@@ -2911,29 +2949,21 @@ RSpec.describe Expressir::ExpressExp::Parser do
2911
2949
  # reference expressions
2912
2950
  x.variables.find{|x| x.id == "simple_reference_expression"}.expression.tap do |x|
2913
2951
  expect(x).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2914
- expect(x.id).to eq("simple_string_expression")
2915
- end
2916
-
2917
- x.variables.find{|x| x.id == "attribute_reference_expression"}.expression.tap do |x|
2918
- expect(x).to be_instance_of(Expressir::Model::Expressions::AttributeReference)
2919
- expect(x.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2920
- expect(x.ref.id).to eq("simple_string_expression")
2921
- expect(x.attribute).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2922
- expect(x.attribute.id).to eq("test")
2952
+ expect(x.id).to eq("test")
2923
2953
  end
2924
2954
 
2925
2955
  x.variables.find{|x| x.id == "group_reference_expression"}.expression.tap do |x|
2926
2956
  expect(x).to be_instance_of(Expressir::Model::Expressions::GroupReference)
2927
2957
  expect(x.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2928
- expect(x.ref.id).to eq("simple_string_expression")
2958
+ expect(x.ref.id).to eq("test")
2929
2959
  expect(x.entity).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2930
- expect(x.entity.id).to eq("test")
2960
+ expect(x.entity.id).to eq("test2")
2931
2961
  end
2932
2962
 
2933
2963
  x.variables.find{|x| x.id == "index_reference_expression"}.expression.tap do |x|
2934
2964
  expect(x).to be_instance_of(Expressir::Model::Expressions::IndexReference)
2935
2965
  expect(x.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2936
- expect(x.ref.id).to eq("simple_string_expression")
2966
+ expect(x.ref.id).to eq("test")
2937
2967
  expect(x.index1).to be_instance_of(Expressir::Model::Literals::Integer)
2938
2968
  expect(x.index1.value).to eq("1")
2939
2969
  end
@@ -2941,13 +2971,21 @@ RSpec.describe Expressir::ExpressExp::Parser do
2941
2971
  x.variables.find{|x| x.id == "index2_reference_expression"}.expression.tap do |x|
2942
2972
  expect(x).to be_instance_of(Expressir::Model::Expressions::IndexReference)
2943
2973
  expect(x.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2944
- expect(x.ref.id).to eq("simple_string_expression")
2974
+ expect(x.ref.id).to eq("test")
2945
2975
  expect(x.index1).to be_instance_of(Expressir::Model::Literals::Integer)
2946
2976
  expect(x.index1.value).to eq("1")
2947
2977
  expect(x.index2).to be_instance_of(Expressir::Model::Literals::Integer)
2948
2978
  expect(x.index2.value).to eq("9")
2949
2979
  end
2950
2980
 
2981
+ x.variables.find{|x| x.id == "attribute_reference_expression"}.expression.tap do |x|
2982
+ expect(x).to be_instance_of(Expressir::Model::Expressions::AttributeReference)
2983
+ expect(x.ref).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2984
+ expect(x.ref.id).to eq("test")
2985
+ expect(x.attribute).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
2986
+ expect(x.attribute.id).to eq("test2")
2987
+ end
2988
+
2951
2989
  # interval expressions
2952
2990
  x.variables.find{|x| x.id == "lt_lt_interval_expression"}.expression.tap do |x|
2953
2991
  expect(x).to be_instance_of(Expressir::Model::Expressions::Interval)
@@ -3003,7 +3041,7 @@ RSpec.describe Expressir::ExpressExp::Parser do
3003
3041
  expect(x.operand1).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
3004
3042
  expect(x.operand1.id).to eq("test")
3005
3043
  expect(x.operand2).to be_instance_of(Expressir::Model::Expressions::SimpleReference)
3006
- expect(x.operand2.id).to eq("test")
3044
+ expect(x.operand2.id).to eq("test2")
3007
3045
  end
3008
3046
 
3009
3047
  x.variables.find{|x| x.id == "in_expression"}.expression.tap do |x|