ruby-event 1.0.0

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.
@@ -0,0 +1,7 @@
1
+ README.textile
2
+ Rakefile
3
+ lib/ruby-event.rb
4
+ lib/ruby-event/event.rb
5
+ lib/ruby-event/generator.rb
6
+ lib/testEvent.rb
7
+ Manifest
File without changes
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('ruby-event', '1.0.0') do |p|
6
+ p.description = 'simple library for event-based programming in ruby'
7
+ p.url = 'https://github.com/snuxoll/ruby-event/'
8
+ p.author = 'snuxoll'
9
+ p.ignore_pattern = ["tmp/*", "script/*"]
10
+ end
11
+
@@ -0,0 +1,10 @@
1
+ # ruby-event - ruby-event.rb
2
+ # Author :: Stefan Nuxoll
3
+ # License :: BSD License
4
+ # Copyright :: Copyright (C) 2009 Stefan Nuxoll
5
+ module RubyEvent
6
+ require 'ruby-event/event'
7
+ require 'ruby-event/generator'
8
+ end
9
+
10
+ Object.extend(RubyEvent::Generator)
@@ -0,0 +1,69 @@
1
+ # ruby-event - event.rb
2
+ # Author :: Stefan Nuxoll
3
+ # License :: BSD License
4
+ # Copyright :: Copyright (C) 2009 Stefan Nuxoll
5
+
6
+ require 'thread'
7
+
8
+ module RubyEvent
9
+
10
+ class Event
11
+
12
+ # Creates a new instance of event, optionally passing in an already created
13
+ # array of handlers for the event
14
+ def initialize(handlers = [], named_handlers = {})
15
+ @handlers = handlers
16
+ @named_handlers = named_handlers
17
+
18
+ @handlers_lock = Mutex.new
19
+ @named_handlers_lock = Mutex.new
20
+ end
21
+
22
+ # Returns a new Event object with a new handler added,
23
+ def +(handler)
24
+ @handlers_lock.synchronize do
25
+ @handlers << handler
26
+ end
27
+ end
28
+
29
+ # Creates a new named handler (you can unregister these later without
30
+ # affecting other handlers)
31
+ def subscribe(name, &block)
32
+ @named_handlers_lock.synchronize do
33
+ @named_handlers[name] = block
34
+ end
35
+ end
36
+
37
+ # Removes a named handler from the event
38
+ def unsubscribe(name)
39
+ @named_handlers_lock.synchronize do
40
+ @named_handlers.delete(name)
41
+ end
42
+ end
43
+
44
+ # Calls all of the handlers for the events, with the given sender and set
45
+ # of arguments.
46
+ def call(sender, args)
47
+ # Make sure we don't get surprised with new friends while we're calling
48
+ # the handlers
49
+ named_handlers = @named_handlers
50
+ handlers = @handlers
51
+
52
+ named_handlers.each do |name, handler|
53
+ handler.call(sender, *args)
54
+ end
55
+ handlers.each do |handler|
56
+ handler.call(sender, *args)
57
+ end
58
+ end
59
+
60
+ # Clears the list of anonymous handlers
61
+ def clear!
62
+ @handlers_lock.synchronize do
63
+ @handlers = []
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,50 @@
1
+ # ruby-event - generator.rb
2
+ # Author :: Stefan Nuxoll
3
+ # License :: BSD License
4
+ # Copyright :: Copyright (C) 2009 Stefan Nuxoll
5
+
6
+ module RubyEvent
7
+ module Generator
8
+
9
+ # Constructs the methods and objects for an event automatically
10
+ #
11
+ # Example:
12
+ # event :data_received
13
+ def event(event_name)
14
+ self.class_eval <<-EOT
15
+
16
+ def #{event_name}(*args, &block)
17
+ _ensure_events
18
+ if not @_events["#{event_name}"]
19
+ @_events["#{event_name}"] = RubyEvent::Event.new
20
+ end
21
+ if args != []
22
+ @_events["#{event_name}"].call(self, args)
23
+ else
24
+ if block
25
+ #{event_name} + block
26
+ else
27
+ @_events["#{event_name}"]
28
+ end
29
+ end
30
+ end
31
+
32
+ def #{event_name}=(event)
33
+ _ensure_events
34
+ if RubyEvent::Event === event
35
+ @_events["#{event_name}"] = event
36
+ end
37
+ end
38
+
39
+ def _ensure_events
40
+ if not @_events
41
+ @_events = {}
42
+ end
43
+ end
44
+
45
+ private :_ensure_events
46
+ EOT
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,17 @@
1
+ require 'ruby-event'
2
+
3
+ class Comp
4
+ attr_reader :message
5
+
6
+ event :send_my_message
7
+
8
+ def triggerEvent(message)
9
+ send_my_message(message)
10
+ end
11
+ end
12
+
13
+ child = Comp.new
14
+
15
+ child.send_my_message + lambda{|a, b| puts a.class.to_s; puts b}
16
+
17
+ child.triggerEvent("HEY ASSHOLE")
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{ruby-event}
5
+ s.version = "1.0.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["snuxoll"]
9
+ s.date = %q{2011-03-29}
10
+ s.description = %q{simple library for event-based programming in ruby}
11
+ s.email = %q{}
12
+ s.extra_rdoc_files = ["README.textile", "lib/ruby-event.rb", "lib/ruby-event/event.rb", "lib/ruby-event/generator.rb", "lib/testEvent.rb"]
13
+ s.files = ["README.textile", "Rakefile", "lib/ruby-event.rb", "lib/ruby-event/event.rb", "lib/ruby-event/generator.rb", "lib/testEvent.rb", "Manifest", "ruby-event.gemspec"]
14
+ s.homepage = %q{https://github.com/snuxoll/ruby-event/}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Ruby-event", "--main", "README.textile"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{ruby-event}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{simple library for event-based programming in ruby}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ else
27
+ end
28
+ else
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-event
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - snuxoll
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-29 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: simple library for event-based programming in ruby
23
+ email: ""
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.textile
30
+ - lib/ruby-event.rb
31
+ - lib/ruby-event/event.rb
32
+ - lib/ruby-event/generator.rb
33
+ - lib/testEvent.rb
34
+ files:
35
+ - README.textile
36
+ - Rakefile
37
+ - lib/ruby-event.rb
38
+ - lib/ruby-event/event.rb
39
+ - lib/ruby-event/generator.rb
40
+ - lib/testEvent.rb
41
+ - Manifest
42
+ - ruby-event.gemspec
43
+ has_rdoc: true
44
+ homepage: https://github.com/snuxoll/ruby-event/
45
+ licenses: []
46
+
47
+ post_install_message:
48
+ rdoc_options:
49
+ - --line-numbers
50
+ - --inline-source
51
+ - --title
52
+ - Ruby-event
53
+ - --main
54
+ - README.textile
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 11
72
+ segments:
73
+ - 1
74
+ - 2
75
+ version: "1.2"
76
+ requirements: []
77
+
78
+ rubyforge_project: ruby-event
79
+ rubygems_version: 1.3.7
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: simple library for event-based programming in ruby
83
+ test_files: []
84
+