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.
- data/Manifest +7 -0
- data/README.textile +0 -0
- data/Rakefile +11 -0
- data/lib/ruby-event.rb +10 -0
- data/lib/ruby-event/event.rb +69 -0
- data/lib/ruby-event/generator.rb +50 -0
- data/lib/testEvent.rb +17 -0
- data/ruby-event.gemspec +30 -0
- metadata +84 -0
data/Manifest
ADDED
data/README.textile
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -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
|
+
|
data/lib/ruby-event.rb
ADDED
@@ -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
|
data/lib/testEvent.rb
ADDED
@@ -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")
|
data/ruby-event.gemspec
ADDED
@@ -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
|
+
|