breaker_machines 0.7.0 → 0.7.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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 922f6ca105785c7276dc4bb80bb8e6d093b671f96cf8239ce570e8e98a6b9b25
|
|
4
|
+
data.tar.gz: 423412d5402092df0358418360718847cf7ef8f7d50676537719f629c5a25889
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dffbafc7ce58e54b5250624afd09fb208d8af9aaca253edb5a8278463da824f7bc2ea195ec643e34ccf91a95ff40a113130fb379b66658c1d903b8d60d587c68
|
|
7
|
+
data.tar.gz: 5287c44c22803c61d1e090ba4c631a30560e925e45c1b56ac4d222961898a396bc9535273e8aa9c65b466d0211ae767549dee6c76baacfff2d9bfc22fe598bc0
|
|
@@ -27,9 +27,7 @@ def create_noop_makefile(message)
|
|
|
27
27
|
exit 0
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
unless cargo_available?
|
|
31
|
-
create_noop_makefile('Skipping native extension (Cargo not found)')
|
|
32
|
-
end
|
|
30
|
+
create_noop_makefile('Skipping native extension (Cargo not found)') unless cargo_available?
|
|
33
31
|
|
|
34
32
|
# Use rb_sys to compile the Rust extension
|
|
35
33
|
require 'mkmf'
|
|
@@ -55,7 +53,7 @@ begin
|
|
|
55
53
|
if File.exist?(makefile_path)
|
|
56
54
|
manifest_path = File.expand_path(__dir__)
|
|
57
55
|
contents = File.read(makefile_path)
|
|
58
|
-
contents.gsub!(
|
|
56
|
+
contents.gsub!(/^RB_SYS_CARGO_MANIFEST_DIR \?=.*$/, "RB_SYS_CARGO_MANIFEST_DIR ?= #{manifest_path}")
|
|
59
57
|
File.write(makefile_path, contents)
|
|
60
58
|
end
|
|
61
59
|
rescue LoadError => e
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'rbconfig'
|
|
4
|
+
require 'active_support/core_ext/object/blank'
|
|
5
|
+
|
|
3
6
|
module BreakerMachines
|
|
4
7
|
# Handles loading and status of the optional native extension
|
|
5
8
|
module NativeExtension
|
|
@@ -17,18 +20,23 @@ module BreakerMachines
|
|
|
17
20
|
return false
|
|
18
21
|
end
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
errors = []
|
|
24
|
+
|
|
25
|
+
native_library_candidates.each do |require_path|
|
|
26
|
+
try_require(require_path)
|
|
27
|
+
@loaded = true
|
|
28
|
+
BreakerMachines.instance_variable_set(:@native_available, true)
|
|
29
|
+
BreakerMachines.log(:info, "Native extension loaded successfully (#{require_path})")
|
|
30
|
+
return true
|
|
31
|
+
rescue LoadError => e
|
|
32
|
+
errors << "#{require_path}: #{e.message}"
|
|
33
|
+
end
|
|
34
|
+
|
|
26
35
|
@loaded = false
|
|
27
36
|
BreakerMachines.instance_variable_set(:@native_available, false)
|
|
28
37
|
|
|
29
|
-
# Only log if it's not JRuby (expected failure) and logging is enabled
|
|
30
38
|
if RUBY_ENGINE != 'jruby'
|
|
31
|
-
BreakerMachines.log(:warn, "Native extension not available: #{
|
|
39
|
+
BreakerMachines.log(:warn, "Native extension not available: #{errors.join(' | ')}") unless errors.empty?
|
|
32
40
|
BreakerMachines.log(:warn, 'Using pure Ruby backend (slower but functional)')
|
|
33
41
|
end
|
|
34
42
|
|
|
@@ -39,6 +47,40 @@ module BreakerMachines
|
|
|
39
47
|
def loaded?
|
|
40
48
|
defined?(@loaded) && @loaded
|
|
41
49
|
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def native_library_candidates
|
|
54
|
+
dlext = RbConfig::CONFIG['DLEXT']
|
|
55
|
+
base_dir = File.expand_path('../breaker_machines_native', __dir__)
|
|
56
|
+
ruby_version = RbConfig::CONFIG['ruby_version']
|
|
57
|
+
arch = RbConfig::CONFIG['arch']
|
|
58
|
+
platform = Gem::Platform.local.to_s
|
|
59
|
+
|
|
60
|
+
matches = Dir.glob(File.join(base_dir, '**', "breaker_machines_native.#{dlext}"))
|
|
61
|
+
|
|
62
|
+
prioritized = matches.sort_by do |path|
|
|
63
|
+
score = 0
|
|
64
|
+
score -= 3 if path.include?(ruby_version)
|
|
65
|
+
score -= 2 if path.include?(arch)
|
|
66
|
+
score -= 1 if path.include?(platform)
|
|
67
|
+
[score, path]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
candidates = prioritized.map { |full_path| require_path_for(full_path, dlext) }.presence
|
|
71
|
+
candidates ||= ['breaker_machines_native/breaker_machines_native']
|
|
72
|
+
candidates.uniq
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def require_path_for(full_path, dlext)
|
|
76
|
+
root = File.expand_path('..', __dir__)
|
|
77
|
+
relative = full_path.sub(%r{^#{Regexp.escape(root)}/?}, '')
|
|
78
|
+
relative.sub(/\.#{Regexp.escape(dlext)}\z/, '')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def try_require(require_path)
|
|
82
|
+
require require_path
|
|
83
|
+
end
|
|
42
84
|
end
|
|
43
85
|
end
|
|
44
86
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: breaker_machines
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.7.
|
|
4
|
+
version: 0.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Abdelkader Boudih
|
|
@@ -52,47 +52,47 @@ dependencies:
|
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '1.3'
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
|
-
name:
|
|
55
|
+
name: rb_sys
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
|
-
- - "
|
|
58
|
+
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 0.
|
|
60
|
+
version: '0.9'
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
|
-
- - "
|
|
65
|
+
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 0.
|
|
67
|
+
version: '0.9'
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
|
-
name:
|
|
69
|
+
name: state_machines
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
|
-
- - "
|
|
72
|
+
- - ">="
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version:
|
|
74
|
+
version: 0.100.4
|
|
75
75
|
type: :runtime
|
|
76
76
|
prerelease: false
|
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
|
-
- - "
|
|
79
|
+
- - ">="
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version:
|
|
81
|
+
version: 0.100.4
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
|
-
name:
|
|
83
|
+
name: zeitwerk
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
|
86
86
|
- - "~>"
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: '
|
|
88
|
+
version: '2.7'
|
|
89
89
|
type: :runtime
|
|
90
90
|
prerelease: false
|
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
93
|
- - "~>"
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '
|
|
95
|
+
version: '2.7'
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
97
|
name: minitest
|
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|