ruby-ole 1.2.4 → 1.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +6 -1
- data/Rakefile +4 -2
- data/lib/ole/file_system.rb +1 -1
- data/lib/ole/property_set.rb +3 -3
- data/lib/ole/storage.rb +7 -3
- data/lib/ole/support.rb +38 -24
- data/test/test_filesystem.rb +2 -2
- data/test/test_storage.rb +13 -1
- metadata +48 -41
data/ChangeLog
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
== 1.2.
|
1
|
+
== 1.2.5 / 2008-02-16
|
2
|
+
|
3
|
+
- Make all tests pass on ruby 1.9.
|
4
|
+
|
5
|
+
== 1.2.4 / 2008-01-09
|
2
6
|
|
3
7
|
- Make all tests pass on windows (issue #1).
|
4
8
|
- Make all tests pass on a power pc (running ubuntu).
|
9
|
+
- Property set convenience access functions.
|
5
10
|
|
6
11
|
== 1.2.3 / 2007-12-28
|
7
12
|
|
data/Rakefile
CHANGED
@@ -37,9 +37,11 @@ end
|
|
37
37
|
|
38
38
|
Rake::RDocTask.new do |t|
|
39
39
|
t.rdoc_dir = 'doc'
|
40
|
+
t.rdoc_files.include 'lib/**/*.rb'
|
41
|
+
t.rdoc_files.include 'README'
|
40
42
|
t.title = "#{PKG_NAME} documentation"
|
41
43
|
t.options += %w[--line-numbers --inline-source --tab-width 2]
|
42
|
-
t.
|
44
|
+
t.main = 'README'
|
43
45
|
end
|
44
46
|
|
45
47
|
spec = Gem::Specification.new do |s|
|
@@ -62,7 +64,7 @@ spec = Gem::Specification.new do |s|
|
|
62
64
|
|
63
65
|
s.has_rdoc = true
|
64
66
|
s.rdoc_options += [
|
65
|
-
'--main', '
|
67
|
+
'--main', 'README',
|
66
68
|
'--title', "#{PKG_NAME} documentation",
|
67
69
|
'--tab-width', '2'
|
68
70
|
]
|
data/lib/ole/file_system.rb
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
# need to implement some more IO functions on RangesIO, like #puts, #print
|
28
28
|
# etc, like AbstractOutputStream from zipfile.
|
29
29
|
#
|
30
|
-
# TODO
|
30
|
+
# = TODO
|
31
31
|
#
|
32
32
|
# - check Dir.mkdir, and File.open, and File.rename, to add in filename
|
33
33
|
# length checks (max 32 / 31 or something).
|
data/lib/ole/property_set.rb
CHANGED
@@ -121,7 +121,7 @@ module Ole
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def load_section_list str
|
124
|
-
@sections = str.scan(/.{#{Section::SIZE}}/m).map { |
|
124
|
+
@sections = str.scan(/.{#{Section::SIZE}}/m).map { |s| Section.new s, self }
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
@@ -159,8 +159,8 @@ module Ole
|
|
159
159
|
# maybe taking it one step further, i'd hide the section thing,
|
160
160
|
# and let you use composite keys, like
|
161
161
|
# propset[4, guid] eg in MAPI, and just propset.doc_author.
|
162
|
-
section = sections.find do |
|
163
|
-
|
162
|
+
section = sections.find do |s|
|
163
|
+
s.guid == Types::PropertySet::FMTID_SummaryInformation
|
164
164
|
end
|
165
165
|
return PropertySetSectionProxy.new(dirent, sections.index(section))
|
166
166
|
end
|
data/lib/ole/storage.rb
CHANGED
@@ -67,7 +67,7 @@ module Ole # :nodoc:
|
|
67
67
|
class FormatError < StandardError # :nodoc:
|
68
68
|
end
|
69
69
|
|
70
|
-
VERSION = '1.2.
|
70
|
+
VERSION = '1.2.5'
|
71
71
|
|
72
72
|
# options used at creation time
|
73
73
|
attr_reader :params
|
@@ -295,7 +295,7 @@ module Ole # :nodoc:
|
|
295
295
|
|
296
296
|
# now finally write the bbat, using a not resizable io.
|
297
297
|
# the mode here will be 'r', which allows write atm.
|
298
|
-
RangesIO.open(@io, :ranges => ranges) { |
|
298
|
+
RangesIO.open(@io, :ranges => ranges) { |f| f.write @bbat.to_s }
|
299
299
|
|
300
300
|
# this is the mbat. pad it out.
|
301
301
|
bbat_chain += [AllocationTable::AVAIL] * [109 - bbat_chain.length, 0].max
|
@@ -308,7 +308,7 @@ module Ole # :nodoc:
|
|
308
308
|
q = @bbat.block_size / 4
|
309
309
|
mbat_data += [AllocationTable::AVAIL] *((mbat_data.length / q.to_f).ceil * q - mbat_data.length)
|
310
310
|
ranges = @bbat.ranges((0...num_mbat_blocks).map { |i| @header.mbat_start + i })
|
311
|
-
RangesIO.open(@io, :ranges => ranges) { |
|
311
|
+
RangesIO.open(@io, :ranges => ranges) { |f| f.write mbat_data.pack('V*') }
|
312
312
|
end
|
313
313
|
|
314
314
|
# now seek back and write the header out
|
@@ -781,6 +781,10 @@ module Ole # :nodoc:
|
|
781
781
|
self.size = 0 unless @type == :root
|
782
782
|
@children = []
|
783
783
|
end
|
784
|
+
|
785
|
+
# to silence warnings. used for tree building at load time
|
786
|
+
# only.
|
787
|
+
@idx = nil
|
784
788
|
end
|
785
789
|
|
786
790
|
def open mode='r'
|
data/lib/ole/support.rb
CHANGED
@@ -27,17 +27,21 @@ class File # :nodoc:
|
|
27
27
|
end
|
28
28
|
|
29
29
|
class Symbol # :nodoc:
|
30
|
-
|
31
|
-
|
30
|
+
unless :x.respond_to? :to_proc
|
31
|
+
def to_proc
|
32
|
+
proc { |a| a.send self }
|
33
|
+
end
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
35
37
|
module Enumerable # :nodoc:
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
unless [].respond_to? :group_by
|
39
|
+
# 1.9 backport
|
40
|
+
def group_by
|
41
|
+
hash = Hash.new { |h, key| h[key] = [] }
|
42
|
+
each { |item| hash[yield(item)] << item }
|
43
|
+
hash
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
47
|
def sum initial=0
|
@@ -159,23 +163,21 @@ end
|
|
159
163
|
|
160
164
|
# can include File::Constants
|
161
165
|
class IO
|
162
|
-
BINARY = 0x4 unless defined?(BINARY)
|
163
|
-
|
164
166
|
# nabbed from rubinius, and modified
|
165
167
|
def self.parse_mode mode
|
166
168
|
ret = 0
|
167
169
|
|
168
|
-
case mode[0]
|
169
|
-
when
|
170
|
-
when
|
171
|
-
when
|
170
|
+
case mode[0, 1]
|
171
|
+
when 'r'; ret |= RDONLY
|
172
|
+
when 'w'; ret |= WRONLY | CREAT | TRUNC
|
173
|
+
when 'a'; ret |= WRONLY | CREAT | APPEND
|
172
174
|
else raise ArgumentError, "illegal access mode #{mode}"
|
173
175
|
end
|
174
176
|
|
175
177
|
(1...mode.length).each do |i|
|
176
|
-
case mode[i]
|
177
|
-
when
|
178
|
-
when
|
178
|
+
case mode[i, 1]
|
179
|
+
when '+'; ret = (ret & ~(RDONLY | WRONLY)) | RDWR
|
180
|
+
when 'b'; ret |= Mode::BINARY
|
179
181
|
else raise ArgumentError, "illegal access mode #{mode}"
|
180
182
|
end
|
181
183
|
end
|
@@ -184,6 +186,18 @@ class IO
|
|
184
186
|
end
|
185
187
|
|
186
188
|
class Mode
|
189
|
+
# ruby 1.9 defines binary as 0, which isn't very helpful.
|
190
|
+
# its 4 in rubinius. no longer using
|
191
|
+
#
|
192
|
+
# BINARY = 0x4 unless defined?(BINARY)
|
193
|
+
#
|
194
|
+
# for that reason, have my own constants module here
|
195
|
+
module Constants
|
196
|
+
include File::Constants
|
197
|
+
BINARY = 0x4
|
198
|
+
end
|
199
|
+
|
200
|
+
include Constants
|
187
201
|
NAMES = %w[rdonly wronly rdwr creat trunc append binary]
|
188
202
|
|
189
203
|
attr_reader :flags
|
@@ -194,28 +208,28 @@ class IO
|
|
194
208
|
end
|
195
209
|
|
196
210
|
def writeable?
|
197
|
-
#(@flags &
|
198
|
-
(@flags & 0x3) !=
|
211
|
+
#(@flags & RDONLY) == 0
|
212
|
+
(@flags & 0x3) != RDONLY
|
199
213
|
end
|
200
214
|
|
201
215
|
def readable?
|
202
|
-
(@flags &
|
216
|
+
(@flags & WRONLY) == 0
|
203
217
|
end
|
204
218
|
|
205
219
|
def truncate?
|
206
|
-
(@flags &
|
220
|
+
(@flags & TRUNC) != 0
|
207
221
|
end
|
208
222
|
|
209
223
|
def append?
|
210
|
-
(@flags &
|
224
|
+
(@flags & APPEND) != 0
|
211
225
|
end
|
212
226
|
|
213
227
|
def create?
|
214
|
-
(@flags &
|
228
|
+
(@flags & CREAT) != 0
|
215
229
|
end
|
216
230
|
|
217
231
|
def binary?
|
218
|
-
(@flags &
|
232
|
+
(@flags & BINARY) != 0
|
219
233
|
end
|
220
234
|
|
221
235
|
=begin
|
@@ -230,7 +244,7 @@ class IO
|
|
230
244
|
=end
|
231
245
|
|
232
246
|
def inspect
|
233
|
-
names = NAMES.map { |name| name if (flags &
|
247
|
+
names = NAMES.map { |name| name if (flags & Mode.const_get(name.upcase)) != 0 }
|
234
248
|
names.unshift 'rdonly' if (flags & 0x3) == 0
|
235
249
|
"#<#{self.class} #{names.compact * '|'}>"
|
236
250
|
end
|
data/test/test_filesystem.rb
CHANGED
@@ -799,8 +799,8 @@ class ZipFsDirectoryTest < Test::Unit::TestCase
|
|
799
799
|
d.close
|
800
800
|
|
801
801
|
zf.dir.open("dir1") {
|
802
|
-
|
|
803
|
-
assert_equal(['.', '..', "dir11", "file11", "file12"].sort,
|
802
|
+
|d2|
|
803
|
+
assert_equal(['.', '..', "dir11", "file11", "file12"].sort, d2.entries.sort)
|
804
804
|
}
|
805
805
|
}
|
806
806
|
end
|
data/test/test_storage.rb
CHANGED
@@ -8,7 +8,19 @@ require 'digest/sha1'
|
|
8
8
|
require 'stringio'
|
9
9
|
require 'tempfile'
|
10
10
|
require 'zlib'
|
11
|
-
|
11
|
+
|
12
|
+
begin
|
13
|
+
require 'base64'
|
14
|
+
rescue LoadError
|
15
|
+
# for 1.9 compatability - for now. not sure what
|
16
|
+
# advised migration is
|
17
|
+
module Base64
|
18
|
+
module_function
|
19
|
+
def decode64(str)
|
20
|
+
str.unpack("m")[0]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
12
24
|
|
13
25
|
#
|
14
26
|
# = TODO
|
metadata
CHANGED
@@ -1,33 +1,26 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0
|
3
|
-
specification_version: 1
|
4
2
|
name: ruby-ole
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.2.
|
7
|
-
date: 2008-01-10 00:00:00 +11:00
|
8
|
-
summary: Ruby OLE library.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: aquasync@gmail.com
|
12
|
-
homepage: http://code.google.com/p/ruby-ole
|
13
|
-
rubyforge_project: ruby-ole
|
14
|
-
description: A library for easy read/write access to OLE compound documents for Ruby.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 1.2.5
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Charles Lowe
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-02-16 00:00:00 +11:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A library for easy read/write access to OLE compound documents for Ruby.
|
17
|
+
email: aquasync@gmail.com
|
18
|
+
executables:
|
19
|
+
- oletool
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
31
24
|
files:
|
32
25
|
- Rakefile
|
33
26
|
- ChangeLog
|
@@ -53,28 +46,42 @@ files:
|
|
53
46
|
- test/test_word_97.doc
|
54
47
|
- test/oleWithDirs.ole
|
55
48
|
- test/test_SummaryInformation
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
- test/test_types.rb
|
60
|
-
- test/test_mbat.rb
|
61
|
-
- test/test_support.rb
|
62
|
-
- test/test_storage.rb
|
63
|
-
- test/test_filesystem.rb
|
49
|
+
has_rdoc: true
|
50
|
+
homepage: http://code.google.com/p/ruby-ole
|
51
|
+
post_install_message:
|
64
52
|
rdoc_options:
|
65
53
|
- --main
|
66
|
-
-
|
54
|
+
- README
|
67
55
|
- --title
|
68
56
|
- ruby-ole documentation
|
69
57
|
- --tab-width
|
70
58
|
- "2"
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
77
73
|
requirements: []
|
78
74
|
|
79
|
-
|
80
|
-
|
75
|
+
rubyforge_project: ruby-ole
|
76
|
+
rubygems_version: 1.0.1
|
77
|
+
signing_key:
|
78
|
+
specification_version: 2
|
79
|
+
summary: Ruby OLE library.
|
80
|
+
test_files:
|
81
|
+
- test/test_property_set.rb
|
82
|
+
- test/test_ranges_io.rb
|
83
|
+
- test/test_types.rb
|
84
|
+
- test/test_mbat.rb
|
85
|
+
- test/test_support.rb
|
86
|
+
- test/test_storage.rb
|
87
|
+
- test/test_filesystem.rb
|