expressir 1.2.10-aarch64-linux → 2.4.29-aarch64-linux

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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config.toml +3 -0
  3. data/.github/scripts/test_installed_gem.rb +34 -0
  4. data/.github/workflows/codeql.yml +35 -0
  5. data/.github/workflows/docs.yml +99 -0
  6. data/.github/workflows/links.yml +100 -0
  7. data/.github/workflows/native-gems.yml +201 -0
  8. data/.github/workflows/rake.yml +10 -296
  9. data/.github/workflows/release.yml +26 -114
  10. data/.github/workflows/rust-ext.yml +41 -0
  11. data/.github/workflows/stress.yml +36 -0
  12. data/.github/workflows/validate_schemas.yml +48 -0
  13. data/.github/workflows/verify_remarks.yml +33 -0
  14. data/.gitignore +33 -1
  15. data/.rubocop.yml +11 -11
  16. data/.rubocop_todo.yml +297 -0
  17. data/CHANGELOG.md +159 -0
  18. data/Gemfile +15 -1
  19. data/README.adoc +2675 -47
  20. data/Rakefile +34 -10
  21. data/TODO.bugs/01-stale-transformer-autoload.md +39 -0
  22. data/TODO.bugs/02-parser-class-instance-vars.md +36 -0
  23. data/TODO.bugs/03-builder-mutable-state.md +43 -0
  24. data/TODO.bugs/04-formatter-public-send-dispatch.md +53 -0
  25. data/TODO.bugs/05-anonymous-formatter-subclass.md +45 -0
  26. data/TODO.bugs/06-collection-registry-single-source.md +53 -0
  27. data/TODO.bugs/07-require-relative-cleanup.md +42 -0
  28. data/TODO.bugs/08-require-expressir-in-commands.md +34 -0
  29. data/TODO.bugs/09-parser-split.md +53 -0
  30. data/TODO.bugs/10-to-s-override.md +42 -0
  31. data/TODO.bugs/11-parser-class-variables.md +39 -0
  32. data/TODO.bugs/12-marker-modules-vs-registry.md +64 -0
  33. data/TODO.bugs/13-string-literal-scanner-limitation.md +52 -0
  34. data/TODO.bugs/14-model-formatting-leak.md +30 -0
  35. data/TODO.bugs/15-expression-children-macro.md +27 -0
  36. data/TODO.bugs/16-pretty-formatter-duplication.md +28 -0
  37. data/TODO.bugs/17-snake-case-cache-mutable-constant.md +28 -0
  38. data/TODO.bugs/18-const-get-private-constants.md +30 -0
  39. data/TODO.bugs/19-format-methods-public.md +22 -0
  40. data/TODO.bugs/20-coverage-nested-entities-dedup.md +20 -0
  41. data/TODO.bugs/21-operator-tokens-secondary-dispatch.md +21 -0
  42. data/TODO.bugs/22-builder-fast-path-wrappers.md +32 -0
  43. data/TODO.bugs/23-coverage-inverse-maps.md +21 -0
  44. data/TODO.bugs/24-streaming-builder-complexity.md +19 -0
  45. data/TODO.bugs/25-debug-puts-in-production.md +21 -0
  46. data/TODO.bugs/26-generic-entity-children-misplaced.md +21 -0
  47. data/TODO.bugs/27-package-build-god-method.md +19 -0
  48. data/TODO.bugs/28-package-god-class.md +30 -0
  49. data/TODO.bugs/29-validate-ascii-god-class.md +24 -0
  50. data/TODO.bugs/30-unicode-map-extraction.md +19 -0
  51. data/TODO.bugs/README.md +43 -0
  52. data/TODO.max-perf/01-restore-ci-green.md +36 -0
  53. data/TODO.max-perf/02-streaming-parse-path.md +31 -0
  54. data/TODO.max-perf/03-cli-parallel-opt-in.md +27 -0
  55. data/TODO.max-perf/04-benchmark-harness.md +28 -0
  56. data/TODO.max-perf/05-parallel-fidelity-specs.md +22 -0
  57. data/TODO.max-perf/06-builder-cpu-audit.md +41 -0
  58. data/TODO.max-perf/07-upstream-parsanol-roadmap.md +27 -0
  59. data/TODO.max-perf/08-builder-build-perf.md +45 -0
  60. data/TODO.max-perf/09-grammar-cold-start.md +25 -0
  61. data/TODO.max-perf/10-parser-facade-hygiene.md +23 -0
  62. data/TODO.max-perf/11-ci-green-closeout.md +25 -0
  63. data/TODO.max-perf/12-require-boot-profile.md +25 -0
  64. data/TODO.max-perf/13-key-conversion-specs.md +26 -0
  65. data/TODO.max-perf/14-builder-call-handler-audit.md +28 -0
  66. data/TODO.parity-ee/00-overview.md +76 -0
  67. data/TODO.parity-ee/01-annex-g-rule-extraction.md +41 -0
  68. data/TODO.parity-ee/02-eeng-algorithm-inventory.md +8 -0
  69. data/TODO.parity-ee/03-eeng-oracle-harness.md +33 -0
  70. data/TODO.parity-ee/04-shtolo-concatenate.md +44 -0
  71. data/TODO.parity-ee/05-shtolo-longform-flatten.md +53 -0
  72. data/TODO.parity-ee/06-interface-scheduling-parity.md +47 -0
  73. data/TODO.parity-ee/07-semantic-checks-port.md +35 -0
  74. data/TODO.parity-ee/08-pretty-roundtrip-gate.md +27 -0
  75. data/TODO.parity-ee/09-smrl-index-and-listing.md +22 -0
  76. data/TODO.parity-ee/10-interface-dot-graph.md +21 -0
  77. data/TODO.parity-ee/11-import-eeng-tests.md +79 -0
  78. data/TODO.parity-ee/12-full-check-catalog.md +67 -0
  79. data/TODO.parity-ee/13-population-p21.md +54 -0
  80. data/TODO.parity-ee/14-shtolo-completion.md +44 -0
  81. data/TODO.parity-ee/15-part28-xml.md +51 -0
  82. data/TODO.parity-ee/16-compare-patch.md +48 -0
  83. data/TODO.parity-ee/17-official-tests.md +42 -0
  84. data/TODO.parity-ee/18-mim-mapping.md +47 -0
  85. data/TODO.parity-ee/19-architecture.md +97 -0
  86. data/TODO.parity-ee/parity-matrix.md +108 -0
  87. data/TODO.refpath-v2/00-overview.md +64 -0
  88. data/TODO.suma-improvements/00-overview.md +23 -0
  89. data/TODO.suma-improvements/01-prebuilt-platform-gems.md +33 -0
  90. data/TODO.suma-improvements/02-suma-e2e.md +39 -0
  91. data/TODO.suma-improvements/03-item-graph.md +22 -0
  92. data/TODO.suma-improvements/04-compiled-set-default.md +16 -0
  93. data/TODO.suma-improvements/05-validation-in-docs.md +17 -0
  94. data/TODO.suma-improvements/06-memory-remeasure.md +36 -0
  95. data/TODO.suma-improvements/07-part28-xml.md +15 -0
  96. data/TODO.suma-improvements/08-windows-gnu-toolchain.md +15 -0
  97. data/TODO.suma-improvements/09-checker-tranche3.md +13 -0
  98. data/TODO.suma-improvements/10-expressdoc.md +8 -0
  99. data/benchmark/srl_benchmark.rb +458 -0
  100. data/benchmark/srl_native_benchmark.rb +146 -0
  101. data/benchmark/srl_ruby_benchmark.rb +132 -0
  102. data/bin/rspec +2 -1
  103. data/docs/Gemfile +12 -0
  104. data/docs/_config.yml +141 -0
  105. data/docs/_guides/changes/changes-format.adoc +778 -0
  106. data/docs/_guides/changes/importing-eengine.adoc +898 -0
  107. data/docs/_guides/changes/index.adoc +396 -0
  108. data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
  109. data/docs/_guides/changes/validating-changes.adoc +681 -0
  110. data/docs/_guides/cli/benchmark-performance.adoc +834 -0
  111. data/docs/_guides/cli/coverage-analysis.adoc +921 -0
  112. data/docs/_guides/cli/format-schemas.adoc +547 -0
  113. data/docs/_guides/cli/index.adoc +8 -0
  114. data/docs/_guides/cli/managing-changes.adoc +927 -0
  115. data/docs/_guides/cli/validate-ascii.adoc +645 -0
  116. data/docs/_guides/cli/validate-schemas.adoc +534 -0
  117. data/docs/_guides/formatter/formatter-architecture.adoc +401 -0
  118. data/docs/_guides/index.adoc +165 -0
  119. data/docs/_guides/ler/creating-packages.adoc +664 -0
  120. data/docs/_guides/ler/index.adoc +305 -0
  121. data/docs/_guides/ler/loading-packages.adoc +707 -0
  122. data/docs/_guides/ler/package-formats.adoc +748 -0
  123. data/docs/_guides/ler/querying-packages.adoc +826 -0
  124. data/docs/_guides/ler/step-packages.adoc +385 -0
  125. data/docs/_guides/ler/validating-packages.adoc +750 -0
  126. data/docs/_guides/liquid/basic-templates.adoc +813 -0
  127. data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
  128. data/docs/_guides/liquid/drops-reference.adoc +829 -0
  129. data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
  130. data/docs/_guides/liquid/index.adoc +468 -0
  131. data/docs/_guides/manifests/creating-manifests.adoc +483 -0
  132. data/docs/_guides/manifests/index.adoc +307 -0
  133. data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
  134. data/docs/_guides/manifests/validating-manifests.adoc +713 -0
  135. data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
  136. data/docs/_guides/ruby-api/index.adoc +257 -0
  137. data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
  138. data/docs/_guides/ruby-api/search-engine.adoc +609 -0
  139. data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
  140. data/docs/_pages/data-model.adoc +665 -0
  141. data/docs/_pages/express-language.adoc +506 -0
  142. data/docs/_pages/getting-started.adoc +414 -0
  143. data/docs/_pages/index.adoc +116 -0
  144. data/docs/_pages/introduction.adoc +256 -0
  145. data/docs/_pages/ler-packages.adoc +837 -0
  146. data/docs/_pages/parsers.adoc +709 -0
  147. data/docs/_pages/schema-manifests.adoc +431 -0
  148. data/docs/_references/index.adoc +228 -0
  149. data/docs/_tutorials/creating-ler-package.adoc +735 -0
  150. data/docs/_tutorials/documentation-coverage.adoc +795 -0
  151. data/docs/_tutorials/formatting-schemas.adoc +89 -0
  152. data/docs/_tutorials/index.adoc +231 -0
  153. data/docs/_tutorials/liquid-templates.adoc +806 -0
  154. data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
  155. data/docs/_tutorials/querying-schemas.adoc +751 -0
  156. data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
  157. data/docs/index.adoc +242 -0
  158. data/docs/lychee.toml +90 -0
  159. data/examples/demo_ler_usage.sh +86 -0
  160. data/examples/ler/README.md +111 -0
  161. data/examples/ler/simple_example.ler +0 -0
  162. data/examples/ler/simple_schema.exp +33 -0
  163. data/examples/ler_build.rb +75 -0
  164. data/examples/ler_cli.rb +79 -0
  165. data/examples/ler_demo_complete.rb +276 -0
  166. data/examples/ler_query.rb +91 -0
  167. data/examples/ler_query_examples.rb +305 -0
  168. data/examples/ler_stats.rb +81 -0
  169. data/examples/phase3_demo.rb +159 -0
  170. data/examples/query_demo_simple.rb +131 -0
  171. data/exe/expressir +6 -17
  172. data/exe/expressir-format +14 -0
  173. data/exe/{format-test → expressir-format-test} +8 -7
  174. data/expressir.gemspec +50 -37
  175. data/lib/expressir/3.2/expressir_core.so +0 -0
  176. data/lib/expressir/3.3/expressir_core.so +0 -0
  177. data/lib/expressir/3.4/expressir_core.so +0 -0
  178. data/lib/expressir/4.0/expressir_core.so +0 -0
  179. data/lib/expressir/benchmark.rb +310 -0
  180. data/lib/expressir/changes/item_change.rb +20 -0
  181. data/lib/expressir/changes/mapping_change.rb +16 -0
  182. data/lib/expressir/changes/schema_change.rb +85 -0
  183. data/lib/expressir/changes/version_change.rb +26 -0
  184. data/lib/expressir/changes.rb +9 -0
  185. data/lib/expressir/cli.rb +138 -11
  186. data/lib/expressir/commands/base.rb +25 -0
  187. data/lib/expressir/commands/benchmark.rb +59 -0
  188. data/lib/expressir/commands/benchmark_cache.rb +80 -0
  189. data/lib/expressir/commands/changes.rb +34 -0
  190. data/lib/expressir/commands/changes_import_eengine.rb +146 -0
  191. data/lib/expressir/commands/changes_validate.rb +63 -0
  192. data/lib/expressir/commands/check.rb +56 -0
  193. data/lib/expressir/commands/clean.rb +20 -0
  194. data/lib/expressir/commands/coverage.rb +458 -0
  195. data/lib/expressir/commands/expand.rb +26 -0
  196. data/lib/expressir/commands/file_violations.rb +70 -0
  197. data/lib/expressir/commands/fix.rb +33 -0
  198. data/lib/expressir/commands/flatten.rb +29 -0
  199. data/lib/expressir/commands/format.rb +43 -0
  200. data/lib/expressir/commands/manifest.rb +420 -0
  201. data/lib/expressir/commands/mapping_validate.rb +68 -0
  202. data/lib/expressir/commands/non_ascii_character.rb +49 -0
  203. data/lib/expressir/commands/non_ascii_violation_collection.rb +301 -0
  204. data/lib/expressir/commands/package.rb +1222 -0
  205. data/lib/expressir/commands/parity_inputs.rb +160 -0
  206. data/lib/expressir/commands/validate.rb +106 -0
  207. data/lib/expressir/commands/validate_ascii.rb +94 -0
  208. data/lib/expressir/commands/validate_load.rb +91 -0
  209. data/lib/expressir/commands/version.rb +9 -0
  210. data/lib/expressir/commands/xsd.rb +23 -0
  211. data/lib/expressir/commands.rb +30 -0
  212. data/lib/expressir/config.rb +40 -3
  213. data/lib/expressir/coverage.rb +510 -0
  214. data/lib/expressir/eengine/arm_compare_report.rb +23 -0
  215. data/lib/expressir/eengine/changes_section.rb +16 -0
  216. data/lib/expressir/eengine/compare_report.rb +69 -0
  217. data/lib/expressir/eengine/mim_compare_report.rb +23 -0
  218. data/lib/expressir/eengine/modified_object.rb +21 -0
  219. data/lib/expressir/eengine.rb +9 -0
  220. data/lib/expressir/errors.rb +113 -0
  221. data/lib/expressir/express/adoc_hyperlink_formatter.rb +30 -0
  222. data/lib/expressir/express/adoc_source_formatter.rb +12 -0
  223. data/lib/expressir/express/ast_key_converter.rb +114 -0
  224. data/lib/expressir/express/builder.rb +277 -0
  225. data/lib/expressir/express/builder_context.rb +22 -0
  226. data/lib/expressir/express/builder_registry.rb +397 -0
  227. data/lib/expressir/express/builders/attribute_decl_builder.rb +32 -0
  228. data/lib/expressir/express/builders/built_in_builder.rb +75 -0
  229. data/lib/expressir/express/builders/constant_builder.rb +108 -0
  230. data/lib/expressir/express/builders/declaration_builder.rb +20 -0
  231. data/lib/expressir/express/builders/derive_clause_builder.rb +14 -0
  232. data/lib/expressir/express/builders/derived_attr_builder.rb +28 -0
  233. data/lib/expressir/express/builders/domain_rule_builder.rb +21 -0
  234. data/lib/expressir/express/builders/entity_decl_builder.rb +116 -0
  235. data/lib/expressir/express/builders/explicit_attr_builder.rb +49 -0
  236. data/lib/expressir/express/builders/expression_builder.rb +416 -0
  237. data/lib/expressir/express/builders/function_decl_builder.rb +86 -0
  238. data/lib/expressir/express/builders/helpers.rb +148 -0
  239. data/lib/expressir/express/builders/interface_builder.rb +151 -0
  240. data/lib/expressir/express/builders/inverse_attr_builder.rb +43 -0
  241. data/lib/expressir/express/builders/inverse_attr_type_builder.rb +30 -0
  242. data/lib/expressir/express/builders/inverse_clause_builder.rb +14 -0
  243. data/lib/expressir/express/builders/literal_builder.rb +93 -0
  244. data/lib/expressir/express/builders/procedure_decl_builder.rb +82 -0
  245. data/lib/expressir/express/builders/qualifier_builder.rb +102 -0
  246. data/lib/expressir/express/builders/reference_builder.rb +18 -0
  247. data/lib/expressir/express/builders/rule_decl_builder.rb +97 -0
  248. data/lib/expressir/express/builders/schema_body_decl_builder.rb +18 -0
  249. data/lib/expressir/express/builders/schema_decl_builder.rb +56 -0
  250. data/lib/expressir/express/builders/schema_version_builder.rb +34 -0
  251. data/lib/expressir/express/builders/simple_id_builder.rb +17 -0
  252. data/lib/expressir/express/builders/statement_builder.rb +243 -0
  253. data/lib/expressir/express/builders/subtype_constraint_builder.rb +166 -0
  254. data/lib/expressir/express/builders/syntax_builder.rb +30 -0
  255. data/lib/expressir/express/builders/type_builder.rb +238 -0
  256. data/lib/expressir/express/builders/type_decl_builder.rb +26 -0
  257. data/lib/expressir/express/builders/unique_clause_builder.rb +20 -0
  258. data/lib/expressir/express/builders/unique_rule_builder.rb +41 -0
  259. data/lib/expressir/express/builders/where_clause_builder.rb +20 -0
  260. data/lib/expressir/express/builders.rb +55 -0
  261. data/lib/expressir/express/cache.rb +43 -18
  262. data/lib/expressir/express/checker.rb +812 -0
  263. data/lib/expressir/express/concatenator.rb +79 -0
  264. data/lib/expressir/express/core.rb +95 -0
  265. data/lib/expressir/express/error.rb +124 -0
  266. data/lib/expressir/express/formatter.rb +89 -1548
  267. data/lib/expressir/express/formatters/data_types_formatter.rb +362 -0
  268. data/lib/expressir/express/formatters/declarations_formatter.rb +753 -0
  269. data/lib/expressir/express/formatters/expressions_formatter.rb +180 -0
  270. data/lib/expressir/express/formatters/literals_formatter.rb +55 -0
  271. data/lib/expressir/express/formatters/references_formatter.rb +53 -0
  272. data/lib/expressir/express/formatters/remark_formatter.rb +270 -0
  273. data/lib/expressir/express/formatters/remark_item_formatter.rb +28 -0
  274. data/lib/expressir/express/formatters/statements_formatter.rb +272 -0
  275. data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +54 -0
  276. data/lib/expressir/express/formatters.rb +22 -0
  277. data/lib/expressir/express/grammar/parser.rb +712 -0
  278. data/lib/expressir/express/grammar.rb +11 -0
  279. data/lib/expressir/express/hyperlink_formatter.rb +4 -5
  280. data/lib/expressir/express/interface_dot.rb +105 -0
  281. data/lib/expressir/express/lazy_repository.rb +211 -0
  282. data/lib/expressir/express/line_map.rb +48 -0
  283. data/lib/expressir/express/listing.rb +174 -0
  284. data/lib/expressir/express/model_traversal.rb +42 -0
  285. data/lib/expressir/express/model_visitor.rb +11 -10
  286. data/lib/expressir/express/node_position_index.rb +342 -0
  287. data/lib/expressir/express/parallel_files.rb +229 -0
  288. data/lib/expressir/express/parser.rb +501 -62
  289. data/lib/expressir/express/pretty_formatter.rb +586 -0
  290. data/lib/expressir/express/pretty_gate.rb +61 -0
  291. data/lib/expressir/express/refs_overlay.rb +47 -0
  292. data/lib/expressir/express/remark_attacher.rb +1098 -0
  293. data/lib/expressir/express/remark_overlay.rb +86 -0
  294. data/lib/expressir/express/remark_scanner.rb +245 -0
  295. data/lib/expressir/express/resolve_references_model_visitor.rb +7 -9
  296. data/lib/expressir/express/schema_block_scanner.rb +137 -0
  297. data/lib/expressir/express/schema_head_formatter.rb +4 -5
  298. data/lib/expressir/express/schema_plain_source_formatter.rb +11 -0
  299. data/lib/expressir/express/schema_source_formatter.rb +15 -0
  300. data/lib/expressir/express/scope_resolver.rb +223 -0
  301. data/lib/expressir/express/self_schema_reference.rb +126 -0
  302. data/lib/expressir/express/shtolo.rb +679 -0
  303. data/lib/expressir/express/smrl_xml.rb +125 -0
  304. data/lib/expressir/express/source_formatter.rb +15 -0
  305. data/lib/expressir/express/streaming_builder.rb +435 -0
  306. data/lib/expressir/express/xsd.rb +259 -0
  307. data/lib/expressir/express.rb +53 -0
  308. data/lib/expressir/liquid.rb +1 -0
  309. data/lib/expressir/manifest/resolver.rb +210 -0
  310. data/lib/expressir/manifest/validator.rb +192 -0
  311. data/lib/expressir/manifest.rb +6 -0
  312. data/lib/expressir/mapping/refpath.rb +857 -0
  313. data/lib/expressir/mapping.rb +253 -0
  314. data/lib/expressir/model/cache.rb +10 -9
  315. data/lib/expressir/model/concerns.rb +42 -0
  316. data/lib/expressir/model/data_types/aggregate.rb +8 -13
  317. data/lib/expressir/model/data_types/array.rb +15 -21
  318. data/lib/expressir/model/data_types/bag.rb +11 -15
  319. data/lib/expressir/model/data_types/binary.rb +9 -12
  320. data/lib/expressir/model/data_types/boolean.rb +7 -2
  321. data/lib/expressir/model/data_types/enumeration.rb +11 -15
  322. data/lib/expressir/model/data_types/enumeration_item.rb +5 -7
  323. data/lib/expressir/model/data_types/generic.rb +6 -8
  324. data/lib/expressir/model/data_types/generic_entity.rb +11 -13
  325. data/lib/expressir/model/data_types/integer.rb +7 -2
  326. data/lib/expressir/model/data_types/list.rb +13 -18
  327. data/lib/expressir/model/data_types/logical.rb +7 -2
  328. data/lib/expressir/model/data_types/number.rb +7 -2
  329. data/lib/expressir/model/data_types/real.rb +7 -9
  330. data/lib/expressir/model/data_types/select.rb +13 -18
  331. data/lib/expressir/model/data_types/set.rb +11 -15
  332. data/lib/expressir/model/data_types/string.rb +9 -12
  333. data/lib/expressir/model/data_types.rb +25 -0
  334. data/lib/expressir/model/declarations/attribute.rb +19 -28
  335. data/lib/expressir/model/declarations/constant.rb +10 -16
  336. data/lib/expressir/model/declarations/derived_attribute.rb +25 -0
  337. data/lib/expressir/model/declarations/entity.rb +39 -30
  338. data/lib/expressir/model/declarations/function.rb +32 -40
  339. data/lib/expressir/model/declarations/informal_proposition_rule.rb +25 -0
  340. data/lib/expressir/model/declarations/interface.rb +25 -16
  341. data/lib/expressir/model/declarations/interface_item.rb +9 -11
  342. data/lib/expressir/model/declarations/interfaced_item.rb +15 -19
  343. data/lib/expressir/model/declarations/inverse_attribute.rb +25 -0
  344. data/lib/expressir/model/declarations/parameter.rb +10 -16
  345. data/lib/expressir/model/declarations/procedure.rb +30 -37
  346. data/lib/expressir/model/declarations/remark_item.rb +11 -11
  347. data/lib/expressir/model/declarations/rule.rb +38 -43
  348. data/lib/expressir/model/declarations/schema.rb +162 -64
  349. data/lib/expressir/model/declarations/schema_version.rb +8 -11
  350. data/lib/expressir/model/declarations/schema_version_item.rb +8 -11
  351. data/lib/expressir/model/declarations/subtype_constraint.rb +14 -22
  352. data/lib/expressir/model/declarations/type.rb +18 -18
  353. data/lib/expressir/model/declarations/unique_rule.rb +8 -13
  354. data/lib/expressir/model/declarations/variable.rb +10 -16
  355. data/lib/expressir/model/declarations/where_rule.rb +8 -13
  356. data/lib/expressir/model/declarations.rb +31 -0
  357. data/lib/expressir/model/dependency_resolver.rb +268 -0
  358. data/lib/expressir/model/exp_file.rb +42 -0
  359. data/lib/expressir/model/expressions/aggregate_initializer.rb +8 -9
  360. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +10 -12
  361. data/lib/expressir/model/expressions/binary_expression.rb +42 -36
  362. data/lib/expressir/model/expressions/entity_constructor.rb +10 -12
  363. data/lib/expressir/model/expressions/function_call.rb +10 -12
  364. data/lib/expressir/model/expressions/interval.rb +18 -23
  365. data/lib/expressir/model/expressions/query_expression.rb +11 -15
  366. data/lib/expressir/model/expressions/unary_expression.rb +13 -15
  367. data/lib/expressir/model/expressions.rb +18 -0
  368. data/lib/expressir/model/identifier.rb +18 -26
  369. data/lib/expressir/model/indexes/entity_index.rb +103 -0
  370. data/lib/expressir/model/indexes/item_graph.rb +185 -0
  371. data/lib/expressir/model/indexes/reference_index.rb +148 -0
  372. data/lib/expressir/model/indexes/type_index.rb +149 -0
  373. data/lib/expressir/model/indexes.rb +12 -0
  374. data/lib/expressir/model/interface_validator.rb +384 -0
  375. data/lib/expressir/model/literals/binary.rb +7 -9
  376. data/lib/expressir/model/literals/integer.rb +7 -9
  377. data/lib/expressir/model/literals/logical.rb +10 -12
  378. data/lib/expressir/model/literals/real.rb +7 -9
  379. data/lib/expressir/model/literals/string.rb +10 -12
  380. data/lib/expressir/model/literals.rb +13 -0
  381. data/lib/expressir/model/model_element.rb +286 -117
  382. data/lib/expressir/model/references/attribute_reference.rb +9 -12
  383. data/lib/expressir/model/references/group_reference.rb +9 -12
  384. data/lib/expressir/model/references/index_reference.rb +11 -15
  385. data/lib/expressir/model/references/simple_reference.rb +11 -14
  386. data/lib/expressir/model/references.rb +12 -0
  387. data/lib/expressir/model/remark_format.rb +17 -0
  388. data/lib/expressir/model/remark_info.rb +92 -0
  389. data/lib/expressir/model/remark_placement.rb +42 -0
  390. data/lib/expressir/model/repository.rb +472 -12
  391. data/lib/expressir/model/repository_validator.rb +293 -0
  392. data/lib/expressir/model/search_engine.rb +551 -0
  393. data/lib/expressir/model/statements/alias.rb +12 -16
  394. data/lib/expressir/model/statements/assignment.rb +12 -11
  395. data/lib/expressir/model/statements/case.rb +31 -14
  396. data/lib/expressir/model/statements/case_action.rb +9 -11
  397. data/lib/expressir/model/statements/compound.rb +10 -8
  398. data/lib/expressir/model/statements/escape.rb +10 -2
  399. data/lib/expressir/model/statements/if.rb +15 -14
  400. data/lib/expressir/model/statements/null.rb +10 -2
  401. data/lib/expressir/model/statements/procedure_call.rb +11 -11
  402. data/lib/expressir/model/statements/repeat.rb +21 -28
  403. data/lib/expressir/model/statements/return.rb +9 -8
  404. data/lib/expressir/model/statements/skip.rb +10 -2
  405. data/lib/expressir/model/statements.rb +20 -0
  406. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +13 -17
  407. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +7 -9
  408. data/lib/expressir/model/supertype_expressions.rb +12 -0
  409. data/lib/expressir/model.rb +38 -78
  410. data/lib/expressir/package/builder.rb +231 -0
  411. data/lib/expressir/package/metadata.rb +79 -0
  412. data/lib/expressir/package/reader.rb +149 -0
  413. data/lib/expressir/package.rb +8 -0
  414. data/lib/expressir/schema_manifest.rb +159 -0
  415. data/lib/expressir/schema_manifest_entry.rb +15 -0
  416. data/lib/expressir/version.rb +6 -1
  417. data/lib/expressir.rb +79 -9
  418. data/lib/tasks/verify_remarks.rake +16 -0
  419. data/rakelib/native.rake +24 -0
  420. data/rakelib/oracle.rake +52 -0
  421. data/rakelib/verify_remarks.rake +16 -0
  422. metadata +431 -129
  423. data/.cross_rubies +0 -20
  424. data/.gitmodules +0 -6
  425. data/.yardopts +0 -11
  426. data/docs/development.md +0 -90
  427. data/exe/format +0 -18
  428. data/exe/generate-parser +0 -51
  429. data/lib/expressir/cli/ui.rb +0 -36
  430. data/lib/expressir/express/2.7/express_parser.so +0 -0
  431. data/lib/expressir/express/3.0/express_parser.so +0 -0
  432. data/lib/expressir/express/3.1/express_parser.so +0 -0
  433. data/lib/expressir/express/3.2/express_parser.so +0 -0
  434. data/lib/expressir/express/visitor.rb +0 -2588
  435. data/lib/expressir/model/data_type.rb +0 -9
  436. data/lib/expressir/model/declaration.rb +0 -9
  437. data/lib/expressir/model/expression.rb +0 -9
  438. data/lib/expressir/model/literal.rb +0 -9
  439. data/lib/expressir/model/reference.rb +0 -9
  440. data/lib/expressir/model/statement.rb +0 -9
  441. data/lib/expressir/model/supertype_expression.rb +0 -9
  442. data/rakelib/antlr4-native.rake +0 -161
  443. data/rakelib/cross-ruby.rake +0 -368
  444. data/spec/acceptance/version_spec.rb +0 -27
  445. data/spec/expressir/express/cache_spec.rb +0 -89
  446. data/spec/expressir/express/formatter_spec.rb +0 -173
  447. data/spec/expressir/express/parser_spec.rb +0 -141
  448. data/spec/expressir/model/model_element_spec.rb +0 -318
  449. data/spec/spec_helper.rb +0 -24
  450. data/spec/support/console_helper.rb +0 -29
  451. data/spec/syntax/multiple.exp +0 -23
  452. data/spec/syntax/multiple.yaml +0 -198
  453. data/spec/syntax/multiple_formatted.exp +0 -71
  454. data/spec/syntax/multiple_hyperlink_formatted.exp +0 -71
  455. data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -13
  456. data/spec/syntax/remark.exp +0 -193
  457. data/spec/syntax/remark.yaml +0 -471
  458. data/spec/syntax/remark_formatted.exp +0 -228
  459. data/spec/syntax/single.exp +0 -4
  460. data/spec/syntax/single.yaml +0 -18
  461. data/spec/syntax/single_formatted.exp +0 -10
  462. data/spec/syntax/single_formatted.yaml +0 -36
  463. data/spec/syntax/syntax.exp +0 -333
  464. data/spec/syntax/syntax.yaml +0 -3509
  465. data/spec/syntax/syntax_formatted.exp +0 -902
  466. data/spec/syntax/syntax_hyperlink_formatted.exp +0 -902
  467. data/spec/syntax/syntax_schema_head_formatted.exp +0 -18
@@ -3,49 +3,69 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.3 Schema
6
- class Schema < Declaration
7
- model_attr_accessor :file, 'String'
8
-
6
+ class Schema < ModelElement
9
7
  include Identifier
8
+ include ScopeContainer
9
+
10
+ # Tree-walker collection attributes (TODO.bugs/12 — single source
11
+ # of truth; NodePositionIndex derives COLLECTION_REGISTRY from this).
12
+ collection_attributes :interfaces, :constants, :types, :entities,
13
+ :subtype_constraints, :functions, :rules,
14
+ :procedures, :remark_items
15
+
16
+ # Subset of this schema's collection attributes that hold named
17
+ # scope declarations (Function, Procedure, Rule, Entity, Type).
18
+ # Used by ScopeResolver to enumerate scope-capable children without
19
+ # duplicating the list. Single source of truth: this is the subset
20
+ # of NodePositionIndex::COLLECTION_REGISTRY[Schema] that holds
21
+ # scopes rather than remark_items / constants / subtype_constraints.
22
+ SCOPE_DECL_COLLECTIONS = %i[
23
+ functions procedures rules entities types
24
+ ].freeze
25
+
26
+ attribute :file, :string
27
+ attribute :version, SchemaVersion
28
+ attribute :interfaces, Interface, collection: true
29
+ attribute :constants, Constant, collection: true
30
+ attribute :types, ModelElement, collection: true
31
+ attribute :entities, Entity, collection: true
32
+ attribute :subtype_constraints, SubtypeConstraint, collection: true
33
+ attribute :functions, Function, collection: true
34
+ attribute :rules, Rule, collection: true
35
+ attribute :procedures, Procedure, collection: true
36
+ attribute :header, :string
37
+ attribute :_class, :string, default: -> { self.class.name }
38
+ attribute :selected, :boolean, default: false
39
+ attribute :file_basename, :string
10
40
 
11
- model_attr_accessor :version, 'SchemaVersion'
12
- model_attr_accessor :interfaces, 'Array<Interface>'
13
- model_attr_accessor :constants, 'Array<Constant>'
14
- model_attr_accessor :types, 'Array<Type>'
15
- model_attr_accessor :entities, 'Array<Entity>'
16
- model_attr_accessor :subtype_constraints, 'Array<SubtypeConstraint>'
17
- model_attr_accessor :functions, 'Array<Function>'
18
- model_attr_accessor :rules, 'Array<Rule>'
19
- model_attr_accessor :procedures, 'Array<Procedure>'
20
-
21
- # @param [Hash] options
22
- # @option options [String] :file
23
- # @option (see Identifier#initialize_identifier)
24
- # @option options [SchemaVersion] :version
25
- # @option options [Array<Interface>] :interfaces
26
- # @option options [Array<Constant>] :constants
27
- # @option options [Array<Type>] :types
28
- # @option options [Array<Entity>] :entities
29
- # @option options [Array<SubtypeConstraint>] :subtype_constraints
30
- # @option options [Array<Function>] :functions
31
- # @option options [Array<Rule>] :rules
32
- # @option options [Array<Procedure>] :procedures
33
- def initialize(options = {})
34
- @file = options[:file]
35
-
36
- initialize_identifier(options)
37
-
38
- @version = options[:version]
39
- @interfaces = options[:interfaces] || []
40
- @constants = options[:constants] || []
41
- @types = options[:types] || []
42
- @entities = options[:entities] || []
43
- @subtype_constraints = options[:subtype_constraints] || []
44
- @functions = options[:functions] || []
45
- @rules = options[:rules] || []
46
- @procedures = options[:procedures] || []
47
-
48
- super
41
+ key_value do
42
+ map "_class", to: :_class, render_default: true
43
+ map "id", to: :id
44
+ map "file", to: :file
45
+ map "header", to: :header
46
+ map "remarks", to: :remarks
47
+ map "remark_items", to: :remark_items
48
+ map "version", to: :version
49
+ map "interfaces", to: :interfaces
50
+ map "constants", to: :constants
51
+ map "types", to: :types
52
+ map "entities", to: :entities
53
+ map "subtype_constraints", to: :subtype_constraints
54
+ map "functions", to: :functions
55
+ map "rules", to: :rules
56
+ map "procedures", to: :procedures
57
+ end
58
+
59
+ liquid do
60
+ map :header, to: :header
61
+ map :formatted, to: :formatted
62
+ map :formatted_hyperlinked, to: :formatted_hyperlinked
63
+ map :formatted_hyperlinked_adoc, to: :formatted_hyperlinked_adoc
64
+ map :source, to: :source
65
+ map :source_hyperlinked, to: :source_hyperlinked
66
+ map :full_source, to: :full_source
67
+ map :children, to: :children
68
+ map :safe_children, to: :safe_children
49
69
  end
50
70
 
51
71
  # @return [Array<Declaration>]
@@ -53,13 +73,13 @@ module Expressir
53
73
  [
54
74
  *constants,
55
75
  *types,
56
- *types.flat_map{|x| x.enumeration_items},
76
+ *types&.flat_map(&:enumeration_items),
57
77
  *entities,
58
78
  *subtype_constraints,
59
79
  *functions,
60
80
  *rules,
61
81
  *procedures,
62
- *remark_items
82
+ *remark_items,
63
83
  ]
64
84
  end
65
85
 
@@ -67,10 +87,46 @@ module Expressir
67
87
  def children
68
88
  [
69
89
  *interfaced_items,
70
- *safe_children
90
+ *safe_children,
71
91
  ]
72
92
  end
73
93
 
94
+ def full_source
95
+ @full_source ||= Expressir::Express::Formatter.format(self)
96
+ end
97
+
98
+ def formatted
99
+ @formatted ||= format(no_remarks: false)
100
+ end
101
+
102
+ # Schema head text without hyperlinks (#255) — the `source` face
103
+ # templates call for the verbatim schema declaration block.
104
+ # Deliberately NOT @source: that ivar holds the raw source span
105
+ # lutaml-model's `source=` stores when include_source is on.
106
+ def source
107
+ @plain_source ||= Expressir::Express::SchemaPlainSourceFormatter.format(self) # rubocop:disable Naming/MemoizedInstanceVariableName
108
+ end
109
+
110
+ # Schema head text with cross-references rendered as hyperlinks
111
+ # (#255) — the hyperlinked counterpart of #source.
112
+ def source_hyperlinked
113
+ Expressir::Express::SchemaSourceFormatter.format(self)
114
+ end
115
+
116
+ # FULL schema text with cross-references rendered as hyperlinks
117
+ # — what a schema document page renders (#255): every line of
118
+ # the schema, live links included.
119
+ def formatted_hyperlinked
120
+ @formatted_hyperlinked ||= Expressir::Express::SourceFormatter.format(self)
121
+ end
122
+
123
+ # FULL schema text with cross-references as AsciiDoc xref macros
124
+ # (+<<schema.item,item>>+) — drop-in for a schema document page
125
+ # rendered through a +subs="+macros"+ source block.
126
+ def formatted_hyperlinked_adoc
127
+ @formatted_hyperlinked_adoc ||= Expressir::Express::AdocSourceFormatter.format(self)
128
+ end
129
+
74
130
  private
75
131
 
76
132
  # @param [String] id
@@ -78,7 +134,7 @@ module Expressir
78
134
  # @return [InterfacedItem]
79
135
  def create_interfaced_item(id, base_item)
80
136
  interfaced_item = InterfacedItem.new(
81
- id: id
137
+ id: id,
82
138
  )
83
139
  interfaced_item.base_item = base_item # skip overriding parent
84
140
  interfaced_item.parent = self
@@ -89,29 +145,71 @@ module Expressir
89
145
  def interfaced_items
90
146
  return [] unless parent
91
147
 
148
+ visited_schemas = {}
92
149
  interfaces.flat_map do |interface|
93
- schema = parent.children_by_id[interface.schema.id.downcase]
94
- if schema
95
- schema_safe_children = schema.safe_children
96
- schema_safe_children_by_id = schema_safe_children.select{|x| x.id}.map{|x| [x.id.downcase, x]}.to_h
97
- if interface.items.length > 0
98
- interface.items.map do |interface_item|
99
- base_item = schema_safe_children_by_id[interface_item.ref.id.downcase]
100
- if base_item
101
- id = interface_item.id || base_item.id
102
- create_interfaced_item(id, base_item)
150
+ items_for_interface(interface, visited_schemas)
151
+ end.compact
152
+ end
153
+
154
+ # Direct items of one interface plus the items visible through
155
+ # the foreign schema's own USE interfaces (transitive USE
156
+ # visibility, eeng :use-only → :use-from recursion).
157
+ def items_for_interface(interface, visited_schemas)
158
+ schema = foreign_schema(interface.schema.id.safe_downcase)
159
+ return [] unless schema
160
+ # Visited means this schema's contribution is already in the
161
+ # caller's result: re-entering — mutual USE FROM included —
162
+ # recursed forever when the interface carried an item list
163
+ # (the old guard only fired for the list-less form).
164
+ return [] if visited_schemas.key?(schema.id.safe_downcase)
165
+
166
+ visited_schemas[schema.id.safe_downcase] = true
167
+
168
+ safe_children = schema.safe_children
169
+ children_by_id = safe_children.each_with_object({}) do |child, hash|
170
+ hash[child.id.safe_downcase] = child if child.id
171
+ end
172
+
173
+ own = if interface.items.empty?
174
+ safe_children.map do |base_item|
175
+ create_interfaced_item(base_item.id, base_item)
176
+ end
177
+ else
178
+ interface.items.filter_map do |item|
179
+ base_item = children_by_id[item.ref.id.safe_downcase]
180
+ if base_item
181
+ create_interfaced_item(item.id || base_item.id,
182
+ base_item)
183
+ end
103
184
  end
104
185
  end
105
- else
106
- schema_safe_children.map do |base_item|
107
- id = base_item.id
108
- create_interfaced_item(id, base_item)
109
- end
110
- end
111
- end
112
- end.select{|x| x}
186
+
187
+ # Transitive items are not restricted by this interface's
188
+ # item list: implicit interfacing through USE is unfiltered
189
+ # (eeng :use-only → :use-from recursion finds any id in the
190
+ # foreign schema's use scope).
191
+ own + Array(schema.interfaces).filter_map do |foreign_iface|
192
+ next nil unless foreign_iface.kind == Interface::USE
193
+
194
+ foreign_items = items_for_interface(foreign_iface,
195
+ visited_schemas)
196
+ foreign_items.empty? ? nil : foreign_items
197
+ end.flatten
198
+ end
199
+
200
+ # Find a foreign schema by name: same file first, then the
201
+ # enclosing repository (expressir's compiled/batch repository).
202
+ def foreign_schema(name)
203
+ current = parent
204
+ while current
205
+ return current.children_by_id[name] if current.respond_to?(:children_by_id) &&
206
+ current.children_by_id[name]
207
+
208
+ current = current.is_a?(ModelElement) ? current.parent : nil
209
+ end
210
+ nil
113
211
  end
114
212
  end
115
213
  end
116
214
  end
117
- end
215
+ end
@@ -4,19 +4,16 @@ module Expressir
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.3 Schema
6
6
  class SchemaVersion < ModelElement
7
- model_attr_accessor :value, 'String'
8
- model_attr_accessor :items, 'Array<SchemaVersionItem>'
7
+ attribute :value, :string
8
+ attribute :items, SchemaVersionItem, collection: true
9
+ attribute :_class, :string, default: -> { self.class.name }
9
10
 
10
- # @param [Hash] options
11
- # @option options [String] :value
12
- # @option options [Array<SchemaVersionItem>] :items
13
- def initialize(options = {})
14
- @value = options[:value]
15
- @items = options[:items] || []
16
-
17
- super
11
+ key_value do
12
+ map "_class", to: :_class, render_default: true
13
+ map "value", to: :value
14
+ map "items", to: :items
18
15
  end
19
16
  end
20
17
  end
21
18
  end
22
- end
19
+ end
@@ -4,19 +4,16 @@ module Expressir
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.3 Schema
6
6
  class SchemaVersionItem < ModelElement
7
- model_attr_accessor :name, 'String'
8
- model_attr_accessor :value, 'String'
7
+ attribute :name, :string
8
+ attribute :value, :string
9
+ attribute :_class, :string, default: -> { self.class.name }
9
10
 
10
- # @param [Hash] options
11
- # @option options [String] :name
12
- # @option options [String] :value
13
- def initialize(options = {})
14
- @name = options[:name]
15
- @value = options[:value]
16
-
17
- super
11
+ key_value do
12
+ map "_class", to: :_class, render_default: true
13
+ map "name", to: :name
14
+ map "value", to: :value
18
15
  end
19
16
  end
20
17
  end
21
18
  end
22
- end
19
+ end
@@ -3,38 +3,30 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.7 Subtype constraints
6
- class SubtypeConstraint < Declaration
6
+ class SubtypeConstraint < ModelElement
7
7
  include Identifier
8
8
 
9
- model_attr_accessor :applies_to, 'Reference'
10
- model_attr_accessor :abstract, 'Boolean'
11
- model_attr_accessor :total_over, 'Array<Reference>'
12
- model_attr_accessor :supertype_expression, 'SupertypeExpression'
9
+ attribute :applies_to, ModelElement
10
+ attribute :abstract, :boolean
11
+ attribute :total_over, ModelElement, collection: true
12
+ attribute :supertype_expression, ModelElement
13
+ attribute :_class, :string, default: -> { self.class.name }
13
14
 
14
- # @param [Hash] options
15
- # @option (see Identifier#initialize_identifier)
16
- # @option options [Reference] :applies_to
17
- # @option options [Boolean] :abstract
18
- # @option options [Array<Reference>] :total_over
19
- # @option options [SupertypeExpression] :supertype_expression
20
- def initialize(options = {})
21
- initialize_identifier(options)
22
-
23
- @applies_to = options[:applies_to]
24
- @abstract = options[:abstract]
25
- @total_over = options[:total_over] || []
26
- @supertype_expression = options[:supertype_expression]
27
-
28
- super
15
+ key_value do
16
+ map "_class", to: :_class, render_default: true
17
+ map "applies_to", to: :applies_to
18
+ map "abstract", to: :abstract
19
+ map "total_over", to: :total_over
20
+ map "supertype_expression", to: :supertype_expression
29
21
  end
30
22
 
31
23
  # @return [Array<Declaration>]
32
24
  def children
33
25
  [
34
- *remark_items
26
+ *remark_items,
35
27
  ]
36
28
  end
37
29
  end
38
30
  end
39
31
  end
40
- end
32
+ end
@@ -3,26 +3,26 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.1 Type declaration
6
- class Type < Declaration
6
+ class Type < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
9
+ include HasInformalPropositions
10
+ include HasWhereRules
8
11
 
9
- model_attr_accessor :underlying_type, 'DataType'
10
- model_attr_accessor :where_rules, 'Array<WhereRule>'
11
- model_attr_accessor :informal_propositions, 'Array<RemarkItem>'
12
+ collection_attributes :where_rules, :informal_propositions,
13
+ :remark_items
12
14
 
13
- # @param [Hash] options
14
- # @option (see Identifier#initialize_identifier)
15
- # @option options [DataType] :underlying_type
16
- # @option options [Array<WhereRule>] :where_rules
17
- # @option options [Array<RemarkItem>] :informal_propositions
18
- def initialize(options = {})
19
- initialize_identifier(options)
15
+ attribute :underlying_type, ModelElement
16
+ attribute :where_rules, WhereRule, collection: true
17
+ attribute :informal_propositions, InformalPropositionRule,
18
+ collection: true
19
+ attribute :_class, :string, default: -> { self.class.name }
20
20
 
21
- @underlying_type = options[:underlying_type]
22
- @where_rules = options[:where_rules] || []
23
- @informal_propositions = options[:informal_propositions] || []
24
-
25
- super
21
+ key_value do
22
+ map "_class", to: :_class, render_default: true
23
+ map "underlying_type", to: :underlying_type
24
+ map "where_rules", to: :where_rules
25
+ map "informal_propositions", to: :informal_propositions
26
26
  end
27
27
 
28
28
  # @return [Array<DataTypes::EnumerationItem>]
@@ -36,10 +36,10 @@ module Expressir
36
36
  *enumeration_items,
37
37
  *where_rules,
38
38
  *informal_propositions,
39
- *remark_items
39
+ *remark_items,
40
40
  ]
41
41
  end
42
42
  end
43
43
  end
44
44
  end
45
- end
45
+ end
@@ -3,29 +3,24 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.2.2.1 Uniqueness rule
6
- class UniqueRule < Declaration
6
+ class UniqueRule < ModelElement
7
7
  include Identifier
8
8
 
9
- model_attr_accessor :attributes, 'Reference'
9
+ attribute :attributes, ModelElement, collection: true
10
+ attribute :_class, :string, default: -> { self.class.name }
10
11
 
11
- # @param [Hash] options
12
- # @option (see Identifier#initialize_identifier)
13
- # @option options [Reference] :attributes
14
- def initialize(options = {})
15
- initialize_identifier(options)
16
-
17
- @attributes = options[:attributes] || []
18
-
19
- super
12
+ key_value do
13
+ map "_class", to: :_class, render_default: true
14
+ map "attributes", to: :attributes
20
15
  end
21
16
 
22
17
  # @return [Array<Declaration>]
23
18
  def children
24
19
  [
25
- *remark_items
20
+ *remark_items,
26
21
  ]
27
22
  end
28
23
  end
29
24
  end
30
25
  end
31
- end
26
+ end
@@ -3,32 +3,26 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.5.4 Local variables
6
- class Variable < Declaration
6
+ class Variable < ModelElement
7
7
  include Identifier
8
8
 
9
- model_attr_accessor :type, 'DataType'
10
- model_attr_accessor :expression, 'Expression'
9
+ attribute :type, ModelElement
10
+ attribute :expression, ModelElement
11
+ attribute :_class, :string, default: -> { self.class.name }
11
12
 
12
- # @param [Hash] options
13
- # @option (see Identifier#initialize_identifier)
14
- # @option options [DataType] :type
15
- # @option options [Expression] :expression
16
- def initialize(options = {})
17
- initialize_identifier(options)
18
-
19
- @type = options[:type]
20
- @expression = options[:expression]
21
-
22
- super
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "type", to: :type
16
+ map "expression", to: :expression
23
17
  end
24
18
 
25
19
  # @return [Array<Declaration>]
26
20
  def children
27
21
  [
28
- *remark_items
22
+ *remark_items,
29
23
  ]
30
24
  end
31
25
  end
32
26
  end
33
27
  end
34
- end
28
+ end
@@ -3,29 +3,24 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.2.2.2 Domain rules (WHERE clause)
6
- class WhereRule < Declaration
6
+ class WhereRule < ModelElement
7
7
  include Identifier
8
8
 
9
- model_attr_accessor :expression, 'Expression'
9
+ attribute :expression, ModelElement
10
+ attribute :_class, :string, default: -> { self.class.name }
10
11
 
11
- # @param [Hash] options
12
- # @option (see Identifier#initialize_identifier)
13
- # @option options [Expression] :expression
14
- def initialize(options = {})
15
- initialize_identifier(options)
16
-
17
- @expression = options[:expression]
18
-
19
- super
12
+ key_value do
13
+ map "_class", to: :_class, render_default: true
14
+ map "expression", to: :expression
20
15
  end
21
16
 
22
17
  # @return [Array<Declaration>]
23
18
  def children
24
19
  [
25
- *remark_items
20
+ *remark_items,
26
21
  ]
27
22
  end
28
23
  end
29
24
  end
30
25
  end
31
- end
26
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Expressir
4
+ module Model
5
+ module Declarations
6
+ autoload :Attribute, "#{__dir__}/declarations/attribute"
7
+ autoload :Constant, "#{__dir__}/declarations/constant"
8
+ autoload :DerivedAttribute, "#{__dir__}/declarations/derived_attribute"
9
+ autoload :Entity, "#{__dir__}/declarations/entity"
10
+ autoload :Function, "#{__dir__}/declarations/function"
11
+ autoload :Interface, "#{__dir__}/declarations/interface"
12
+ autoload :InterfaceItem, "#{__dir__}/declarations/interface_item"
13
+ autoload :InterfacedItem, "#{__dir__}/declarations/interfaced_item"
14
+ autoload :InverseAttribute, "#{__dir__}/declarations/inverse_attribute"
15
+ autoload :Parameter, "#{__dir__}/declarations/parameter"
16
+ autoload :Procedure, "#{__dir__}/declarations/procedure"
17
+ autoload :RemarkItem, "#{__dir__}/declarations/remark_item"
18
+ autoload :Rule, "#{__dir__}/declarations/rule"
19
+ autoload :Schema, "#{__dir__}/declarations/schema"
20
+ autoload :SchemaVersion, "#{__dir__}/declarations/schema_version"
21
+ autoload :SchemaVersionItem, "#{__dir__}/declarations/schema_version_item"
22
+ autoload :SubtypeConstraint, "#{__dir__}/declarations/subtype_constraint"
23
+ autoload :Type, "#{__dir__}/declarations/type"
24
+ autoload :UniqueRule, "#{__dir__}/declarations/unique_rule"
25
+ autoload :Variable, "#{__dir__}/declarations/variable"
26
+ autoload :WhereRule, "#{__dir__}/declarations/where_rule"
27
+ autoload :InformalPropositionRule,
28
+ "#{__dir__}/declarations/informal_proposition_rule"
29
+ end
30
+ end
31
+ end