gvars 0.9.11 → 0.10.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 +4 -4
- data/README.md +18 -18
- data/ext/gvars/gvars.c +35 -5
- data/lib/gvars/version.rb +1 -1
- data/sig/gvars.rbs +3 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6cec95dcb820444abd65614b00b8d58228f257aa801c57fd258d205cdfa3cca6
|
|
4
|
+
data.tar.gz: '0343590213ebc76ede529e8e469bebd69439c62826ef134852d37870da417f16'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0db69cfd69b689e2d93f5b62780c197b28929933b43d77241e89bd1658f52d676e637d1f1943a27723e8a9ba5179b3ba0bb8c9c229b768ff82e92c9431dcd560
|
|
7
|
+
data.tar.gz: 1ecd051d8c68d123131c2ef8d96917c70cb17fe6f08063c9525ba0afdca29c6dd053eb0dd3aad2a35af151c919d61d27e7fc7ba54eab7dc58660ad3b441a7790
|
data/README.md
CHANGED
|
@@ -31,8 +31,8 @@ puts $TIME.monday? #=> true
|
|
|
31
31
|
|
|
32
32
|
# You can also provide a custom setter
|
|
33
33
|
GVars.virtual(:$PWD,
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
getter: ->{ Dir.pwd },
|
|
35
|
+
setter: ->new{ Dir.chdir(new) })
|
|
36
36
|
$PWD = '/tmp'
|
|
37
37
|
p $PWD #=> "/private/tmp" (macOS symlinks `/tmp` to `/private/tmp`)
|
|
38
38
|
```
|
|
@@ -51,9 +51,9 @@ p $COUNTER #=> 11
|
|
|
51
51
|
# You can also specify a state, which is given to the getter (and setter),
|
|
52
52
|
# but isn't updated by the getter's return value.
|
|
53
53
|
GVars.hooked(:$RAND,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
state: Random.new,
|
|
55
|
+
getter: ->random{ random.rand },
|
|
56
|
+
setter: ->(value,random){ random.srand(value) }) # doesn't actually work.. `Random#srand` isn't a thing
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
## `OptParse` support
|
|
@@ -64,19 +64,19 @@ require 'optparse'
|
|
|
64
64
|
require 'gvars'
|
|
65
65
|
|
|
66
66
|
OptParse.new do |op|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
op.on '--[no-]read'
|
|
68
|
+
op.on '--[no-]write'
|
|
69
|
+
op.on '--[no-]execute'
|
|
70
|
+
op.on '--timeout=SECONDS', Float
|
|
71
|
+
op.on '--cache-dir=PATH'
|
|
72
|
+
|
|
73
|
+
op.parse!(
|
|
74
|
+
%w[--read --no-execute --timeout=10 --cache-dir=/foo/bar],
|
|
75
|
+
into: GVars
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
p [$read, $write, $execute, $timeout, $cache_dir]
|
|
79
|
+
#=> [true, nil, false, 10.0, "/foo/bar"]
|
|
80
80
|
end
|
|
81
81
|
```
|
|
82
82
|
|
data/ext/gvars/gvars.c
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
#define dbg(...) (fprintf(stderr, "%s:%s:%d: ", __FILE__, __FUNCTION__, __LINE__), fprintf(stderr,__VA_ARGS__),fprintf(stderr,"\n"),fflush(stderr))
|
|
3
3
|
|
|
4
4
|
VALUE gvars_module;
|
|
5
|
+
static ID id_debug;
|
|
6
|
+
|
|
7
|
+
static bool
|
|
8
|
+
gvars_debug_enabled(void)
|
|
9
|
+
{
|
|
10
|
+
VALUE debug_mode = rb_ivar_get(gvars_module, id_debug);
|
|
11
|
+
return debug_mode == Qnil ? ruby_debug : RTEST(debug_mode);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static VALUE
|
|
15
|
+
gvars_f_defined_p(VALUE self)
|
|
16
|
+
{
|
|
17
|
+
return gvars_debug_enabled() ? Qtrue : Qfalse;
|
|
18
|
+
}
|
|
5
19
|
|
|
6
20
|
// Converts `name` to a global variable name, ensures it's valid, and returns it.
|
|
7
21
|
//
|
|
@@ -29,8 +43,6 @@ static char *get_global_name(VALUE *name, bool translate) {
|
|
|
29
43
|
return namestr;
|
|
30
44
|
}
|
|
31
45
|
|
|
32
|
-
|
|
33
|
-
|
|
34
46
|
static VALUE
|
|
35
47
|
gvars_f_global_variable_get(VALUE self, VALUE name)
|
|
36
48
|
{
|
|
@@ -49,11 +61,23 @@ gvars_f_global_variable_set(VALUE self, VALUE name, VALUE value)
|
|
|
49
61
|
return rb_gv_set(get_global_name(&name, false), value);
|
|
50
62
|
}
|
|
51
63
|
|
|
52
|
-
|
|
53
64
|
static VALUE
|
|
54
65
|
gvars_f_global_variable_aset(VALUE self, VALUE name, VALUE value)
|
|
55
66
|
{
|
|
56
|
-
|
|
67
|
+
char *sname = get_global_name(&name, true);
|
|
68
|
+
if (gvars_debug_enabled()) {
|
|
69
|
+
char *sname_without_dollar = sname;
|
|
70
|
+
if (sname_without_dollar[0] == '$') {
|
|
71
|
+
++sname_without_dollar;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
VALUE msg = rb_sprintf("GVars: setting global $%s to: %"PRIsVALUE"\n",
|
|
75
|
+
sname_without_dollar, rb_inspect(value));
|
|
76
|
+
|
|
77
|
+
rb_io_write(rb_gv_get("$stderr"), msg);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return rb_gv_set(sname, value);
|
|
57
81
|
}
|
|
58
82
|
|
|
59
83
|
static VALUE
|
|
@@ -359,6 +383,7 @@ void
|
|
|
359
383
|
Init_gvars(void)
|
|
360
384
|
{
|
|
361
385
|
gvars_module = rb_define_module("GVars");
|
|
386
|
+
VALUE gvars_singleton = rb_singleton_class(gvars_module);
|
|
362
387
|
rb_ivar_set(gvars_module, rb_intern("vars"), rb_hash_new());
|
|
363
388
|
|
|
364
389
|
virtual_method_keyword_ids[VIRTUAL_METHOD_KEYWORDS_GETTER] = rb_intern("getter");
|
|
@@ -367,6 +392,12 @@ Init_gvars(void)
|
|
|
367
392
|
virtual_method_keyword_ids[VIRTUAL_METHOD_KEYWORDS_STATE] = rb_intern("state");
|
|
368
393
|
virtual_method_keyword_ids[VIRTUAL_METHOD_KEYWORDS_READONLY] = rb_intern("readonly");
|
|
369
394
|
|
|
395
|
+
|
|
396
|
+
// Define debugging construct
|
|
397
|
+
id_debug = rb_intern_const("@debug");
|
|
398
|
+
rb_define_attr(gvars_singleton, "debug", 1, 1);
|
|
399
|
+
rb_define_singleton_method(gvars_module, "debug?", gvars_f_defined_p, 0);
|
|
400
|
+
|
|
370
401
|
// Define module-level functions that can be used as mixins
|
|
371
402
|
rb_define_module_function(gvars_module, "global_variable_get", gvars_f_global_variable_get, 1);
|
|
372
403
|
rb_define_module_function(gvars_module, "global_variable_set", gvars_f_global_variable_set, 2);
|
|
@@ -388,7 +419,6 @@ Init_gvars(void)
|
|
|
388
419
|
rb_define_singleton_method(gvars_module, "[]=", gvars_f_global_variable_aset, 2);
|
|
389
420
|
|
|
390
421
|
// Aliases
|
|
391
|
-
VALUE gvars_singleton = rb_singleton_class(gvars_module);
|
|
392
422
|
rb_define_alias(gvars_singleton, "get", "global_variable_get");
|
|
393
423
|
rb_define_alias(gvars_singleton, "set", "global_variable_set");
|
|
394
424
|
rb_define_alias(gvars_singleton, "alias", "alias_global_variable");
|
data/lib/gvars/version.rb
CHANGED
data/sig/gvars.rbs
CHANGED