ruby_events 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/Rakefile +3 -3
  2. data/lib/ruby_events.rb +24 -13
  3. metadata +3 -3
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ require 'rake/testtask'
12
12
 
13
13
  spec = Gem::Specification.new do |s|
14
14
  s.name = 'ruby_events'
15
- s.version = '0.0.3'
15
+ s.version = '0.0.4'
16
16
  s.has_rdoc = true
17
17
  s.extra_rdoc_files = ['README.markdown']
18
18
  s.summary = 'A really simple event implementation that hooks into the Object class. Now all your objects can join in the fun of firing events!'
@@ -32,9 +32,9 @@ Rake::GemPackageTask.new(spec) do |p|
32
32
  end
33
33
 
34
34
  Rake::RDocTask.new do |rdoc|
35
- files =['README', 'LICENSE', 'lib/**/*.rb']
35
+ files =['README.markdown', 'lib/**/*.rb']
36
36
  rdoc.rdoc_files.add(files)
37
- rdoc.main = "README" # page to start on
37
+ rdoc.main = "README.markdown" # page to start on
38
38
  rdoc.title = "ruby_events Docs"
39
39
  rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
40
40
  rdoc.options << '--line-numbers'
data/lib/ruby_events.rb CHANGED
@@ -1,20 +1,26 @@
1
+ # The RubyEvents module contains the core logic used by the events firing class.
2
+ # All Object's are extended by default with an events accessor that is set to
3
+ # an instance of the RubyEvents::Events class. By calling the methods on this
4
+ # accessor, you can set up and listen to events or callbacks as fired by this
5
+ # class.
1
6
  module RubyEvents
2
7
  class Events
8
+ # Initialize the events class by instantiating the class methods we'll be
9
+ # using.
3
10
  def initialize(parent)
4
11
  @parent = parent
5
12
  @events = {}
6
13
  end
7
14
 
15
+ # Add a listener to the passed event type.
8
16
  def listen(event_type, &event)
9
17
  @events[event_type] = [] unless @events.has_key? event_type
10
18
  # TODO: Can we allow both block and an array of Proc's here?
11
- # events = [events] unless events.respond_to? :each
12
- # events.each do |event|
13
- # @events[event_type] << event
14
- # end
15
19
  @events[event_type] << event
16
20
  end
17
21
 
22
+ # Fire all registered listeners to the passed event, passing them the
23
+ # arguments as provided.
18
24
  def fire(event_type, *arguments)
19
25
  if @events.has_key?(event_type)
20
26
  @events[event_type].each do |event|
@@ -23,16 +29,19 @@ module RubyEvents
23
29
  end
24
30
  end
25
31
 
32
+ # Set an event to fire when passed method is called. This is useful for
33
+ # adding callbacks or events to built-in methods.
26
34
  def fire_on_method(method, event_type, &block)
27
35
  old_method = (method.to_s + '_event_old').to_sym
28
36
  if @parent && @parent.respond_to?(method) && !@parent.respond_to?(old_method)
29
- @parent.class.class_eval do
37
+ @parent = @parent.class
38
+ @parent.class_eval do
30
39
  alias_method old_method, method
31
40
  end
32
41
 
33
- # FIXME: Without the internet, this is all I could remember; there is
34
- # definitely a better way to do this, so please fix it!
35
- #
42
+ method = method.to_s
43
+ old_method = old_method.to_s
44
+
36
45
  # FIXME: We need to find a way to call the block that's been passed
37
46
  # so they can define the arguments they want to pass to the event.
38
47
  #
@@ -42,12 +51,13 @@ module RubyEvents
42
51
  #
43
52
  # Make sure the self.send is at the end, or we won't return what we
44
53
  # are supposed to.
45
- @parent.class.class_eval('def ' + method.to_s + '(*args); events.fire(:' + event_type.to_s + ', *args); self.send("' + old_method.to_s + '".to_sym, *args); end')
54
+ @parent.class_eval('def ' + method + '(*args); events.fire(:' + event_type + ', *args); self.send("' + old_method + '".to_sym, *args); end')
46
55
  else
47
56
  # TODO: Need to raise exception here.
48
57
  end
49
58
  end
50
59
 
60
+ # Remove a method from the listening queue.
51
61
  def remove(event_type, event)
52
62
  if @events.has_key?(event_type)
53
63
  @events[event_type].delete_if {|stored_event| stored_event == event}
@@ -56,12 +66,13 @@ module RubyEvents
56
66
  end
57
67
  end
58
68
 
69
+ # Extending the Object class with the events accessor.
59
70
  class Object
71
+ attr_writer :events
72
+
73
+ # Attribute reader for the events accessor. Returns a new instance of the
74
+ # events class if not defined, or the already defined class otherwise.
60
75
  def events
61
76
  @events || @events = RubyEvents::Events.new(self)
62
77
  end
63
-
64
- def events=(events)
65
- @events = events
66
- end
67
78
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nathan Kleyn
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-26 00:00:00 +01:00
17
+ date: 2010-04-29 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies: []
20
20