spreadsheet 0.6.9 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -42,7 +42,7 @@ module Spreadsheet
42
42
 
43
43
  ##
44
44
  # The version of Spreadsheet you are using.
45
- VERSION = '0.6.9'
45
+ VERSION = '0.7.0'
46
46
 
47
47
  ##
48
48
  # Default client Encoding. Change this value if your application uses a
@@ -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.7"
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
- hash: 21
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
- date: 2012-04-28 00:00:00 Z
19
- dependencies:
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
- prerelease: false
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
- hash: 15
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- hash: 19
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- hash: 25
59
- segments:
60
- - 2
61
- - 13
62
- version: "2.13"
42
+ - !ruby/object:Gem::Version
43
+ version: '2.13'
63
44
  type: :development
64
- version_requirements: *id003
65
- description: |-
66
- The Spreadsheet Library is designed to read and write Spreadsheet Documents.
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
- Hannes Wyss. Spreadsheet can read, write and modify Spreadsheet Documents.
71
- email:
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
- hash: 3
166
- segments:
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
- hash: 3
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
-