win32-event 0.5.2 → 0.6.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/CHANGES +5 -0
- data/README +2 -2
- data/Rakefile +6 -8
- data/lib/win32/event.rb +69 -58
- data/test/test_win32_event.rb +182 -106
- data/win32-event.gemspec +4 -5
- metadata +57 -63
data/CHANGES
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 0.6.0 - 9-Jul-2012
|
2
|
+
* Converted code to use FFI.
|
3
|
+
* Now requires Ruby 1.9 or later.
|
4
|
+
* Updated and refactored tests.
|
5
|
+
|
1
6
|
== 0.5.2 - 21-Apr-2010
|
2
7
|
* Updated the gemspec, adding some gem building tasks, and removed the
|
3
8
|
inline gem building code from the gemspec itself.
|
data/README
CHANGED
@@ -37,10 +37,10 @@
|
|
37
37
|
|
38
38
|
== Known Bugs
|
39
39
|
None that I'm aware of. Please submit any bug reports to the project page
|
40
|
-
at
|
40
|
+
at https://github.com/djberg96/win32-event.
|
41
41
|
|
42
42
|
== Copyright
|
43
|
-
(C) 2003-
|
43
|
+
(C) 2003-2012 Daniel J. Berger
|
44
44
|
All Rights Reserved
|
45
45
|
|
46
46
|
== License
|
data/Rakefile
CHANGED
@@ -1,16 +1,12 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
|
-
require '
|
4
|
-
include Config
|
3
|
+
require 'rake/clean'
|
5
4
|
|
6
|
-
|
7
|
-
desc 'Remove existing .gem file from the current directory'
|
8
|
-
task :clean do
|
9
|
-
Dir['*.gem'].each{ |f| File.delete(f) }
|
10
|
-
end
|
5
|
+
CLEAN.include("**/*.gem", "**/*.rbc")
|
11
6
|
|
7
|
+
namespace 'gem' do
|
12
8
|
desc 'Create the win32-event gem'
|
13
|
-
task :create do
|
9
|
+
task :create => [:clean] do
|
14
10
|
spec = eval(IO.read('win32-event.gemspec'))
|
15
11
|
Gem::Builder.new(spec).build
|
16
12
|
end
|
@@ -26,3 +22,5 @@ Rake::TestTask.new do |t|
|
|
26
22
|
t.verbose = true
|
27
23
|
t.warning = true
|
28
24
|
end
|
25
|
+
|
26
|
+
task :default => :test
|
data/lib/win32/event.rb
CHANGED
@@ -5,31 +5,46 @@ module Win32
|
|
5
5
|
|
6
6
|
# The Event class encapsulates Windows event objects.
|
7
7
|
class Event < Ipc
|
8
|
-
|
8
|
+
ffi_lib :kernel32
|
9
|
+
|
10
|
+
class SecurityAttributes < FFI::Struct
|
11
|
+
layout(
|
12
|
+
:nLength, :ulong,
|
13
|
+
:lpSecurityDescriptor, :pointer,
|
14
|
+
:bInheritHandle, :bool
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
attach_function :CreateEvent, :CreateEventW, [:pointer, :bool, :bool, :buffer_in], :ulong
|
19
|
+
attach_function :OpenEvent, :OpenEventW, [:ulong, :bool, :buffer_in], :ulong
|
20
|
+
attach_function :SetEvent, [:ulong], :bool
|
21
|
+
attach_function :ResetEvent, [:ulong], :bool
|
22
|
+
|
23
|
+
private_class_method :CreateEvent, :OpenEvent, :SetEvent, :ResetEvent
|
24
|
+
|
25
|
+
INVALID_HANDLE_VALUE = 0xFFFFFFFF
|
26
|
+
EVENT_ALL_ACCESS = 0x1F0003
|
27
|
+
|
9
28
|
# This is the error raised if any of the Event methods fail.
|
10
29
|
class Error < StandardError; end
|
11
|
-
|
12
|
-
extend Windows::Synchronize
|
13
|
-
extend Windows::Error
|
14
|
-
extend Windows::Handle
|
15
|
-
|
30
|
+
|
16
31
|
# The version of the win32-event library
|
17
|
-
VERSION = '0.
|
18
|
-
|
19
|
-
# The name of the Event object.
|
32
|
+
VERSION = '0.6.0'
|
33
|
+
|
34
|
+
# The name of the Event object. The default is nil
|
20
35
|
#
|
21
36
|
attr_reader :name
|
22
|
-
|
37
|
+
|
23
38
|
# Indicates whether or not the Event requires use of the ResetEvent()
|
24
|
-
# function set the state to nonsignaled.
|
39
|
+
# function set the state to nonsignaled. The default is false
|
25
40
|
#
|
26
41
|
attr_reader :manual_reset
|
27
|
-
|
42
|
+
|
28
43
|
# The initial state of the Event object. If true, the initial state
|
29
|
-
# is signaled. Otherwise, it is non-signaled.
|
44
|
+
# is signaled. Otherwise, it is non-signaled. The default is false.
|
30
45
|
#
|
31
46
|
attr_reader :initial_state
|
32
|
-
|
47
|
+
|
33
48
|
# Creates and returns new Event object. If +name+ is omitted, the
|
34
49
|
# Event object is created without a name, i.e. it's anonymous.
|
35
50
|
#
|
@@ -48,49 +63,42 @@ module Win32
|
|
48
63
|
#
|
49
64
|
# If the +inherit+ parameter is true, then processes created by this
|
50
65
|
# process will inherit the handle. Otherwise they will not.
|
51
|
-
#
|
66
|
+
#
|
52
67
|
# In block form this will automatically close the Event object at the
|
53
68
|
# end of the block.
|
54
|
-
#
|
69
|
+
#
|
55
70
|
def initialize(name=nil, man_reset=false, init_state=false, inherit=true)
|
56
71
|
@name = name
|
57
72
|
@manual_reset = man_reset
|
58
73
|
@initial_state = init_state
|
59
74
|
@inherit = inherit
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
75
|
+
|
76
|
+
if name.is_a?(String)
|
77
|
+
if name.encoding.to_s != 'UTF-16LE'
|
78
|
+
name = name + 0.chr
|
79
|
+
name.encode!('UTF-16LE')
|
80
|
+
end
|
81
|
+
else
|
82
|
+
raise TypeError if name
|
67
83
|
end
|
68
84
|
|
69
85
|
if inherit
|
70
|
-
sec =
|
71
|
-
sec[
|
72
|
-
sec[
|
86
|
+
sec = SecurityAttributes.new
|
87
|
+
sec[:nLength] = SecurityAttributes.size
|
88
|
+
sec[:bInheritHandle] = inherit
|
73
89
|
else
|
74
|
-
sec =
|
90
|
+
sec = nil
|
75
91
|
end
|
76
|
-
|
92
|
+
|
77
93
|
handle = CreateEvent(sec, manual_reset, initial_state, name)
|
78
|
-
|
94
|
+
|
79
95
|
if handle == 0 || handle == INVALID_HANDLE_VALUE
|
80
|
-
raise
|
96
|
+
raise SystemCallError.new("CreateEvent", FFI.errno)
|
81
97
|
end
|
82
|
-
|
98
|
+
|
83
99
|
super(handle)
|
84
|
-
|
85
|
-
if block_given?
|
86
|
-
begin
|
87
|
-
yield self
|
88
|
-
ensure
|
89
|
-
close
|
90
|
-
end
|
91
|
-
end
|
92
100
|
end
|
93
|
-
|
101
|
+
|
94
102
|
# Open an existing Event by +name+. The +inherit+ argument sets whether
|
95
103
|
# or not the object was opened such that a process created by the
|
96
104
|
# CreateProcess() function (a Windows API function) can inherit the
|
@@ -104,27 +112,30 @@ module Win32
|
|
104
112
|
# If you want "open or create" semantics, then use Event.new.
|
105
113
|
#
|
106
114
|
def self.open(name, inherit=true, &block)
|
107
|
-
|
108
|
-
|
115
|
+
raise TypeError unless name.is_a?(String)
|
116
|
+
|
117
|
+
if name.encoding.to_s != 'UTF-16LE'
|
118
|
+
oname = name + 0.chr
|
119
|
+
oname.encode!('UTF-16LE')
|
120
|
+
else
|
121
|
+
oname = name.dup
|
109
122
|
end
|
110
|
-
|
111
|
-
bool = inherit ? 1 : 0
|
112
123
|
|
113
124
|
# This block of code is here strictly to force an error if the user
|
114
125
|
# tries to open an event that doesn't already exist.
|
115
126
|
begin
|
116
|
-
|
127
|
+
h = OpenEvent(EVENT_ALL_ACCESS, inherit, oname)
|
117
128
|
|
118
|
-
if
|
119
|
-
raise
|
129
|
+
if h == 0 || h == INVALID_HANDLE_VALUE
|
130
|
+
raise SystemCallError.new("OpenEvent", FFI.errno)
|
120
131
|
end
|
121
132
|
ensure
|
122
|
-
CloseHandle(
|
133
|
+
CloseHandle(h) if h
|
123
134
|
end
|
124
135
|
|
125
136
|
self.new(name, false, false, inherit, &block)
|
126
137
|
end
|
127
|
-
|
138
|
+
|
128
139
|
# Returns whether or not the object was opened such that a process
|
129
140
|
# created by the CreateProcess() function (a Windows API function) can
|
130
141
|
# inherit the handle. The default is true.
|
@@ -132,34 +143,34 @@ module Win32
|
|
132
143
|
def inheritable?
|
133
144
|
@inherit
|
134
145
|
end
|
135
|
-
|
146
|
+
|
136
147
|
# Sets the Event object to a non-signaled state.
|
137
|
-
#
|
148
|
+
#
|
138
149
|
def reset
|
139
150
|
unless ResetEvent(@handle)
|
140
|
-
raise
|
151
|
+
raise SystemCallError.new("ResetEvent", FFI.errno)
|
141
152
|
end
|
142
153
|
@signaled = false
|
143
154
|
end
|
144
|
-
|
155
|
+
|
145
156
|
# Sets the Event object to a signaled state.
|
146
|
-
#
|
157
|
+
#
|
147
158
|
def set
|
148
159
|
unless SetEvent(@handle)
|
149
|
-
raise
|
160
|
+
raise SystemCallError.new("SetEvent", FFI.errno)
|
150
161
|
end
|
151
162
|
@signaled = true
|
152
163
|
end
|
153
|
-
|
164
|
+
|
154
165
|
# Synonym for Event#reset if +bool+ is false, or Event#set
|
155
166
|
# if +bool+ is true.
|
156
|
-
#
|
167
|
+
#
|
157
168
|
def signaled=(bool)
|
158
169
|
if bool
|
159
170
|
set
|
160
171
|
else
|
161
172
|
reset
|
162
173
|
end
|
163
|
-
end
|
174
|
+
end
|
164
175
|
end
|
165
176
|
end
|
data/test/test_win32_event.rb
CHANGED
@@ -1,124 +1,200 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
#####################################################################
|
2
3
|
# test_win32_event.rb
|
3
4
|
#
|
4
5
|
# Test suite for the win32-event library. This test should be run
|
5
6
|
# via the 'rake test' task.
|
6
7
|
#####################################################################
|
7
|
-
require '
|
8
|
-
gem 'test-unit'
|
9
|
-
|
8
|
+
require 'test-unit'
|
10
9
|
require 'test/unit'
|
11
10
|
require 'win32/event'
|
12
11
|
include Win32
|
13
12
|
|
14
13
|
class TC_Win32Event < Test::Unit::TestCase
|
15
14
|
def setup
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
15
|
+
@event = Event.new
|
16
|
+
@unicode = "Ηελλας"
|
17
|
+
@ascii = "foo"
|
18
|
+
end
|
19
|
+
|
20
|
+
test "version is set to expected value" do
|
21
|
+
assert_equal('0.6.0', Event::VERSION)
|
22
|
+
end
|
23
|
+
|
24
|
+
test "constructor works with no arguments" do
|
25
|
+
assert_nothing_raised{ @event = Event.new }
|
26
|
+
assert_nil(@event.name)
|
27
|
+
end
|
28
|
+
|
29
|
+
test "constructor accepts an event name" do
|
30
|
+
assert_nothing_raised{ @event = Event.new(@ascii) }
|
31
|
+
end
|
32
|
+
|
33
|
+
test "constructor accepts a unicode event name" do
|
34
|
+
assert_nothing_raised{ @event = Event.new(@unicode) }
|
35
|
+
end
|
36
|
+
|
37
|
+
test "constructor accepts a maximum of four arguments" do
|
38
|
+
assert_raises(ArgumentError){ Event.new('Foo', true, false, true, 1) }
|
39
|
+
end
|
40
|
+
|
41
|
+
test "first argument to constructor must be a string" do
|
42
|
+
assert_raise(TypeError){ Event.new(1) }
|
43
|
+
end
|
44
|
+
|
45
|
+
test "open method basic functionality" do
|
46
|
+
event = Event.new(@ascii)
|
33
47
|
assert_respond_to(Event, :open)
|
34
|
-
assert_nothing_raised{ Event.open(
|
35
|
-
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
48
|
+
assert_nothing_raised{ @event = Event.open(@ascii) }
|
49
|
+
assert_equal(@ascii, @event.name)
|
50
|
+
event.close
|
51
|
+
end
|
52
|
+
|
53
|
+
test "open method accepts an inherit argument" do
|
54
|
+
event = Event.new(@ascii)
|
55
|
+
assert_nothing_raised{ @event = Event.open(@ascii, false) }
|
56
|
+
assert_false(@event.inheritable?)
|
57
|
+
event.close
|
58
|
+
end
|
59
|
+
|
60
|
+
test "open method works with unicode names" do
|
61
|
+
event = Event.new(@unicode)
|
62
|
+
assert_nothing_raised{ @event = Event.open(@unicode) }
|
63
|
+
assert_equal(@unicode, @event.name)
|
64
|
+
event.close
|
65
|
+
end
|
66
|
+
|
67
|
+
test "open method requires a name" do
|
68
|
+
assert_raise(ArgumentError){ Event.open }
|
69
|
+
end
|
70
|
+
|
71
|
+
test "open method requires a string argument as the first argument" do
|
42
72
|
assert_raises(TypeError){ Event.open(1){} }
|
43
73
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
event
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
assert_false(event.
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
end
|
110
|
-
|
74
|
+
|
75
|
+
test "open accepts a maximum of two arguments" do
|
76
|
+
assert_raise(ArgumentError){ Event.open('bogus', true, false) }
|
77
|
+
end
|
78
|
+
|
79
|
+
test "open method fails if name cannot be found" do
|
80
|
+
assert_raise(Errno::ENOENT){ Event.open('bogus') }
|
81
|
+
end
|
82
|
+
|
83
|
+
test "inheritable basic functionality" do
|
84
|
+
assert_respond_to(@event, :inheritable?)
|
85
|
+
assert_nothing_raised{ @event.inheritable? }
|
86
|
+
end
|
87
|
+
|
88
|
+
test "inheritable is true by default" do
|
89
|
+
assert_true(@event.inheritable?)
|
90
|
+
end
|
91
|
+
|
92
|
+
test "inheritable matches value passed to constructor" do
|
93
|
+
@event = Event.new(nil, false, false, false)
|
94
|
+
assert_false(@event.inheritable?)
|
95
|
+
end
|
96
|
+
|
97
|
+
test "name attribute basic functionality" do
|
98
|
+
assert_respond_to(@event, :name)
|
99
|
+
assert_nothing_raised{ @event.name }
|
100
|
+
end
|
101
|
+
|
102
|
+
test "name is nil by default" do
|
103
|
+
assert_nil(@event.name)
|
104
|
+
end
|
105
|
+
|
106
|
+
test "name is set to value specified in constructor" do
|
107
|
+
@event = Event.new(@ascii)
|
108
|
+
assert_equal(@ascii, @event.name)
|
109
|
+
end
|
110
|
+
|
111
|
+
test "name is set to unicode value specified in constructor" do
|
112
|
+
@event = Event.new(@unicode)
|
113
|
+
assert_equal(@unicode, @event.name)
|
114
|
+
end
|
115
|
+
|
116
|
+
test "initial_state basic functionality" do
|
117
|
+
assert_respond_to(@event, :initial_state)
|
118
|
+
assert_nothing_raised{ @event.initial_state }
|
119
|
+
assert_boolean(@event.initial_state)
|
120
|
+
end
|
121
|
+
|
122
|
+
test "initial_state is false by default" do
|
123
|
+
assert_false(@event.initial_state)
|
124
|
+
end
|
125
|
+
|
126
|
+
test "initial state matches value set in constructor" do
|
127
|
+
@event = Event.new(nil, false, true)
|
128
|
+
assert_true(@event.initial_state)
|
129
|
+
end
|
130
|
+
|
131
|
+
test "manual_reset basic functionality" do
|
132
|
+
assert_respond_to(@event, :manual_reset)
|
133
|
+
assert_nothing_raised{ @event.manual_reset }
|
134
|
+
assert_boolean(@event.manual_reset)
|
135
|
+
end
|
136
|
+
|
137
|
+
test "manual_reset is false by default" do
|
138
|
+
assert_false(@event.manual_reset)
|
139
|
+
end
|
140
|
+
|
141
|
+
test "manual reset matches value passed to constructor" do
|
142
|
+
event = Event.new(nil, true)
|
143
|
+
assert_true(event.manual_reset)
|
144
|
+
event.close
|
145
|
+
end
|
146
|
+
|
147
|
+
test "signaled? basic functionality" do
|
148
|
+
assert_respond_to(@event, :signaled?)
|
149
|
+
assert_nothing_raised{ @event.signaled? }
|
150
|
+
end
|
151
|
+
|
152
|
+
test "signaled? returns a boolean" do
|
153
|
+
assert_boolean(@event.signaled?)
|
154
|
+
end
|
155
|
+
|
156
|
+
test "set basic functionality" do
|
157
|
+
@event = Event.new
|
158
|
+
assert_respond_to(@event, :set)
|
159
|
+
assert_nothing_raised{ @event.set }
|
160
|
+
end
|
161
|
+
|
162
|
+
test "set puts event in signaled state" do
|
163
|
+
assert_false(@event.signaled?)
|
164
|
+
@event.set
|
165
|
+
assert_true(@event.signaled?)
|
166
|
+
end
|
167
|
+
|
168
|
+
test "reset basic functionality" do
|
169
|
+
assert_respond_to(@event, :reset)
|
170
|
+
assert_nothing_raised{ @event.reset }
|
171
|
+
end
|
172
|
+
|
173
|
+
test "reset sets signaled state to false" do
|
174
|
+
@event.set
|
175
|
+
assert_true(@event.signaled?)
|
176
|
+
@event.reset
|
177
|
+
assert_false(@event.signaled?)
|
178
|
+
end
|
179
|
+
|
180
|
+
test "close method basic functionality" do
|
181
|
+
assert_respond_to(@event, :close)
|
182
|
+
assert_nothing_raised{ @event.close }
|
183
|
+
end
|
184
|
+
|
185
|
+
test "calling close multiple times has no effect" do
|
186
|
+
assert_nothing_raised{ 5.times{ @event.close } }
|
187
|
+
end
|
188
|
+
|
189
|
+
test "ffi functions are private" do
|
190
|
+
assert_not_respond_to(Event, :CreateEvent)
|
191
|
+
assert_not_respond_to(Event, :OpenEvent)
|
192
|
+
assert_not_respond_to(Event, :SetEvent)
|
193
|
+
assert_not_respond_to(Event, :ResetEvent)
|
194
|
+
end
|
195
|
+
|
111
196
|
def teardown
|
112
|
-
@
|
113
|
-
@
|
114
|
-
@event3.close
|
115
|
-
@event4.close
|
116
|
-
@uni_event.close
|
117
|
-
|
118
|
-
@event1 = nil
|
119
|
-
@event2 = nil
|
120
|
-
@event3 = nil
|
121
|
-
@event4 = nil
|
122
|
-
@uni_event = nil
|
197
|
+
@event.close if @event
|
198
|
+
@event = nil
|
123
199
|
end
|
124
200
|
end
|
data/win32-event.gemspec
CHANGED
@@ -2,22 +2,21 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'win32-event'
|
5
|
-
spec.version = '0.
|
5
|
+
spec.version = '0.6.0'
|
6
6
|
spec.author = 'Daniel J. Berger'
|
7
7
|
spec.license = 'Artistic 2.0'
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
9
9
|
spec.homepage = 'http://www.rubyforge.org/projects/win32utils'
|
10
|
-
spec.platform = Gem::Platform::RUBY
|
11
10
|
spec.summary = 'Interface to MS Windows Event objects.'
|
12
11
|
spec.test_file = 'test/test_win32_event.rb'
|
13
|
-
spec.has_rdoc = true
|
14
12
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
15
13
|
|
16
14
|
spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
17
15
|
spec.rubyforge_project = 'win32utils'
|
16
|
+
spec.required_ruby_version = '> 1.9.0'
|
18
17
|
|
19
|
-
spec.add_dependency('win32-ipc', '>= 0.
|
20
|
-
spec.add_development_dependency('test-unit'
|
18
|
+
spec.add_dependency('win32-ipc', '>= 0.6.0')
|
19
|
+
spec.add_development_dependency('test-unit')
|
21
20
|
|
22
21
|
spec.description = <<-EOF
|
23
22
|
The win32-event library provides an interface to Windows event objects.
|
metadata
CHANGED
@@ -1,61 +1,60 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-event
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 5
|
8
|
-
- 2
|
9
|
-
version: 0.5.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Daniel J. Berger
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-07-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: win32-ipc
|
22
|
-
|
23
|
-
|
24
|
-
requirements:
|
25
|
-
- -
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
- 0
|
29
|
-
- 5
|
30
|
-
- 0
|
31
|
-
version: 0.5.0
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.6.0
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: test-unit
|
36
23
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.6.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: test-unit
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
46
38
|
type: :development
|
47
|
-
|
48
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: ! " The win32-event library provides an interface to Windows event
|
47
|
+
objects.\n An event object is a synchronization object whose state can be explicitly\n
|
48
|
+
\ set to a signaled state. Event objects are useful in sending a signal to\n a
|
49
|
+
thread indicating that a particular event has occurred.\n"
|
49
50
|
email: djberg96@gmail.com
|
50
51
|
executables: []
|
51
|
-
|
52
52
|
extensions: []
|
53
|
-
|
54
|
-
extra_rdoc_files:
|
53
|
+
extra_rdoc_files:
|
55
54
|
- README
|
56
55
|
- CHANGES
|
57
56
|
- MANIFEST
|
58
|
-
files:
|
57
|
+
files:
|
59
58
|
- CHANGES
|
60
59
|
- lib/win32/event.rb
|
61
60
|
- MANIFEST
|
@@ -63,35 +62,30 @@ files:
|
|
63
62
|
- README
|
64
63
|
- test/test_win32_event.rb
|
65
64
|
- win32-event.gemspec
|
66
|
-
has_rdoc: true
|
67
65
|
homepage: http://www.rubyforge.org/projects/win32utils
|
68
|
-
licenses:
|
66
|
+
licenses:
|
69
67
|
- Artistic 2.0
|
70
68
|
post_install_message:
|
71
69
|
rdoc_options: []
|
72
|
-
|
73
|
-
require_paths:
|
70
|
+
require_paths:
|
74
71
|
- lib
|
75
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
|
87
|
-
- 0
|
88
|
-
version: "0"
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>'
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.9.0
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
89
84
|
requirements: []
|
90
|
-
|
91
85
|
rubyforge_project: win32utils
|
92
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.8.24
|
93
87
|
signing_key:
|
94
88
|
specification_version: 3
|
95
89
|
summary: Interface to MS Windows Event objects.
|
96
|
-
test_files:
|
90
|
+
test_files:
|
97
91
|
- test/test_win32_event.rb
|