spreadsheet 0.6.9 → 0.7.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/History.txt +10 -0
- data/lib/spreadsheet.rb +1 -1
- data/lib/spreadsheet/excel/reader.rb +10 -0
- data/lib/spreadsheet/excel/writer/worksheet.rb +11 -0
- data/lib/spreadsheet/worksheet.rb +21 -1
- data/spreadsheet.gemspec +3 -1
- data/test/integration.rb +26 -0
- metadata +51 -75
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 0.7.0 / 07.05.2012
|
2
|
+
|
3
|
+
* Author: Artem Ignatiev <zazubrik@gmail.com>
|
4
|
+
* use both ruby 1.8 and 1.9 compatible way of getting character code when hashing
|
5
|
+
* Fix syntax for ruby-1.9
|
6
|
+
* return gemspec so that bundler can find it
|
7
|
+
When bundler loads gemspec, it evaluates it, and if the return value is
|
8
|
+
not a gem specification built, refuses to load the gem.
|
9
|
+
* Testing worksheet protection
|
10
|
+
|
1
11
|
=== 0.6.9 / 28.04.2012
|
2
12
|
|
3
13
|
* Yield is more simple here too.
|
data/lib/spreadsheet.rb
CHANGED
@@ -866,6 +866,8 @@ class Reader
|
|
866
866
|
read_window2 worksheet, work, pos, len
|
867
867
|
when :mergedcells # ○○ MERGEDCELLS ➜ 5.67
|
868
868
|
read_merged_cells worksheet, work, pos, len
|
869
|
+
when :protect, :password
|
870
|
+
read_sheet_protection worksheet, op, work
|
869
871
|
else
|
870
872
|
if ROW_BLOCK_OPS.include?(op)
|
871
873
|
set_missing_row_address worksheet, work, pos, len
|
@@ -1063,6 +1065,14 @@ class Reader
|
|
1063
1065
|
fmt.pattern_bg_color = COLOR_CODES[xf_pattern & 0x3f80] || :pattern_bg
|
1064
1066
|
@workbook.add_format fmt
|
1065
1067
|
end
|
1068
|
+
def read_sheet_protection worksheet, op, data
|
1069
|
+
case op
|
1070
|
+
when :protect
|
1071
|
+
worksheet.protect! if data.unpack('v').first == 1
|
1072
|
+
when :password
|
1073
|
+
worksheet.password_hash = data.unpack('v').first
|
1074
|
+
end
|
1075
|
+
end
|
1066
1076
|
def set_cell worksheet, row, column, xf, value=nil
|
1067
1077
|
cells = @current_row_block[[worksheet, row]] ||= Row.new(nil, row)
|
1068
1078
|
cells.formats[column] = @workbook.format(xf) unless xf == 0
|
@@ -471,6 +471,7 @@ and minimal code that generates this warning. Thanks!
|
|
471
471
|
write_wsbool
|
472
472
|
# ○ Page Settings Block ➜ 4.4
|
473
473
|
# ○ Worksheet Protection Block ➜ 4.18
|
474
|
+
write_proctection
|
474
475
|
# ○ DEFCOLWIDTH ➜ 5.32
|
475
476
|
write_defcolwidth
|
476
477
|
# ○○ COLINFO ➜ 5.18
|
@@ -856,6 +857,16 @@ and minimal code that generates this warning. Thanks!
|
|
856
857
|
end
|
857
858
|
end
|
858
859
|
|
860
|
+
def write_proctection
|
861
|
+
return unless @worksheet.protected?
|
862
|
+
# ○ PROTECT Worksheet contents: 1 = protected (➜ 5.82)
|
863
|
+
write_op opcode(:protect), [1].pack('v')
|
864
|
+
# ○ OBJECTPROTECT Embedded objects: 1 = protected (➜ 5.72)
|
865
|
+
# ○ SCENPROTECT Scenarios: 1 = protected (➜ 5.91)
|
866
|
+
# ○ PASSWORD Hash value of the password; 0 = no password (➜ 5.76)
|
867
|
+
write_op opcode(:password), [@worksheet.password_hash].pack('v')
|
868
|
+
end
|
869
|
+
|
859
870
|
def write_wsbool
|
860
871
|
bits = [
|
861
872
|
# Bit Mask Contents
|
@@ -2,6 +2,7 @@ require 'date'
|
|
2
2
|
require 'spreadsheet/column'
|
3
3
|
require 'spreadsheet/encodings'
|
4
4
|
require 'spreadsheet/row'
|
5
|
+
require 'spreadsheet/excel/password_hash'
|
5
6
|
|
6
7
|
module Spreadsheet
|
7
8
|
##
|
@@ -26,7 +27,7 @@ module Spreadsheet
|
|
26
27
|
class Worksheet
|
27
28
|
include Spreadsheet::Encodings
|
28
29
|
include Enumerable
|
29
|
-
attr_accessor :name, :selected, :workbook
|
30
|
+
attr_accessor :name, :selected, :workbook, :password_hash
|
30
31
|
attr_reader :rows, :columns, :merged_cells
|
31
32
|
def initialize opts={}
|
32
33
|
@default_format = nil
|
@@ -38,6 +39,8 @@ module Spreadsheet
|
|
38
39
|
@columns = []
|
39
40
|
@links = {}
|
40
41
|
@merged_cells = []
|
42
|
+
@protected = false
|
43
|
+
@password_hash = 0
|
41
44
|
end
|
42
45
|
def active # :nodoc:
|
43
46
|
warn "Worksheet#active is deprecated. Please use Worksheet#selected instead."
|
@@ -92,6 +95,23 @@ module Spreadsheet
|
|
92
95
|
add_format format
|
93
96
|
format
|
94
97
|
end
|
98
|
+
##
|
99
|
+
# Is the worksheet protected?
|
100
|
+
def protected?
|
101
|
+
@protected
|
102
|
+
end
|
103
|
+
##
|
104
|
+
# Set worklist protection
|
105
|
+
def protect! password = ''
|
106
|
+
@protected = true
|
107
|
+
password = password.to_s
|
108
|
+
if password.size == 0
|
109
|
+
@password_hash = 0
|
110
|
+
else
|
111
|
+
@password_hash = Excel::Password.password_hash password
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
95
115
|
##
|
96
116
|
# Dimensions:: [ first used row, first unused row,
|
97
117
|
# first used column, first unused column ]
|
data/spreadsheet.gemspec
CHANGED
@@ -3,7 +3,7 @@ require "rake"
|
|
3
3
|
|
4
4
|
spec = Gem::Specification.new do |s|
|
5
5
|
s.name = "spreadsheet"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.7.0"
|
7
7
|
s.summary = "The Spreadsheet Library is designed to read and write Spreadsheet Documents"
|
8
8
|
s.description = "As of version 0.6.0, only Microsoft Excel compatible spreadsheets are supported"
|
9
9
|
s.author = "Masaomi Hatakeyama, Zeno R.R. Davatz"
|
@@ -19,4 +19,6 @@ end
|
|
19
19
|
if $0 == __FILE__
|
20
20
|
Gem.manage_gems
|
21
21
|
Gem::Builder.new(spec).build
|
22
|
+
else
|
23
|
+
spec
|
22
24
|
end
|
data/test/integration.rb
CHANGED
@@ -1310,6 +1310,32 @@ module Spreadsheet
|
|
1310
1310
|
book.write StringIO.new("", "w+")
|
1311
1311
|
end
|
1312
1312
|
end
|
1313
|
+
|
1314
|
+
def test_read_protected_sheet
|
1315
|
+
path = File.join @data, "test_merged_and_protected.xls"
|
1316
|
+
book = Spreadsheet.open path
|
1317
|
+
sheet = book.worksheet(0)
|
1318
|
+
sheet.ensure_rows_read # FIXME HACK
|
1319
|
+
assert sheet.protected?, "Expected sheet to be protected"
|
1320
|
+
assert_equal Spreadsheet::Excel::Password.password_hash('testing'), sheet.password_hash
|
1321
|
+
end
|
1322
|
+
|
1323
|
+
def test_write_protected_sheet
|
1324
|
+
path = File.join @var, 'test_protected.xls'
|
1325
|
+
book = Spreadsheet::Workbook.new
|
1326
|
+
sheet = book.create_worksheet
|
1327
|
+
sheet.protect! 'secret'
|
1328
|
+
assert_nothing_raised do
|
1329
|
+
book.write path
|
1330
|
+
end
|
1331
|
+
|
1332
|
+
read_back = Spreadsheet.open path
|
1333
|
+
sheet = read_back.worksheet(0)
|
1334
|
+
sheet.ensure_rows_read # FIXME HACK
|
1335
|
+
assert sheet.protected?, "Expected sheet to be proteced"
|
1336
|
+
assert_equal Spreadsheet::Excel::Password.password_hash('secret'), sheet.password_hash
|
1337
|
+
end
|
1338
|
+
|
1313
1339
|
=begin
|
1314
1340
|
def test_read_baltic
|
1315
1341
|
path = File.join @data, 'test_baltic.xls'
|
metadata
CHANGED
@@ -1,86 +1,71 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: spreadsheet
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 6
|
9
|
-
- 9
|
10
|
-
version: 0.6.9
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Masaomi Hatakeyama, Zeno R.R. Davatz
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-05-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: ruby-ole
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &11528100 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 0
|
32
|
-
version: "1.0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: rdoc
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *11528100
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rdoc
|
27
|
+
requirement: &11525080 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
29
|
+
requirements:
|
41
30
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 3
|
46
|
-
- 10
|
47
|
-
version: "3.10"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.10'
|
48
33
|
type: :development
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: hoe
|
52
34
|
prerelease: false
|
53
|
-
|
35
|
+
version_requirements: *11525080
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: hoe
|
38
|
+
requirement: &11523960 !ruby/object:Gem::Requirement
|
54
39
|
none: false
|
55
|
-
requirements:
|
40
|
+
requirements:
|
56
41
|
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 2
|
61
|
-
- 13
|
62
|
-
version: "2.13"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.13'
|
63
44
|
type: :development
|
64
|
-
|
65
|
-
|
66
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *11523960
|
47
|
+
description: ! 'The Spreadsheet Library is designed to read and write Spreadsheet
|
48
|
+
Documents.
|
49
|
+
|
67
50
|
As of version 0.6.0, only Microsoft Excel compatible spreadsheets are
|
51
|
+
|
68
52
|
supported. Spreadsheet is a combination/complete rewrite of the
|
53
|
+
|
69
54
|
Spreadsheet::Excel Library by Daniel J. Berger and the ParseExcel Library by
|
70
|
-
|
71
|
-
|
55
|
+
|
56
|
+
Hannes Wyss. Spreadsheet can read, write and modify Spreadsheet Documents.'
|
57
|
+
email:
|
72
58
|
- mhatakeyama@ywesee.com, zdavatz@ywesee.com
|
73
|
-
executables:
|
59
|
+
executables:
|
74
60
|
- xlsopcodes
|
75
61
|
extensions: []
|
76
|
-
|
77
|
-
extra_rdoc_files:
|
62
|
+
extra_rdoc_files:
|
78
63
|
- GUIDE.txt
|
79
64
|
- History.txt
|
80
65
|
- LICENSE.txt
|
81
66
|
- Manifest.txt
|
82
67
|
- README.txt
|
83
|
-
files:
|
68
|
+
files:
|
84
69
|
- .gitignore
|
85
70
|
- GUIDE.txt
|
86
71
|
- History.txt
|
@@ -150,37 +135,28 @@ files:
|
|
150
135
|
- .gemtest
|
151
136
|
homepage: http://spreadsheet.rubyforge.org
|
152
137
|
licenses: []
|
153
|
-
|
154
138
|
post_install_message:
|
155
|
-
rdoc_options:
|
139
|
+
rdoc_options:
|
156
140
|
- --main
|
157
141
|
- README.txt
|
158
|
-
require_paths:
|
142
|
+
require_paths:
|
159
143
|
- lib
|
160
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
145
|
none: false
|
162
|
-
requirements:
|
163
|
-
- -
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
|
166
|
-
|
167
|
-
- 0
|
168
|
-
version: "0"
|
169
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
151
|
none: false
|
171
|
-
requirements:
|
172
|
-
- -
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
|
175
|
-
segments:
|
176
|
-
- 0
|
177
|
-
version: "0"
|
152
|
+
requirements:
|
153
|
+
- - ! '>='
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
178
156
|
requirements: []
|
179
|
-
|
180
157
|
rubyforge_project: spreadsheet
|
181
158
|
rubygems_version: 1.8.15
|
182
159
|
signing_key:
|
183
160
|
specification_version: 3
|
184
161
|
summary: The Spreadsheet Library is designed to read and write Spreadsheet Documents
|
185
162
|
test_files: []
|
186
|
-
|