Class: FinalizeBlock
- Inherits:
-
Object
- Object
- FinalizeBlock
- Defined in:
- lib/finalize_block.rb,
lib/finalize_block/version.rb,
ext/finalize_block/finalize_block.c
Constant Summary collapse
- VERSION =
"0.1.0"
Instance Method Summary collapse
- #each_target_objects ⇒ Object
-
#initialize(rules) ⇒ FinalizeBlock
constructor
A new instance of FinalizeBlock.
- #setup_traces(klass) ⇒ Object
Constructor Details
#initialize(rules) ⇒ FinalizeBlock
Returns a new instance of FinalizeBlock.
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/finalize_block.rb', line 5 def initialize rules raise "Now, one rule should be accepted: #{rules.inspect}" if rules.keys.size != 1 rules.each{|k, v| @klass = k; @action = v} @traces = setup_traces @klass @traces.each{|trace| trace.enable} yield ensure @traces.each{|trace| trace.disable} each_target_objects do |obj| @action.call(obj) end end |
Instance Method Details
#each_target_objects ⇒ Object
49 50 51 52 53 54 |
# File 'ext/finalize_block/finalize_block.c', line 49 static VALUE each_target_objects(VALUE self) { st_foreach(g_allocated_objects, each_target_objects_i, 0); return self; } |
#setup_traces(klass) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'ext/finalize_block/finalize_block.c', line 32 static VALUE setup_traces(VALUE self, VALUE klass) { VALUE traces = rb_ary_new(); rb_ary_push(traces, rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_NEWOBJ, newobj_i, (void *)klass)); rb_ary_push(traces, rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_FREEOBJ, freeobj_i, NULL)); return traces; } |