win32-event 0.5.1 → 0.5.2
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/CHANGES +6 -0
- data/README +28 -29
- data/Rakefile +18 -9
- data/lib/win32/event.rb +133 -133
- data/test/test_win32_event.rb +95 -92
- data/win32-event.gemspec +22 -23
- metadata +35 -10
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.5.2 - 21-Apr-2010
|
2
|
+
* Updated the gemspec, adding some gem building tasks, and removed the
|
3
|
+
inline gem building code from the gemspec itself.
|
4
|
+
* Added test-unit 2 as a development dependency and made some minor
|
5
|
+
updates to the test suite.
|
6
|
+
|
1
7
|
== 0.5.1 - 6-Aug-2009
|
2
8
|
* License changed to Artistic 2.0.
|
3
9
|
* Some gemspec updates, including the addition of a license and an update
|
data/README
CHANGED
@@ -1,52 +1,51 @@
|
|
1
1
|
== Description
|
2
|
-
|
2
|
+
Interface to MS Windows Event objects.
|
3
3
|
|
4
4
|
== Prerequsites
|
5
|
-
|
5
|
+
Requires the win32-ipc library.
|
6
6
|
|
7
7
|
== Installation
|
8
|
-
|
9
|
-
rake install
|
8
|
+
gem install win32-event
|
10
9
|
|
11
10
|
== Synopsis
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
Win32::Event.new("Foo") do |event|
|
12
|
+
event.set
|
13
|
+
# Do stuff
|
14
|
+
event.reset
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
e2 = Win32::Event.open("Bar")
|
18
|
+
# Do stuff
|
19
|
+
e2.close
|
21
20
|
|
22
21
|
== Documentation
|
23
|
-
|
24
|
-
|
22
|
+
The event.rb file contains inline RDoc documentation. If you installed
|
23
|
+
this file as a gem, then you have the docs.
|
25
24
|
|
26
25
|
== Notes
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
The Event class is a subclass of Win32::Ipc (win32-ipc). This library
|
27
|
+
require's the win32-ipc library internally (you don't need to explicitly
|
28
|
+
call it).
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
A PulseEvent() wrapper is intentionally omitted. From the MSDN web site:
|
31
|
+
"This function is unreliable and should not be used. It exists mainly for
|
32
|
+
backward compatibility."
|
34
33
|
|
35
34
|
== Acknowledgements
|
36
|
-
|
37
|
-
|
35
|
+
The Win32::Event Perl module by Chris Madsen was used as a general
|
36
|
+
guideline for developing the API.
|
38
37
|
|
39
38
|
== Known Bugs
|
40
|
-
|
41
|
-
|
39
|
+
None that I'm aware of. Please submit any bug reports to the project page
|
40
|
+
at http://www.rubyforge.org/projects/win32utils.
|
42
41
|
|
43
42
|
== Copyright
|
44
|
-
|
45
|
-
|
43
|
+
(C) 2003-2010 Daniel J. Berger
|
44
|
+
All Rights Reserved
|
46
45
|
|
47
46
|
== License
|
48
|
-
|
47
|
+
Artistic 2.0
|
49
48
|
|
50
49
|
== Author
|
51
|
-
|
52
|
-
|
50
|
+
Park Heesob
|
51
|
+
Daniel J. Berger
|
data/Rakefile
CHANGED
@@ -3,17 +3,26 @@ require 'rake/testtask'
|
|
3
3
|
require 'rbconfig'
|
4
4
|
include Config
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
namespace 'gem' do
|
7
|
+
desc 'Remove existing .gem file from the current directory'
|
8
|
+
task :clean do
|
9
|
+
Dir['*.gem'].each{ |f| File.delete(f) }
|
10
|
+
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
desc 'Create the win32-event gem'
|
13
|
+
task :create do
|
14
|
+
spec = eval(IO.read('win32-event.gemspec'))
|
15
|
+
Gem::Builder.new(spec).build
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Install the win32-event gem'
|
19
|
+
task :install => [:clean, :create] do
|
20
|
+
file = Dir['*.gem'].first
|
21
|
+
sh "gem install #{file}"
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
16
25
|
Rake::TestTask.new do |t|
|
17
|
-
|
18
|
-
|
26
|
+
t.verbose = true
|
27
|
+
t.warning = true
|
19
28
|
end
|
data/lib/win32/event.rb
CHANGED
@@ -3,163 +3,163 @@ require 'win32/ipc'
|
|
3
3
|
# The Win32 module serves as a namespace only.
|
4
4
|
module Win32
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
# The Event class encapsulates Windows event objects.
|
7
|
+
class Event < Ipc
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
# This is the error raised if any of the Event methods fail.
|
10
|
+
class Error < StandardError; end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
extend Windows::Synchronize
|
13
|
+
extend Windows::Error
|
14
|
+
extend Windows::Handle
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
# The version of the win32-event library
|
17
|
+
VERSION = '0.5.2'
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
# The name of the Event object.
|
20
|
+
#
|
21
|
+
attr_reader :name
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
# Indicates whether or not the Event requires use of the ResetEvent()
|
24
|
+
# function set the state to nonsignaled.
|
25
|
+
#
|
26
|
+
attr_reader :manual_reset
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
# The initial state of the Event object. If true, the initial state
|
29
|
+
# is signaled. Otherwise, it is non-signaled.
|
30
|
+
#
|
31
|
+
attr_reader :initial_state
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
33
|
+
# Creates and returns new Event object. If +name+ is omitted, the
|
34
|
+
# Event object is created without a name, i.e. it's anonymous.
|
35
|
+
#
|
36
|
+
# If +name+ is provided and it already exists, then it is opened
|
37
|
+
# instead and the +manual_reset+ and +initial_state+ parameters are
|
38
|
+
# ignored.
|
39
|
+
#
|
40
|
+
# If the +man_reset+ parameter is set to +true+, then it creates an Event
|
41
|
+
# object which requires use of the Event#reset method in order to set the
|
42
|
+
# state to non-signaled. If this parameter is false (the default) then
|
43
|
+
# the system automatically resets the state to non-signaled after a
|
44
|
+
# single waiting thread has been released.
|
45
|
+
#
|
46
|
+
# If the +init_state+ parameter is +true+, the initial state of the
|
47
|
+
# Event object is signaled; otherwise, it is nonsignaled (the default).
|
48
|
+
#
|
49
|
+
# If the +inherit+ parameter is true, then processes created by this
|
50
|
+
# process will inherit the handle. Otherwise they will not.
|
51
|
+
#
|
52
|
+
# In block form this will automatically close the Event object at the
|
53
|
+
# end of the block.
|
54
|
+
#
|
55
|
+
def initialize(name=nil, man_reset=false, init_state=false, inherit=true)
|
56
|
+
@name = name
|
57
|
+
@manual_reset = man_reset
|
58
|
+
@initial_state = init_state
|
59
|
+
@inherit = inherit
|
60
60
|
|
61
|
-
|
62
|
-
|
61
|
+
manual_reset = man_reset ? 1 : 0
|
62
|
+
initial_state = init_state ? 1 : 0
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
# Used to prevent potential segfaults.
|
65
|
+
if name && !name.is_a?(String)
|
66
|
+
raise TypeError, 'name must be a string'
|
67
|
+
end
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
69
|
+
if inherit
|
70
|
+
sec = 0.chr * 12 # sizeof(SECURITY_ATTRIBUTES)
|
71
|
+
sec[0,4] = [12].pack('L')
|
72
|
+
sec[8,4] = [1].pack('L') # 1 == TRUE
|
73
|
+
else
|
74
|
+
sec = 0
|
75
|
+
end
|
76
76
|
|
77
|
-
|
77
|
+
handle = CreateEvent(sec, manual_reset, initial_state, name)
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
if handle == 0 || handle == INVALID_HANDLE_VALUE
|
80
|
+
raise Error, get_last_error
|
81
|
+
end
|
82
82
|
|
83
|
-
|
83
|
+
super(handle)
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
85
|
+
if block_given?
|
86
|
+
begin
|
87
|
+
yield self
|
88
|
+
ensure
|
89
|
+
close
|
90
|
+
end
|
92
91
|
end
|
92
|
+
end
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
94
|
+
# Open an existing Event by +name+. The +inherit+ argument sets whether
|
95
|
+
# or not the object was opened such that a process created by the
|
96
|
+
# CreateProcess() function (a Windows API function) can inherit the
|
97
|
+
# handle. The default is true.
|
98
|
+
#
|
99
|
+
# This method is essentially identical to Event.new, except that the
|
100
|
+
# options for manual_reset and initial_state cannot be set (since they
|
101
|
+
# are already set). Also, this method will raise an Event::Error if the
|
102
|
+
# event doesn't already exist.
|
103
|
+
#
|
104
|
+
# If you want "open or create" semantics, then use Event.new.
|
105
|
+
#
|
106
|
+
def self.open(name, inherit=true, &block)
|
107
|
+
if name && !name.is_a?(String)
|
108
|
+
raise TypeError, 'name must be a string'
|
109
|
+
end
|
110
110
|
|
111
|
-
|
111
|
+
bool = inherit ? 1 : 0
|
112
112
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
113
|
+
# This block of code is here strictly to force an error if the user
|
114
|
+
# tries to open an event that doesn't already exist.
|
115
|
+
begin
|
116
|
+
handle = OpenEvent(EVENT_ALL_ACCESS, bool, name)
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
self.new(name, false, false, inherit, &block)
|
118
|
+
if handle == 0 || handle == INVALID_HANDLE_VALUE
|
119
|
+
raise Error, get_last_error
|
120
|
+
end
|
121
|
+
ensure
|
122
|
+
CloseHandle(handle) if handle > 0
|
126
123
|
end
|
124
|
+
|
125
|
+
self.new(name, false, false, inherit, &block)
|
126
|
+
end
|
127
127
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
128
|
+
# Returns whether or not the object was opened such that a process
|
129
|
+
# created by the CreateProcess() function (a Windows API function) can
|
130
|
+
# inherit the handle. The default is true.
|
131
|
+
#
|
132
|
+
def inheritable?
|
133
|
+
@inherit
|
134
|
+
end
|
135
135
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
end
|
142
|
-
@signaled = false
|
136
|
+
# Sets the Event object to a non-signaled state.
|
137
|
+
#
|
138
|
+
def reset
|
139
|
+
unless ResetEvent(@handle)
|
140
|
+
raise Error, get_last_error
|
143
141
|
end
|
142
|
+
@signaled = false
|
143
|
+
end
|
144
144
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
end
|
151
|
-
@signaled = true
|
145
|
+
# Sets the Event object to a signaled state.
|
146
|
+
#
|
147
|
+
def set
|
148
|
+
unless SetEvent(@handle)
|
149
|
+
raise Error, get_last_error
|
152
150
|
end
|
151
|
+
@signaled = true
|
152
|
+
end
|
153
153
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
154
|
+
# Synonym for Event#reset if +bool+ is false, or Event#set
|
155
|
+
# if +bool+ is true.
|
156
|
+
#
|
157
|
+
def signaled=(bool)
|
158
|
+
if bool
|
159
|
+
set
|
160
|
+
else
|
161
|
+
reset
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
165
|
end
|
data/test/test_win32_event.rb
CHANGED
@@ -4,118 +4,121 @@
|
|
4
4
|
# Test suite for the win32-event library. This test should be run
|
5
5
|
# via the 'rake test' task.
|
6
6
|
#####################################################################
|
7
|
+
require 'rubygems'
|
8
|
+
gem 'test-unit'
|
9
|
+
|
7
10
|
require 'test/unit'
|
8
11
|
require 'win32/event'
|
9
12
|
include Win32
|
10
13
|
|
11
14
|
class TC_Win32Event < Test::Unit::TestCase
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
def setup
|
16
|
+
@event1 = Event.new
|
17
|
+
@event2 = Event.new("Foo")
|
18
|
+
@event3 = Event.new("Bar", true)
|
19
|
+
@event4 = Event.new("Baz", true, true)
|
20
|
+
@uni_event = Event.new("Ηελλας")
|
21
|
+
end
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
def test_version
|
24
|
+
assert_equal('0.5.2', Event::VERSION)
|
25
|
+
end
|
23
26
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
def test_constructor_errors
|
28
|
+
assert_raises(ArgumentError){ Event.new("Foo", true, false, true, 1) }
|
29
|
+
assert_raises(TypeError){ Event.new(1) }
|
30
|
+
end
|
28
31
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
def test_open
|
33
|
+
assert_respond_to(Event, :open)
|
34
|
+
assert_nothing_raised{ Event.open("Bar"){} }
|
35
|
+
assert_nothing_raised{ Event.open("Ηελλας"){} }
|
36
|
+
assert_nothing_raised{ Event.open("Bar", false) }
|
37
|
+
end
|
34
38
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
+
def test_open_expected_errors
|
40
|
+
assert_raises(ArgumentError){ Event.open("Bar", true, false){} }
|
41
|
+
assert_raises(Event::Error){ Event.open("Blah"){} }
|
42
|
+
assert_raises(TypeError){ Event.open(1){} }
|
43
|
+
end
|
39
44
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
assert_respond_to(@event1, :inheritable?)
|
45
|
-
assert_nothing_raised{ @event1.inheritable? }
|
45
|
+
def test_inheritable
|
46
|
+
@event1 = Event.open("Foo")
|
47
|
+
@event2 = Event.open("Baz", false)
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
assert_respond_to(@event1, :inheritable?)
|
50
|
+
assert_nothing_raised{ @event1.inheritable? }
|
51
|
+
assert_true(@event1.inheritable?)
|
52
|
+
assert_false(@event2.inheritable?)
|
53
|
+
end
|
50
54
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
55
|
+
def test_name
|
56
|
+
assert_respond_to(@event1, :name)
|
57
|
+
assert_nothing_raised{ @event1.name }
|
58
|
+
assert_nothing_raised{ @uni_event.name }
|
59
|
+
assert_nil(@event1.name)
|
60
|
+
assert_kind_of(String, @event2.name)
|
61
|
+
end
|
59
62
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
+
def test_initial_state
|
64
|
+
assert_respond_to(@event1, :initial_state)
|
65
|
+
assert_nothing_raised{ @event1.initial_state }
|
63
66
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
67
|
+
assert_false(@event1.initial_state)
|
68
|
+
assert_false(@event2.initial_state)
|
69
|
+
assert_false(@event3.initial_state)
|
70
|
+
assert_true(@event4.initial_state)
|
71
|
+
end
|
69
72
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
+
def test_manual_reset
|
74
|
+
assert_respond_to(@event1, :manual_reset)
|
75
|
+
assert_nothing_raised{ @event1.manual_reset }
|
73
76
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
77
|
+
assert_false(@event1.manual_reset)
|
78
|
+
assert_false(@event2.manual_reset)
|
79
|
+
assert_true(@event3.manual_reset)
|
80
|
+
assert_true(@event4.manual_reset)
|
81
|
+
end
|
79
82
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
83
|
+
def test_set
|
84
|
+
assert_respond_to(@event1, :set)
|
85
|
+
assert_nothing_raised{ @event1.set }
|
86
|
+
end
|
84
87
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
88
|
+
def test_is_signaled
|
89
|
+
event = Event.new
|
90
|
+
assert_respond_to(event, :signaled?)
|
91
|
+
assert_nothing_raised{ event.signaled? }
|
92
|
+
|
93
|
+
assert_false(event.signaled?)
|
94
|
+
event.set
|
95
|
+
assert_true(event.signaled?)
|
96
|
+
event.reset
|
97
|
+
assert_false(event.signaled?)
|
98
|
+
end
|
96
99
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
100
|
+
def test_reset
|
101
|
+
assert_respond_to(@event1, :reset)
|
102
|
+
assert_nothing_raised{ @event1.reset }
|
103
|
+
end
|
101
104
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
105
|
+
def test_close
|
106
|
+
event = Event.new
|
107
|
+
assert_respond_to(event, :close)
|
108
|
+
assert_nothing_raised{ event.close }
|
109
|
+
end
|
107
110
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
def teardown
|
112
|
+
@event1.close
|
113
|
+
@event2.close
|
114
|
+
@event3.close
|
115
|
+
@event4.close
|
116
|
+
@uni_event.close
|
114
117
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
118
|
+
@event1 = nil
|
119
|
+
@event2 = nil
|
120
|
+
@event3 = nil
|
121
|
+
@event4 = nil
|
122
|
+
@uni_event = nil
|
123
|
+
end
|
121
124
|
end
|
data/win32-event.gemspec
CHANGED
@@ -1,29 +1,28 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'win32-event'
|
5
|
+
spec.version = '0.5.2'
|
6
|
+
spec.author = 'Daniel J. Berger'
|
7
|
+
spec.license = 'Artistic 2.0'
|
8
|
+
spec.email = 'djberg96@gmail.com'
|
9
|
+
spec.homepage = 'http://www.rubyforge.org/projects/win32utils'
|
10
|
+
spec.platform = Gem::Platform::RUBY
|
11
|
+
spec.summary = 'Interface to MS Windows Event objects.'
|
12
|
+
spec.test_file = 'test/test_win32_event.rb'
|
13
|
+
spec.has_rdoc = true
|
14
|
+
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
17
|
+
spec.rubyforge_project = 'win32utils'
|
18
18
|
|
19
|
-
|
19
|
+
spec.add_dependency('win32-ipc', '>= 0.5.0')
|
20
|
+
spec.add_development_dependency('test-unit', '>= 2.0.7')
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
spec.description = <<-EOF
|
23
|
+
The win32-event library provides an interface to Windows event objects.
|
24
|
+
An event object is a synchronization object whose state can be explicitly
|
25
|
+
set to a signaled state. Event objects are useful in sending a signal to
|
26
|
+
a thread indicating that a particular event has occurred.
|
27
|
+
EOF
|
27
28
|
end
|
28
|
-
|
29
|
-
Gem::Builder.new(spec).build
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-event
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 5
|
8
|
+
- 2
|
9
|
+
version: 0.5.2
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Daniel J. Berger
|
@@ -9,20 +14,38 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-04-21 00:00:00 -06:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: win32-ipc
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 5
|
30
|
+
- 0
|
23
31
|
version: 0.5.0
|
24
|
-
|
25
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: test-unit
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 2
|
43
|
+
- 0
|
44
|
+
- 7
|
45
|
+
version: 2.0.7
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
description: " The win32-event library provides an interface to Windows event objects.\n An event object is a synchronization object whose state can be explicitly\n set to a signaled state. Event objects are useful in sending a signal to\n a thread indicating that a particular event has occurred.\n"
|
26
49
|
email: djberg96@gmail.com
|
27
50
|
executables: []
|
28
51
|
|
@@ -53,18 +76,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
53
76
|
requirements:
|
54
77
|
- - ">="
|
55
78
|
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
56
81
|
version: "0"
|
57
|
-
version:
|
58
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
83
|
requirements:
|
60
84
|
- - ">="
|
61
85
|
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
62
88
|
version: "0"
|
63
|
-
version:
|
64
89
|
requirements: []
|
65
90
|
|
66
91
|
rubyforge_project: win32utils
|
67
|
-
rubygems_version: 1.3.
|
92
|
+
rubygems_version: 1.3.6
|
68
93
|
signing_key:
|
69
94
|
specification_version: 3
|
70
95
|
summary: Interface to MS Windows Event objects.
|