expressir 2.4.28 → 2.4.29

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: 45dd9d5d13614ca549340d534defb9a674a5fca35a9f3b16f5ef345b73e263eb
4
- data.tar.gz: f5a14e8e4cb49ebebe7823d9015de7296459735b3f8ea06edc3494e072b0877f
3
+ metadata.gz: b184252cfd74dc73c8b656d0845145da64c9b895d24228f5478b35dad5b0b257
4
+ data.tar.gz: 100a50bd158b0ef4884171572f01e266edb334baf253e463b47ff6c8fe579321
5
5
  SHA512:
6
- metadata.gz: d46d905d2f0ca978c614cba3574a398fa38809f38296930115905b9e97cf1e223e8b0882c1c7431e026dc97015579f7e820f067173da4645ede0be33a00c6842
7
- data.tar.gz: bc103128faa28cbaafdb27a61117431c9b17d77913b4dcc038db64638b815f19be7e90c4366ca45ef378196f360445296244cd40c435997038280d776de94dd1
6
+ metadata.gz: fb99828d597bd207b51619f71ef1085ace7da40950d43573df25b704f1afb3381d444dbbff85f516a16161eb783b769640cd5c16d273543866118e755f268325
7
+ data.tar.gz: 4ae05fe7e5dec49cdb04027545f62fe3fb25f240ed430eb6eff8e18bc612d3bb76cfbbe0a044d80395089c5535ed3d323a87b2f97c94fd801830dfe3cabf13da
@@ -26,4 +26,9 @@ sc = Expressir::Express::Parser.from_exp(src).schemas.first.subtype_constraints.
26
26
  abort "FAIL: subtype constraint ABSTRACT body (#462)" unless sc&.abstract == true
27
27
  puts "#462 form: ok"
28
28
 
29
+ # The platform gems force-build the Rust compiled-set writer; a leg that
30
+ # 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"
33
+
29
34
  puts "SMOKE OK"
@@ -52,12 +52,14 @@ jobs:
52
52
  EXPRESSIR_CORE_FORCE: "1"
53
53
  with:
54
54
  platform: ${{ matrix.ruby-platform }}
55
- # Dock images provision cross rubies for 3.2-3.4 only; a 4.0
56
- # leg silently falls back to the dock's host toolchain and
57
- # fails linking (or worse, links against the wrong ruby).
58
- # Ruby 4.0 users on these platforms get the pure-Ruby parser
59
- # fallback until the images ship 4.0 cross rubies.
60
- ruby-versions: "3.2,3.3,3.4"
55
+ # Must include the dock image's HOST ruby (4.0): when the
56
+ # running ruby is absent from this list, rake-compiler adds an
57
+ # extra leg for it built from the host toolchain's RbConfig,
58
+ # and rb-sys correctly refuses to generate bindings against a
59
+ # different target_os. Current rb-sys-dock images ship cross
60
+ # rubies for 3.2-4.0 (parsanol-ruby's identical cross-gem
61
+ # setup builds a working x86_64-mingw-ucrt ruby-4.0.2 leg).
62
+ ruby-versions: "3.2,3.3,3.4,4.0"
61
63
 
62
64
  - uses: actions/upload-artifact@v4
63
65
  with:
data/expressir.gemspec CHANGED
@@ -24,6 +24,11 @@ Gem::Specification.new do |spec|
24
24
  spec.metadata["rubygems_mfa_required"] = "true"
25
25
 
26
26
  spec.required_ruby_version = Gem::Requirement.new(">= 3.2.0")
27
+ # Source gem builds on the ruby platform; declaring it keeps
28
+ # rake-compiler's `gem` task from rebuilding the extension for the
29
+ # host ruby during cross builds (rb-sys then sees a windows
30
+ # CARGO_BUILD_TARGET with linux headers and refuses).
31
+ spec.platform = Gem::Platform::RUBY
27
32
 
28
33
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
29
34
  `git ls-files -z`.split("\x0").reject do |f|
@@ -13,10 +13,21 @@ module Expressir
13
13
  true
14
14
  rescue LoadError
15
15
  begin
16
- require_relative "../../../ext/expressir_core/expressir_core"
16
+ # Platform gems carry the fat-binary layout
17
+ # (lib/expressir/<major.minor>/expressir_core.so); rubygems
18
+ # does not resolve versioned dirs under a nested require path,
19
+ # so the version segment is explicit - same contract as
20
+ # parsanol's loader.
21
+ ruby_version = RUBY_VERSION.split(".").take(2).join(".")
22
+ require "expressir/#{ruby_version}/expressir_core"
17
23
  true
18
24
  rescue LoadError
19
- false
25
+ begin
26
+ require_relative "../../../ext/expressir_core/expressir_core"
27
+ true
28
+ rescue LoadError
29
+ false
30
+ end
20
31
  end
21
32
  end
22
33
 
@@ -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.28".freeze
6
+ VERSION = "2.4.29".freeze
7
7
  end
8
8
  end
data/rakelib/native.rake CHANGED
@@ -7,43 +7,16 @@
7
7
  # artifact in lib/expressir/, which core.rb's first require finds.
8
8
  begin
9
9
  require "rb_sys/extensiontask"
10
- require "rb_sys/toolchain_info"
11
10
 
12
11
  gemspec = Gem::Specification.load("expressir.gemspec")
13
12
 
14
13
  RbSys::ExtensionTask.new("expressir_core", gemspec) do |ext|
15
14
  ext.lib_dir = "lib/expressir"
16
-
17
- ext.cross_compiling do |spec|
18
- next if spec.platform == Gem::Platform::RUBY
19
-
20
- plat = spec.platform.to_s
21
- triple = begin
22
- RbSys::ToolchainInfo::DATA.fetch(plat).fetch("rust-target")
23
- rescue KeyError
24
- { "arm-linux-musl" => "arm-unknown-linux-musleabihf" }.fetch(plat)
25
- end
26
-
27
- # rb-sys's cargo build already ran for the cross target; stage the
28
- # artifact from the tree (rake-compiler stages callback-added files).
29
- # rb_sys uses a per-package target dir unless the crate is a
30
- # workspace member (then the root target/ holds artifacts) — glob
31
- # both layouts.
32
- art = Dir["target/#{triple}/release/expressir_core.{so,dylib,dll}",
33
- "target/#{triple}/release/libexpressir_core.{so,dylib}",
34
- "ext/expressir_core/target/#{triple}/release/expressir_core.{so,dylib,dll}",
35
- "ext/expressir_core/target/#{triple}/release/libexpressir_core.{so,dylib}"].first
36
- raise "binding artifact not found for #{plat} (#{triple})" unless art
37
-
38
- # core.rb requires "expressir/expressir_core", so the staged file
39
- # must sit at the canonical Ruby extension path/name — cargo's
40
- # lib- prefixed or .dll/.dylib-suffixed names are renamed to
41
- # expressir_core.so (Ruby's require accepts .so on every target:
42
- # DLEXT on linux/windows, DLEXT2 on darwin).
43
- dest = "lib/expressir/expressir_core.so"
44
- cp art, dest
45
- spec.files << dest
46
- end
15
+ # rb-sys stages the cross-built artifact itself; a manual cp into
16
+ # lib_dir here would claim the file rake-compiler's own
17
+ # copy:expressir_core:<host-platform> task owns, and the cross gem's
18
+ # dependency chain would then force a host-ruby build (rb-sys
19
+ # refuses windows bindings from linux headers).
47
20
  end
48
21
  rescue LoadError
49
22
  # rake-compiler/rb_sys not installed (consumer checkouts); the native
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.28
4
+ version: 2.4.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-30 00:00:00.000000000 Z
11
+ date: 2026-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb_sys