robust_excel_ole 0.3.0 → 0.3.1

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.
@@ -13,6 +13,7 @@ end
13
13
  $VERBOSE = nil
14
14
 
15
15
  include RobustExcelOle
16
+
16
17
  module RobustExcelOle
17
18
  class MockBookstore
18
19
  def fetch(filename, options = { })
@@ -86,7 +87,7 @@ describe BookStore do
86
87
  end
87
88
 
88
89
  after do
89
- @book.close
90
+ @book.close rescue nil
90
91
  end
91
92
 
92
93
  it "should do simple store and fetch" do
@@ -118,6 +119,14 @@ describe BookStore do
118
119
  new_book.should == nil
119
120
  end
120
121
 
122
+ it "should fetch a closed book" do
123
+ @bookstore.store(@book)
124
+ @book.close
125
+ book1 = @bookstore.fetch(@simple_file)
126
+ book1.should be_a Book
127
+ book1.should_not be_alive
128
+ end
129
+
121
130
  it "should fetch nothing when fetching a different book" do
122
131
  @bookstore.store(@book)
123
132
  new_book = @bookstore.fetch(@different_file)
@@ -171,20 +180,49 @@ describe BookStore do
171
180
  new_book.close
172
181
  end
173
182
 
174
- it "should fetch the writable book even if the readonly book has unsaved changes" do
183
+ it "should fetch the last book with :prefer_writeable => false" do
175
184
  @book2 = Book.open(@simple_file, :force_excel => :new)
176
- sheet = @book2[0]
177
185
  @bookstore.store(@book2)
178
- sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
179
186
  @book.ReadOnly.should be_false
180
187
  @book2.ReadOnly.should be_true
181
- @book2.Saved. should be_false
182
- new_book = @bookstore.fetch(@simple_file)
183
- new_book.should == @book
184
- new_book.should_not == @book2
188
+ new_book = @bookstore.fetch(@simple_file, :prefer_writable => false)
189
+ new_book.should_not == @book
190
+ new_book.should == @book2
185
191
  new_book.close
186
192
  end
187
193
 
194
+ it "should fetch the second, open book, if the first book is closed" do
195
+ @book2 = Book.open(@simple_file, :force_excel => :new)
196
+ @bookstore.store(@book2)
197
+ @book.ReadOnly.should be_false
198
+ @book2.ReadOnly.should be_true
199
+ @book.close
200
+ new_book = @bookstore.fetch(@simple_file, :prefer_writable => false)
201
+ new_book2 = @bookstore.fetch(@simple_file)
202
+ new_book.should_not == @book
203
+ new_book2.should_not == @book
204
+ new_book.should == @book2
205
+ new_book2.should == @book2
206
+ new_book.close
207
+ new_book2.close
208
+ end
209
+
210
+ it "should fetch the first, open book, if the second book is closed, even with :prefer_writeable => false" do
211
+ @book2 = Book.open(@simple_file, :force_excel => :new)
212
+ @bookstore.store(@book2)
213
+ @book.ReadOnly.should be_false
214
+ @book2.ReadOnly.should be_true
215
+ @book2.close
216
+ new_book = @bookstore.fetch(@simple_file, :prefer_writable => false)
217
+ new_book2 = @bookstore.fetch(@simple_file)
218
+ new_book.should_not == @book2
219
+ new_book2.should_not == @book2
220
+ new_book.should == @book
221
+ new_book2.should == @book
222
+ new_book.close
223
+ new_book2.close
224
+ end
225
+
188
226
  end
189
227
 
190
228
  context "with readonly book" do
@@ -205,9 +243,17 @@ describe BookStore do
205
243
  @book.ReadOnly.should be_true
206
244
  @book2.ReadOnly.should be_false
207
245
  new_book = @bookstore.fetch(@simple_file)
246
+ new_book2 = @bookstore.fetch(@simple_file, :prefer_writable => true)
247
+ new_book3 = @bookstore.fetch(@simple_file, :prefer_writable => false)
208
248
  new_book.should == @book2
249
+ new_book2.should == @book2
250
+ new_book3.should == @book2
209
251
  new_book.should_not == @book
252
+ new_book2.should_not == @book
253
+ new_book3.should_not == @book
210
254
  new_book.close
255
+ new_book2.close
256
+ new_book3.close
211
257
  end
212
258
 
213
259
  it "should fetch the recent readonly book when there are only readonly books" do
@@ -221,20 +267,6 @@ describe BookStore do
221
267
  new_book.close
222
268
  end
223
269
 
224
- it "should fetch the second readonly book with unsaved changes" do
225
- @book2 = Book.open(@simple_file, :force_excel => :new, :read_only => true)
226
- sheet = @book2[0]
227
- @bookstore.store(@book2)
228
- sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
229
- @book.ReadOnly.should be_true
230
- @book2.ReadOnly.should be_true
231
- @book2.Saved.should be_false
232
- new_book = @bookstore.fetch(@simple_file)
233
- new_book.should == @book2
234
- new_book.should_not == @book
235
- new_book.close
236
- end
237
-
238
270
  it "should fetch the second, writable book, if a writable, a readonly and an unsaved readonly book exist" do
239
271
  @book2 = Book.open(@simple_file, :force_excel => :new)
240
272
  @book3 = Book.open(@simple_file, :force_excel => :new)
@@ -247,19 +279,44 @@ describe BookStore do
247
279
  @book3.ReadOnly.should be_true
248
280
  @book3.Saved.should be_false
249
281
  new_book = @bookstore.fetch(@simple_file)
282
+ new_book2 = @bookstore.fetch(@simple_file, :prefer_writable => false)
250
283
  new_book.should == @book2
284
+ new_book2.should == @book3
251
285
  new_book.should_not == @book
252
- new_book.should_not == @book3
286
+ new_book.should_not == @book3
287
+ new_book2.should_not == @book
288
+ new_book2.should_not == @book2
253
289
  new_book.close
290
+ new_book2.close
254
291
  end
255
292
  end
256
293
 
294
+ context "with several closed books" do
295
+
296
+ before do
297
+ @book = Book.open(@simple_file)
298
+ @bookstore.store(@book)
299
+ @book2 = Book.open(@simple_file, :force_excel => :new)
300
+ @bookstore.store(@book2)
301
+ @book.close
302
+ @book2.close
303
+ end
304
+
305
+ it "should fetch the recent closed book" do
306
+ new_book = @bookstore.fetch(@simple_file)
307
+ new_book.should == @book2
308
+ new_book.should_not == @book
309
+ end
310
+
311
+ end
312
+
257
313
  context "with changing file name" do
258
314
 
259
315
  before do
260
316
  @book = Book.open(@simple_file)
261
317
  @book.save_as(@simple_save_file, :if_exists => :overwrite)
262
- @bookstore = @book.book_store
318
+ @bookstore.store(@book)
319
+ #@bookstore = @book.book_store
263
320
  end
264
321
 
265
322
  after do
@@ -277,6 +334,7 @@ describe BookStore do
277
334
  end
278
335
  end
279
336
 
337
+
280
338
  context "with given excel instance and fetching readonly" do
281
339
 
282
340
  before do
@@ -293,14 +351,110 @@ describe BookStore do
293
351
  it "should fetch the book in the given excel instance" do
294
352
  @book.ReadOnly.should be_false
295
353
  @book2.ReadOnly.should be_true
296
- book_new = @bookstore.fetch(@simple_file, :excel => @book2.excel)
354
+ book_new = @bookstore.fetch(@simple_file, :prefer_excel => @book2.excel)
297
355
  book_new.should be_a Book
298
356
  book_new.should be_alive
299
357
  book_new.should == @book2
300
358
  end
359
+ end
360
+ end
361
+
362
+ describe "book life cycle" do
363
+
364
+ context "with an open book" do
365
+
366
+ before do
367
+ @book = Book.open(@simple_file)
368
+ @bookstore.store(@book)
369
+ end
370
+
371
+ after do
372
+ @book.close rescue nil
373
+ end
374
+
375
+ it "should find the book if the book has astill got a reference" do
376
+ GC.start
377
+ @bookstore.fetch(@simple_file).should == @book
378
+ end
379
+
380
+ it "should have forgotten the book if there is no reference anymore" do
381
+ @book = nil
382
+ GC.start
383
+ @bookstore.fetch(@simple_file).should == nil
384
+ end
301
385
 
386
+ it "should have forgotten some books if they have no reference anymore" do
387
+ book_new = Book.open(@different_file)
388
+ @bookstore.store(book_new)
389
+ @book = nil
390
+ GC.start
391
+ @bookstore.fetch(@simple_file).should == nil
392
+ @bookstore.fetch(@different_file).should == book_new
393
+ end
302
394
  end
395
+ end
396
+
397
+ describe "excel_list" do
398
+
399
+ context "with no books" do
400
+
401
+ it "should yield nil" do
402
+ @bookstore.excel_list.should == {}
403
+ end
404
+
405
+ end
406
+
407
+ context "with open books" do
408
+
409
+ before do
410
+ @book = Book.open(@simple_file)
411
+ @bookstore.store(@book)
412
+ end
303
413
 
414
+ after do
415
+ @book.close
416
+ end
304
417
 
418
+ it "should yield an excel and the workbook" do
419
+ excels = @bookstore.excel_list
420
+ excels.size.should == 1
421
+ excels.each do |excel,workbooks|
422
+ excel.should be_a Excel
423
+ workbooks.size.should == 1
424
+ workbooks.each do |workbook|
425
+ workbook.should == @book.workbook
426
+ end
427
+ end
428
+ end
429
+
430
+ it "should yield an excel with two books" do
431
+ book1 = Book.open(@different_file)
432
+ @bookstore.store(book1)
433
+ excels = @bookstore.excel_list
434
+ excels.size.should == 1
435
+ excels.each do |excel,workbooks|
436
+ excel.should be_a Excel
437
+ workbooks.size.should == 2
438
+ #workbooks[0].should == @book.workbook
439
+ #workbooks[1].should == book1.workbook
440
+ end
441
+ end
442
+
443
+ it "should yield two excels and two books" do
444
+ e = Excel.create
445
+ book1 = Book.open(@simple_file, :force_excel => :new)
446
+ @bookstore.store(book1)
447
+ excels = @bookstore.excel_list
448
+ excels.size.should == 2
449
+ num = 0
450
+ excels.each do |excel,workbooks|
451
+ num = num + 1
452
+ excel.should be_a Excel
453
+ workbooks.size.should == 1
454
+ #workbooks[0].should == @book.workbook if num == 1
455
+ #workbooks[0].should == book1.workbook if num == 2
456
+ end
457
+ end
458
+ end
305
459
  end
306
460
  end
data/spec/excel_spec.rb CHANGED
@@ -60,6 +60,7 @@ module RobustExcelOle
60
60
 
61
61
  it "should reuse existing excel with default options for 'new'" do
62
62
  excel2 = Excel.new
63
+ excel2.should be_a Excel
63
64
  #puts "@excel1 #{@excel1.Hwnd}"
64
65
  #puts "excel2 #{excel2.Hwnd}"
65
66
  excel2.Hwnd.should == @excel1.Hwnd
@@ -226,8 +227,6 @@ module RobustExcelOle
226
227
  end
227
228
  end
228
229
 
229
-
230
-
231
230
  describe "RobustExcelOle" do
232
231
  context "#absolute_path" do
233
232
  it "should work" do
@@ -242,9 +241,7 @@ module RobustExcelOle
242
241
  RobustExcelOle::absolute_path(@filename).gsub("\\","/").should == @filename
243
242
  end
244
243
  end
245
-
246
244
  end
247
-
248
245
  end
249
246
 
250
247
  class TestError < RuntimeError
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: robust_excel_ole
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - traths
@@ -15,29 +15,13 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2015-04-22 00:00:00 +02:00
18
+ date: 2015-05-09 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: rake
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 63
30
- segments:
31
- - 0
32
- - 9
33
- - 2
34
- version: 0.9.2
35
- type: :development
36
- version_requirements: *id001
37
21
  - !ruby/object:Gem::Dependency
38
22
  name: rspec
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
41
25
  none: false
42
26
  requirements:
43
27
  - - ">="
@@ -49,72 +33,8 @@ dependencies:
49
33
  - 0
50
34
  version: 2.6.0
51
35
  type: :development
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: rb-fchange
55
- prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 21
62
- segments:
63
- - 0
64
- - 0
65
- - 5
66
- version: 0.0.5
67
- type: :development
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: wdm
71
- prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 25
78
- segments:
79
- - 0
80
- - 0
81
- - 3
82
- version: 0.0.3
83
- type: :development
84
- version_requirements: *id004
85
- - !ruby/object:Gem::Dependency
86
- name: win32console
87
- prerelease: false
88
- requirement: &id005 !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- hash: 31
94
- segments:
95
- - 1
96
- - 3
97
- - 2
98
- version: 1.3.2
99
- type: :development
100
- version_requirements: *id005
101
- - !ruby/object:Gem::Dependency
102
- name: guard-rspec
103
- prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- hash: 9
110
- segments:
111
- - 2
112
- - 1
113
- - 1
114
- version: 2.1.1
115
- type: :development
116
- version_requirements: *id006
117
- description: RobustExcelOle wraps the win32ole library, and allows to perform various operation in Excel with ruby in a reliable way. Detailed description please see the README.
36
+ version_requirements: *id001
37
+ description: RobustExcelOle processes Excel files, provides all win32ole operations, convenient methods for opening, saving and closing, and implements an Excel file management system.
118
38
  email:
119
39
  - Thomas.Raths@gmx.net
120
40
  executables: []
@@ -130,6 +50,7 @@ files:
130
50
  - Guardfile
131
51
  - LICENSE
132
52
  - README.rdoc
53
+ - README_detail.rdoc
133
54
  - Rakefile
134
55
  - TodoList.md
135
56
  - examples/edit_sheets/example_access_sheets_and_cells.rb
@@ -221,6 +142,6 @@ rubyforge_project: robust_excel_ole
221
142
  rubygems_version: 1.3.7
222
143
  signing_key:
223
144
  specification_version: 3
224
- summary: RobustExcelOle wraps the win32ole library and implements various operations in Excel
145
+ summary: RobustExcelOle processes Excel files and wraps the win32ole library.
225
146
  test_files: []
226
147