zyre 0.5.0 → 0.7.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
- checksums.yaml.gz.sig +0 -0
- data/History.md +19 -0
- data/ext/zyre_ext/node.c +1 -0
- data/ext/zyre_ext/zyre_ext.c +182 -7
- data/lib/zyre.rb +1 -1
- data/spec/zyre/cert_spec.rb +4 -2
- data/spec/zyre/node_spec.rb +10 -2
- data/spec/zyre_spec.rb +113 -0
- data.tar.gz.sig +0 -0
- metadata +29 -36
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b5427b9f8cbdcbec3727b0a998a82b60b70cf7a82e36f6e3a0a86e6d9aba74a
|
4
|
+
data.tar.gz: 898dcb7df592fc24617fedc60d8f54b9f22f421ae04459215ee3c48adc581ff0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 774f4c450b24db21b8db0d52bde9334b80edf4d196b51e5f3be468b20cba83469418862b0ad862c617d2366b39cbe003d2e6e5d518c59c8b6f09ccbf2e8253da
|
7
|
+
data.tar.gz: f53e49334e7b4a5dd308080addafc65a6d3dd222463651b8c038ddd2de12cf6ba2b30a3d959649ab001e44d41fbf2d41c9ac969800fdbe10d25238cfa653e24d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.md
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
# Release History for zyre
|
2
2
|
|
3
3
|
---
|
4
|
+
|
5
|
+
## v0.7.0 [2025-08-05] Michael Granger <ged@faeriemud.org>
|
6
|
+
|
7
|
+
Improvements:
|
8
|
+
|
9
|
+
- Add ZAUTH
|
10
|
+
|
11
|
+
Fixes:
|
12
|
+
|
13
|
+
- Move the interface method setting to the Zyre toplevel since it's actually global
|
14
|
+
|
15
|
+
|
16
|
+
## v0.6.0 [2023-08-08] Michael Granger <ged@faeriemud.org>
|
17
|
+
|
18
|
+
Improvements:
|
19
|
+
|
20
|
+
- Reset the zyre interface list when it's fetched
|
21
|
+
|
22
|
+
|
4
23
|
## v0.5.0 [2023-02-14] Michael Granger <ged@faeriemud.org>
|
5
24
|
|
6
25
|
Improvements:
|
data/ext/zyre_ext/node.c
CHANGED
@@ -286,6 +286,7 @@ rzyre_node_interface_eq( VALUE self, VALUE interface )
|
|
286
286
|
zyre_t *ptr = rzyre_get_node( self );
|
287
287
|
const char *interface_str = StringValueCStr( interface );
|
288
288
|
|
289
|
+
rb_warn( "Setting #interface on a Node sets it globally." );
|
289
290
|
zyre_set_interface( ptr, interface_str );
|
290
291
|
|
291
292
|
return Qtrue;
|
data/ext/zyre_ext/zyre_ext.c
CHANGED
@@ -17,6 +17,8 @@
|
|
17
17
|
|
18
18
|
VALUE rzyre_mZyre;
|
19
19
|
|
20
|
+
static zactor_t *auth;
|
21
|
+
|
20
22
|
|
21
23
|
/* --------------------------------------------------------------
|
22
24
|
* Logging Functions
|
@@ -148,7 +150,7 @@ rzyre_make_zmsg_from( VALUE messages )
|
|
148
150
|
*
|
149
151
|
*/
|
150
152
|
static VALUE
|
151
|
-
rzyre_s_zyre_version()
|
153
|
+
rzyre_s_zyre_version( VALUE _mod )
|
152
154
|
{
|
153
155
|
static uint64_t version;
|
154
156
|
|
@@ -176,7 +178,10 @@ rzyre_s_zyre_version()
|
|
176
178
|
static VALUE
|
177
179
|
rzyre_s_interfaces( VALUE module )
|
178
180
|
{
|
181
|
+
|
179
182
|
ziflist_t *iflist = ziflist_new();
|
183
|
+
ziflist_reload( iflist );
|
184
|
+
|
180
185
|
const VALUE rval = rb_hash_new();
|
181
186
|
const char *iface = ziflist_first( iflist );
|
182
187
|
|
@@ -290,10 +295,172 @@ rzyre_s_z85_decode( VALUE module, VALUE string )
|
|
290
295
|
}
|
291
296
|
|
292
297
|
|
298
|
+
|
299
|
+
/*
|
300
|
+
* call-seq:
|
301
|
+
* Zyre.start_authenticator -> true
|
302
|
+
*
|
303
|
+
* Start the ZAUTH authenticator actor. If it's already running, this
|
304
|
+
* call is silently ignored.
|
305
|
+
*
|
306
|
+
*/
|
293
307
|
static VALUE
|
294
308
|
rzyre_s_start_authenticator( VALUE module )
|
295
309
|
{
|
296
|
-
|
310
|
+
if ( !auth ) {
|
311
|
+
rzyre_log_obj( rzyre_mZyre, "info", "starting up the ZAUTH actor." );
|
312
|
+
auth = zactor_new( zauth, NULL );
|
313
|
+
assert( auth );
|
314
|
+
}
|
315
|
+
|
316
|
+
return Qtrue;
|
317
|
+
}
|
318
|
+
|
319
|
+
|
320
|
+
/*
|
321
|
+
* call-seq:
|
322
|
+
* Zyre.authenticator_started? -> true or false
|
323
|
+
*
|
324
|
+
* Returns `true` if the ZAUTH authenticator actor is running.
|
325
|
+
*
|
326
|
+
*/
|
327
|
+
static VALUE
|
328
|
+
rzyre_s_authenticator_started_p( VALUE module )
|
329
|
+
{
|
330
|
+
if ( auth ) {
|
331
|
+
return Qtrue;
|
332
|
+
} else {
|
333
|
+
return Qfalse;
|
334
|
+
}
|
335
|
+
}
|
336
|
+
|
337
|
+
|
338
|
+
/*
|
339
|
+
* call-seq:
|
340
|
+
* Zyre.stop_authenticator -> true
|
341
|
+
*
|
342
|
+
* Stop the ZAUTH authenticator actor if it is running. If it's not running, this
|
343
|
+
* call is silently ignored.
|
344
|
+
*
|
345
|
+
*/
|
346
|
+
static VALUE
|
347
|
+
rzyre_s_stop_authenticator( VALUE module )
|
348
|
+
{
|
349
|
+
if ( auth ) {
|
350
|
+
rzyre_log_obj( rzyre_mZyre, "info", "shutting down the ZAUTH actor." );
|
351
|
+
zactor_destroy( &auth );
|
352
|
+
}
|
353
|
+
|
354
|
+
return Qtrue;
|
355
|
+
}
|
356
|
+
|
357
|
+
|
358
|
+
/*
|
359
|
+
* Async wait function; called without the GVL.
|
360
|
+
*/
|
361
|
+
static void *
|
362
|
+
rzyre_wait_for_auth_without_gvl( void *_unused )
|
363
|
+
{
|
364
|
+
zsock_wait( auth );
|
365
|
+
return NULL;
|
366
|
+
}
|
367
|
+
|
368
|
+
|
369
|
+
/*
|
370
|
+
* call-seq:
|
371
|
+
* Zyre.verbose_auth!
|
372
|
+
*
|
373
|
+
* Enable the ZAUTH actor's verbose logging.
|
374
|
+
*
|
375
|
+
*/
|
376
|
+
static VALUE
|
377
|
+
rzyre_s_verbose_auth_bang( VALUE module )
|
378
|
+
{
|
379
|
+
if ( auth ) {
|
380
|
+
zstr_sendx( auth, "VERBOSE", NULL );
|
381
|
+
rb_thread_call_without_gvl2( rzyre_wait_for_auth_without_gvl, 0, RUBY_UBF_IO, 0 );
|
382
|
+
} else {
|
383
|
+
rb_raise( rb_eRuntimeError, "can't enable verbose auth: authenticator is not started." );
|
384
|
+
}
|
385
|
+
|
386
|
+
return Qtrue;
|
387
|
+
}
|
388
|
+
|
389
|
+
|
390
|
+
/*
|
391
|
+
* call-seq:
|
392
|
+
* Zyre.enable_curve_auth( cert_dir=nil )
|
393
|
+
*
|
394
|
+
* Enable CURVE authentication, using the specified +cert_dir+ for allowed
|
395
|
+
* public certificates. If no +cert_dir+ is given, any connection presenting a valid CURVE
|
396
|
+
* certificate will be allowed.
|
397
|
+
*
|
398
|
+
*/
|
399
|
+
static VALUE
|
400
|
+
rzyre_s_enable_curve_auth( int argc, VALUE *argv, VALUE module )
|
401
|
+
{
|
402
|
+
VALUE cert_dir = Qnil;
|
403
|
+
char *cert_dir_s;
|
404
|
+
|
405
|
+
rb_scan_args( argc, argv, "01", &cert_dir );
|
406
|
+
|
407
|
+
if ( argc ) {
|
408
|
+
cert_dir_s = StringValueCStr( cert_dir );
|
409
|
+
zstr_sendx( auth, "CURVE", cert_dir_s, NULL );
|
410
|
+
} else {
|
411
|
+
zstr_sendx( auth, "CURVE", CURVE_ALLOW_ANY, NULL );
|
412
|
+
}
|
413
|
+
|
414
|
+
rb_thread_call_without_gvl2( rzyre_wait_for_auth_without_gvl, 0, RUBY_UBF_IO, 0 );
|
415
|
+
|
416
|
+
return Qtrue;
|
417
|
+
}
|
418
|
+
|
419
|
+
|
420
|
+
/*
|
421
|
+
* call-seq:
|
422
|
+
* Zyre.interface -> string
|
423
|
+
*
|
424
|
+
* Return network interface to use for broadcasts, or nil if none was set.
|
425
|
+
*
|
426
|
+
*/
|
427
|
+
static VALUE
|
428
|
+
rzyre_s_interface( VALUE module )
|
429
|
+
{
|
430
|
+
const char *interface = zsys_interface();
|
431
|
+
|
432
|
+
if ( strnlen(interface, 1) == 0 ) {
|
433
|
+
return Qnil;
|
434
|
+
}
|
435
|
+
|
436
|
+
return rb_utf8_str_new_cstr( interface );
|
437
|
+
}
|
438
|
+
|
439
|
+
|
440
|
+
/*
|
441
|
+
* call-seq:
|
442
|
+
* Zyre.interface = string
|
443
|
+
*
|
444
|
+
* Set network interface name to use for broadcasts.
|
445
|
+
*
|
446
|
+
* This lets the interface be configured for test environments where required.
|
447
|
+
* For example, on Mac OS X, zbeacon cannot bind to 255.255.255.255 which is
|
448
|
+
* the default when there is no specified interface. If the environment
|
449
|
+
* variable ZSYS_INTERFACE is set, use that as the default interface name.
|
450
|
+
* Setting the interface to "*" means "use all available interfaces".
|
451
|
+
*
|
452
|
+
*/
|
453
|
+
static VALUE
|
454
|
+
rzyre_s_interface_eq( VALUE module, VALUE new_interface )
|
455
|
+
{
|
456
|
+
if ( NIL_P(new_interface) ) {
|
457
|
+
zsys_set_interface( "" );
|
458
|
+
} else {
|
459
|
+
const char *new_interface_s = StringValueCStr( new_interface );
|
460
|
+
zsys_set_interface( new_interface_s );
|
461
|
+
}
|
462
|
+
|
463
|
+
return Qtrue;
|
297
464
|
}
|
298
465
|
|
299
466
|
|
@@ -323,15 +490,23 @@ Init_zyre_ext()
|
|
323
490
|
|
324
491
|
rb_define_singleton_method( rzyre_mZyre, "zyre_version", rzyre_s_zyre_version, 0 );
|
325
492
|
rb_define_singleton_method( rzyre_mZyre, "interfaces", rzyre_s_interfaces, 0 );
|
326
|
-
rb_define_singleton_method( rzyre_mZyre, "disable_zsys_handler",
|
493
|
+
rb_define_singleton_method( rzyre_mZyre, "disable_zsys_handler",
|
494
|
+
rzyre_s_disable_zsys_handler, 0 );
|
327
495
|
|
328
496
|
rb_define_singleton_method( rzyre_mZyre, "z85_encode", rzyre_s_z85_encode, 1 );
|
329
497
|
rb_define_singleton_method( rzyre_mZyre, "z85_decode", rzyre_s_z85_decode, 1 );
|
330
498
|
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
499
|
+
rb_define_singleton_method( rzyre_mZyre, "start_authenticator",
|
500
|
+
rzyre_s_start_authenticator, 0 );
|
501
|
+
rb_define_singleton_method( rzyre_mZyre, "authenticator_started?",
|
502
|
+
rzyre_s_authenticator_started_p, 0 );
|
503
|
+
rb_define_singleton_method( rzyre_mZyre, "stop_authenticator", rzyre_s_stop_authenticator, 0 );
|
504
|
+
|
505
|
+
rb_define_singleton_method( rzyre_mZyre, "verbose_auth!", rzyre_s_verbose_auth_bang, 0 );
|
506
|
+
rb_define_singleton_method( rzyre_mZyre, "enable_curve_auth", rzyre_s_enable_curve_auth, -1 );
|
507
|
+
|
508
|
+
rb_define_singleton_method( rzyre_mZyre, "interface", rzyre_s_interface, 0 );
|
509
|
+
rb_define_singleton_method( rzyre_mZyre, "interface=", rzyre_s_interface_eq, 1 );
|
335
510
|
|
336
511
|
// :TODO: set up zsys_set_logsender()
|
337
512
|
|
data/lib/zyre.rb
CHANGED
data/spec/zyre/cert_spec.rb
CHANGED
@@ -46,7 +46,7 @@ RSpec.describe( Zyre::Cert ) do
|
|
46
46
|
|
47
47
|
expect( result ).to be_a( described_class )
|
48
48
|
expect( result.public_key ).to eq( cert.public_key )
|
49
|
-
expect( result.secret_key ).to eq(
|
49
|
+
expect( result.secret_key ).to eq( described_class::EMPTY_KEY )
|
50
50
|
end
|
51
51
|
|
52
52
|
|
@@ -197,7 +197,7 @@ RSpec.describe( Zyre::Cert ) do
|
|
197
197
|
|
198
198
|
it "can be applied to a Zyre node", :draft_apis do
|
199
199
|
node = instance_double( Zyre::Node )
|
200
|
-
cert =
|
200
|
+
cert = described_class.new
|
201
201
|
|
202
202
|
expect( node ).to receive( :zcert= ).with( cert )
|
203
203
|
cert.apply( node )
|
@@ -212,6 +212,8 @@ RSpec.describe( Zyre::Cert ) do
|
|
212
212
|
other = cert.dup
|
213
213
|
|
214
214
|
expect( other.object_id ).not_to eq( cert.object_id )
|
215
|
+
expect( other[:node_id] ).to eq( cert[:node_id] )
|
216
|
+
expect( other[:node_order] ).to eq( cert[:node_order] )
|
215
217
|
end
|
216
218
|
|
217
219
|
|
data/spec/zyre/node_spec.rb
CHANGED
@@ -26,6 +26,14 @@ RSpec.describe( Zyre::Node ) do
|
|
26
26
|
TEST_BINARY_STRING = TEST_BINARY_STRING_PARTS.join( '' )
|
27
27
|
|
28
28
|
|
29
|
+
before( :each ) do
|
30
|
+
@interface = Zyre.interface
|
31
|
+
end
|
32
|
+
after( :each ) do
|
33
|
+
Zyre.interface = @interface
|
34
|
+
end
|
35
|
+
|
36
|
+
|
29
37
|
it "can be created anonymously" do
|
30
38
|
node = described_class.new
|
31
39
|
|
@@ -108,11 +116,11 @@ RSpec.describe( Zyre::Node ) do
|
|
108
116
|
end
|
109
117
|
|
110
118
|
|
111
|
-
it "
|
119
|
+
it "has a backward-compatible method for setting the interface on a Node" do
|
112
120
|
node = described_class.new
|
113
121
|
expect {
|
114
122
|
node.interface = 'lo0'
|
115
|
-
}.
|
123
|
+
}.to change { Zyre.interface }.to( 'lo0' )
|
116
124
|
end
|
117
125
|
|
118
126
|
|
data/spec/zyre_spec.rb
CHANGED
@@ -7,6 +7,14 @@ require 'zyre'
|
|
7
7
|
|
8
8
|
RSpec.describe( Zyre ) do
|
9
9
|
|
10
|
+
before( :each ) do
|
11
|
+
@interface = described_class.interface
|
12
|
+
end
|
13
|
+
after( :each ) do
|
14
|
+
described_class.interface = @interface
|
15
|
+
described_class.stop_authenticator
|
16
|
+
end
|
17
|
+
|
10
18
|
|
11
19
|
# Pattern for matching IPv4 addresses
|
12
20
|
IPV4_ADDRESS = /^((?:(?:^|\.)(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){4})$/
|
@@ -64,6 +72,21 @@ RSpec.describe( Zyre ) do
|
|
64
72
|
end
|
65
73
|
|
66
74
|
|
75
|
+
it "can set the interface used by all nodes" do
|
76
|
+
expect {
|
77
|
+
described_class.interface = 'LENNY'
|
78
|
+
}.to change { described_class.interface }.to( 'LENNY' )
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
it "clears the interface setting if set to `nil`" do
|
83
|
+
described_class.interface = "eth0"
|
84
|
+
expect {
|
85
|
+
described_class.interface = nil
|
86
|
+
}.to change { described_class.interface }.to( nil )
|
87
|
+
end
|
88
|
+
|
89
|
+
|
67
90
|
describe "Z85 encoding/decoding" do
|
68
91
|
|
69
92
|
# From the 32/Z85 reference code:
|
@@ -126,5 +149,95 @@ RSpec.describe( Zyre ) do
|
|
126
149
|
|
127
150
|
end
|
128
151
|
|
152
|
+
|
153
|
+
describe "ZAUTH authenticator" do
|
154
|
+
|
155
|
+
it "can be started" do
|
156
|
+
expect {
|
157
|
+
described_class.start_authenticator
|
158
|
+
}.to change { described_class.authenticator_started? }.to( true )
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
it "ignores call to start if it's already started" do
|
163
|
+
described_class.start_authenticator
|
164
|
+
|
165
|
+
expect {
|
166
|
+
described_class.start_authenticator
|
167
|
+
}.not_to raise_error
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
it "can be stopped" do
|
172
|
+
described_class.start_authenticator
|
173
|
+
|
174
|
+
expect {
|
175
|
+
described_class.stop_authenticator
|
176
|
+
}.to change { described_class.authenticator_started? }.to( false )
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
it "ignores calls to stop if it's not started" do
|
181
|
+
expect {
|
182
|
+
described_class.stop_authenticator
|
183
|
+
}.not_to raise_error
|
184
|
+
end
|
185
|
+
|
186
|
+
|
187
|
+
it "can enable verbose auth logging" do
|
188
|
+
described_class.start_authenticator
|
189
|
+
expect {
|
190
|
+
described_class.verbose_auth!
|
191
|
+
}.not_to raise_error
|
192
|
+
end
|
193
|
+
|
194
|
+
|
195
|
+
it "raises an error if verbose auth logging is enabled before the authenticator is started" do
|
196
|
+
expect {
|
197
|
+
described_class.verbose_auth!
|
198
|
+
}.to raise_error( /authenticator is not started/i )
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
it "supports any-cert style authentication" do
|
203
|
+
described_class.start_authenticator
|
204
|
+
# described_class.verbose_auth!
|
205
|
+
described_class.enable_curve_auth
|
206
|
+
|
207
|
+
server_cert = Zyre::Cert.new
|
208
|
+
server = Zyre::Node.new( 'server' )
|
209
|
+
# server.verbose!
|
210
|
+
server.zap_domain = 'TEST'
|
211
|
+
server.zcert = server_cert
|
212
|
+
server.set_header( 'X-PUBLICKEY', server_cert.public_txt )
|
213
|
+
server.join( 'TEST' )
|
214
|
+
server.start
|
215
|
+
|
216
|
+
client_cert = Zyre::Cert.new
|
217
|
+
authed_client = Zyre::Node.new( 'authed_client' )
|
218
|
+
# authed_client.verbose!
|
219
|
+
authed_client.zap_domain = 'TEST'
|
220
|
+
authed_client.zcert = client_cert
|
221
|
+
authed_client.set_header( 'X-PUBLICKEY', client_cert.public_txt )
|
222
|
+
authed_client.join( 'TEST' )
|
223
|
+
authed_client.start
|
224
|
+
authed_client.shout( 'TEST', 'authed_client hello' )
|
225
|
+
|
226
|
+
result = server.wait_for( :JOIN, timeout: 0.2 )
|
227
|
+
expect( result ).to be_a( Zyre::Event::Join )
|
228
|
+
|
229
|
+
noauth_client = Zyre::Node.new( 'noauth_client' )
|
230
|
+
# noauth_client.verbose!
|
231
|
+
noauth_client.zap_domain = 'TEST'
|
232
|
+
noauth_client.join( 'TEST' )
|
233
|
+
noauth_client.start
|
234
|
+
noauth_client.shout( 'TEST', 'noauth_client hello' )
|
235
|
+
|
236
|
+
result = server.wait_for( :JOIN, timeout: 0.2 )
|
237
|
+
expect( result ).to be_nil
|
238
|
+
end
|
239
|
+
|
240
|
+
end
|
241
|
+
|
129
242
|
end
|
130
243
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,39 +1,40 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zyre
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain:
|
11
10
|
- |
|
12
11
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
12
|
+
MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
|
13
|
+
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
14
|
+
HhcNMjUwMTAxMDMzMTA5WhcNMjYwMTAxMDMzMTA5WjA+MQwwCgYDVQQDDANnZWQx
|
15
|
+
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
16
|
+
ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
|
17
|
+
83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
|
18
|
+
ENcvWVZS4iUzi4dsYJGY6yEOsXh2CcF46+QevV8iE+UmbkU75V7Dy1JCaUOyizEt
|
19
|
+
TH5UHsOtUU7k9TYARt/TgYZKuaoAMZZd5qyVqhF1vV+7/Qzmp89NGflXf2xYP26a
|
20
|
+
4MAX2qqKX/FKXqmFO+AGsbwYTEds1mksBF3fGsFgsQWxftG8GfZQ9+Cyu2+l1eOw
|
21
|
+
cZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt
|
22
|
+
+QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ
|
23
|
+
soo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc
|
24
|
+
/D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
|
25
|
+
BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
|
26
|
+
MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
|
27
|
+
YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQBjrBzCKWzXFigswYSPzGO8
|
28
|
+
9atBtY/eQdcN6KCL+PTzQBD9yePGF7H/xsww3awRauP+D1VUjCFbiiC3Qb0Ww0Qd
|
29
|
+
OVA0s10T9KpZ8nb2XyKocSK7TfgDhcyr0V4H2MPxwK9SWYjGGh8z9z9HmT0i3PyX
|
30
|
+
fXOSzzEoG6u26HIOg0nxSpitEjiAHBekQxy9ka5NuQbxoxMg+eIHU4rU9IUhu0Rf
|
31
|
+
wl4wuvPVE3UQK0v0uqT6rJukEKQ1iNgK5R8klgEIv79XhQPgTkMt31FGfrwOp6HB
|
32
|
+
OE0HMwOwY9B0w3aOxxdMQyyRxaZVv3eWE5RimQI7T0TUaxPngtS33ByMZjTeidxi
|
33
|
+
ESIUEPVXoBCkFgLW1EVlBb+rG7WLYod4eVll4tKA42Bi2Ju90tqiJ1YQiyuRfCnp
|
34
|
+
8qAqdfV+4u6Huu1KzAuDQCheyEyISsLST37sU/irV3czV6BiFipWag1XiJciRT3A
|
35
|
+
wZqCfTNVHTdtsCbfdA1DsA3RdG2iEH3TOHzv1Rqzqh4=
|
35
36
|
-----END CERTIFICATE-----
|
36
|
-
date:
|
37
|
+
date: 2025-08-05 00:00:00.000000000 Z
|
37
38
|
dependencies:
|
38
39
|
- !ruby/object:Gem::Dependency
|
39
40
|
name: loggability
|
@@ -61,20 +62,14 @@ dependencies:
|
|
61
62
|
requirements:
|
62
63
|
- - "~>"
|
63
64
|
- !ruby/object:Gem::Version
|
64
|
-
version: '0.
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 0.15.1
|
65
|
+
version: '0.22'
|
68
66
|
type: :development
|
69
67
|
prerelease: false
|
70
68
|
version_requirements: !ruby/object:Gem::Requirement
|
71
69
|
requirements:
|
72
70
|
- - "~>"
|
73
71
|
- !ruby/object:Gem::Version
|
74
|
-
version: '0.
|
75
|
-
- - ">="
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 0.15.1
|
72
|
+
version: '0.22'
|
78
73
|
- !ruby/object:Gem::Dependency
|
79
74
|
name: rake-compiler
|
80
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,7 +208,6 @@ metadata:
|
|
213
208
|
documentation_uri: https://deveiate.org/code/zyre
|
214
209
|
changelog_uri: https://deveiate.org/code/zyre/History_md.html
|
215
210
|
source_uri: https://gitlab.com/ravngroup/open-source/ruby-zyre/-/tree/master
|
216
|
-
post_install_message:
|
217
211
|
rdoc_options: []
|
218
212
|
require_paths:
|
219
213
|
- lib
|
@@ -228,8 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
222
|
- !ruby/object:Gem::Version
|
229
223
|
version: '0'
|
230
224
|
requirements: []
|
231
|
-
rubygems_version: 3.
|
232
|
-
signing_key:
|
225
|
+
rubygems_version: 3.6.9
|
233
226
|
specification_version: 4
|
234
227
|
summary: A ZRE library for Ruby.
|
235
228
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|