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
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); }