expressir 2.2.1 → 2.3.1

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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.rubocop_todo.yml +681 -78
  4. data/Gemfile +4 -1
  5. data/README.adoc +63 -26
  6. data/benchmark/srl_benchmark.rb +399 -0
  7. data/benchmark/srl_native_benchmark.rb +146 -0
  8. data/benchmark/srl_ruby_benchmark.rb +132 -0
  9. data/expressir.gemspec +3 -2
  10. data/lib/expressir/benchmark.rb +1 -1
  11. data/lib/expressir/changes/item_change.rb +0 -2
  12. data/lib/expressir/changes/mapping_change.rb +0 -2
  13. data/lib/expressir/changes/schema_change.rb +0 -3
  14. data/lib/expressir/changes/version_change.rb +0 -4
  15. data/lib/expressir/changes.rb +5 -6
  16. data/lib/expressir/cli.rb +10 -24
  17. data/lib/expressir/commands/changes.rb +0 -2
  18. data/lib/expressir/commands/changes_import_eengine.rb +2 -5
  19. data/lib/expressir/commands/changes_validate.rb +0 -2
  20. data/lib/expressir/commands/format.rb +1 -1
  21. data/lib/expressir/commands/manifest.rb +0 -7
  22. data/lib/expressir/commands/package.rb +16 -29
  23. data/lib/expressir/commands/validate.rb +0 -2
  24. data/lib/expressir/commands/validate_ascii.rb +0 -1
  25. data/lib/expressir/commands/validate_load.rb +1 -1
  26. data/lib/expressir/commands.rb +20 -0
  27. data/lib/expressir/config.rb +0 -2
  28. data/lib/expressir/coverage.rb +11 -4
  29. data/lib/expressir/eengine/arm_compare_report.rb +1 -5
  30. data/lib/expressir/eengine/changes_section.rb +1 -4
  31. data/lib/expressir/eengine/compare_report.rb +1 -13
  32. data/lib/expressir/eengine/mim_compare_report.rb +1 -5
  33. data/lib/expressir/eengine/modified_object.rb +1 -3
  34. data/lib/expressir/eengine.rb +9 -0
  35. data/lib/expressir/errors.rb +3 -5
  36. data/lib/expressir/express/builder.rb +82 -24
  37. data/lib/expressir/express/builder_registry.rb +411 -0
  38. data/lib/expressir/express/builders/attribute_decl_builder.rb +0 -6
  39. data/lib/expressir/express/builders/built_in_builder.rb +5 -18
  40. data/lib/expressir/express/builders/constant_builder.rb +4 -19
  41. data/lib/expressir/express/builders/declaration_builder.rb +0 -4
  42. data/lib/expressir/express/builders/derive_clause_builder.rb +0 -2
  43. data/lib/expressir/express/builders/derived_attr_builder.rb +0 -2
  44. data/lib/expressir/express/builders/domain_rule_builder.rb +0 -2
  45. data/lib/expressir/express/builders/entity_decl_builder.rb +11 -13
  46. data/lib/expressir/express/builders/explicit_attr_builder.rb +5 -8
  47. data/lib/expressir/express/builders/expression_builder.rb +25 -67
  48. data/lib/expressir/express/builders/function_decl_builder.rb +20 -18
  49. data/lib/expressir/express/builders/interface_builder.rb +0 -20
  50. data/lib/expressir/express/builders/inverse_attr_builder.rb +0 -2
  51. data/lib/expressir/express/builders/inverse_attr_type_builder.rb +0 -6
  52. data/lib/expressir/express/builders/inverse_clause_builder.rb +0 -2
  53. data/lib/expressir/express/builders/literal_builder.rb +1 -15
  54. data/lib/expressir/express/builders/procedure_decl_builder.rb +20 -19
  55. data/lib/expressir/express/builders/qualifier_builder.rb +0 -27
  56. data/lib/expressir/express/builders/reference_builder.rb +1 -10
  57. data/lib/expressir/express/builders/rule_decl_builder.rb +21 -19
  58. data/lib/expressir/express/builders/schema_body_decl_builder.rb +0 -4
  59. data/lib/expressir/express/builders/schema_decl_builder.rb +7 -13
  60. data/lib/expressir/express/builders/schema_version_builder.rb +0 -6
  61. data/lib/expressir/express/builders/simple_id_builder.rb +1 -10
  62. data/lib/expressir/express/builders/statement_builder.rb +4 -32
  63. data/lib/expressir/express/builders/subtype_constraint_builder.rb +6 -30
  64. data/lib/expressir/express/builders/syntax_builder.rb +18 -7
  65. data/lib/expressir/express/builders/type_builder.rb +3 -45
  66. data/lib/expressir/express/builders/type_decl_builder.rb +1 -7
  67. data/lib/expressir/express/builders/unique_clause_builder.rb +1 -3
  68. data/lib/expressir/express/builders/unique_rule_builder.rb +0 -2
  69. data/lib/expressir/express/builders/where_clause_builder.rb +1 -3
  70. data/lib/expressir/express/builders.rb +47 -35
  71. data/lib/expressir/express/error.rb +0 -3
  72. data/lib/expressir/express/formatter.rb +17 -19
  73. data/lib/expressir/express/formatters/data_types_formatter.rb +295 -293
  74. data/lib/expressir/express/formatters/declarations_formatter.rb +617 -615
  75. data/lib/expressir/express/formatters/expressions_formatter.rb +146 -144
  76. data/lib/expressir/express/formatters/literals_formatter.rb +35 -33
  77. data/lib/expressir/express/formatters/references_formatter.rb +34 -32
  78. data/lib/expressir/express/formatters/remark_formatter.rb +174 -209
  79. data/lib/expressir/express/formatters/remark_item_formatter.rb +18 -16
  80. data/lib/expressir/express/formatters/statements_formatter.rb +190 -188
  81. data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +41 -39
  82. data/lib/expressir/express/formatters.rb +22 -0
  83. data/lib/expressir/express/parser.rb +266 -47
  84. data/lib/expressir/express/pretty_formatter.rb +68 -47
  85. data/lib/expressir/express/remark_attacher.rb +254 -162
  86. data/lib/expressir/express/streaming_builder.rb +0 -3
  87. data/lib/expressir/express/transformer/remark_handling.rb +1 -3
  88. data/lib/expressir/express.rb +29 -0
  89. data/lib/expressir/manifest/resolver.rb +0 -3
  90. data/lib/expressir/manifest/validator.rb +0 -3
  91. data/lib/expressir/manifest.rb +6 -0
  92. data/lib/expressir/model/cache.rb +1 -1
  93. data/lib/expressir/model/concerns.rb +19 -0
  94. data/lib/expressir/model/data_types/aggregate.rb +1 -1
  95. data/lib/expressir/model/data_types/array.rb +1 -1
  96. data/lib/expressir/model/data_types/bag.rb +1 -1
  97. data/lib/expressir/model/data_types/binary.rb +1 -1
  98. data/lib/expressir/model/data_types/boolean.rb +1 -1
  99. data/lib/expressir/model/data_types/enumeration.rb +1 -1
  100. data/lib/expressir/model/data_types/enumeration_item.rb +1 -1
  101. data/lib/expressir/model/data_types/generic.rb +1 -1
  102. data/lib/expressir/model/data_types/generic_entity.rb +1 -1
  103. data/lib/expressir/model/data_types/integer.rb +1 -1
  104. data/lib/expressir/model/data_types/list.rb +1 -1
  105. data/lib/expressir/model/data_types/logical.rb +1 -1
  106. data/lib/expressir/model/data_types/number.rb +1 -1
  107. data/lib/expressir/model/data_types/real.rb +1 -1
  108. data/lib/expressir/model/data_types/select.rb +1 -1
  109. data/lib/expressir/model/data_types/set.rb +1 -1
  110. data/lib/expressir/model/data_types/string.rb +1 -1
  111. data/lib/expressir/model/data_types.rb +25 -0
  112. data/lib/expressir/model/declarations/attribute.rb +1 -1
  113. data/lib/expressir/model/declarations/constant.rb +1 -1
  114. data/lib/expressir/model/declarations/derived_attribute.rb +1 -1
  115. data/lib/expressir/model/declarations/entity.rb +4 -1
  116. data/lib/expressir/model/declarations/function.rb +3 -1
  117. data/lib/expressir/model/declarations/informal_proposition_rule.rb +2 -1
  118. data/lib/expressir/model/declarations/interface.rb +1 -1
  119. data/lib/expressir/model/declarations/interface_item.rb +1 -1
  120. data/lib/expressir/model/declarations/interfaced_item.rb +1 -1
  121. data/lib/expressir/model/declarations/inverse_attribute.rb +1 -1
  122. data/lib/expressir/model/declarations/parameter.rb +1 -1
  123. data/lib/expressir/model/declarations/procedure.rb +3 -1
  124. data/lib/expressir/model/declarations/remark_item.rb +1 -1
  125. data/lib/expressir/model/declarations/rule.rb +4 -1
  126. data/lib/expressir/model/declarations/schema.rb +2 -1
  127. data/lib/expressir/model/declarations/schema_version.rb +1 -1
  128. data/lib/expressir/model/declarations/schema_version_item.rb +1 -1
  129. data/lib/expressir/model/declarations/subtype_constraint.rb +1 -1
  130. data/lib/expressir/model/declarations/type.rb +4 -1
  131. data/lib/expressir/model/declarations/unique_rule.rb +1 -1
  132. data/lib/expressir/model/declarations/variable.rb +1 -1
  133. data/lib/expressir/model/declarations/where_rule.rb +1 -1
  134. data/lib/expressir/model/declarations.rb +31 -0
  135. data/lib/expressir/model/dependency_resolver.rb +0 -2
  136. data/lib/expressir/model/exp_file.rb +39 -0
  137. data/lib/expressir/model/expressions/aggregate_initializer.rb +1 -1
  138. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +1 -1
  139. data/lib/expressir/model/expressions/binary_expression.rb +1 -1
  140. data/lib/expressir/model/expressions/entity_constructor.rb +1 -1
  141. data/lib/expressir/model/expressions/function_call.rb +1 -1
  142. data/lib/expressir/model/expressions/interval.rb +1 -1
  143. data/lib/expressir/model/expressions/query_expression.rb +1 -1
  144. data/lib/expressir/model/expressions/unary_expression.rb +1 -1
  145. data/lib/expressir/model/expressions.rb +18 -0
  146. data/lib/expressir/model/identifier.rb +5 -1
  147. data/lib/expressir/model/indexes.rb +11 -0
  148. data/lib/expressir/model/literals/binary.rb +1 -1
  149. data/lib/expressir/model/literals/integer.rb +1 -1
  150. data/lib/expressir/model/literals/logical.rb +1 -1
  151. data/lib/expressir/model/literals/real.rb +1 -1
  152. data/lib/expressir/model/literals/string.rb +1 -1
  153. data/lib/expressir/model/literals.rb +13 -0
  154. data/lib/expressir/model/model_element.rb +7 -15
  155. data/lib/expressir/model/references/attribute_reference.rb +1 -1
  156. data/lib/expressir/model/references/group_reference.rb +1 -1
  157. data/lib/expressir/model/references/index_reference.rb +1 -1
  158. data/lib/expressir/model/references/simple_reference.rb +1 -1
  159. data/lib/expressir/model/references.rb +12 -0
  160. data/lib/expressir/model/remark_info.rb +1 -7
  161. data/lib/expressir/model/repository.rb +76 -41
  162. data/lib/expressir/model/repository_validator.rb +0 -2
  163. data/lib/expressir/model/search_engine.rb +12 -35
  164. data/lib/expressir/model/statements/alias.rb +1 -1
  165. data/lib/expressir/model/statements/assignment.rb +1 -1
  166. data/lib/expressir/model/statements/case.rb +1 -1
  167. data/lib/expressir/model/statements/case_action.rb +1 -1
  168. data/lib/expressir/model/statements/compound.rb +1 -1
  169. data/lib/expressir/model/statements/escape.rb +1 -1
  170. data/lib/expressir/model/statements/if.rb +1 -1
  171. data/lib/expressir/model/statements/null.rb +1 -1
  172. data/lib/expressir/model/statements/procedure_call.rb +1 -1
  173. data/lib/expressir/model/statements/repeat.rb +1 -1
  174. data/lib/expressir/model/statements/return.rb +1 -1
  175. data/lib/expressir/model/statements/skip.rb +1 -1
  176. data/lib/expressir/model/statements.rb +20 -0
  177. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +1 -1
  178. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +1 -1
  179. data/lib/expressir/model/supertype_expressions.rb +12 -0
  180. data/lib/expressir/model.rb +28 -4
  181. data/lib/expressir/package/builder.rb +35 -4
  182. data/lib/expressir/package/metadata.rb +0 -2
  183. data/lib/expressir/package/reader.rb +0 -1
  184. data/lib/expressir/package.rb +8 -0
  185. data/lib/expressir/schema_manifest.rb +5 -7
  186. data/lib/expressir/schema_manifest_entry.rb +3 -5
  187. data/lib/expressir/transformer.rb +7 -0
  188. data/lib/expressir/version.rb +1 -1
  189. data/lib/expressir.rb +23 -171
  190. metadata +46 -6
  191. data/lib/expressir/express/builders/token_builder.rb +0 -15
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Expressir
4
+ module Express
5
+ autoload :Builder, "#{__dir__}/express/builder"
6
+ autoload :Builders, "#{__dir__}/express/builders"
7
+ # autoload :BuilderRegistry, "#{__dir__}/express/builder_registry"
8
+
9
+ # Core classes (autoloaded for lazy loading)
10
+ autoload :Cache, "#{__dir__}/express/cache"
11
+ autoload :Error, "#{__dir__}/express/error"
12
+ autoload :Formatter, "#{__dir__}/express/formatter"
13
+ autoload :Formatters, "#{__dir__}/express/formatters"
14
+ autoload :HyperlinkFormatter, "#{__dir__}/express/hyperlink_formatter"
15
+ autoload :ModelVisitor, "#{__dir__}/express/model_visitor"
16
+ autoload :Parser, "#{__dir__}/express/parser"
17
+ autoload :PrettyFormatter, "#{__dir__}/express/pretty_formatter"
18
+ autoload :RemarkAttacher, "#{__dir__}/express/remark_attacher"
19
+ autoload :ResolveReferencesModelVisitor,
20
+ "#{__dir__}/express/resolve_references_model_visitor"
21
+ autoload :SchemaHeadFormatter, "#{__dir__}/express/schema_head_formatter"
22
+ autoload :StreamingBuilder, "#{__dir__}/express/streaming_builder"
23
+
24
+ autoload :Transformer, "#{__dir__}/express/transformer"
25
+ end
26
+ end
27
+
28
+ # Eagerly load builders (they register themselves at load time)
29
+ require_relative "express/builder_registry"
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../model/dependency_resolver"
4
-
5
3
  module Expressir
6
4
  module Manifest
7
5
  # Resolves schema paths in manifests using pattern-based path discovery
@@ -131,7 +129,6 @@ module Expressir
131
129
  # @param schema_path [String] Path to the schema file
132
130
  # @return [String] The schema name declared in the file
133
131
  def extract_schema_name(schema_path)
134
- require_relative "../express/parser"
135
132
  repo = Expressir::Express::Parser.from_file(schema_path)
136
133
  schema = repo.schemas.first
137
134
  schema&.id || File.basename(schema_path, ".*")
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../model/dependency_resolver"
4
-
5
3
  module Expressir
6
4
  module Manifest
7
5
  # Validates schema manifests for completeness and integrity
@@ -159,7 +157,6 @@ module Expressir
159
157
  # @param schema_path [String] Path to the schema file
160
158
  # @return [String] The schema name declared in the file
161
159
  def extract_schema_name(schema_path)
162
- require_relative "../express/parser"
163
160
  repo = Expressir::Express::Parser.from_file(schema_path)
164
161
  schema = repo.schemas.first
165
162
  schema&.id || File.basename(schema_path, ".*")
@@ -0,0 +1,6 @@
1
+ module Expressir
2
+ module Manifest
3
+ autoload :Validator, "#{__dir__}/manifest/validator"
4
+ autoload :Resolver, "#{__dir__}/manifest/resolver"
5
+ end
6
+ end
@@ -5,7 +5,7 @@ module Expressir
5
5
  attribute :version, :string
6
6
  attribute :root_path, :string
7
7
  attribute :content, ModelElement
8
- attribute :_class, :string, default: -> { send(:name) }
8
+ attribute :_class, :string, default: -> { self.class.name }
9
9
 
10
10
  key_value do
11
11
  map "_class", to: :_class, render_default: true
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Expressir
4
+ module Model
5
+ # Marker for types that can have remark_items children
6
+ # These are types where RemarkItem children can be created
7
+ module HasRemarkItems; end
8
+
9
+ # Marker for scope containers (can contain declarations)
10
+ # Includes schemas, functions, procedures, rules, entities, types, and files
11
+ module ScopeContainer; end
12
+
13
+ # Marker for types supporting informal propositions
14
+ module HasInformalPropositions; end
15
+
16
+ # Marker for types supporting where rules
17
+ module HasWhereRules; end
18
+ end
19
+ end
@@ -7,7 +7,7 @@ module Expressir
7
7
  include Identifier
8
8
 
9
9
  attribute :base_type, ModelElement
10
- attribute :_class, :string, default: -> { send(:name) }
10
+ attribute :_class, :string, default: -> { self.class.name }
11
11
 
12
12
  key_value do
13
13
  map "_class", to: :_class, render_default: true
@@ -9,7 +9,7 @@ module Expressir
9
9
  attribute :optional, :boolean
10
10
  attribute :unique, :boolean
11
11
  attribute :base_type, ModelElement
12
- attribute :_class, :string, default: -> { send(:name) }
12
+ attribute :_class, :string, default: -> { self.class.name }
13
13
 
14
14
  key_value do
15
15
  map "_class", to: :_class, render_default: true
@@ -7,7 +7,7 @@ module Expressir
7
7
  attribute :bound1, ModelElement
8
8
  attribute :bound2, ModelElement
9
9
  attribute :base_type, ModelElement
10
- attribute :_class, :string, default: -> { send(:name) }
10
+ attribute :_class, :string, default: -> { self.class.name }
11
11
 
12
12
  key_value do
13
13
  map "_class", to: :_class, render_default: true
@@ -6,7 +6,7 @@ module Expressir
6
6
  class Binary < ModelElement
7
7
  attribute :width, ModelElement
8
8
  attribute :fixed, :boolean
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -4,7 +4,7 @@ module Expressir
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.5 Boolean data type
6
6
  class Boolean < ModelElement
7
- attribute :_class, :string, default: -> { send(:name) }
7
+ attribute :_class, :string, default: -> { self.class.name }
8
8
 
9
9
  key_value do
10
10
  map "_class", to: :_class, render_default: true
@@ -7,7 +7,7 @@ module Expressir
7
7
  attribute :extensible, :boolean
8
8
  attribute :based_on, ModelElement
9
9
  attribute :items, EnumerationItem, collection: true
10
- attribute :_class, :string, default: -> { send(:name) }
10
+ attribute :_class, :string, default: -> { self.class.name }
11
11
 
12
12
  key_value do
13
13
  map "_class", to: :_class, render_default: true
@@ -6,7 +6,7 @@ module Expressir
6
6
  class EnumerationItem < ModelElement
7
7
  include Identifier
8
8
 
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -6,7 +6,7 @@ module Expressir
6
6
  class Generic < ModelElement
7
7
  include Identifier
8
8
 
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -6,7 +6,7 @@ module Expressir
6
6
  class GenericEntity < ModelElement
7
7
  include Identifier
8
8
 
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -4,7 +4,7 @@ module Expressir
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.3 Integer data type
6
6
  class Integer < ModelElement
7
- attribute :_class, :string, default: -> { send(:name) }
7
+ attribute :_class, :string, default: -> { self.class.name }
8
8
 
9
9
  key_value do
10
10
  map "_class", to: :_class, render_default: true
@@ -8,7 +8,7 @@ module Expressir
8
8
  attribute :bound2, ModelElement
9
9
  attribute :unique, :boolean
10
10
  attribute :base_type, ModelElement
11
- attribute :_class, :string, default: -> { send(:name) }
11
+ attribute :_class, :string, default: -> { self.class.name }
12
12
 
13
13
  key_value do
14
14
  map "_class", to: :_class, render_default: true
@@ -4,7 +4,7 @@ module Expressir
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.4 Logical data type
6
6
  class Logical < ModelElement
7
- attribute :_class, :string, default: -> { send(:name) }
7
+ attribute :_class, :string, default: -> { self.class.name }
8
8
 
9
9
  key_value do
10
10
  map "_class", to: :_class, render_default: true
@@ -4,7 +4,7 @@ module Expressir
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.1 Number data type
6
6
  class Number < ModelElement
7
- attribute :_class, :string, default: -> { send(:name) }
7
+ attribute :_class, :string, default: -> { self.class.name }
8
8
 
9
9
  key_value do
10
10
  map "_class", to: :_class, render_default: true
@@ -5,7 +5,7 @@ module Expressir
5
5
  # - section 8.1.2 Real data type
6
6
  class Real < ModelElement
7
7
  attribute :precision, ModelElement
8
- attribute :_class, :string, default: -> { send(:name) }
8
+ attribute :_class, :string, default: -> { self.class.name }
9
9
 
10
10
  key_value do
11
11
  map "_class", to: :_class, render_default: true
@@ -8,7 +8,7 @@ module Expressir
8
8
  attribute :generic_entity, :boolean
9
9
  attribute :based_on, ModelElement
10
10
  attribute :items, ModelElement, collection: true
11
- attribute :_class, :string, default: -> { send(:name) }
11
+ attribute :_class, :string, default: -> { self.class.name }
12
12
 
13
13
  key_value do
14
14
  map "_class", to: :_class, render_default: true
@@ -7,7 +7,7 @@ module Expressir
7
7
  attribute :bound1, ModelElement
8
8
  attribute :bound2, ModelElement
9
9
  attribute :base_type, ModelElement
10
- attribute :_class, :string, default: -> { send(:name) }
10
+ attribute :_class, :string, default: -> { self.class.name }
11
11
 
12
12
  key_value do
13
13
  map "_class", to: :_class, render_default: true
@@ -6,7 +6,7 @@ module Expressir
6
6
  class String < ModelElement
7
7
  attribute :width, ModelElement
8
8
  attribute :fixed, :boolean
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Expressir
4
+ module Model
5
+ module DataTypes
6
+ autoload :Aggregate, "#{__dir__}/data_types/aggregate"
7
+ autoload :Array, "#{__dir__}/data_types/array"
8
+ autoload :Bag, "#{__dir__}/data_types/bag"
9
+ autoload :Binary, "#{__dir__}/data_types/binary"
10
+ autoload :Boolean, "#{__dir__}/data_types/boolean"
11
+ autoload :Enumeration, "#{__dir__}/data_types/enumeration"
12
+ autoload :EnumerationItem, "#{__dir__}/data_types/enumeration_item"
13
+ autoload :GenericEntity, "#{__dir__}/data_types/generic_entity"
14
+ autoload :Generic, "#{__dir__}/data_types/generic"
15
+ autoload :Integer, "#{__dir__}/data_types/integer"
16
+ autoload :List, "#{__dir__}/data_types/list"
17
+ autoload :Logical, "#{__dir__}/data_types/logical"
18
+ autoload :Number, "#{__dir__}/data_types/number"
19
+ autoload :Real, "#{__dir__}/data_types/real"
20
+ autoload :Select, "#{__dir__}/data_types/select"
21
+ autoload :Set, "#{__dir__}/data_types/set"
22
+ autoload :String, "#{__dir__}/data_types/string"
23
+ end
24
+ end
25
+ end
@@ -15,7 +15,7 @@ module Expressir
15
15
  attribute :optional, :boolean
16
16
  attribute :type, ModelElement
17
17
  attribute :expression, ModelElement
18
- attribute :_class, :string, default: -> { send(:name) }
18
+ attribute :_class, :string, default: -> { self.class.name }
19
19
 
20
20
  key_value do
21
21
  map "_class", to: :_class, render_default: true
@@ -8,7 +8,7 @@ module Expressir
8
8
 
9
9
  attribute :type, ModelElement
10
10
  attribute :expression, ModelElement
11
- attribute :_class, :string, default: -> { send(:name) }
11
+ attribute :_class, :string, default: -> { self.class.name }
12
12
 
13
13
  key_value do
14
14
  map "_class", to: :_class, render_default: true
@@ -9,7 +9,7 @@ module Expressir
9
9
  DERIVED = "DERIVED".freeze
10
10
 
11
11
  attribute :kind, :string, default: -> { DERIVED }
12
- attribute :_class, :string, default: -> { send(:name) }
12
+ attribute :_class, :string, default: -> { self.class.name }
13
13
 
14
14
  key_value do
15
15
  map "_class", to: :_class, render_default: true
@@ -5,6 +5,9 @@ module Expressir
5
5
  # - section 9.2 Entity declaration
6
6
  class Entity < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
9
+ include HasInformalPropositions
10
+ include HasWhereRules
8
11
 
9
12
  attribute :abstract, :boolean
10
13
  attribute :supertype_expression, ModelElement
@@ -16,7 +19,7 @@ module Expressir
16
19
  attribute :where_rules, WhereRule, collection: true
17
20
  attribute :informal_propositions, InformalPropositionRule,
18
21
  collection: true
19
- attribute :_class, :string, default: -> { send(:name) }
22
+ attribute :_class, :string, default: -> { self.class.name }
20
23
 
21
24
  key_value do
22
25
  map "_class", to: :_class, render_default: true
@@ -5,6 +5,8 @@ module Expressir
5
5
  # - section 9.5.1 Function
6
6
  class Function < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
9
+ include HasWhereRules
8
10
 
9
11
  attribute :parameters, Parameter, collection: true
10
12
  attribute :return_type, ModelElement
@@ -16,7 +18,7 @@ module Expressir
16
18
  attribute :constants, Constant, collection: true
17
19
  attribute :variables, Variable, collection: true
18
20
  attribute :statements, ModelElement, collection: true
19
- attribute :_class, :string, default: -> { send(:name) }
21
+ attribute :_class, :string, default: -> { self.class.name }
20
22
 
21
23
  key_value do
22
24
  map "_class", to: :_class, render_default: true
@@ -4,9 +4,10 @@ module Expressir
4
4
  # Informal proposition rules are used to specify constraints that cannot be formally expressed
5
5
  class InformalPropositionRule < ModelElement
6
6
  include Identifier
7
+ include HasInformalPropositions
7
8
 
8
9
  attribute :expression, ModelElement
9
- attribute :_class, :string, default: -> { send(:name) }
10
+ attribute :_class, :string, default: -> { self.class.name }
10
11
 
11
12
  key_value do
12
13
  map "_class", to: :_class, render_default: true
@@ -10,7 +10,7 @@ module Expressir
10
10
  attribute :kind, :string, values: %w[USE REFERENCE]
11
11
  attribute :schema, ModelElement
12
12
  attribute :items, InterfaceItem, collection: true
13
- attribute :_class, :string, default: -> { send(:name) }
13
+ attribute :_class, :string, default: -> { self.class.name }
14
14
 
15
15
  key_value do
16
16
  map "_class", to: :_class, render_default: true
@@ -6,7 +6,7 @@ module Expressir
6
6
  class InterfaceItem < ModelElement
7
7
  attribute :ref, ModelElement
8
8
  attribute :id, :string
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -8,7 +8,7 @@ module Expressir
8
8
  attribute :remarks, :string, collection: true
9
9
  attribute :remark_items, RemarkItem, collection: true
10
10
  attribute :base_item, ModelElement
11
- attribute :_class, :string, default: -> { send(:name) }
11
+ attribute :_class, :string, default: -> { self.class.name }
12
12
 
13
13
  key_value do
14
14
  map "_class", to: :_class, render_default: true
@@ -9,7 +9,7 @@ module Expressir
9
9
  INVERSE = "INVERSE".freeze
10
10
 
11
11
  attribute :kind, :string, default: -> { INVERSE }
12
- attribute :_class, :string, default: -> { send(:name) }
12
+ attribute :_class, :string, default: -> { self.class.name }
13
13
 
14
14
  key_value do
15
15
  map "_class", to: :_class, render_default: true
@@ -8,7 +8,7 @@ module Expressir
8
8
 
9
9
  attribute :var, :boolean
10
10
  attribute :type, ModelElement
11
- attribute :_class, :string, default: -> { send(:name) }
11
+ attribute :_class, :string, default: -> { self.class.name }
12
12
 
13
13
  key_value do
14
14
  map "_class", to: :_class, render_default: true
@@ -5,6 +5,8 @@ module Expressir
5
5
  # - section 9.5.2 Procedure
6
6
  class Procedure < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
9
+ include HasWhereRules
8
10
 
9
11
  attribute :parameters, Parameter, collection: true
10
12
  attribute :types, ModelElement, collection: true
@@ -15,7 +17,7 @@ module Expressir
15
17
  attribute :constants, Constant, collection: true
16
18
  attribute :variables, Variable, collection: true
17
19
  attribute :statements, ModelElement, collection: true
18
- attribute :_class, :string, default: -> { send(:name) }
20
+ attribute :_class, :string, default: -> { self.class.name }
19
21
 
20
22
  key_value do
21
23
  map "_class", to: :_class, render_default: true
@@ -5,7 +5,7 @@ module Expressir
5
5
  class RemarkItem < ModelElement
6
6
  attribute :id, :string
7
7
  attribute :remarks, :string, collection: true
8
- attribute :_class, :string, default: -> { send(:name) }
8
+ attribute :_class, :string, default: -> { self.class.name }
9
9
 
10
10
  key_value do
11
11
  map "_class", to: :_class, render_default: true
@@ -5,6 +5,9 @@ module Expressir
5
5
  # - section 9.6 Rule
6
6
  class Rule < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
9
+ include HasInformalPropositions
10
+ include HasWhereRules
8
11
 
9
12
  attribute :applies_to, ModelElement, collection: true
10
13
  attribute :types, ModelElement, collection: true
@@ -18,7 +21,7 @@ module Expressir
18
21
  attribute :where_rules, WhereRule, collection: true
19
22
  attribute :informal_propositions, InformalPropositionRule,
20
23
  collection: true
21
- attribute :_class, :string, default: -> { send(:name) }
24
+ attribute :_class, :string, default: -> { self.class.name }
22
25
 
23
26
  key_value do
24
27
  map "_class", to: :_class, render_default: true
@@ -5,6 +5,7 @@ module Expressir
5
5
  # - section 9.3 Schema
6
6
  class Schema < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
8
9
 
9
10
  attribute :file, :string
10
11
  attribute :version, SchemaVersion
@@ -16,7 +17,7 @@ module Expressir
16
17
  attribute :functions, Function, collection: true
17
18
  attribute :rules, Rule, collection: true
18
19
  attribute :procedures, Procedure, collection: true
19
- attribute :_class, :string, default: -> { send(:name) }
20
+ attribute :_class, :string, default: -> { self.class.name }
20
21
  attribute :selected, :boolean, default: false
21
22
  attribute :formatted, :string
22
23
  attribute :file_basename, :string
@@ -6,7 +6,7 @@ module Expressir
6
6
  class SchemaVersion < ModelElement
7
7
  attribute :value, :string
8
8
  attribute :items, SchemaVersionItem, collection: true
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -6,7 +6,7 @@ module Expressir
6
6
  class SchemaVersionItem < ModelElement
7
7
  attribute :name, :string
8
8
  attribute :value, :string
9
- attribute :_class, :string, default: -> { send(:name) }
9
+ attribute :_class, :string, default: -> { self.class.name }
10
10
 
11
11
  key_value do
12
12
  map "_class", to: :_class, render_default: true
@@ -10,7 +10,7 @@ module Expressir
10
10
  attribute :abstract, :boolean
11
11
  attribute :total_over, ModelElement, collection: true
12
12
  attribute :supertype_expression, ModelElement
13
- attribute :_class, :string, default: -> { send(:name) }
13
+ attribute :_class, :string, default: -> { self.class.name }
14
14
 
15
15
  key_value do
16
16
  map "_class", to: :_class, render_default: true
@@ -5,12 +5,15 @@ module Expressir
5
5
  # - section 9.1 Type declaration
6
6
  class Type < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
9
+ include HasInformalPropositions
10
+ include HasWhereRules
8
11
 
9
12
  attribute :underlying_type, ModelElement
10
13
  attribute :where_rules, WhereRule, collection: true
11
14
  attribute :informal_propositions, InformalPropositionRule,
12
15
  collection: true
13
- attribute :_class, :string, default: -> { send(:name) }
16
+ attribute :_class, :string, default: -> { self.class.name }
14
17
 
15
18
  key_value do
16
19
  map "_class", to: :_class, render_default: true
@@ -7,7 +7,7 @@ module Expressir
7
7
  include Identifier
8
8
 
9
9
  attribute :attributes, ModelElement, collection: true
10
- attribute :_class, :string, default: -> { send(:name) }
10
+ attribute :_class, :string, default: -> { self.class.name }
11
11
 
12
12
  key_value do
13
13
  map "_class", to: :_class, render_default: true
@@ -8,7 +8,7 @@ module Expressir
8
8
 
9
9
  attribute :type, ModelElement
10
10
  attribute :expression, ModelElement
11
- attribute :_class, :string, default: -> { send(:name) }
11
+ attribute :_class, :string, default: -> { self.class.name }
12
12
 
13
13
  key_value do
14
14
  map "_class", to: :_class, render_default: true
@@ -7,7 +7,7 @@ module Expressir
7
7
  include Identifier
8
8
 
9
9
  attribute :expression, ModelElement
10
- attribute :_class, :string, default: -> { send(:name) }
10
+ attribute :_class, :string, default: -> { self.class.name }
11
11
 
12
12
  key_value do
13
13
  map "_class", to: :_class, render_default: true
@@ -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
@@ -50,8 +50,6 @@ module Expressir
50
50
  # @param schema_path [String] Path to schema file
51
51
  # @return [Array<Hash>] List of interfaces with :kind, :schema_name
52
52
  def extract_interfaces(schema_path)
53
- require_relative "../express/parser"
54
-
55
53
  interfaces = []
56
54
 
57
55
  # Parse the schema file properly