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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd8a8d29639c250dbe4ef1354ca98ce1e94510753c111ba62965af0f8bca77cb
4
- data.tar.gz: f1d88f86c4fba91ad7e842a17c00b1ec8ee1038bb7780ff6a4368eadcc133443
3
+ metadata.gz: 6cec95dcb820444abd65614b00b8d58228f257aa801c57fd258d205cdfa3cca6
4
+ data.tar.gz: '0343590213ebc76ede529e8e469bebd69439c62826ef134852d37870da417f16'
5
5
  SHA512:
6
- metadata.gz: ccea699c50675a7f3a6d65d52b684d6acb77ff99177c019111f48fdf724cd4c3753bdb70e65b02437ddf259187104472f9bbb149370d2881a7c9bbb6912b2f72
7
- data.tar.gz: 8e2344c225d5f304391bfdadf51f9f416d41a1c0bcdd83755fcc11d9b20b1ed3851e4c822aee286de9b4022594e06666e45a93e324ec608e8be96908ef2c4cc0
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
- getter: ->{ Dir.pwd },
35
- setter: ->new{ Dir.chdir(new) })
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
- 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
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
- 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"]
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
- return rb_gv_set(get_global_name(&name, true), value);
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GVars
4
- VERSION = '0.9.11'
4
+ VERSION = '0.10.1'
5
5
  end
data/sig/gvars.rbs CHANGED
@@ -1,6 +1,9 @@
1
1
  module GVars
2
2
  VERSION: String
3
3
 
4
+ attr_accessor self.debug: bool?
5
+ def self.debug?: () -> bool
6
+
4
7
  # Mixin methods
5
8
  def self?.global_variable_get: (interned name) -> untyped
6
9
  def self?.global_variable_set: [T] (interned name, T value) -> T
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gvars
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.11
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Westerman