expressir 1.2.5-x64-mingw-ucrt

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.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/.cross_rubies +15 -0
  3. data/.github/workflows/rake.yml +300 -0
  4. data/.github/workflows/release.yml +120 -0
  5. data/.gitignore +23 -0
  6. data/.gitmodules +6 -0
  7. data/.hound.yml +3 -0
  8. data/.rspec +2 -0
  9. data/.rubocop.yml +17 -0
  10. data/.yardopts +11 -0
  11. data/Gemfile +4 -0
  12. data/README.adoc +147 -0
  13. data/Rakefile +17 -0
  14. data/bin/console +11 -0
  15. data/bin/rspec +29 -0
  16. data/bin/setup +8 -0
  17. data/docs/development.md +90 -0
  18. data/exe/expressir +22 -0
  19. data/exe/format +18 -0
  20. data/exe/format-test +81 -0
  21. data/exe/generate-parser +51 -0
  22. data/expressir.gemspec +48 -0
  23. data/lib/expressir/cli/ui.rb +36 -0
  24. data/lib/expressir/cli.rb +21 -0
  25. data/lib/expressir/config.rb +23 -0
  26. data/lib/expressir/express/3.1/express_parser.so +0 -0
  27. data/lib/expressir/express/cache.rb +51 -0
  28. data/lib/expressir/express/formatter.rb +1608 -0
  29. data/lib/expressir/express/hyperlink_formatter.rb +36 -0
  30. data/lib/expressir/express/model_visitor.rb +24 -0
  31. data/lib/expressir/express/parser.rb +84 -0
  32. data/lib/expressir/express/resolve_references_model_visitor.rb +31 -0
  33. data/lib/expressir/express/schema_head_formatter.rb +23 -0
  34. data/lib/expressir/express/visitor.rb +2578 -0
  35. data/lib/expressir/model/cache.rb +17 -0
  36. data/lib/expressir/model/data_type.rb +9 -0
  37. data/lib/expressir/model/data_types/aggregate.rb +31 -0
  38. data/lib/expressir/model/data_types/array.rb +31 -0
  39. data/lib/expressir/model/data_types/bag.rb +25 -0
  40. data/lib/expressir/model/data_types/binary.rb +22 -0
  41. data/lib/expressir/model/data_types/boolean.rb +10 -0
  42. data/lib/expressir/model/data_types/enumeration.rb +25 -0
  43. data/lib/expressir/model/data_types/enumeration_item.rb +26 -0
  44. data/lib/expressir/model/data_types/generic.rb +26 -0
  45. data/lib/expressir/model/data_types/generic_entity.rb +26 -0
  46. data/lib/expressir/model/data_types/integer.rb +10 -0
  47. data/lib/expressir/model/data_types/list.rb +28 -0
  48. data/lib/expressir/model/data_types/logical.rb +10 -0
  49. data/lib/expressir/model/data_types/number.rb +10 -0
  50. data/lib/expressir/model/data_types/real.rb +19 -0
  51. data/lib/expressir/model/data_types/select.rb +28 -0
  52. data/lib/expressir/model/data_types/set.rb +25 -0
  53. data/lib/expressir/model/data_types/string.rb +22 -0
  54. data/lib/expressir/model/declaration.rb +9 -0
  55. data/lib/expressir/model/declarations/attribute.rb +47 -0
  56. data/lib/expressir/model/declarations/constant.rb +34 -0
  57. data/lib/expressir/model/declarations/entity.rb +53 -0
  58. data/lib/expressir/model/declarations/function.rb +67 -0
  59. data/lib/expressir/model/declarations/interface.rb +28 -0
  60. data/lib/expressir/model/declarations/interface_item.rb +23 -0
  61. data/lib/expressir/model/declarations/interfaced_item.rb +37 -0
  62. data/lib/expressir/model/declarations/parameter.rb +34 -0
  63. data/lib/expressir/model/declarations/procedure.rb +64 -0
  64. data/lib/expressir/model/declarations/remark_item.rb +21 -0
  65. data/lib/expressir/model/declarations/rule.rb +71 -0
  66. data/lib/expressir/model/declarations/schema.rb +117 -0
  67. data/lib/expressir/model/declarations/schema_version.rb +22 -0
  68. data/lib/expressir/model/declarations/schema_version_item.rb +22 -0
  69. data/lib/expressir/model/declarations/subtype_constraint.rb +40 -0
  70. data/lib/expressir/model/declarations/type.rb +45 -0
  71. data/lib/expressir/model/declarations/unique_rule.rb +31 -0
  72. data/lib/expressir/model/declarations/variable.rb +34 -0
  73. data/lib/expressir/model/declarations/where_rule.rb +31 -0
  74. data/lib/expressir/model/expression.rb +9 -0
  75. data/lib/expressir/model/expressions/aggregate_initializer.rb +19 -0
  76. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +22 -0
  77. data/lib/expressir/model/expressions/binary_expression.rb +53 -0
  78. data/lib/expressir/model/expressions/entity_constructor.rb +22 -0
  79. data/lib/expressir/model/expressions/function_call.rb +22 -0
  80. data/lib/expressir/model/expressions/interval.rb +34 -0
  81. data/lib/expressir/model/expressions/query_expression.rb +35 -0
  82. data/lib/expressir/model/expressions/unary_expression.rb +27 -0
  83. data/lib/expressir/model/identifier.rb +34 -0
  84. data/lib/expressir/model/literal.rb +9 -0
  85. data/lib/expressir/model/literals/binary.rb +19 -0
  86. data/lib/expressir/model/literals/integer.rb +19 -0
  87. data/lib/expressir/model/literals/logical.rb +23 -0
  88. data/lib/expressir/model/literals/real.rb +19 -0
  89. data/lib/expressir/model/literals/string.rb +22 -0
  90. data/lib/expressir/model/model_element.rb +208 -0
  91. data/lib/expressir/model/reference.rb +9 -0
  92. data/lib/expressir/model/references/attribute_reference.rb +22 -0
  93. data/lib/expressir/model/references/group_reference.rb +22 -0
  94. data/lib/expressir/model/references/index_reference.rb +27 -0
  95. data/lib/expressir/model/references/simple_reference.rb +24 -0
  96. data/lib/expressir/model/repository.rb +23 -0
  97. data/lib/expressir/model/statement.rb +9 -0
  98. data/lib/expressir/model/statements/alias.rb +35 -0
  99. data/lib/expressir/model/statements/assignment.rb +22 -0
  100. data/lib/expressir/model/statements/case.rb +25 -0
  101. data/lib/expressir/model/statements/case_action.rb +22 -0
  102. data/lib/expressir/model/statements/compound.rb +19 -0
  103. data/lib/expressir/model/statements/escape.rb +10 -0
  104. data/lib/expressir/model/statements/if.rb +25 -0
  105. data/lib/expressir/model/statements/null.rb +10 -0
  106. data/lib/expressir/model/statements/procedure_call.rb +22 -0
  107. data/lib/expressir/model/statements/repeat.rb +47 -0
  108. data/lib/expressir/model/statements/return.rb +19 -0
  109. data/lib/expressir/model/statements/skip.rb +10 -0
  110. data/lib/expressir/model/supertype_expression.rb +9 -0
  111. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +29 -0
  112. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +19 -0
  113. data/lib/expressir/model.rb +79 -0
  114. data/lib/expressir/version.rb +3 -0
  115. data/lib/expressir.rb +20 -0
  116. data/rakelib/antlr4-native.rake +63 -0
  117. data/rakelib/cross-ruby.rake +367 -0
  118. data/spec/acceptance/version_spec.rb +17 -0
  119. data/spec/expressir/express/cache_spec.rb +67 -0
  120. data/spec/expressir/express/formatter_spec.rb +135 -0
  121. data/spec/expressir/express/parser_spec.rb +104 -0
  122. data/spec/expressir/model/model_element_spec.rb +274 -0
  123. data/spec/spec_helper.rb +17 -0
  124. data/spec/support/console_helper.rb +29 -0
  125. data/spec/syntax/multiple.exp +23 -0
  126. data/spec/syntax/multiple.yaml +198 -0
  127. data/spec/syntax/multiple_formatted.exp +71 -0
  128. data/spec/syntax/multiple_hyperlink_formatted.exp +71 -0
  129. data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +13 -0
  130. data/spec/syntax/remark.exp +191 -0
  131. data/spec/syntax/remark.yaml +466 -0
  132. data/spec/syntax/remark_formatted.exp +227 -0
  133. data/spec/syntax/single.exp +4 -0
  134. data/spec/syntax/single.yaml +18 -0
  135. data/spec/syntax/single_formatted.exp +10 -0
  136. data/spec/syntax/single_formatted.yaml +36 -0
  137. data/spec/syntax/syntax.exp +333 -0
  138. data/spec/syntax/syntax.yaml +3509 -0
  139. data/spec/syntax/syntax_formatted.exp +902 -0
  140. data/spec/syntax/syntax_hyperlink_formatted.exp +902 -0
  141. data/spec/syntax/syntax_schema_head_formatted.exp +18 -0
  142. metadata +387 -0
@@ -0,0 +1,274 @@
1
+ require "yaml"
2
+ require "spec_helper"
3
+ require "expressir/express/parser"
4
+ require "expressir/express/formatter"
5
+
6
+ RSpec.describe Expressir::Model::ModelElement do
7
+ describe ".to_hash" do
8
+ it "exports an object with a formatter (single.exp)" do |example|
9
+ print "\n[#{example.description}] "
10
+ exp_file = Expressir.root_path.join("spec", "syntax", "single.exp")
11
+ yaml_file = Expressir.root_path.join("spec", "syntax", "single_formatted.yaml")
12
+
13
+ repo = Expressir::Express::Parser.from_file(exp_file)
14
+
15
+ result = YAML.dump(repo.to_hash(root_path: Expressir.root_path, formatter: Expressir::Express::Formatter))
16
+ # File.write(yaml_file, result)
17
+ expected_result = File.read(yaml_file)
18
+
19
+ expect(result).to eq(expected_result)
20
+ end
21
+ end
22
+
23
+ describe ".from_hash" do
24
+ it "parses an object (single.yaml)" do |example|
25
+ print "\n[#{example.description}] "
26
+ yaml_file = Expressir.root_path.join("spec", "syntax", "single.yaml")
27
+
28
+ input = YAML.safe_load(File.read(yaml_file))
29
+ repo = Expressir::Model::ModelElement.from_hash(input, root_path: Expressir.root_path)
30
+
31
+ result = YAML.dump(repo.to_hash(root_path: Expressir.root_path))
32
+ expected_result = File.read(yaml_file)
33
+
34
+ expect(result).to eq(expected_result)
35
+ end
36
+
37
+ it "parses an object (multiple.yaml)" do |example|
38
+ print "\n[#{example.description}] "
39
+ yaml_file = Expressir.root_path.join("spec", "syntax", "multiple.yaml")
40
+
41
+ input = YAML.safe_load(File.read(yaml_file), permitted_classes: [Symbol]) # For UTF8 symbols
42
+ repo = Expressir::Model::ModelElement.from_hash(input, root_path: Expressir.root_path)
43
+
44
+ result = YAML.dump(repo.to_hash(root_path: Expressir.root_path))
45
+ expected_result = File.read(yaml_file)
46
+
47
+ expect(result).to eq(expected_result)
48
+ end
49
+
50
+ it "parses an object (syntax.yaml)" do |example|
51
+ print "\n[#{example.description}] "
52
+ yaml_file = Expressir.root_path.join("spec", "syntax", "syntax.yaml")
53
+
54
+ input = YAML.safe_load(File.read(yaml_file), permitted_classes: [Symbol]) # For UTF8 symbols
55
+ repo = Expressir::Model::ModelElement.from_hash(input, root_path: Expressir.root_path)
56
+
57
+ result = YAML.dump(repo.to_hash(root_path: Expressir.root_path))
58
+ expected_result = File.read(yaml_file)
59
+
60
+ expect(result).to eq(expected_result)
61
+ end
62
+
63
+ it "parses an object (remark.yaml)" do |example|
64
+ print "\n[#{example.description}] "
65
+ yaml_file = Expressir.root_path.join("spec", "syntax", "remark.yaml")
66
+
67
+ input = YAML.safe_load(File.read(yaml_file), permitted_classes: [Symbol]) # For UTF8 symbols
68
+ repo = Expressir::Model::ModelElement.from_hash(input, root_path: Expressir.root_path)
69
+
70
+ result = YAML.dump(repo.to_hash(root_path: Expressir.root_path))
71
+ expected_result = File.read(yaml_file)
72
+
73
+ expect(result).to eq(expected_result)
74
+ end
75
+ end
76
+
77
+ describe ".find" do
78
+ it "finds an object (single.exp)" do |example|
79
+ print "\n[#{example.description}] "
80
+ exp_file = Expressir.root_path.join("spec", "syntax", "single.exp")
81
+
82
+ repo = Expressir::Express::Parser.from_file(exp_file)
83
+
84
+ # universal scope
85
+ expect(repo.find("single_schema")).to be_instance_of(Expressir::Model::Declarations::Schema)
86
+ expect(repo.find("single_schema.empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
87
+
88
+ # schema scope
89
+ schema = repo.schemas.first
90
+ expect(schema.find("empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
91
+ end
92
+
93
+ it "finds an object (multiple.exp)" do |example|
94
+ print "\n[#{example.description}] "
95
+ exp_file = Expressir.root_path.join("spec", "syntax", "multiple.exp")
96
+
97
+ repo = Expressir::Express::Parser.from_file(exp_file)
98
+
99
+ # universal scope
100
+ expect(repo.find("multiple_schema")).to be_instance_of(Expressir::Model::Declarations::Schema)
101
+ expect(repo.find("multiple_schema.empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
102
+ expect(repo.find("multiple_schema.attribute_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
103
+ expect(repo.find("multiple_schema.attribute_entity2")).to be_instance_of(Expressir::Model::Declarations::Entity)
104
+ expect(repo.find("multiple_schema.attribute_entity3")).to be_instance_of(Expressir::Model::Declarations::Entity)
105
+ expect(repo.find("multiple_schema.attribute_entity4")).to be_instance_of(Expressir::Model::Declarations::Entity)
106
+
107
+ # schema scope
108
+ schema = repo.schemas.first
109
+ expect(schema.find("empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
110
+ expect(schema.find("attribute_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
111
+ expect(schema.find("attribute_entity2")).to be_instance_of(Expressir::Model::Declarations::Entity)
112
+ expect(schema.find("attribute_entity3")).to be_instance_of(Expressir::Model::Declarations::Entity)
113
+ expect(schema.find("attribute_entity4")).to be_instance_of(Expressir::Model::Declarations::Entity)
114
+ end
115
+
116
+ it "finds an object (syntax.exp)" do |example|
117
+ print "\n[#{example.description}] "
118
+ exp_file = Expressir.root_path.join("spec", "syntax", "syntax.exp")
119
+
120
+ repo = Expressir::Express::Parser.from_file(exp_file)
121
+
122
+ # universal scope
123
+ expect(repo.find("syntax_schema")).to be_instance_of(Expressir::Model::Declarations::Schema)
124
+ expect(repo.find("syntax_schema.empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
125
+
126
+ # schema scope
127
+ schema = repo.schemas.first
128
+ expect(schema.find("empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
129
+ end
130
+
131
+ it "finds an object (remark.exp)" do |example|
132
+ print "\n[#{example.description}] "
133
+ exp_file = Expressir.root_path.join("spec", "syntax", "remark.exp")
134
+
135
+ repo = Expressir::Express::Parser.from_file(exp_file)
136
+
137
+ # universal scope
138
+ expect(repo.find("remark_schema")).to be_instance_of(Expressir::Model::Declarations::Schema)
139
+ expect(repo.find("remark_schema.remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
140
+ expect(repo.find("remark_schema.remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
141
+ expect(repo.find("remark_schema.remark_type.WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
142
+ expect(repo.find("remark_schema.remark_type.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
143
+ expect(repo.find("remark_schema.remark_type.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
144
+ expect(repo.find("remark_schema.remark_type.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
145
+ expect(repo.find("remark_schema.remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
146
+ expect(repo.find("remark_schema.remark_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
147
+ expect(repo.find("remark_schema.remark_entity.remark_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
148
+ expect(repo.find("remark_schema.remark_entity.remark_derived_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
149
+ expect(repo.find("remark_schema.remark_entity.remark_inverse_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
150
+ expect(repo.find("remark_schema.remark_entity.UR1")).to be_instance_of(Expressir::Model::Declarations::UniqueRule)
151
+ expect(repo.find("remark_schema.remark_entity.WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
152
+ expect(repo.find("remark_schema.remark_entity.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
153
+ expect(repo.find("remark_schema.remark_entity.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
154
+ expect(repo.find("remark_schema.remark_entity.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
155
+ expect(repo.find("remark_schema.remark_subtype_constraint")).to be_instance_of(Expressir::Model::Declarations::SubtypeConstraint)
156
+ expect(repo.find("remark_schema.remark_function")).to be_instance_of(Expressir::Model::Declarations::Function)
157
+ expect(repo.find("remark_schema.remark_function.remark_parameter")).to be_instance_of(Expressir::Model::Declarations::Parameter)
158
+ expect(repo.find("remark_schema.remark_function.remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
159
+ expect(repo.find("remark_schema.remark_function.remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
160
+ expect(repo.find("remark_schema.remark_function.remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
161
+ expect(repo.find("remark_schema.remark_function.remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
162
+ expect(repo.find("remark_schema.remark_procedure")).to be_instance_of(Expressir::Model::Declarations::Procedure)
163
+ expect(repo.find("remark_schema.remark_procedure.remark_parameter")).to be_instance_of(Expressir::Model::Declarations::Parameter)
164
+ expect(repo.find("remark_schema.remark_procedure.remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
165
+ expect(repo.find("remark_schema.remark_procedure.remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
166
+ expect(repo.find("remark_schema.remark_procedure.remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
167
+ expect(repo.find("remark_schema.remark_procedure.remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
168
+ expect(repo.find("remark_schema.remark_rule")).to be_instance_of(Expressir::Model::Declarations::Rule)
169
+ expect(repo.find("remark_schema.remark_rule.remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
170
+ expect(repo.find("remark_schema.remark_rule.remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
171
+ expect(repo.find("remark_schema.remark_rule.remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
172
+ expect(repo.find("remark_schema.remark_rule.remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
173
+ expect(repo.find("remark_schema.remark_rule.WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
174
+ expect(repo.find("remark_schema.remark_rule.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
175
+ expect(repo.find("remark_schema.remark_rule.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
176
+ expect(repo.find("remark_schema.remark_rule.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
177
+ expect(repo.find("remark_schema.remark_item")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
178
+
179
+ # schema scope
180
+ schema = repo.schemas.first
181
+ expect(schema.find("remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
182
+ expect(schema.find("remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
183
+ expect(schema.find("remark_type.WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
184
+ expect(schema.find("remark_type.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
185
+ expect(schema.find("remark_type.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
186
+ expect(schema.find("remark_type.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
187
+ expect(schema.find("remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
188
+ expect(schema.find("remark_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
189
+ expect(schema.find("remark_entity.remark_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
190
+ expect(schema.find("remark_entity.remark_derived_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
191
+ expect(schema.find("remark_entity.remark_inverse_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
192
+ expect(schema.find("remark_entity.UR1")).to be_instance_of(Expressir::Model::Declarations::UniqueRule)
193
+ expect(schema.find("remark_entity.WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
194
+ expect(schema.find("remark_entity.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
195
+ expect(schema.find("remark_entity.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
196
+ expect(schema.find("remark_entity.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
197
+ expect(schema.find("remark_subtype_constraint")).to be_instance_of(Expressir::Model::Declarations::SubtypeConstraint)
198
+ expect(schema.find("remark_function")).to be_instance_of(Expressir::Model::Declarations::Function)
199
+ expect(schema.find("remark_function.remark_parameter")).to be_instance_of(Expressir::Model::Declarations::Parameter)
200
+ expect(schema.find("remark_function.remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
201
+ expect(schema.find("remark_function.remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
202
+ expect(schema.find("remark_function.remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
203
+ expect(schema.find("remark_function.remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
204
+ expect(schema.find("remark_procedure")).to be_instance_of(Expressir::Model::Declarations::Procedure)
205
+ expect(schema.find("remark_procedure.remark_parameter")).to be_instance_of(Expressir::Model::Declarations::Parameter)
206
+ expect(schema.find("remark_procedure.remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
207
+ expect(schema.find("remark_procedure.remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
208
+ expect(schema.find("remark_procedure.remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
209
+ expect(schema.find("remark_procedure.remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
210
+ expect(schema.find("remark_rule")).to be_instance_of(Expressir::Model::Declarations::Rule)
211
+ expect(schema.find("remark_rule.remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
212
+ expect(schema.find("remark_rule.remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
213
+ expect(schema.find("remark_rule.remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
214
+ expect(schema.find("remark_rule.remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
215
+ expect(schema.find("remark_rule.WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
216
+ expect(schema.find("remark_rule.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
217
+ expect(schema.find("remark_rule.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
218
+ expect(schema.find("remark_rule.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
219
+ expect(schema.find("remark_item")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
220
+
221
+ # type scope
222
+ type = schema.types.first
223
+ expect(type.find("WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
224
+ expect(type.find("wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
225
+ expect(type.find("IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
226
+ expect(type.find("ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
227
+
228
+ # entity scope
229
+ entity = schema.entities.first
230
+ expect(entity.find("remark_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
231
+ expect(entity.find("remark_derived_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
232
+ expect(entity.find("remark_inverse_attribute")).to be_instance_of(Expressir::Model::Declarations::Attribute)
233
+ expect(entity.find("UR1")).to be_instance_of(Expressir::Model::Declarations::UniqueRule)
234
+ expect(entity.find("WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
235
+ expect(entity.find("wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
236
+ expect(entity.find("IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
237
+ expect(entity.find("ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
238
+
239
+ # function scope
240
+ function = schema.functions.first
241
+ expect(function.find("remark_parameter")).to be_instance_of(Expressir::Model::Declarations::Parameter)
242
+ expect(function.find("remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
243
+ expect(function.find("remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
244
+ expect(function.find("remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
245
+ expect(function.find("remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
246
+
247
+ # procedure scope
248
+ procedure = schema.procedures.first
249
+ expect(procedure.find("remark_parameter")).to be_instance_of(Expressir::Model::Declarations::Parameter)
250
+ expect(procedure.find("remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
251
+ expect(procedure.find("remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
252
+ expect(procedure.find("remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
253
+ expect(procedure.find("remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
254
+
255
+ # rule scope
256
+ rule = schema.rules.first
257
+ expect(rule.find("remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
258
+ expect(rule.find("remark_enumeration_item")).to be_instance_of(Expressir::Model::DataTypes::EnumerationItem)
259
+ expect(rule.find("remark_constant")).to be_instance_of(Expressir::Model::Declarations::Constant)
260
+ expect(rule.find("remark_variable")).to be_instance_of(Expressir::Model::Declarations::Variable)
261
+ expect(rule.find("WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
262
+ expect(rule.find("wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
263
+ expect(rule.find("IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
264
+ expect(rule.find("ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
265
+
266
+ # retry search in parent scope
267
+ expect(entity.find("remark_type")).to be_instance_of(Expressir::Model::Declarations::Type)
268
+ expect(entity.find("remark_type.WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
269
+ expect(entity.find("remark_type.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
270
+ expect(entity.find("remark_type.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
271
+ expect(entity.find("remark_type.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
272
+ end
273
+ end
274
+ end
@@ -0,0 +1,17 @@
1
+ require "bundler/setup"
2
+ require "expressir"
3
+
4
+ Dir["./spec/support/**/*.rb"].sort.each { |file| require file }
5
+
6
+ RSpec.configure do |config|
7
+ # Enable flags like --only-failures and --next-failure
8
+ config.example_status_persistence_file_path = ".rspec_status"
9
+ config.include Expressir::ConsoleHelper
10
+
11
+ # Disable RSpec exposing methods globally on `Module` and `main`
12
+ config.disable_monkey_patching!
13
+
14
+ config.expect_with :rspec do |c|
15
+ c.syntax = :expect
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ module Expressir
2
+ module ConsoleHelper
3
+ def capture_stdout(&_block)
4
+ original_stdout = $stdout
5
+ $stdout = fake = StringIO.new
6
+
7
+ begin
8
+ yield
9
+ ensure
10
+ $stdout = original_stdout
11
+ end
12
+
13
+ fake.string
14
+ end
15
+
16
+ def capture_stderr(&_block)
17
+ original_stderr = $stderr
18
+ $stderr = fake = StringIO.new
19
+
20
+ begin
21
+ yield
22
+ ensure
23
+ $stderr = original_stderr
24
+ end
25
+
26
+ fake.string
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,23 @@
1
+ SCHEMA multiple_schema;
2
+ REFERENCE FROM multiple_schema2;
3
+ REFERENCE FROM multiple_schema3 (attribute_entity3);
4
+ REFERENCE FROM multiple_schema4 (attribute_entity AS attribute_entity4);
5
+ ENTITY test; END_ENTITY;
6
+ ENTITY empty_entity; END_ENTITY;
7
+ ENTITY attribute_entity; test : BOOLEAN; END_ENTITY;
8
+ ENTITY subtype_empty_entity SUBTYPE OF (empty_entity); END_ENTITY;
9
+ ENTITY subtype_attribute_entity SUBTYPE OF (attribute_entity); SELF\attribute_entity.test : BOOLEAN; END_ENTITY;
10
+ ENTITY subtype_attribute_entity2 SUBTYPE OF (attribute_entity2); SELF\attribute_entity2.test : BOOLEAN; END_ENTITY;
11
+ ENTITY subtype_attribute_entity3 SUBTYPE OF (attribute_entity3); SELF\attribute_entity3.test : BOOLEAN; END_ENTITY;
12
+ ENTITY subtype_attribute_entity4 SUBTYPE OF (attribute_entity4); SELF\attribute_entity4.test : BOOLEAN; END_ENTITY;
13
+ ENTITY subtype_missing_entity SUBTYPE OF (missing_entity); END_ENTITY;
14
+ END_SCHEMA;
15
+ SCHEMA multiple_schema2;
16
+ ENTITY attribute_entity2; test : BOOLEAN; END_ENTITY;
17
+ END_SCHEMA;
18
+ SCHEMA multiple_schema3;
19
+ ENTITY attribute_entity3; test : BOOLEAN; END_ENTITY;
20
+ END_SCHEMA;
21
+ SCHEMA multiple_schema4;
22
+ ENTITY attribute_entity; test : BOOLEAN; END_ENTITY;
23
+ END_SCHEMA;
@@ -0,0 +1,198 @@
1
+ ---
2
+ _class: Expressir::Model::Repository
3
+ schemas:
4
+ - _class: Expressir::Model::Declarations::Schema
5
+ file: spec/syntax/multiple.exp
6
+ id: multiple_schema
7
+ interfaces:
8
+ - _class: Expressir::Model::Declarations::Interface
9
+ kind: :REFERENCE
10
+ schema:
11
+ _class: Expressir::Model::References::SimpleReference
12
+ id: multiple_schema2
13
+ base_path: multiple_schema2
14
+ - _class: Expressir::Model::Declarations::Interface
15
+ kind: :REFERENCE
16
+ schema:
17
+ _class: Expressir::Model::References::SimpleReference
18
+ id: multiple_schema3
19
+ base_path: multiple_schema3
20
+ items:
21
+ - _class: Expressir::Model::Declarations::InterfaceItem
22
+ ref:
23
+ _class: Expressir::Model::References::SimpleReference
24
+ id: attribute_entity3
25
+ base_path: multiple_schema3.attribute_entity3
26
+ - _class: Expressir::Model::Declarations::Interface
27
+ kind: :REFERENCE
28
+ schema:
29
+ _class: Expressir::Model::References::SimpleReference
30
+ id: multiple_schema4
31
+ base_path: multiple_schema4
32
+ items:
33
+ - _class: Expressir::Model::Declarations::InterfaceItem
34
+ ref:
35
+ _class: Expressir::Model::References::SimpleReference
36
+ id: attribute_entity
37
+ base_path: multiple_schema4.attribute_entity
38
+ id: attribute_entity4
39
+ entities:
40
+ - _class: Expressir::Model::Declarations::Entity
41
+ id: test
42
+ - _class: Expressir::Model::Declarations::Entity
43
+ id: empty_entity
44
+ - _class: Expressir::Model::Declarations::Entity
45
+ id: attribute_entity
46
+ attributes:
47
+ - _class: Expressir::Model::Declarations::Attribute
48
+ id: test
49
+ kind: :EXPLICIT
50
+ type:
51
+ _class: Expressir::Model::DataTypes::Boolean
52
+ - _class: Expressir::Model::Declarations::Entity
53
+ id: subtype_empty_entity
54
+ subtype_of:
55
+ - _class: Expressir::Model::References::SimpleReference
56
+ id: empty_entity
57
+ base_path: multiple_schema.empty_entity
58
+ - _class: Expressir::Model::Declarations::Entity
59
+ id: subtype_attribute_entity
60
+ subtype_of:
61
+ - _class: Expressir::Model::References::SimpleReference
62
+ id: attribute_entity
63
+ base_path: multiple_schema.attribute_entity
64
+ attributes:
65
+ - _class: Expressir::Model::Declarations::Attribute
66
+ kind: :EXPLICIT
67
+ supertype_attribute:
68
+ _class: Expressir::Model::References::AttributeReference
69
+ ref:
70
+ _class: Expressir::Model::References::GroupReference
71
+ ref:
72
+ _class: Expressir::Model::References::SimpleReference
73
+ id: SELF
74
+ entity:
75
+ _class: Expressir::Model::References::SimpleReference
76
+ id: attribute_entity
77
+ base_path: multiple_schema.attribute_entity
78
+ attribute:
79
+ _class: Expressir::Model::References::SimpleReference
80
+ id: test
81
+ type:
82
+ _class: Expressir::Model::DataTypes::Boolean
83
+ - _class: Expressir::Model::Declarations::Entity
84
+ id: subtype_attribute_entity2
85
+ subtype_of:
86
+ - _class: Expressir::Model::References::SimpleReference
87
+ id: attribute_entity2
88
+ base_path: multiple_schema2.attribute_entity2
89
+ attributes:
90
+ - _class: Expressir::Model::Declarations::Attribute
91
+ kind: :EXPLICIT
92
+ supertype_attribute:
93
+ _class: Expressir::Model::References::AttributeReference
94
+ ref:
95
+ _class: Expressir::Model::References::GroupReference
96
+ ref:
97
+ _class: Expressir::Model::References::SimpleReference
98
+ id: SELF
99
+ entity:
100
+ _class: Expressir::Model::References::SimpleReference
101
+ id: attribute_entity2
102
+ base_path: multiple_schema2.attribute_entity2
103
+ attribute:
104
+ _class: Expressir::Model::References::SimpleReference
105
+ id: test
106
+ type:
107
+ _class: Expressir::Model::DataTypes::Boolean
108
+ - _class: Expressir::Model::Declarations::Entity
109
+ id: subtype_attribute_entity3
110
+ subtype_of:
111
+ - _class: Expressir::Model::References::SimpleReference
112
+ id: attribute_entity3
113
+ base_path: multiple_schema3.attribute_entity3
114
+ attributes:
115
+ - _class: Expressir::Model::Declarations::Attribute
116
+ kind: :EXPLICIT
117
+ supertype_attribute:
118
+ _class: Expressir::Model::References::AttributeReference
119
+ ref:
120
+ _class: Expressir::Model::References::GroupReference
121
+ ref:
122
+ _class: Expressir::Model::References::SimpleReference
123
+ id: SELF
124
+ entity:
125
+ _class: Expressir::Model::References::SimpleReference
126
+ id: attribute_entity3
127
+ base_path: multiple_schema3.attribute_entity3
128
+ attribute:
129
+ _class: Expressir::Model::References::SimpleReference
130
+ id: test
131
+ type:
132
+ _class: Expressir::Model::DataTypes::Boolean
133
+ - _class: Expressir::Model::Declarations::Entity
134
+ id: subtype_attribute_entity4
135
+ subtype_of:
136
+ - _class: Expressir::Model::References::SimpleReference
137
+ id: attribute_entity4
138
+ base_path: multiple_schema4.attribute_entity
139
+ attributes:
140
+ - _class: Expressir::Model::Declarations::Attribute
141
+ kind: :EXPLICIT
142
+ supertype_attribute:
143
+ _class: Expressir::Model::References::AttributeReference
144
+ ref:
145
+ _class: Expressir::Model::References::GroupReference
146
+ ref:
147
+ _class: Expressir::Model::References::SimpleReference
148
+ id: SELF
149
+ entity:
150
+ _class: Expressir::Model::References::SimpleReference
151
+ id: attribute_entity4
152
+ base_path: multiple_schema4.attribute_entity
153
+ attribute:
154
+ _class: Expressir::Model::References::SimpleReference
155
+ id: test
156
+ type:
157
+ _class: Expressir::Model::DataTypes::Boolean
158
+ - _class: Expressir::Model::Declarations::Entity
159
+ id: subtype_missing_entity
160
+ subtype_of:
161
+ - _class: Expressir::Model::References::SimpleReference
162
+ id: missing_entity
163
+ - _class: Expressir::Model::Declarations::Schema
164
+ file: spec/syntax/multiple.exp
165
+ id: multiple_schema2
166
+ entities:
167
+ - _class: Expressir::Model::Declarations::Entity
168
+ id: attribute_entity2
169
+ attributes:
170
+ - _class: Expressir::Model::Declarations::Attribute
171
+ id: test
172
+ kind: :EXPLICIT
173
+ type:
174
+ _class: Expressir::Model::DataTypes::Boolean
175
+ - _class: Expressir::Model::Declarations::Schema
176
+ file: spec/syntax/multiple.exp
177
+ id: multiple_schema3
178
+ entities:
179
+ - _class: Expressir::Model::Declarations::Entity
180
+ id: attribute_entity3
181
+ attributes:
182
+ - _class: Expressir::Model::Declarations::Attribute
183
+ id: test
184
+ kind: :EXPLICIT
185
+ type:
186
+ _class: Expressir::Model::DataTypes::Boolean
187
+ - _class: Expressir::Model::Declarations::Schema
188
+ file: spec/syntax/multiple.exp
189
+ id: multiple_schema4
190
+ entities:
191
+ - _class: Expressir::Model::Declarations::Entity
192
+ id: attribute_entity
193
+ attributes:
194
+ - _class: Expressir::Model::Declarations::Attribute
195
+ id: test
196
+ kind: :EXPLICIT
197
+ type:
198
+ _class: Expressir::Model::DataTypes::Boolean
@@ -0,0 +1,71 @@
1
+ SCHEMA multiple_schema;
2
+
3
+ REFERENCE FROM multiple_schema2;
4
+ REFERENCE FROM multiple_schema3
5
+ (attribute_entity3);
6
+ REFERENCE FROM multiple_schema4
7
+ (attribute_entity AS attribute_entity4);
8
+
9
+ ENTITY test;
10
+ END_ENTITY;
11
+
12
+ ENTITY empty_entity;
13
+ END_ENTITY;
14
+
15
+ ENTITY attribute_entity;
16
+ test : BOOLEAN;
17
+ END_ENTITY;
18
+
19
+ ENTITY subtype_empty_entity
20
+ SUBTYPE OF (empty_entity);
21
+ END_ENTITY;
22
+
23
+ ENTITY subtype_attribute_entity
24
+ SUBTYPE OF (attribute_entity);
25
+ SELF\attribute_entity.test : BOOLEAN;
26
+ END_ENTITY;
27
+
28
+ ENTITY subtype_attribute_entity2
29
+ SUBTYPE OF (attribute_entity2);
30
+ SELF\attribute_entity2.test : BOOLEAN;
31
+ END_ENTITY;
32
+
33
+ ENTITY subtype_attribute_entity3
34
+ SUBTYPE OF (attribute_entity3);
35
+ SELF\attribute_entity3.test : BOOLEAN;
36
+ END_ENTITY;
37
+
38
+ ENTITY subtype_attribute_entity4
39
+ SUBTYPE OF (attribute_entity4);
40
+ SELF\attribute_entity4.test : BOOLEAN;
41
+ END_ENTITY;
42
+
43
+ ENTITY subtype_missing_entity
44
+ SUBTYPE OF (missing_entity);
45
+ END_ENTITY;
46
+
47
+ END_SCHEMA;
48
+
49
+ SCHEMA multiple_schema2;
50
+
51
+ ENTITY attribute_entity2;
52
+ test : BOOLEAN;
53
+ END_ENTITY;
54
+
55
+ END_SCHEMA;
56
+
57
+ SCHEMA multiple_schema3;
58
+
59
+ ENTITY attribute_entity3;
60
+ test : BOOLEAN;
61
+ END_ENTITY;
62
+
63
+ END_SCHEMA;
64
+
65
+ SCHEMA multiple_schema4;
66
+
67
+ ENTITY attribute_entity;
68
+ test : BOOLEAN;
69
+ END_ENTITY;
70
+
71
+ END_SCHEMA;