call_counter.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
original_method = (method_name) unless (:@@call_counter): (:@@call_counter, {}) end call_counter = (:@@call_counter) (method_name) do |*args| call_counter[method_name] ||= 0 call_counter[method_name] += 1 bound_original_method = original_method(self) bound_original_method(*args) end metaclass = class << self; self; end metaclass do (:calls_to) do |m| call_counter[m] ? 0 : call_counter[m] end (:reset_counters) do call_counter do |k| call_counter[k] = 0 end end end end end |
call_foo.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
extend CallCounter ; "foo"; end ; "bar"; end count_calls_to :foo count_calls_to :bar end |
call_counter_spec.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
describe CallFoo do (:each) do @call_foo = CallFoo CallFoo end it "should have a method calls_to" do CallFoo (:calls_to) end it "method counter should be zero at start" do CallFoo(:foo) == 0 end it "should reset counters" do 4 {@call_foo. foo } CallFoo CallFoo(:foo) == 0 end it "should count the number of times a counted method has been called" do 4 {@call_foo } CallFoo(:foo) == 4 end it "should be able to count several methods' calls" do 4 {@call_foo } CallFoo(:foo) == 4 7 {@call_foo } CallFoo(:bar) == 7 end it "shold count bar calls correctly, too" do 7 {@call_foo } CallFoo(:bar) == 7 end end |

