expressir 2.4.29-x86_64-linux → 2.4.31-x86_64-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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c503db95cc37f406c3bae75ac01467827c99a86835415059959433c88ac1faa6
4
- data.tar.gz: fd066553d69941bccc3f2ce5f61a758203f28a732dceecf4512a0626e38c4908
3
+ metadata.gz: 48ddbee40a47febda3a26577196114e5d64a41dbd53ead30b70a496fac792798
4
+ data.tar.gz: 2aa5f102ed661e63bf59768b052c9160f81f9534f9065e8b4b8d4db9dd9e5bd3
5
5
  SHA512:
6
- metadata.gz: 77e412d0f4e203a7c2c14dfddd050dd88ae729870630bd14d5157dabb6e2e0272fcb76ed5693197ec75d0b88b55a617790f94781c75a783532b8a5e9fde7b1bd
7
- data.tar.gz: ebe7d135c61b105991149af05ca186b0581cd490c9556330189b3476017481ecea75053d3b16e6edb24ebce3043c715d37b418a05629fb124d4669db5fe92b1f
6
+ metadata.gz: 8636b926948dcd0a7d6e4f0d0ec18f0bb168ace9b7668574b0881597c077d5f36937f1f167e5957e1ffa9498288800465b86660e6e19b2403ce5fd9141474946
7
+ data.tar.gz: 55a118765bed43bda7eb42ec1d563a6cc41bb0edfafdb3f925ec670c73115eb5a1714be0279fc6309a467aeb0e840b618e1456346ae8f374fd2661e18ea7430b
@@ -5,8 +5,19 @@
5
5
  # active and the parser must handle the standard and #462 forms.
6
6
  require "expressir"
7
7
 
8
- abort "FAIL: NATIVE_AVAILABLE is false" unless Expressir::Express::Core::NATIVE_AVAILABLE
9
- puts "native binding: active"
8
+ if Gem.win_platform? && !Expressir::Express::Core::NATIVE_AVAILABLE
9
+ # Interim expressir#487 guard: native is intentionally disabled on
10
+ # windows until the ancestor-walk fix (#499) merges and the guard
11
+ # reverts. The platform gem must still SHIP a loadable extension -
12
+ # that is this leg's contract while the guard stands.
13
+ gem_dir = Gem.loaded_specs["expressir"].gem_dir
14
+ shipped = Dir.glob(File.join(gem_dir, "**", "expressir_core.{so,dll}"))
15
+ abort "FAIL: expressir_core not shipped in the platform gem" if shipped.empty?
16
+ puts "native binding: deferred (windows guard, expressir#487)"
17
+ else
18
+ abort "FAIL: NATIVE_AVAILABLE is false" unless Expressir::Express::Core::NATIVE_AVAILABLE
19
+ puts "native binding: active"
20
+ end
10
21
 
11
22
  repo = Expressir::Express::Parser.from_exp(
12
23
  "SCHEMA smoke; ENTITY e; a : STRING; END_ENTITY; END_SCHEMA;",
@@ -28,7 +39,10 @@ puts "#462 form: ok"
28
39
 
29
40
  # The platform gems force-build the Rust compiled-set writer; a leg that
30
41
  # shipped a non-loadable expressir_core would otherwise pass this smoke.
31
- abort "FAIL: core_set_available is false" unless Expressir::Express::Parser.core_set_available?
32
- puts "compiled-set core: ok"
42
+ # Windows under the #487 guard runs the pure-Ruby fallback instead.
43
+ unless Gem.win_platform? && !Expressir::Express::Core::NATIVE_AVAILABLE
44
+ abort "FAIL: core_set_available is false" unless Expressir::Express::Parser.core_set_available?
45
+ puts "compiled-set core: ok"
46
+ end
33
47
 
34
48
  puts "SMOKE OK"
@@ -197,5 +197,8 @@ jobs:
197
197
  - name: Push to rubygems
198
198
  run: |
199
199
  for gem in pkg/expressir-*.gem; do
200
- gem push "$gem"
200
+ # Idempotent: a gem already on rubygems (e.g. the source gem
201
+ # shipped by release.yml ahead of the platform run) is a skip,
202
+ # not a failure.
203
+ gem push "$gem" || echo "::warning::$(basename "$gem") already published or rejected; continuing"
201
204
  done
data/expressir.gemspec CHANGED
@@ -42,18 +42,18 @@ Gem::Specification.new do |spec|
42
42
  spec.extensions = ["ext/expressir_core/extconf.rb"]
43
43
  spec.add_dependency "rb_sys", "~> 0.9.130"
44
44
 
45
- spec.add_dependency "base64"
45
+ spec.add_dependency "base64", ">= 0.1.0"
46
46
  spec.add_dependency "benchmark"
47
47
  spec.add_dependency "benchmark-ips"
48
48
  spec.add_dependency "csv"
49
- spec.add_dependency "liquid"
49
+ spec.add_dependency "liquid", "~> 5"
50
50
  spec.add_dependency "lutaml-model", "~> 0.8.76"
51
51
  spec.add_dependency "moxml"
52
- spec.add_dependency "nokogiri"
52
+ spec.add_dependency "nokogiri", "~> 1.19"
53
53
  spec.add_dependency "paint"
54
- spec.add_dependency "parsanol", "~> 1.3.9", ">= 1.3.9"
54
+ spec.add_dependency "parsanol", "~> 1.3.9", ">= 1.3.89"
55
55
  spec.add_dependency "ruby-progressbar", "~> 1.11"
56
- spec.add_dependency "rubyzip"
56
+ spec.add_dependency "rubyzip", "~> 3.7"
57
57
  spec.add_dependency "table_tennis"
58
58
  spec.add_dependency "thor", "~> 1.0"
59
59
  # Native YAML/JSON engine (lutaml-model opt-in by bundle contents)
Binary file
Binary file
Binary file
Binary file
@@ -113,7 +113,12 @@ module Expressir
113
113
  # Nearest ancestor directory NAMED `schemas`, or nil.
114
114
  def ancestor_schemas_dir(root_path)
115
115
  dir = File.dirname(File.expand_path(root_path))
116
- until dir == "/"
116
+ # dirname reaches a fixed point at the filesystem root: "/" on
117
+ # POSIX, "D:/" (or a UNC root) on windows. Comparing against "/"
118
+ # alone spun forever on windows - every rake run since this
119
+ # shipped (e0f6651, 2026-09-24) burned the full 6h runner
120
+ # budget in the first expand example (#487).
121
+ until dir == "/" || dir == File.dirname(dir)
117
122
  return dir if File.basename(dir) == "schemas"
118
123
 
119
124
  dir = File.dirname(dir)
@@ -21,7 +21,7 @@ module Expressir
21
21
  autoload :Changes, "#{__dir__}/commands/changes"
22
22
  autoload :ChangesValidate, "#{__dir__}/commands/changes_validate"
23
23
  autoload :ChangesImportEengine, "#{__dir__}/commands/changes_import_eengine"
24
- autoload :Version, "#{__dir__}/commands/version"
24
+ autoload :Version, "#{__dir__}/commands/version_command"
25
25
  autoload :Package, "#{__dir__}/commands/package"
26
26
  autoload :Manifest, "#{__dir__}/commands/manifest"
27
27
  autoload :MappingValidate, "#{__dir__}/commands/mapping_validate"
@@ -7,6 +7,7 @@ module Expressir
7
7
  # Ruby bridge to the expressir-core Rust crate (parse + model
8
8
  # extraction). Available when the native extension is built;
9
9
  # callers fall back to the pure-Ruby parser otherwise.
10
+ #
10
11
  module Core
11
12
  NATIVE_AVAILABLE = begin
12
13
  require "expressir/expressir_core"
@@ -27,6 +27,28 @@ module Expressir
27
27
  # Files above this use parse_fresh which has no packrat cache
28
28
  LARGE_FILE_THRESHOLD = 1024 * 1024 # 1 MB
29
29
 
30
+ # Whitespace rides the engine's injected trivia (parsanol-ruby
31
+ # #180's source-preserving mode, 1.3.82+): each unit records
32
+ # verbatim under :space and attaches to the next Named capture.
33
+ # Remarks stay OUT of the skip rule — they are product data,
34
+ # captured by the tailRemark/embeddedRemark rules and attached
35
+ # by RemarkScanner; tail remarks attach backward, the engine's
36
+ # next-capture channel is the wrong direction for them.
37
+ rule(:trivia) { match[" \r\n\t\f"].repeat(1) }
38
+ # exempt (parsanol#195, shipped 1.3.89): token rules whose bodies
39
+ # manage their own internals — injection before a char-class tail
40
+ # repetition absorbs the following token across whitespace
41
+ # ("RULE r FOR" parsed as one simpleId). simpleId additionally
42
+ # matches as a single quantified Re, which needs no exemption;
43
+ # the two mechanisms agree and stay for defense in depth.
44
+ # The whitespace/remark rules manage their own trivia end to end
45
+ # (they ARE the trivia surface for remarks); injection around
46
+ # them breaks consecutive remark lines on the Ruby engine
47
+ # ("-- X\n--\nSCHEMA ..." failed - the #487 windows follow-up,
48
+ # parsanol-ruby#195 family).
49
+ skip(:trivia, whitespace: :space,
50
+ exempt: %i[simpleId digits spaces space embeddedRemark tailRemark])
51
+
30
52
  # Get cached parser instance (thread-safe)
31
53
  # Reusing the parser avoids the overhead of reinitializing all rule definitions
32
54
  def self.cached_parser
@@ -604,7 +626,13 @@ module Expressir
604
626
  (unaryOp >> simpleFactorExpression).as(:simpleFactorUnaryExpression)
605
627
  end
606
628
  rule(:simpleId) do
607
- anyKeyword.absent? >> cts((match["a-zA-Z_"] >> match["a-zA-Z0-9_"].repeat).as(:str)).as(:simpleId)
629
+ # One quantified Re, not lead >> tail-repeat: under skip
630
+ # injection the DSL interleaves trivia before the tail
631
+ # repetition, so a two-atom ident would absorb the following
632
+ # whitespace-separated identifier ("RULE r FOR (e)" parses
633
+ # "r FOR" as one simpleId). A quantified Re consumes the
634
+ # whole identifier in a single step — parsanol GH-69.
635
+ anyKeyword.absent? >> cts(match("[a-zA-Z_][a-zA-Z0-9_]*").as(:str)).as(:simpleId)
608
636
  end
609
637
  rule(:simpleStringLiteral) do
610
638
  cts((str("'") >> (str("'").absent? >> any).repeat >> str("'")).as(:str)).as(:simpleStringLiteral)
@@ -3,6 +3,6 @@ module Expressir
3
3
  # autoload it (Ruby autoload only works for module/class constants, not
4
4
  # for string constants like `Expressir::VERSION`).
5
5
  module Version
6
- VERSION = "2.4.29".freeze
6
+ VERSION = "2.4.31".freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expressir
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.29
4
+ version: 2.4.31
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-10-03 00:00:00.000000000 Z
11
+ date: 2026-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: benchmark
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: liquid
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '5'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '5'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: lutaml-model
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -112,16 +112,16 @@ dependencies:
112
112
  name: nokogiri
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '1.19'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '1.19'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: paint
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -145,7 +145,7 @@ dependencies:
145
145
  version: 1.3.9
146
146
  - - ">="
147
147
  - !ruby/object:Gem::Version
148
- version: 1.3.9
148
+ version: 1.3.89
149
149
  type: :runtime
150
150
  prerelease: false
151
151
  version_requirements: !ruby/object:Gem::Requirement
@@ -155,7 +155,7 @@ dependencies:
155
155
  version: 1.3.9
156
156
  - - ">="
157
157
  - !ruby/object:Gem::Version
158
- version: 1.3.9
158
+ version: 1.3.89
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: ruby-progressbar
161
161
  requirement: !ruby/object:Gem::Requirement
@@ -174,16 +174,16 @@ dependencies:
174
174
  name: rubyzip
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - ">="
177
+ - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '0'
179
+ version: '3.7'
180
180
  type: :runtime
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
- - - ">="
184
+ - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: '0'
186
+ version: '3.7'
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: table_tennis
189
189
  requirement: !ruby/object:Gem::Requirement
@@ -448,7 +448,7 @@ files:
448
448
  - lib/expressir/commands/validate.rb
449
449
  - lib/expressir/commands/validate_ascii.rb
450
450
  - lib/expressir/commands/validate_load.rb
451
- - lib/expressir/commands/version.rb
451
+ - lib/expressir/commands/version_command.rb
452
452
  - lib/expressir/commands/xsd.rb
453
453
  - lib/expressir/config.rb
454
454
  - lib/expressir/coverage.rb