ruby-event 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+