central_notifications 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/README.rdoc +41 -3
  2. data/lib/registration.rb +3 -3
  3. metadata +4 -4
data/README.rdoc CHANGED
@@ -1,10 +1,15 @@
1
1
  == Overview
2
2
 
3
3
  Based on the idea of notifications in objective-C.
4
+
4
5
  Register an object method for notifications.
6
+
5
7
  When registered method is called, all objects which have registered will be notified and will be able to know the result of the registered method.
8
+
6
9
  Can act as Rails observers, by registering on setters methods.
10
+
7
11
  You can register both class or instance methods.
12
+
8
13
  Several different objects, with different class can register for same object method.
9
14
 
10
15
  See tests units for more examples of usage.
@@ -28,10 +33,11 @@ You can declare a notifier inside the model by including the module CentralNotif
28
33
  registration.method = :payment
29
34
  notification.method = :one_order_has_been_payed
30
35
  end
31
- In this way you don't have to have to declare the notification.klass which is automatically set to self.
36
+ In this way you don't have to declare the notification klass, it will be automatically set to self.
32
37
 
33
38
  ==== In an initializer
34
39
  You can register your notification in an initializer (for exemple, in Rails, in a file under config/initializers).
40
+
35
41
  The analog as previous example will be in this initializer :
36
42
  CentralNotifications.notify do |registration, notification|
37
43
  registration.klass = Order
@@ -55,9 +61,9 @@ Suppose you have classes User and Order, and, you have registered for notificati
55
61
  end
56
62
  end
57
63
 
64
+ user = User.new
58
65
  order = Order.new
59
66
  order.payment(100)
60
-
61
67
  # => "Hey! one user know that one order has been paid!"
62
68
 
63
69
  If you register notification for another class objects :
@@ -77,6 +83,8 @@ If you register notification for another class objects :
77
83
  end
78
84
 
79
85
  then :
86
+ user = User.new
87
+ accounting = Accounting.new
80
88
  order = Order.new
81
89
  order.payment(100)
82
90
 
@@ -91,8 +99,38 @@ You can get in User class the result of Order#payment in the instance variable @
91
99
  puts "Payment is : " + @registration_result.to_s
92
100
  end
93
101
 
102
+ user = User.new
94
103
  order = Order.new
95
104
  order.payment(100)
96
105
 
97
106
  # => "Payment is : 100"
98
-
107
+
108
+ == Acting as Observer
109
+
110
+ You can use central notifications as observers on attribute values change.
111
+ For that, just register on setter :
112
+
113
+ class Order
114
+ attr_accessor :amount
115
+ end
116
+
117
+ class User
118
+ include CentralNotification
119
+
120
+ def amount_has_changed
121
+ puts "The amount has changed and is now:" + @registration_result.to_s
122
+ end
123
+
124
+ register_for_notification do |registration, notification|
125
+ registration.klass = Order
126
+ registration.method = :amount=
127
+ notification.method = :amount_has_changed
128
+ end
129
+ end
130
+
131
+
132
+
133
+ user = User.new
134
+ order = Order.new
135
+ order.amount = 100
136
+ #=> From user : The amount has changed and is now: 100
data/lib/registration.rb CHANGED
@@ -22,7 +22,7 @@ module CentralNotifications
22
22
  end
23
23
 
24
24
  def already_registered?
25
- @real_klass.instance_methods.include?(@original_alias_symbol.to_s)
25
+ @real_klass.instance_methods.map(&:to_sym).include?(@original_alias_symbol)
26
26
  end
27
27
 
28
28
  def set_notifier_in_notifier_class
@@ -35,7 +35,7 @@ module CentralNotifications
35
35
  redefine_method
36
36
  end
37
37
 
38
- def redefine_method
38
+ def redefine_method
39
39
  registration, eigenclass, original = self, on_eigenclass?, @original_alias_symbol
40
40
  @real_klass.send(:define_method, method) do |*params|
41
41
  registration.result = send(original, *params)
@@ -46,7 +46,7 @@ module CentralNotifications
46
46
  end
47
47
 
48
48
  def singleton_method?
49
- klass.send(:singleton_methods).include?(method.to_s)
49
+ klass.send(:singleton_methods).map(&:to_sym).include?(@method)
50
50
  end
51
51
 
52
52
  def on_eigenclass?
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: central_notifications
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0
10
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Philippe Cantin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-19 00:00:00 +01:00
18
+ date: 2010-12-20 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21