win32-clipboard 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +11 -0
- data/Rakefile +6 -2
- data/examples/clipboard_test.rb +2 -6
- data/lib/win32/clipboard.rb +242 -18
- data/test/test_clipboard.rb +50 -10
- data/win32-clipboard.gemspec +24 -19
- metadata +8 -9
data/CHANGES
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 0.5.0 - 24-Apr-2009
|
2
|
+
* Added the Clipboard.notify_change method, which notifies you if any changes
|
3
|
+
have been made to the clipboard.
|
4
|
+
* Added support for copying file lists, bitmaps and Windows metafiles.
|
5
|
+
* Added the Clipboard.clear alias for Clipboard.empty
|
6
|
+
* The previous documentation for the Clipboard.format_available? method was
|
7
|
+
misleading. It has been corrected.
|
8
|
+
* Added rdoc for modules, classes and constants, and added some inline
|
9
|
+
code examples for some methods.
|
10
|
+
* Gemspec update for handling a deprecated method.
|
11
|
+
|
1
12
|
== 0.4.4 - 26-Aug-2008
|
2
13
|
* Some internal refactoring to ensure that the clipboard is closed on failure
|
3
14
|
in a more robust fashion.
|
data/Rakefile
CHANGED
@@ -1,20 +1,24 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
3
|
|
4
|
-
desc "Install the win32-clipboard
|
4
|
+
desc "Install the win32-clipboard library (non-gem)"
|
5
5
|
task :install do
|
6
6
|
dest = File.join(Config::CONFIG['sitelibdir'], 'win32')
|
7
7
|
Dir.mkdir(dest) unless File.exists? dest
|
8
8
|
cp 'lib/win32/clipboard.rb', dest, :verbose => true
|
9
9
|
end
|
10
10
|
|
11
|
-
desc "Install the win32-clipboard
|
11
|
+
desc "Install the win32-clipboard library as a gem"
|
12
12
|
task :install_gem do
|
13
13
|
ruby 'win32-clipboard.gemspec'
|
14
14
|
file = Dir["*.gem"].first
|
15
15
|
sh "gem install #{file}"
|
16
16
|
end
|
17
17
|
|
18
|
+
desc "Run the example program"
|
19
|
+
task :example do
|
20
|
+
sh "ruby -Ilib examples/clipboard_test.rb"
|
21
|
+
|
18
22
|
Rake::TestTask.new do |t|
|
19
23
|
t.warning = true
|
20
24
|
t.verbose = true
|
data/examples/clipboard_test.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
##########################################################################
|
2
2
|
# clipboard_test.rb (win32-clipboard)
|
3
3
|
#
|
4
|
-
# Generic test script for those without
|
5
|
-
# general futzing.
|
4
|
+
# Generic test script for those without Test::Unit installed, or for
|
5
|
+
# general futzing. You can run this example via the 'rake example' task.
|
6
6
|
##########################################################################
|
7
|
-
Dir.chdir('..') if File.basename(Dir.pwd) == 'examples'
|
8
|
-
$LOAD_PATH.unshift(Dir.pwd)
|
9
|
-
$LOAD_PATH.unshift(Dir.pwd + '/lib')
|
10
|
-
|
11
7
|
require "win32/clipboard"
|
12
8
|
require "pp"
|
13
9
|
include Win32
|
data/lib/win32/clipboard.rb
CHANGED
@@ -1,31 +1,72 @@
|
|
1
1
|
require 'windows/clipboard'
|
2
2
|
require 'windows/memory'
|
3
3
|
require 'windows/error'
|
4
|
+
require 'windows/shell'
|
5
|
+
require 'windows/library'
|
6
|
+
require 'windows/window'
|
4
7
|
require 'windows/msvcrt/buffer'
|
8
|
+
require 'windows/gdi/metafile'
|
9
|
+
require 'windows/window/message'
|
10
|
+
require 'windows/window/classes'
|
5
11
|
|
12
|
+
# The Win32 module serves as a namespace only.
|
6
13
|
module Win32
|
14
|
+
# The Clipboard class encapsulates functions that relate to the MS Windows
|
15
|
+
# clipboard.
|
7
16
|
class Clipboard
|
17
|
+
# The Clipboard::Error class is raised if any of the Win32::Clipboard
|
18
|
+
# methods should fail.
|
8
19
|
class Error < StandardError; end
|
9
20
|
|
10
21
|
include Windows::Clipboard
|
11
22
|
include Windows::Memory
|
12
23
|
include Windows::Error
|
24
|
+
include Windows::Shell
|
25
|
+
include Windows::Library
|
26
|
+
include Windows::Window
|
13
27
|
include Windows::MSVCRT::Buffer
|
28
|
+
include Windows::GDI::MetaFile
|
29
|
+
include Windows::Window::Message
|
30
|
+
include Windows::Window::Classes
|
14
31
|
|
15
32
|
extend Windows::Clipboard
|
16
33
|
extend Windows::Memory
|
17
34
|
extend Windows::Error
|
35
|
+
extend Windows::Shell
|
36
|
+
extend Windows::Library
|
37
|
+
extend Windows::Window
|
18
38
|
extend Windows::MSVCRT::Buffer
|
39
|
+
extend Windows::GDI::MetaFile
|
40
|
+
extend Windows::Window::Message
|
41
|
+
extend Windows::Window::Classes
|
19
42
|
|
20
|
-
|
43
|
+
# The version of this library
|
44
|
+
VERSION = '0.5.0'
|
21
45
|
|
22
|
-
# Clipboard
|
23
|
-
|
24
|
-
|
46
|
+
# Clipboard formats
|
47
|
+
|
48
|
+
# Text
|
49
|
+
TEXT = CF_TEXT
|
50
|
+
OEMTEXT = CF_OEMTEXT
|
25
51
|
UNICODETEXT = CF_UNICODETEXT
|
26
52
|
|
27
|
-
#
|
28
|
-
|
53
|
+
# Images
|
54
|
+
DIB = CF_DIB
|
55
|
+
BITMAP = CF_BITMAP
|
56
|
+
|
57
|
+
# Metafiles
|
58
|
+
ENHMETAFILE = CF_ENHMETAFILE
|
59
|
+
|
60
|
+
# Files
|
61
|
+
HDROP = CF_HDROP
|
62
|
+
|
63
|
+
# Sets the clipboard contents to the data that you specify. You may
|
64
|
+
# optionally specify a clipboard format. The default is Clipboard::TEXT.
|
65
|
+
#
|
66
|
+
# Example:
|
67
|
+
#
|
68
|
+
# # Put the string 'hello' on the clipboard
|
69
|
+
# Win32::Clipboard.set_data('hello')
|
29
70
|
#
|
30
71
|
def self.set_data(clip_data, format = TEXT)
|
31
72
|
self.open
|
@@ -59,25 +100,51 @@ module Win32
|
|
59
100
|
# specified, it will attempt to retrieve the data in that format. The
|
60
101
|
# default is Clipboard::TEXT.
|
61
102
|
#
|
62
|
-
# If there is no data in the clipboard
|
103
|
+
# If there is no data in the clipboard, or data is available but the
|
104
|
+
# format doesn't match the data, then an empty string is returned.
|
105
|
+
#
|
106
|
+
# Examples:
|
107
|
+
#
|
108
|
+
# # Get some plain text
|
109
|
+
# Win32::Clipboard.data # => e.g. 'hello'
|
110
|
+
#
|
111
|
+
# # Get a list of files copied from the Windows Explorer window
|
112
|
+
# Win32::Clipboard.data(Clipboard::HDROP) # => ['foo.rb', 'bar.rb']
|
113
|
+
#
|
114
|
+
# # Get a bitmap and write it to another file
|
115
|
+
# File.open('bitmap_copy', 'wb'){ |fh|
|
116
|
+
# fh.write Win32::Clipboard.data(Clipboard::DIB)
|
117
|
+
# }
|
63
118
|
#
|
64
119
|
def self.data(format = TEXT)
|
65
120
|
begin
|
66
121
|
self.open
|
67
|
-
|
122
|
+
if IsClipboardFormatAvailable(format)
|
123
|
+
handle = GetClipboardData(format)
|
124
|
+
case format
|
125
|
+
when TEXT, OEMTEXT, UNICODETEXT
|
126
|
+
clip_data = 0.chr * GlobalSize(handle)
|
127
|
+
memcpy(clip_data, handle, clip_data.size)
|
128
|
+
clip_data.strip!
|
129
|
+
when HDROP
|
130
|
+
clip_data = get_file_list(handle)
|
131
|
+
when ENHMETAFILE
|
132
|
+
clip_data = get_metafile_data(handle)
|
133
|
+
when DIB, BITMAP
|
134
|
+
clip_data = get_image_data(handle)
|
135
|
+
else
|
136
|
+
raise Error, 'format not supported'
|
137
|
+
end
|
138
|
+
else
|
139
|
+
clip_data = ''
|
140
|
+
end
|
68
141
|
ensure
|
69
142
|
self.close
|
70
143
|
end
|
71
144
|
|
72
|
-
|
145
|
+
clip_data
|
73
146
|
end
|
74
147
|
|
75
|
-
# Singleton aliases
|
76
|
-
#
|
77
|
-
class << self
|
78
|
-
alias :get_data :data
|
79
|
-
end
|
80
|
-
|
81
148
|
# Empties the contents of the clipboard.
|
82
149
|
#
|
83
150
|
def self.empty
|
@@ -91,6 +158,13 @@ module Win32
|
|
91
158
|
self
|
92
159
|
end
|
93
160
|
|
161
|
+
# Singleton aliases
|
162
|
+
#
|
163
|
+
class << self
|
164
|
+
alias :get_data :data
|
165
|
+
alias :clear :empty
|
166
|
+
end
|
167
|
+
|
94
168
|
# Returns the number of different data formats currently on the
|
95
169
|
# clipboard.
|
96
170
|
#
|
@@ -135,6 +209,10 @@ module Win32
|
|
135
209
|
|
136
210
|
# Returns a hash of all the current formats, with the format number as
|
137
211
|
# the key and the format name as the value for that key.
|
212
|
+
#
|
213
|
+
# Example:
|
214
|
+
#
|
215
|
+
# Win32::Clipboard.formats # => {1 => nil, 49335 => "HTML Format"}
|
138
216
|
#
|
139
217
|
def self.formats
|
140
218
|
formats = {}
|
@@ -167,22 +245,168 @@ module Win32
|
|
167
245
|
# through 0xFFFF.
|
168
246
|
#
|
169
247
|
def self.register_format(format)
|
248
|
+
raise TypeError unless format.is_a?(String)
|
249
|
+
|
170
250
|
if RegisterClipboardFormat(format) == 0
|
171
251
|
error = "RegisterClipboardFormat() call failed: " + get_last_error
|
172
|
-
raise Error,
|
252
|
+
raise Error, error
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
# Sets up a notification loop that will call the provided block whenever
|
257
|
+
# there's a change to the clipboard.
|
258
|
+
#
|
259
|
+
# Example:
|
260
|
+
#
|
261
|
+
# Win32::Clipboard.notify_change{
|
262
|
+
# puts "There's been a change in the clipboard contents!"
|
263
|
+
# }
|
264
|
+
#--
|
265
|
+
# We skip the first notification because the very act of attaching the
|
266
|
+
# new window causes it to trigger once.
|
267
|
+
#
|
268
|
+
def self.notify_change(&block)
|
269
|
+
name = 'ruby-clipboard-' + Time.now.to_s
|
270
|
+
handle = CreateWindow('static', name, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
271
|
+
|
272
|
+
@first_notify = true
|
273
|
+
|
274
|
+
wnd_proc = Win32::API::Callback.new('LLLL', 'L') do |hwnd, umsg, wparam, lparam|
|
275
|
+
case umsg
|
276
|
+
when WM_DRAWCLIPBOARD
|
277
|
+
yield unless @first_notify
|
278
|
+
next_viewer = GetWindowLongPtr(hwnd, GWL_USERDATA)
|
279
|
+
if next_viewer != 0
|
280
|
+
PostMessage(next_viewer, umsg, wparam, lparam)
|
281
|
+
end
|
282
|
+
rv = 0
|
283
|
+
when WM_CHANGECBCHAIN
|
284
|
+
yield unless @first_notify
|
285
|
+
next_viewer = lparam if next_viewer == wparam
|
286
|
+
if next_viewer != 0
|
287
|
+
PostMessage(next_viewer, umsg, wparam, lparam)
|
288
|
+
end
|
289
|
+
rv = 0
|
290
|
+
else
|
291
|
+
rv = DefWindowProc(hwnd, umsg, wparam, lparam)
|
292
|
+
end
|
293
|
+
|
294
|
+
@first_notify = false
|
295
|
+
|
296
|
+
rv
|
297
|
+
end
|
298
|
+
|
299
|
+
old_wnd_proc = SetWindowLongPtr(handle, GWL_WNDPROC, wnd_proc.address)
|
300
|
+
next_viewer = SetClipboardViewer(handle)
|
301
|
+
|
302
|
+
SetWindowLongPtr(handle, GWL_USERDATA, next_viewer)
|
303
|
+
|
304
|
+
msg = 0.chr * 100
|
305
|
+
|
306
|
+
while true
|
307
|
+
while PeekMessage(msg, handle, 0, 0, 1)
|
308
|
+
TranslateMessage(msg)
|
309
|
+
DispatchMessage(msg)
|
310
|
+
end
|
311
|
+
sleep 0.1
|
173
312
|
end
|
174
313
|
end
|
175
314
|
|
176
315
|
private
|
177
316
|
|
317
|
+
# Opens the clipboard and prevents other applications from modifying
|
318
|
+
# the clipboard content until it is closed.
|
319
|
+
#
|
178
320
|
def self.open
|
179
|
-
if 0 == OpenClipboard(
|
321
|
+
if 0 == OpenClipboard(nil)
|
180
322
|
raise Error, "OpenClipboard() failed: " + get_last_error
|
181
323
|
end
|
182
324
|
end
|
183
325
|
|
326
|
+
# Close the clipboard
|
327
|
+
#
|
184
328
|
def self.close
|
185
329
|
CloseClipboard()
|
186
330
|
end
|
331
|
+
|
332
|
+
# Get data for enhanced metadata files
|
333
|
+
#
|
334
|
+
def self.get_metafile_data(handle)
|
335
|
+
buf_size = GetEnhMetaFileBits(handle, 0, nil)
|
336
|
+
buf = 0.chr * buf_size
|
337
|
+
GetEnhMetaFileBits(handle, buf_size, buf)
|
338
|
+
buf
|
339
|
+
end
|
340
|
+
|
341
|
+
# Get data for bitmap files
|
342
|
+
#
|
343
|
+
def self.get_image_data(handle)
|
344
|
+
buf = nil
|
345
|
+
bmi = 0.chr * 44 # BITMAPINFO
|
346
|
+
|
347
|
+
begin
|
348
|
+
address = GlobalLock(handle)
|
349
|
+
buf_size = GlobalSize(handle)
|
350
|
+
|
351
|
+
memcpy(bmi, address, bmi.length)
|
352
|
+
|
353
|
+
size = bmi[0,4].unpack('L').first # biSize
|
354
|
+
bit_count = bmi[14,2].unpack('S').first # biBitCount
|
355
|
+
compression = bmi[16,4].unpack('L').first # biCompression
|
356
|
+
size_image = bmi[20,4].unpack('L').first # biSizeImage
|
357
|
+
clr_used = bmi[32,4].unpack('L').first # biClrUsed
|
358
|
+
|
359
|
+
size_image = buf_size + 16 if size_image == 0
|
360
|
+
|
361
|
+
# Calculate the header size
|
362
|
+
case bit_count
|
363
|
+
when 1
|
364
|
+
table_size = 2
|
365
|
+
when 4
|
366
|
+
table_size = 16
|
367
|
+
when 8
|
368
|
+
table_size = 256
|
369
|
+
when 16, 32
|
370
|
+
if compression == 0
|
371
|
+
table_size = clr_used
|
372
|
+
elsif compression == 3
|
373
|
+
table_size = 3
|
374
|
+
else
|
375
|
+
raise Error, "invalid bit/compression combination"
|
376
|
+
end
|
377
|
+
when 24
|
378
|
+
table_size = clr_used
|
379
|
+
else
|
380
|
+
raise Error, "invalid bit count"
|
381
|
+
end # case
|
382
|
+
|
383
|
+
offset = 0x36 + (table_size * 4)
|
384
|
+
buf = 0.chr * buf_size
|
385
|
+
|
386
|
+
memcpy(buf, address, buf.size)
|
387
|
+
|
388
|
+
buf = "\x42\x4D" + [size_image].pack('L') + 0.chr * 4 + [offset].pack('L') + buf
|
389
|
+
ensure
|
390
|
+
GlobalUnlock(handle)
|
391
|
+
end
|
392
|
+
|
393
|
+
buf
|
394
|
+
end
|
395
|
+
|
396
|
+
# Get and return an array of file names that have been copied.
|
397
|
+
#
|
398
|
+
def self.get_file_list(handle)
|
399
|
+
array = []
|
400
|
+
count = DragQueryFile(handle, 0xFFFFFFFF, nil, 0)
|
401
|
+
|
402
|
+
0.upto(count - 1){ |i|
|
403
|
+
length = DragQueryFile(handle, i, nil, 0) + 1
|
404
|
+
buf = 0.chr * length
|
405
|
+
DragQueryFile(handle, i, buf, buf.length)
|
406
|
+
array << buf.strip
|
407
|
+
}
|
408
|
+
|
409
|
+
array
|
410
|
+
end
|
187
411
|
end
|
188
|
-
end
|
412
|
+
end
|
data/test/test_clipboard.rb
CHANGED
@@ -7,34 +7,48 @@
|
|
7
7
|
#
|
8
8
|
# You should run this test case via the 'rake test' task.
|
9
9
|
###########################################################################
|
10
|
+
require 'rubygems'
|
11
|
+
gem 'test-unit'
|
12
|
+
|
10
13
|
require 'win32/clipboard'
|
11
14
|
require 'test/unit'
|
12
15
|
include Win32
|
13
16
|
|
14
17
|
class TC_Win32_ClipBoard < Test::Unit::TestCase
|
15
18
|
def test_version
|
16
|
-
assert_equal('0.
|
19
|
+
assert_equal('0.5.0', Clipboard::VERSION)
|
17
20
|
end
|
18
21
|
|
19
22
|
def test_data
|
20
23
|
assert_respond_to(Clipboard, :data)
|
21
24
|
assert_nothing_raised{ Clipboard.data }
|
22
|
-
assert_kind_of(String, Clipboard.data
|
23
|
-
|
25
|
+
assert_kind_of(String, Clipboard.data)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_data_expected_errors
|
29
|
+
assert_raise(TypeError){ Clipboard.data('test') }
|
30
|
+
assert_raise(NameError){ Clipboard.data(CF_FOO) }
|
24
31
|
end
|
25
32
|
|
26
33
|
def test_get_data_alias
|
27
34
|
assert_respond_to(Clipboard, :get_data)
|
28
|
-
|
35
|
+
assert_true(Clipboard.method(:data) == Clipboard.method(:get_data))
|
29
36
|
end
|
30
37
|
|
31
38
|
def test_set_data
|
32
39
|
assert_respond_to(Clipboard, :set_data)
|
33
40
|
assert_nothing_raised{ Clipboard.set_data("foo") }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_set_data_unicode
|
34
44
|
assert_nothing_raised{
|
35
45
|
Clipboard.set_data('Ηελλας', Clipboard::UNICODETEXT)
|
36
46
|
}
|
37
|
-
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_set_data_expected_errors
|
50
|
+
assert_raise(ArgumentError){ Clipboard.set_data }
|
51
|
+
assert_raise(NameError){ Clipboard.set_data('foo', CF_FOO) }
|
38
52
|
end
|
39
53
|
|
40
54
|
def test_set_and_get_ascii
|
@@ -54,18 +68,28 @@ class TC_Win32_ClipBoard < Test::Unit::TestCase
|
|
54
68
|
assert_nothing_raised{ Clipboard.empty }
|
55
69
|
end
|
56
70
|
|
71
|
+
def test_clear_alias
|
72
|
+
assert_respond_to(Clipboard, :clear)
|
73
|
+
assert_true(Clipboard.method(:clear) == Clipboard.method(:empty))
|
74
|
+
end
|
75
|
+
|
57
76
|
def test_num_formats
|
58
77
|
assert_respond_to(Clipboard, :num_formats)
|
59
78
|
assert_nothing_raised{ Clipboard.num_formats }
|
60
79
|
assert_kind_of(Fixnum, Clipboard.num_formats)
|
61
80
|
end
|
62
81
|
|
63
|
-
|
64
|
-
|
82
|
+
def test_num_formats_expected_errors
|
83
|
+
assert_raise(ArgumentError){ Clipboard.num_formats(true) }
|
84
|
+
end
|
85
|
+
|
65
86
|
def test_register_format
|
66
|
-
assert_respond_to(Clipboard
|
87
|
+
assert_respond_to(Clipboard, :register_format)
|
67
88
|
assert_nothing_raised{ Clipboard.register_format('foo') }
|
68
|
-
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_register_format_expected_errors
|
92
|
+
assert_raises(TypeError){ Clipboard.register_format(1) }
|
69
93
|
end
|
70
94
|
|
71
95
|
def test_formats
|
@@ -74,21 +98,37 @@ class TC_Win32_ClipBoard < Test::Unit::TestCase
|
|
74
98
|
assert_kind_of(Hash, Clipboard.formats)
|
75
99
|
end
|
76
100
|
|
101
|
+
def test_formats_expected_errors
|
102
|
+
assert_raise(ArgumentError){ Clipboard.formats(true) }
|
103
|
+
end
|
104
|
+
|
77
105
|
def test_format_available
|
78
106
|
assert_respond_to(Clipboard, :format_available?)
|
79
107
|
assert_nothing_raised{ Clipboard.format_available?(1) }
|
108
|
+
assert_boolean(Clipboard.format_available?(1))
|
80
109
|
end
|
81
110
|
|
82
111
|
def test_format_name
|
83
112
|
assert_respond_to(Clipboard, :format_name)
|
84
113
|
assert_nothing_raised{ Clipboard.format_name(1) }
|
85
114
|
assert_nil(Clipboard.format_name(9999999))
|
86
|
-
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_format_name_expected_errors
|
118
|
+
assert_raise(TypeError){ Clipboard.format_name('foo') }
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_notify_change
|
122
|
+
assert_respond_to(Clipboard, :notify_change)
|
87
123
|
end
|
88
124
|
|
89
125
|
def test_constants
|
90
126
|
assert_not_nil(Clipboard::TEXT)
|
91
127
|
assert_not_nil(Clipboard::OEMTEXT)
|
92
128
|
assert_not_nil(Clipboard::UNICODETEXT)
|
129
|
+
assert_not_nil(Clipboard::BITMAP)
|
130
|
+
assert_not_nil(Clipboard::DIB)
|
131
|
+
assert_not_nil(Clipboard::HDROP)
|
132
|
+
assert_not_nil(Clipboard::ENHMETAFILE)
|
93
133
|
end
|
94
134
|
end
|
data/win32-clipboard.gemspec
CHANGED
@@ -1,27 +1,32 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
4
|
+
gem.name = 'win32-clipboard'
|
5
|
+
gem.version = '0.5.0'
|
6
|
+
gem.authors = ['Daniel J. Berger', 'Park Heesob']
|
7
|
+
gem.email = 'djberg96@gmail.com'
|
8
|
+
gem.homepage = 'http://www.rubyforge.org/projects/win32utils'
|
9
|
+
gem.platform = Gem::Platform::RUBY
|
10
|
+
gem.summary = 'A library for interacting with the Windows clipboard'
|
11
|
+
gem.test_file = 'test/test_clipboard.rb'
|
12
|
+
gem.has_rdoc = true
|
13
|
+
gem.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST']
|
14
|
+
gem.rubyforge_project = 'win32utils'
|
15
|
+
|
16
|
+
gem.add_dependency('windows-pr', '>= 1.0.3')
|
17
|
+
|
18
|
+
gem.description = "The win32-clipboard library provides an interface for
|
19
|
+
interacting with the Windows clipboard. It supports the ability to read
|
20
|
+
and write text, images, files, and Windows metafiles.".gsub(/\s+/, ' ')
|
21
|
+
|
22
|
+
files = Dir['doc/*'] + Dir['examples/*'] + Dir['lib/win32/*']
|
23
|
+
files += Dir['test/*'] + Dir['[A-Z]*']
|
24
|
+
files.delete_if{ |item| item.include?('CVS') }
|
25
|
+
|
26
|
+
gem.files = files
|
22
27
|
end
|
23
28
|
|
24
29
|
if $0 == __FILE__
|
25
|
-
Gem.manage_gems
|
30
|
+
Gem.manage_gems if Gem::RubyGemsVersion.to_f < 1.0
|
26
31
|
Gem::Builder.new(spec).build
|
27
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-clipboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2009-04-24 00:00:00 -06:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -21,9 +21,9 @@ dependencies:
|
|
21
21
|
requirements:
|
22
22
|
- - ">="
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: 0.
|
24
|
+
version: 1.0.3
|
25
25
|
version:
|
26
|
-
description:
|
26
|
+
description: The win32-clipboard library provides an interface for interacting with the Windows clipboard. It supports the ability to read and write text, images, files, and Windows metafiles.
|
27
27
|
email: djberg96@gmail.com
|
28
28
|
executables: []
|
29
29
|
|
@@ -38,15 +38,14 @@ files:
|
|
38
38
|
- lib/win32/clipboard.rb
|
39
39
|
- test/test_clipboard.rb
|
40
40
|
- CHANGES
|
41
|
-
- examples
|
42
|
-
- lib
|
43
41
|
- MANIFEST
|
44
42
|
- Rakefile
|
45
43
|
- README
|
46
|
-
- test
|
47
44
|
- win32-clipboard.gemspec
|
48
45
|
has_rdoc: true
|
49
46
|
homepage: http://www.rubyforge.org/projects/win32utils
|
47
|
+
licenses: []
|
48
|
+
|
50
49
|
post_install_message:
|
51
50
|
rdoc_options: []
|
52
51
|
|
@@ -67,9 +66,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
66
|
requirements: []
|
68
67
|
|
69
68
|
rubyforge_project: win32utils
|
70
|
-
rubygems_version: 1.2
|
69
|
+
rubygems_version: 1.3.2
|
71
70
|
signing_key:
|
72
|
-
specification_version:
|
71
|
+
specification_version: 3
|
73
72
|
summary: A library for interacting with the Windows clipboard
|
74
73
|
test_files:
|
75
74
|
- test/test_clipboard.rb
|