expressir 2.2.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +253 -81
- data/Gemfile +4 -1
- data/README.adoc +63 -26
- data/benchmark/srl_benchmark.rb +386 -0
- data/benchmark/srl_native_benchmark.rb +142 -0
- data/benchmark/srl_ruby_benchmark.rb +130 -0
- data/expressir.gemspec +3 -2
- data/lib/expressir/benchmark.rb +1 -1
- data/lib/expressir/changes/item_change.rb +0 -1
- data/lib/expressir/changes/mapping_change.rb +0 -1
- data/lib/expressir/changes/schema_change.rb +0 -2
- data/lib/expressir/changes/version_change.rb +0 -3
- data/lib/expressir/changes.rb +5 -6
- data/lib/expressir/cli.rb +10 -24
- data/lib/expressir/commands/changes.rb +0 -2
- data/lib/expressir/commands/changes_import_eengine.rb +0 -3
- data/lib/expressir/commands/changes_validate.rb +0 -2
- data/lib/expressir/commands/format.rb +1 -1
- data/lib/expressir/commands/manifest.rb +0 -7
- data/lib/expressir/commands/package.rb +16 -29
- data/lib/expressir/commands/validate.rb +0 -2
- data/lib/expressir/commands/validate_load.rb +1 -1
- data/lib/expressir/commands.rb +20 -0
- data/lib/expressir/config.rb +0 -2
- data/lib/expressir/coverage.rb +11 -4
- data/lib/expressir/eengine/arm_compare_report.rb +1 -4
- data/lib/expressir/eengine/changes_section.rb +1 -3
- data/lib/expressir/eengine/compare_report.rb +1 -13
- data/lib/expressir/eengine/mim_compare_report.rb +1 -4
- data/lib/expressir/eengine/modified_object.rb +1 -2
- data/lib/expressir/eengine.rb +9 -0
- data/lib/expressir/errors.rb +3 -5
- data/lib/expressir/express/builder.rb +22 -7
- data/lib/expressir/express/builder_registry.rb +411 -0
- data/lib/expressir/express/builders/attribute_decl_builder.rb +0 -6
- data/lib/expressir/express/builders/built_in_builder.rb +1 -16
- data/lib/expressir/express/builders/constant_builder.rb +4 -19
- data/lib/expressir/express/builders/declaration_builder.rb +0 -4
- data/lib/expressir/express/builders/derive_clause_builder.rb +0 -2
- data/lib/expressir/express/builders/derived_attr_builder.rb +0 -2
- data/lib/expressir/express/builders/domain_rule_builder.rb +0 -2
- data/lib/expressir/express/builders/entity_decl_builder.rb +7 -13
- data/lib/expressir/express/builders/explicit_attr_builder.rb +5 -8
- data/lib/expressir/express/builders/expression_builder.rb +31 -67
- data/lib/expressir/express/builders/function_decl_builder.rb +20 -18
- data/lib/expressir/express/builders/interface_builder.rb +0 -20
- data/lib/expressir/express/builders/inverse_attr_builder.rb +0 -2
- data/lib/expressir/express/builders/inverse_attr_type_builder.rb +0 -6
- data/lib/expressir/express/builders/inverse_clause_builder.rb +0 -2
- data/lib/expressir/express/builders/literal_builder.rb +1 -15
- data/lib/expressir/express/builders/procedure_decl_builder.rb +20 -19
- data/lib/expressir/express/builders/qualifier_builder.rb +0 -27
- data/lib/expressir/express/builders/reference_builder.rb +1 -10
- data/lib/expressir/express/builders/rule_decl_builder.rb +21 -19
- data/lib/expressir/express/builders/schema_body_decl_builder.rb +0 -4
- data/lib/expressir/express/builders/schema_decl_builder.rb +7 -13
- data/lib/expressir/express/builders/schema_version_builder.rb +0 -6
- data/lib/expressir/express/builders/simple_id_builder.rb +1 -10
- data/lib/expressir/express/builders/statement_builder.rb +4 -32
- data/lib/expressir/express/builders/subtype_constraint_builder.rb +6 -30
- data/lib/expressir/express/builders/syntax_builder.rb +60 -7
- data/lib/expressir/express/builders/type_builder.rb +3 -45
- data/lib/expressir/express/builders/type_decl_builder.rb +1 -7
- data/lib/expressir/express/builders/unique_clause_builder.rb +1 -3
- data/lib/expressir/express/builders/unique_rule_builder.rb +0 -2
- data/lib/expressir/express/builders/where_clause_builder.rb +1 -3
- data/lib/expressir/express/builders.rb +47 -35
- data/lib/expressir/express/error.rb +0 -3
- data/lib/expressir/express/formatter.rb +17 -19
- data/lib/expressir/express/formatters/data_types_formatter.rb +295 -293
- data/lib/expressir/express/formatters/declarations_formatter.rb +617 -615
- data/lib/expressir/express/formatters/expressions_formatter.rb +146 -144
- data/lib/expressir/express/formatters/literals_formatter.rb +35 -33
- data/lib/expressir/express/formatters/references_formatter.rb +34 -32
- data/lib/expressir/express/formatters/remark_formatter.rb +176 -209
- data/lib/expressir/express/formatters/remark_item_formatter.rb +18 -16
- data/lib/expressir/express/formatters/statements_formatter.rb +190 -188
- data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +41 -39
- data/lib/expressir/express/formatters.rb +22 -0
- data/lib/expressir/express/parser.rb +40 -41
- data/lib/expressir/express/pretty_formatter.rb +68 -47
- data/lib/expressir/express/remark_attacher.rb +210 -147
- data/lib/expressir/express/streaming_builder.rb +0 -3
- data/lib/expressir/express/transformer/remark_handling.rb +1 -2
- data/lib/expressir/express.rb +29 -0
- data/lib/expressir/manifest/resolver.rb +0 -3
- data/lib/expressir/manifest/validator.rb +0 -3
- data/lib/expressir/manifest.rb +6 -0
- data/lib/expressir/model/cache.rb +1 -1
- data/lib/expressir/model/concerns.rb +19 -0
- data/lib/expressir/model/data_types/aggregate.rb +1 -1
- data/lib/expressir/model/data_types/array.rb +1 -1
- data/lib/expressir/model/data_types/bag.rb +1 -1
- data/lib/expressir/model/data_types/binary.rb +1 -1
- data/lib/expressir/model/data_types/boolean.rb +1 -1
- data/lib/expressir/model/data_types/enumeration.rb +1 -1
- data/lib/expressir/model/data_types/enumeration_item.rb +1 -1
- data/lib/expressir/model/data_types/generic.rb +1 -1
- data/lib/expressir/model/data_types/generic_entity.rb +1 -1
- data/lib/expressir/model/data_types/integer.rb +1 -1
- data/lib/expressir/model/data_types/list.rb +1 -1
- data/lib/expressir/model/data_types/logical.rb +1 -1
- data/lib/expressir/model/data_types/number.rb +1 -1
- data/lib/expressir/model/data_types/real.rb +1 -1
- data/lib/expressir/model/data_types/select.rb +1 -1
- data/lib/expressir/model/data_types/set.rb +1 -1
- data/lib/expressir/model/data_types/string.rb +1 -1
- data/lib/expressir/model/data_types.rb +25 -0
- data/lib/expressir/model/declarations/attribute.rb +1 -1
- data/lib/expressir/model/declarations/constant.rb +1 -1
- data/lib/expressir/model/declarations/derived_attribute.rb +1 -1
- data/lib/expressir/model/declarations/entity.rb +4 -1
- data/lib/expressir/model/declarations/function.rb +3 -1
- data/lib/expressir/model/declarations/informal_proposition_rule.rb +2 -1
- data/lib/expressir/model/declarations/interface.rb +1 -1
- data/lib/expressir/model/declarations/interface_item.rb +1 -1
- data/lib/expressir/model/declarations/interfaced_item.rb +1 -1
- data/lib/expressir/model/declarations/inverse_attribute.rb +1 -1
- data/lib/expressir/model/declarations/parameter.rb +1 -1
- data/lib/expressir/model/declarations/procedure.rb +3 -1
- data/lib/expressir/model/declarations/remark_item.rb +1 -1
- data/lib/expressir/model/declarations/rule.rb +4 -1
- data/lib/expressir/model/declarations/schema.rb +2 -1
- data/lib/expressir/model/declarations/schema_version.rb +1 -1
- data/lib/expressir/model/declarations/schema_version_item.rb +1 -1
- data/lib/expressir/model/declarations/subtype_constraint.rb +1 -1
- data/lib/expressir/model/declarations/type.rb +4 -1
- data/lib/expressir/model/declarations/unique_rule.rb +1 -1
- data/lib/expressir/model/declarations/variable.rb +1 -1
- data/lib/expressir/model/declarations/where_rule.rb +1 -1
- data/lib/expressir/model/declarations.rb +31 -0
- data/lib/expressir/model/dependency_resolver.rb +0 -2
- data/lib/expressir/model/exp_file.rb +38 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +1 -1
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +1 -1
- data/lib/expressir/model/expressions/binary_expression.rb +1 -1
- data/lib/expressir/model/expressions/entity_constructor.rb +1 -1
- data/lib/expressir/model/expressions/function_call.rb +1 -1
- data/lib/expressir/model/expressions/interval.rb +1 -1
- data/lib/expressir/model/expressions/query_expression.rb +1 -1
- data/lib/expressir/model/expressions/unary_expression.rb +1 -1
- data/lib/expressir/model/expressions.rb +18 -0
- data/lib/expressir/model/identifier.rb +5 -1
- data/lib/expressir/model/indexes.rb +11 -0
- data/lib/expressir/model/literals/binary.rb +1 -1
- data/lib/expressir/model/literals/integer.rb +1 -1
- data/lib/expressir/model/literals/logical.rb +1 -1
- data/lib/expressir/model/literals/real.rb +1 -1
- data/lib/expressir/model/literals/string.rb +1 -1
- data/lib/expressir/model/literals.rb +13 -0
- data/lib/expressir/model/model_element.rb +7 -15
- data/lib/expressir/model/references/attribute_reference.rb +1 -1
- data/lib/expressir/model/references/group_reference.rb +1 -1
- data/lib/expressir/model/references/index_reference.rb +1 -1
- data/lib/expressir/model/references/simple_reference.rb +1 -1
- data/lib/expressir/model/references.rb +12 -0
- data/lib/expressir/model/remark_info.rb +1 -7
- data/lib/expressir/model/repository.rb +72 -36
- data/lib/expressir/model/repository_validator.rb +0 -2
- data/lib/expressir/model/search_engine.rb +6 -30
- data/lib/expressir/model/statements/alias.rb +1 -1
- data/lib/expressir/model/statements/assignment.rb +1 -1
- data/lib/expressir/model/statements/case.rb +1 -1
- data/lib/expressir/model/statements/case_action.rb +1 -1
- data/lib/expressir/model/statements/compound.rb +1 -1
- data/lib/expressir/model/statements/escape.rb +1 -1
- data/lib/expressir/model/statements/if.rb +1 -1
- data/lib/expressir/model/statements/null.rb +1 -1
- data/lib/expressir/model/statements/procedure_call.rb +1 -1
- data/lib/expressir/model/statements/repeat.rb +1 -1
- data/lib/expressir/model/statements/return.rb +1 -1
- data/lib/expressir/model/statements/skip.rb +1 -1
- data/lib/expressir/model/statements.rb +20 -0
- data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +1 -1
- data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +1 -1
- data/lib/expressir/model/supertype_expressions.rb +12 -0
- data/lib/expressir/model.rb +28 -4
- data/lib/expressir/package/builder.rb +33 -4
- data/lib/expressir/package/metadata.rb +0 -1
- data/lib/expressir/package/reader.rb +0 -1
- data/lib/expressir/package.rb +8 -0
- data/lib/expressir/schema_manifest.rb +5 -6
- data/lib/expressir/schema_manifest_entry.rb +3 -4
- data/lib/expressir/transformer.rb +7 -0
- data/lib/expressir/version.rb +1 -1
- data/lib/expressir.rb +23 -171
- metadata +49 -9
- data/lib/expressir/express/builders/token_builder.rb +0 -15
|
@@ -4,8 +4,6 @@ require "thor"
|
|
|
4
4
|
require "json"
|
|
5
5
|
require "yaml"
|
|
6
6
|
require "pathname"
|
|
7
|
-
require_relative "base"
|
|
8
|
-
require_relative "../model/search_engine"
|
|
9
7
|
|
|
10
8
|
module Expressir
|
|
11
9
|
module Commands
|
|
@@ -94,10 +92,6 @@ module Expressir
|
|
|
94
92
|
option :verbose, type: :boolean, default: false,
|
|
95
93
|
desc: "Enable verbose output"
|
|
96
94
|
def build(root_schema = nil, output = nil)
|
|
97
|
-
require_relative "../model/dependency_resolver"
|
|
98
|
-
require_relative "../model/repository"
|
|
99
|
-
require_relative "../schema_manifest"
|
|
100
|
-
|
|
101
95
|
schema_files = if options[:manifest]
|
|
102
96
|
# Manifest-based mode
|
|
103
97
|
unless File.exist?(options[:manifest])
|
|
@@ -109,7 +103,7 @@ module Expressir
|
|
|
109
103
|
unless output
|
|
110
104
|
raise Expressir::MissingRequiredArgumentError.new(
|
|
111
105
|
"OUTPUT path is required",
|
|
112
|
-
usage_hint: "expressir package build --manifest MANIFEST.yaml OUTPUT.ler"
|
|
106
|
+
usage_hint: "expressir package build --manifest MANIFEST.yaml OUTPUT.ler",
|
|
113
107
|
)
|
|
114
108
|
end
|
|
115
109
|
|
|
@@ -130,7 +124,6 @@ module Expressir
|
|
|
130
124
|
say ""
|
|
131
125
|
else
|
|
132
126
|
say "Verifying manifest integrity..."
|
|
133
|
-
require_relative "../manifest/validator"
|
|
134
127
|
|
|
135
128
|
validator = Expressir::Manifest::Validator.new(
|
|
136
129
|
manifest, options.merge(verbose: true)
|
|
@@ -141,7 +134,7 @@ module Expressir
|
|
|
141
134
|
unless file_errors.empty?
|
|
142
135
|
raise Expressir::ManifestValidationError.new(
|
|
143
136
|
"Manifest validation failed",
|
|
144
|
-
errors: file_errors.map { |e| e[:message] }
|
|
137
|
+
errors: file_errors.map { |e| e[:message] },
|
|
145
138
|
)
|
|
146
139
|
end
|
|
147
140
|
|
|
@@ -150,7 +143,7 @@ module Expressir
|
|
|
150
143
|
unless reference_errors.empty?
|
|
151
144
|
raise Expressir::ReferentialIntegrityError.new(
|
|
152
145
|
reference_errors,
|
|
153
|
-
message: "Manifest has unresolved dependencies"
|
|
146
|
+
message: "Manifest has unresolved dependencies",
|
|
154
147
|
)
|
|
155
148
|
end
|
|
156
149
|
|
|
@@ -189,7 +182,7 @@ module Expressir
|
|
|
189
182
|
unless errors.empty?
|
|
190
183
|
raise Expressir::ManifestValidationError.new(
|
|
191
184
|
"Manifest validation failed",
|
|
192
|
-
errors: errors
|
|
185
|
+
errors: errors,
|
|
193
186
|
)
|
|
194
187
|
end
|
|
195
188
|
|
|
@@ -205,14 +198,14 @@ module Expressir
|
|
|
205
198
|
unless root_schema
|
|
206
199
|
raise Expressir::MissingRequiredArgumentError.new(
|
|
207
200
|
"ROOT_SCHEMA is required when not using --manifest",
|
|
208
|
-
usage_hint: "expressir package build ROOT_SCHEMA OUTPUT.ler"
|
|
201
|
+
usage_hint: "expressir package build ROOT_SCHEMA OUTPUT.ler",
|
|
209
202
|
)
|
|
210
203
|
end
|
|
211
204
|
|
|
212
205
|
unless output
|
|
213
206
|
raise Expressir::MissingRequiredArgumentError.new(
|
|
214
207
|
"OUTPUT path is required",
|
|
215
|
-
usage_hint: "expressir package build ROOT_SCHEMA OUTPUT.ler"
|
|
208
|
+
usage_hint: "expressir package build ROOT_SCHEMA OUTPUT.ler",
|
|
216
209
|
)
|
|
217
210
|
end
|
|
218
211
|
|
|
@@ -273,7 +266,7 @@ module Expressir
|
|
|
273
266
|
else
|
|
274
267
|
e.to_s
|
|
275
268
|
end
|
|
276
|
-
end
|
|
269
|
+
end,
|
|
277
270
|
)
|
|
278
271
|
end
|
|
279
272
|
say " ✓ Validation passed" if options[:verbose]
|
|
@@ -290,7 +283,7 @@ module Expressir
|
|
|
290
283
|
rescue StandardError => e
|
|
291
284
|
raise Expressir::PackageBuildError.new(
|
|
292
285
|
"Error building package: #{e.message}",
|
|
293
|
-
command_name: "package build"
|
|
286
|
+
command_name: "package build",
|
|
294
287
|
)
|
|
295
288
|
end
|
|
296
289
|
|
|
@@ -312,9 +305,6 @@ module Expressir
|
|
|
312
305
|
enum: ["text", "json", "yaml"],
|
|
313
306
|
desc: "Output format"
|
|
314
307
|
def info(package_path)
|
|
315
|
-
require_relative "../model/repository"
|
|
316
|
-
require_relative "../package/reader"
|
|
317
|
-
|
|
318
308
|
repo = load_package(package_path)
|
|
319
309
|
metadata = load_package_metadata(package_path)
|
|
320
310
|
|
|
@@ -331,7 +321,7 @@ module Expressir
|
|
|
331
321
|
rescue StandardError => e
|
|
332
322
|
raise Expressir::PackageReadError.new(
|
|
333
323
|
"Error reading package info: #{e.message}",
|
|
334
|
-
command_name: "package info"
|
|
324
|
+
command_name: "package info",
|
|
335
325
|
)
|
|
336
326
|
end
|
|
337
327
|
|
|
@@ -377,8 +367,6 @@ module Expressir
|
|
|
377
367
|
enum: ["text", "json", "yaml"],
|
|
378
368
|
desc: "Output format"
|
|
379
369
|
def validate(package_path)
|
|
380
|
-
require_relative "../model/repository"
|
|
381
|
-
|
|
382
370
|
repo = load_package(package_path)
|
|
383
371
|
validation = repo.validate(
|
|
384
372
|
strict: options[:strict],
|
|
@@ -396,7 +384,7 @@ module Expressir
|
|
|
396
384
|
unless validation[:valid?]
|
|
397
385
|
raise Expressir::PackageValidationError.new(
|
|
398
386
|
"Package validation failed",
|
|
399
|
-
errors: validation[:errors] || []
|
|
387
|
+
errors: validation[:errors] || [],
|
|
400
388
|
)
|
|
401
389
|
end
|
|
402
390
|
rescue Expressir::Error
|
|
@@ -404,7 +392,7 @@ module Expressir
|
|
|
404
392
|
rescue StandardError => e
|
|
405
393
|
raise Expressir::PackageValidationError.new(
|
|
406
394
|
"Error validating package: #{e.message}",
|
|
407
|
-
command_name: "package validate"
|
|
395
|
+
command_name: "package validate",
|
|
408
396
|
)
|
|
409
397
|
end
|
|
410
398
|
|
|
@@ -431,7 +419,7 @@ module Expressir
|
|
|
431
419
|
unless options[:output]
|
|
432
420
|
raise Expressir::MissingRequiredArgumentError.new(
|
|
433
421
|
"output directory is required",
|
|
434
|
-
usage_hint: "expressir package extract PACKAGE --output OUTPUT_DIR"
|
|
422
|
+
usage_hint: "expressir package extract PACKAGE --output OUTPUT_DIR",
|
|
435
423
|
)
|
|
436
424
|
end
|
|
437
425
|
|
|
@@ -455,7 +443,7 @@ module Expressir
|
|
|
455
443
|
rescue StandardError => e
|
|
456
444
|
raise Expressir::PackageExtractError.new(
|
|
457
445
|
"Error extracting package: #{e.message}",
|
|
458
|
-
command_name: "package extract"
|
|
446
|
+
command_name: "package extract",
|
|
459
447
|
)
|
|
460
448
|
end
|
|
461
449
|
|
|
@@ -521,7 +509,7 @@ module Expressir
|
|
|
521
509
|
rescue StandardError => e
|
|
522
510
|
raise Expressir::PackageListError.new(
|
|
523
511
|
"Error listing elements: #{e.message}",
|
|
524
|
-
command_name: "package list"
|
|
512
|
+
command_name: "package list",
|
|
525
513
|
)
|
|
526
514
|
end
|
|
527
515
|
|
|
@@ -605,7 +593,7 @@ module Expressir
|
|
|
605
593
|
rescue StandardError => e
|
|
606
594
|
raise Expressir::PackageSearchError.new(
|
|
607
595
|
"Error searching: #{e.message}",
|
|
608
|
-
command_name: "package search"
|
|
596
|
+
command_name: "package search",
|
|
609
597
|
)
|
|
610
598
|
end
|
|
611
599
|
desc "tree PACKAGE", "Display hierarchical tree view of package contents"
|
|
@@ -676,7 +664,7 @@ module Expressir
|
|
|
676
664
|
rescue StandardError => e
|
|
677
665
|
raise Expressir::PackageTreeError.new(
|
|
678
666
|
"Error displaying tree: #{e.message}",
|
|
679
|
-
command_name: "package tree"
|
|
667
|
+
command_name: "package tree",
|
|
680
668
|
)
|
|
681
669
|
end
|
|
682
670
|
|
|
@@ -711,7 +699,6 @@ module Expressir
|
|
|
711
699
|
# @return [Package::Metadata] Package metadata
|
|
712
700
|
def load_package_metadata(package_path)
|
|
713
701
|
require "zip"
|
|
714
|
-
require_relative "../package/metadata"
|
|
715
702
|
|
|
716
703
|
Zip::File.open(package_path) do |zip|
|
|
717
704
|
entry = zip.find_entry("metadata.yaml")
|
|
@@ -30,7 +30,6 @@ module Expressir
|
|
|
30
30
|
method_option :verbose, type: :boolean, default: false,
|
|
31
31
|
desc: "Show verbose output"
|
|
32
32
|
def load(*paths)
|
|
33
|
-
require_relative "validate_load"
|
|
34
33
|
ValidateLoad.new(options).run(paths)
|
|
35
34
|
end
|
|
36
35
|
|
|
@@ -78,7 +77,6 @@ module Expressir
|
|
|
78
77
|
method_option :verbose, type: :boolean, default: false,
|
|
79
78
|
desc: "Show verbose output"
|
|
80
79
|
def ascii(path)
|
|
81
|
-
require_relative "validate_ascii"
|
|
82
80
|
ValidateAscii.new(options).run(path)
|
|
83
81
|
end
|
|
84
82
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# lib/expressir/commands.rb
|
|
2
|
+
module Expressir
|
|
3
|
+
module Commands
|
|
4
|
+
autoload :Base, "#{__dir__}/commands/base"
|
|
5
|
+
autoload :Benchmark, "#{__dir__}/commands/benchmark"
|
|
6
|
+
autoload :BenchmarkCache, "#{__dir__}/commands/benchmark_cache"
|
|
7
|
+
autoload :Clean, "#{__dir__}/commands/clean"
|
|
8
|
+
autoload :Coverage, "#{__dir__}/commands/coverage"
|
|
9
|
+
autoload :Format, "#{__dir__}/commands/format"
|
|
10
|
+
autoload :Validate, "#{__dir__}/commands/validate"
|
|
11
|
+
autoload :ValidateLoad, "#{__dir__}/commands/validate_load"
|
|
12
|
+
autoload :ValidateAscii, "#{__dir__}/commands/validate_ascii"
|
|
13
|
+
autoload :Changes, "#{__dir__}/commands/changes"
|
|
14
|
+
autoload :ChangesValidate, "#{__dir__}/commands/changes_validate"
|
|
15
|
+
autoload :ChangesImportEengine, "#{__dir__}/commands/changes_import_eengine"
|
|
16
|
+
autoload :Version, "#{__dir__}/commands/version"
|
|
17
|
+
autoload :Package, "#{__dir__}/commands/package"
|
|
18
|
+
autoload :Manifest, "#{__dir__}/commands/manifest"
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/expressir/config.rb
CHANGED
data/lib/expressir/coverage.rb
CHANGED
|
@@ -304,16 +304,23 @@ module Expressir
|
|
|
304
304
|
end
|
|
305
305
|
|
|
306
306
|
# Find all entities in a schema or repository
|
|
307
|
-
# @param schema_or_repo [Expressir::Model::Declarations::Schema, Expressir::Model::Repository] The schema or
|
|
307
|
+
# @param schema_or_repo [Expressir::Model::Declarations::Schema, Expressir::Model::Repository, Expressir::Model::ExpFile] The schema, repository, or file to analyze
|
|
308
308
|
# @param skip_types [Array<String>] Array of entity type names to skip from coverage
|
|
309
309
|
# @return [Array<Expressir::Model::ModelElement>] Array of entities
|
|
310
310
|
def self.find_entities(schema_or_repo, skip_types = [])
|
|
311
311
|
entities = []
|
|
312
312
|
|
|
313
|
-
# Handle
|
|
313
|
+
# Handle repository, exp_file, and schema inputs
|
|
314
314
|
if schema_or_repo.is_a?(Expressir::Model::Repository)
|
|
315
|
-
# If it's a repository, process all
|
|
316
|
-
schema_or_repo.
|
|
315
|
+
# If it's a repository, process all files
|
|
316
|
+
schema_or_repo.files&.each do |file|
|
|
317
|
+
file.schemas&.each do |schema|
|
|
318
|
+
entities.concat(find_entities_in_schema(schema))
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
elsif schema_or_repo.is_a?(Expressir::Model::ExpFile)
|
|
322
|
+
# If it's an ExpFile, process all schemas in the file
|
|
323
|
+
schema_or_repo.schemas&.each do |schema|
|
|
317
324
|
entities.concat(find_entities_in_schema(schema))
|
|
318
325
|
end
|
|
319
326
|
else
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "lutaml/model"
|
|
4
|
-
require_relative "changes_section"
|
|
5
|
-
require_relative "modified_object"
|
|
6
3
|
|
|
7
4
|
module Expressir
|
|
8
5
|
module Eengine
|
|
@@ -13,7 +10,7 @@ module Expressir
|
|
|
13
10
|
attribute :deletions, ChangesSection
|
|
14
11
|
|
|
15
12
|
xml do
|
|
16
|
-
|
|
13
|
+
element "arm.changes"
|
|
17
14
|
map_element "arm.modifications", to: :modifications
|
|
18
15
|
map_element "arm.additions", to: :additions
|
|
19
16
|
map_element "arm.deletions", to: :deletions
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "lutaml/model"
|
|
4
|
-
require_relative "modified_object"
|
|
5
3
|
|
|
6
4
|
module Expressir
|
|
7
5
|
module Eengine
|
|
@@ -11,7 +9,7 @@ module Expressir
|
|
|
11
9
|
attribute :modified_objects, ModifiedObject, collection: true
|
|
12
10
|
|
|
13
11
|
xml do
|
|
14
|
-
|
|
12
|
+
element "changes.section"
|
|
15
13
|
map_element "modified.object", to: :modified_objects
|
|
16
14
|
end
|
|
17
15
|
end
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "lutaml/model"
|
|
4
|
-
|
|
5
|
-
Lutaml::Model::Config.configure do |config|
|
|
6
|
-
require "lutaml/model/xml_adapter/nokogiri_adapter"
|
|
7
|
-
config.xml_adapter = Lutaml::Model::XmlAdapter::NokogiriAdapter
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
require_relative "changes_section"
|
|
11
|
-
require_relative "modified_object"
|
|
12
|
-
require_relative "arm_compare_report"
|
|
13
|
-
require_relative "mim_compare_report"
|
|
14
|
-
|
|
15
3
|
module Expressir
|
|
16
4
|
module Eengine
|
|
17
5
|
# Represents an Eengine comparison XML report
|
|
@@ -22,7 +10,7 @@ module Expressir
|
|
|
22
10
|
attribute :deletions, ChangesSection
|
|
23
11
|
|
|
24
12
|
xml do
|
|
25
|
-
|
|
13
|
+
element "schema.changes"
|
|
26
14
|
map_element "schema.modifications", to: :modifications
|
|
27
15
|
map_element "schema.additions", to: :additions
|
|
28
16
|
map_element "schema.deletions", to: :deletions
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "lutaml/model"
|
|
4
|
-
require_relative "changes_section"
|
|
5
|
-
require_relative "modified_object"
|
|
6
3
|
|
|
7
4
|
module Expressir
|
|
8
5
|
module Eengine
|
|
@@ -13,7 +10,7 @@ module Expressir
|
|
|
13
10
|
attribute :deletions, ChangesSection
|
|
14
11
|
|
|
15
12
|
xml do
|
|
16
|
-
|
|
13
|
+
element "mim.changes"
|
|
17
14
|
map_element "mim.modifications", to: :modifications
|
|
18
15
|
map_element "mim.additions", to: :additions
|
|
19
16
|
map_element "mim.deletions", to: :deletions
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "lutaml/model"
|
|
4
3
|
|
|
5
4
|
module Expressir
|
|
6
5
|
module Eengine
|
|
@@ -12,7 +11,7 @@ module Expressir
|
|
|
12
11
|
attribute :description, :string
|
|
13
12
|
|
|
14
13
|
xml do
|
|
15
|
-
|
|
14
|
+
element "modified.object"
|
|
16
15
|
map_attribute "type", to: :type
|
|
17
16
|
map_attribute "name", to: :name
|
|
18
17
|
map_attribute "interfaced.items", to: :interfaced_items
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Expressir
|
|
2
|
+
module Eengine
|
|
3
|
+
autoload :ModifiedObject, "#{__dir__}/eengine/modified_object"
|
|
4
|
+
autoload :ChangesSection, "#{__dir__}/eengine/changes_section"
|
|
5
|
+
autoload :CompareReport, "#{__dir__}/eengine/compare_report"
|
|
6
|
+
autoload :ArmCompareReport, "#{__dir__}/eengine/arm_compare_report"
|
|
7
|
+
autoload :MimCompareReport, "#{__dir__}/eengine/mim_compare_report"
|
|
8
|
+
end
|
|
9
|
+
end
|
data/lib/expressir/errors.rb
CHANGED
|
@@ -80,7 +80,8 @@ module Expressir
|
|
|
80
80
|
class ReferentialIntegrityError < ValidationError
|
|
81
81
|
attr_reader :unresolved_references
|
|
82
82
|
|
|
83
|
-
def initialize(unresolved_references,
|
|
83
|
+
def initialize(unresolved_references,
|
|
84
|
+
message: "Referential integrity check failed")
|
|
84
85
|
@unresolved_references = unresolved_references
|
|
85
86
|
super(message)
|
|
86
87
|
end
|
|
@@ -88,7 +89,7 @@ module Expressir
|
|
|
88
89
|
|
|
89
90
|
class NoValidSchemaPathsError < ValidationError
|
|
90
91
|
def initialize(message = "No valid schema paths found")
|
|
91
|
-
super
|
|
92
|
+
super
|
|
92
93
|
end
|
|
93
94
|
end
|
|
94
95
|
|
|
@@ -109,7 +110,4 @@ module Expressir
|
|
|
109
110
|
class PackageListError < CommandError; end
|
|
110
111
|
class PackageSearchError < CommandError; end
|
|
111
112
|
class PackageTreeError < CommandError; end
|
|
112
|
-
|
|
113
|
-
# Backward compatibility - alias the old name to the new class
|
|
114
|
-
InvalidSchemaManifestError = ManifestValidationError
|
|
115
113
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "error"
|
|
4
|
-
|
|
5
3
|
module Expressir
|
|
6
4
|
module Express
|
|
7
5
|
# Builder registry for AST node type handlers.
|
|
@@ -110,14 +108,29 @@ module Expressir
|
|
|
110
108
|
build(ast)
|
|
111
109
|
end
|
|
112
110
|
|
|
111
|
+
# Normalize a value to an Array for iteration.
|
|
112
|
+
# Handles: nil → [], Parsanol::Slice → [], Array → Array, other → [other]
|
|
113
|
+
def ensure_array(value)
|
|
114
|
+
return [] if value.nil?
|
|
115
|
+
return [] if value.is_a?(Parsanol::Slice)
|
|
116
|
+
value.is_a?(Array) ? value : [value]
|
|
117
|
+
end
|
|
118
|
+
|
|
113
119
|
# Build children (array of AST nodes)
|
|
114
120
|
# Optimized to avoid intermediate array allocations
|
|
115
121
|
def build_children(ast_array)
|
|
116
|
-
return []
|
|
122
|
+
return [] if ast_array.nil?
|
|
123
|
+
|
|
124
|
+
# Handle Parsanol::Slice (including empty Slices from native parser)
|
|
125
|
+
# Convert to empty Array to match Ruby parser behavior
|
|
126
|
+
# Native parser returns empty slices where Ruby parser returns empty arrays
|
|
127
|
+
if ast_array.is_a?(Parsanol::Slice)
|
|
128
|
+
return []
|
|
129
|
+
end
|
|
117
130
|
|
|
118
131
|
# Handle single element (common case)
|
|
119
132
|
unless ast_array.is_a?(Array)
|
|
120
|
-
return
|
|
133
|
+
return [build(ast_array)].compact
|
|
121
134
|
end
|
|
122
135
|
|
|
123
136
|
# Build result in single pass, avoiding flatten/compact/map chain
|
|
@@ -125,6 +138,11 @@ module Expressir
|
|
|
125
138
|
ast_array.each do |item|
|
|
126
139
|
next if item.nil?
|
|
127
140
|
|
|
141
|
+
# Empty Slices from native parser should be treated as empty arrays
|
|
142
|
+
if item.is_a?(Parsanol::Slice)
|
|
143
|
+
next
|
|
144
|
+
end
|
|
145
|
+
|
|
128
146
|
case item
|
|
129
147
|
when Array
|
|
130
148
|
item.each do |sub|
|
|
@@ -345,6 +363,3 @@ module Expressir
|
|
|
345
363
|
end
|
|
346
364
|
end
|
|
347
365
|
end
|
|
348
|
-
|
|
349
|
-
# Top-level alias for convenience in builder files
|
|
350
|
-
Builder = Expressir::Express::Builder
|