eyeballer 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +32 -5
- data/lib/eyeballer.rb +6 -3
- data/spec/eyeballer/eyeballer_spec.rb +30 -0
- metadata +1 -1
data/README.md
CHANGED
@@ -1,7 +1,34 @@
|
|
1
|
-
|
2
|
-
Description goes here.
|
1
|
+
# Eyeballer
|
3
2
|
|
4
|
-
|
5
|
-
=========
|
3
|
+
A simple observer written in Ruby.
|
6
4
|
|
7
|
-
|
5
|
+
Observe:
|
6
|
+
|
7
|
+
class Foo
|
8
|
+
|
9
|
+
def save
|
10
|
+
"Saved!"
|
11
|
+
end
|
12
|
+
|
13
|
+
def whatever
|
14
|
+
"Whatever ..."
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class MyObserver
|
20
|
+
include Eyeballer
|
21
|
+
|
22
|
+
observe :foo, :save => [:do_something, :do_something_else]
|
23
|
+
observe :foo, :whatever => :do_something_else
|
24
|
+
|
25
|
+
def do_something
|
26
|
+
"Do something!"
|
27
|
+
end
|
28
|
+
|
29
|
+
def do_something_else
|
30
|
+
"Do something else!"
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
data/lib/eyeballer.rb
CHANGED
@@ -32,10 +32,13 @@ module Eyeballer
|
|
32
32
|
end
|
33
33
|
|
34
34
|
self.eyeballed_methods.keys.each do |method_name|
|
35
|
-
|
36
|
-
|
35
|
+
# Pinched from alias_method_chain:
|
36
|
+
method_name_without_punctuation, punctuation = method_name.to_s.sub(/([?!=])$/, ''), $1
|
37
|
+
aliased_name = "#{method_name_without_punctuation}_without_eyeball#{punctuation}"
|
38
|
+
unless method_defined? aliased_name
|
39
|
+
alias_method aliased_name, method_name
|
37
40
|
define_method method_name do
|
38
|
-
result = self.send(
|
41
|
+
result = self.send(aliased_name)
|
39
42
|
eyeball_executer(method_name)
|
40
43
|
result
|
41
44
|
end
|
@@ -13,12 +13,22 @@ class Foo
|
|
13
13
|
def other_activity
|
14
14
|
"Busy again ..."
|
15
15
|
end
|
16
|
+
|
17
|
+
def valid?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy!
|
22
|
+
true
|
23
|
+
end
|
16
24
|
end
|
17
25
|
|
18
26
|
class Job
|
19
27
|
def self.number_one;end
|
20
28
|
def self.number_two;end
|
21
29
|
def self.number_three;end
|
30
|
+
def self.number_four(instance);end
|
31
|
+
def self.number_five(instance);end
|
22
32
|
end
|
23
33
|
|
24
34
|
class Observer
|
@@ -31,6 +41,10 @@ class Observer
|
|
31
41
|
|
32
42
|
observe :foo, :other_activity => :do_something_with_the_instance
|
33
43
|
|
44
|
+
observe :foo, :valid? => :process_files
|
45
|
+
|
46
|
+
observe :foo, :destroy! => :email_someone
|
47
|
+
|
34
48
|
def do_something
|
35
49
|
Job.number_one
|
36
50
|
end
|
@@ -46,6 +60,14 @@ class Observer
|
|
46
60
|
def do_something_with_the_instance(instance)
|
47
61
|
instance.greeting = "The Observer says hello too!"
|
48
62
|
end
|
63
|
+
|
64
|
+
def process_files(instance)
|
65
|
+
Job.number_four(instance)
|
66
|
+
end
|
67
|
+
|
68
|
+
def email_someone(instance)
|
69
|
+
Job.number_five(instance)
|
70
|
+
end
|
49
71
|
end
|
50
72
|
|
51
73
|
|
@@ -67,4 +89,12 @@ describe Eyeballer do
|
|
67
89
|
foo.other_activity.should == "Busy again ..."
|
68
90
|
foo.greeting.should == "The Observer says hello too!"
|
69
91
|
end
|
92
|
+
|
93
|
+
it "should cope with predicates and bang methods" do
|
94
|
+
foo = Foo.new
|
95
|
+
Job.should_receive(:number_four).with(foo)
|
96
|
+
foo.should be_valid
|
97
|
+
Job.should_receive(:number_five).with(foo)
|
98
|
+
foo.destroy!.should be_true
|
99
|
+
end
|
70
100
|
end
|