whispers 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/whispers.rb +48 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3b94a60e786ce9992084c410ab0d1ee5c41b8654
4
+ data.tar.gz: 4dd8b86dbd1b36a5963f8834b0097c7179bdb474
5
+ SHA512:
6
+ metadata.gz: 8f1e25ee25d7577da217e35ee526fc9bee69385a8b82f685b676de42b66f04370efe797b93df9ccaa8bf4d09db199d318725ca00c2425afd53d1842041af2e57
7
+ data.tar.gz: af58a5944edf7094b5465090eebb1973a4beff8c7b51e7cdb336541142d216bf774bc703ff2c60b67a3913555f011d3aa9cd6089348739f9be3f8b6c7e23db85
@@ -0,0 +1,48 @@
1
+ module Whispers
2
+
3
+ def self.included(base)
4
+ base.instance_eval do
5
+
6
+ def whisper_macros
7
+ @whisper_macros ||= []
8
+ end
9
+
10
+ def inherited(subclass)
11
+ subclass.instance_variable_set(:@whisper_macros, self.whisper_macros.dup)
12
+ super
13
+ end
14
+
15
+ self.extend(Module.new {
16
+ def new(*)
17
+ instance = super
18
+ self.whisper_macros.each { |macro|
19
+ instance.extend macro
20
+ }
21
+ return instance
22
+ end
23
+ })
24
+
25
+ def whispers(method)
26
+ self.whisper_macros << Module.new do
27
+ define_method method do |*args|
28
+ result = super(*args)
29
+ self.notify_listeners(method, *args)
30
+ return result
31
+ end
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+
38
+ def add_listener(listener)
39
+ (@listeners ||=[]) << listener
40
+ end
41
+
42
+ def notify_listeners(method, *args)
43
+ (@listeners || []).each do |listener|
44
+ listener.public_send(:"whispered_#{method}", *args)
45
+ end
46
+ end
47
+ end
48
+
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: whispers
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Christopher Jaeger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-18 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Publish/Subscribe
14
+ email: cjaeger@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/whispers.rb
20
+ homepage: https://github.com/caJaeger/whispers
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.8.6
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.0.14
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Publish/Subscribe
44
+ test_files: []