class LazyProxy

Public Class Methods

new(*args) click to toggle source
static VALUE lp_initialize(int argc, VALUE* argv, VALUE self) {
  VALUE arg, blk;

  rb_check_arity(argc, 0, 1);

  arg = (argc == 1) ? *argv : Qnil;
  blk = rb_block_given_p() ? rb_block_proc() : Qnil;

  lp_set(self, arg, blk, NIL_P(arg) && !NIL_P(blk));

  return self;
}

Public Instance Methods

__getobj__() click to toggle source
static VALUE lp_get_resolv(VALUE self) {
  struct wrapped_object * ptr = lp_ptr(self);

  if (lp_is_unresolved_blk(ptr))
    lp_resolve(ptr);

  return ptr->obj;
}
__reset__() click to toggle source
static VALUE lp_reset(VALUE self) {
  struct wrapped_object * ptr = lp_ptr(self);

  if(!ptr->isblk)
    rb_raise(rb_eArgError, "proxy was not provided with a block");

  ptr->resolved = 0;

  return Qtrue;
}
__setobj__(*args) click to toggle source
static VALUE lp_initialize(int argc, VALUE* argv, VALUE self) {
  VALUE arg, blk;

  rb_check_arity(argc, 0, 1);

  arg = (argc == 1) ? *argv : Qnil;
  blk = rb_block_given_p() ? rb_block_proc() : Qnil;

  lp_set(self, arg, blk, NIL_P(arg) && !NIL_P(blk));

  return self;
}
Also aliased as: initialize
initialize(*args)
Alias for: __setobj__
inspect() click to toggle source
static VALUE lp_inspect(VALUE self) {
  VALUE str, cname = rb_obj_class(self);
  struct wrapped_object * ptr = lp_ptr(self);

  if (lp_is_unresolved_blk(ptr))
    str = rb_sprintf("#<%"PRIsVALUE": %+"PRIsVALUE" (unresolved)>", rb_class_path(cname), ptr->blk);
  else
    str = rb_sprintf("#<%"PRIsVALUE": %+"PRIsVALUE">", rb_class_path(cname), ptr->obj);

  return str;
}
send(*args) click to toggle source
static VALUE lp_send(int argc, VALUE* argv, VALUE self) {
  VALUE obj;
  ID method_id;
  rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);

  obj = lp_get_resolv(self);
  method_id = rb_to_id(*argv);

  return rb_funcall2(obj, method_id, --argc, ++argv);
}

Private Instance Methods

initialize_copy(p1) click to toggle source
static VALUE lp_init_copy(VALUE dst, VALUE src) {
  struct wrapped_object *psrc = lp_ptr(src), *pdst;

  if (!OBJ_INIT_COPY(dst, src)) return dst;

  TypedData_Get_Struct(dst, struct wrapped_object, &wrapped_object_data_type, pdst);
  if (!pdst)
    rb_raise(rb_eArgError, "unallocated proxy");

  lp_cpy(pdst, psrc);
  return dst;
}
method_missing(*args) click to toggle source
static VALUE lp_method_missing(int argc, VALUE* argv, VALUE self) {
  VALUE method_name = *argv, obj = lp_get_resolv(self);

  return rb_funcallv_public(obj, SYM2ID(method_name), --argc, ++argv);
}
respond_to_missing?(*args) click to toggle source
static VALUE lp_respond_to_missing(int argc, VALUE* argv, VALUE self) {
  VALUE obj = lp_get_resolv(self);

  return rb_funcall2(obj, id_respond_to, argc, argv);
}