Mention AroundDecorator in README.txt.
[decorate.git] / test.rb
blob991894dd0df2d943237379ee0410c2136e9c52be
1 $:.unshift "lib"
3 require "decorate/private_method"
4 require "decorate/memoize"
6 class Foo
8   def foo
9     puts "foo"
10     bar
11   end
13   private_method
14   def bar
15     puts "bar"
16   end
18 end
20 class M1
21   extend Decorate::Memoize
23   memoize
24   def m1(a, b)
25     puts "#{self}.m1(#{a}, #{b})"
26     case [a,b]
27     when [1,2]; 1
28     when [2,3]; 2
29     when [4,5]; 3
30     else -1
31     end
32   end
34   puts "defining class method m1"
36   # doesn't work (yet)
37   # Must hook into Object#singleton_method_added to make it work!
38   memoize
39   def self.m1(a, b)
40     puts "#{self}.m1(#{a}, #{b})"
41     case [a,b]
42     when [1,2]; 1
43     when [2,3]; 2
44     when [4,5]; 3
45     else -1
46     end
47   end
49 end
51 extend Decorate::Memoize
53 memoize
54 def mx(a, b)
55   puts "#{self}.m1(#{a}, #{b})"
56   case [a,b]
57   when [1,2]; 1
58   when [2,3]; 2
59   when [4,5]; 3
60   else -1
61   end
62 end
64 Decorate::Memoize.memoize
65 def my(a, b)
66   puts "#{self}.m1(#{a}, #{b})"
67   case [a,b]
68   when [1,2]; 1
69   when [2,3]; 2
70   when [4,5]; 3
71   else -1
72   end
73 end
75 private_method
76 def private_toplevel_method
77   puts "private_toplevel_method called"
78 end
80 require "decorate/before_decorator"
81 class Bf
82   extend Decorate::BeforeDecorator
84   before_decorator :trace_call, :call => :trace_call
86   def trace_call(method_name, *args, &block)
87     puts "Before #{self}.#{method_name}, args: #{args.inspect}, block: #{block.inspect}"
88   end
90   def foo
91     puts "foo"
92   end
94   trace_call
95   def bar
96     puts "bar"
97   end
99 end
101 require "decorate/around_decorator"
102 class Ad
103   extend Decorate::AroundDecorator
105   around_decorator :wrap, :call => :wrap
107   def wrap(call)
108     puts "Before #{call.inspect}"
109     call.transfer
110     puts "After #{call.inspect}"
111     call.result + 1
112   end
114   wrap
115   def foo(*args, &block)
116     puts "foo: #{args.inspect}, block: #{block.inspect}"
117     rand 10
118   end