Module: Viva

Defined in:
lib/viva.rb,
lib/viva/version.rb,
ext/viva/core.c

Constant Summary collapse

VERSION =
'0.42.1337'
Getters =
getters = rb_hash_new()
Setters =
setters = rb_hash_new()

Class Method Summary collapse

Class Method Details

.-(getter, &setter) ⇒ Object



22
23
24
# File 'lib/viva.rb', line 22

def - getter, &setter
  define @var, getter, setter
end

.define(var, getter, setter) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'ext/viva/core.c', line 31

static VALUE
viva_define(VALUE self, VALUE var, VALUE getter, VALUE setter)
{
  char *str;
  var = rb_String(var);
  rb_str_update(var, 0, 0, rb_str_new("$", 1));
  str = StringValueCStr(var);

  /* Reject invalid global identifiers and fully digital ones other than $0,
   * since the former would be syntax errors and the latter inaccessible. */
  if (!rb_is_global_id(rb_intern(str)) || atoi(str + 1) > 0)
    rb_raise(rb_eNameError, error_msg, str);

  rb_hash_aset(getters, var, getter);
  rb_hash_aset(setters, var, setter);
  rb_define_virtual_variable(str, viva_getter, viva_setter);

  return rb_str_intern(var);
}

.define_getter(var) ⇒ Object



6
7
8
# File 'lib/viva.rb', line 6

def define_getter var
  define var, proc, Setters["$#{var}"]
end

.define_setter(var) ⇒ Object



10
11
12
# File 'lib/viva.rb', line 10

def define_setter var
  define var, Getters["$#{var}"], proc
end

.undef_getter(var) ⇒ Object



14
15
16
# File 'lib/viva.rb', line 14

def undef_getter var
  Getters.delete "$#{var}"
end

.undef_setter(var) ⇒ Object



18
19
20
# File 'lib/viva.rb', line 18

def undef_setter var
  Setters.delete "$#{var}"
end