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.
- data/README.rdoc +53 -116
- data/README_detail.rdoc +510 -0
- data/TodoList.md +21 -11
- data/examples/open_save_close/example_control_to_excel.rb +1 -1
- data/examples/open_save_close/example_default_excel.rb +1 -1
- data/examples/open_save_close/example_force_excel.rb +2 -2
- data/examples/open_save_close/example_if_unsaved_forget.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget_more.rb +2 -2
- data/examples/open_save_close/example_rename_cells.rb +1 -1
- data/examples/open_save_close/example_reuse.rb +1 -1
- data/examples/open_save_close/example_simple.rb +1 -1
- data/lib/robust_excel_ole/book.rb +77 -75
- data/lib/robust_excel_ole/book_store.rb +51 -27
- data/lib/robust_excel_ole/excel.rb +0 -1
- data/lib/robust_excel_ole/version.rb +1 -1
- data/robust_excel_ole.gemspec +2 -7
- data/spec/book_spec.rb +382 -95
- data/spec/book_store_spec.rb +179 -25
- data/spec/excel_spec.rb +1 -4
- metadata +9 -88
data/spec/book_spec.rb
CHANGED
@@ -83,7 +83,7 @@ describe Book do
|
|
83
83
|
|
84
84
|
it "should open unobtrusively" do
|
85
85
|
book = Book.open(@simple_file, :if_locked => :take_writable,
|
86
|
-
:if_unsaved => :accept, :if_obstructed => :
|
86
|
+
:if_unsaved => :accept, :if_obstructed => :new_excel)
|
87
87
|
book.close
|
88
88
|
end
|
89
89
|
|
@@ -152,6 +152,55 @@ describe Book do
|
|
152
152
|
book2.should be_alive
|
153
153
|
book2.close
|
154
154
|
end
|
155
|
+
|
156
|
+
it "should yield identical Book objects when reopening and the Excel is closed" do
|
157
|
+
@book.should be_alive
|
158
|
+
@book.close
|
159
|
+
Excel.close_all
|
160
|
+
book2 = Book.open(@simple_file)
|
161
|
+
book2.should be_alive
|
162
|
+
book2.should == @book
|
163
|
+
book2.close
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should yield different Book objects when reopening in a new Excel" do
|
167
|
+
@book.should be_alive
|
168
|
+
old_excel = @book.excel
|
169
|
+
@book.close
|
170
|
+
@book.should_not be_alive
|
171
|
+
book2 = Book.open(@simple_file, :force_excel => :new)
|
172
|
+
book2.should_not == @book
|
173
|
+
book2.should be_alive
|
174
|
+
book2.excel.should_not == old_excel
|
175
|
+
book2.close
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should yield different Book objects when reopening in a new given Excel instance" do
|
179
|
+
old_excel = @book.excel
|
180
|
+
new_excel = Excel.new(:reuse => false)
|
181
|
+
@book.close
|
182
|
+
@book.should_not be_alive
|
183
|
+
book2 = Book.open(@simple_file, :force_excel => new_excel)
|
184
|
+
book2.should_not == @book
|
185
|
+
book2.should be_alive
|
186
|
+
book2.excel.should == new_excel
|
187
|
+
book2.excel.should_not == old_excel
|
188
|
+
book2.close
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should yield identical Book objects when reopening in the old excel" do
|
192
|
+
old_excel = @book.excel
|
193
|
+
new_excel = Excel.new(:reuse => false)
|
194
|
+
@book.close
|
195
|
+
@book.should_not be_alive
|
196
|
+
book2 = Book.open(@simple_file, :force_excel => old_excel)
|
197
|
+
book2.should == @book
|
198
|
+
book2.should be_alive
|
199
|
+
book2.excel.should == old_excel
|
200
|
+
@book.should be_alive
|
201
|
+
book2.close
|
202
|
+
end
|
203
|
+
|
155
204
|
end
|
156
205
|
|
157
206
|
context "with :force_excel" do
|
@@ -161,7 +210,7 @@ describe Book do
|
|
161
210
|
end
|
162
211
|
|
163
212
|
after do
|
164
|
-
@book.close
|
213
|
+
@book.close rescue nil
|
165
214
|
end
|
166
215
|
|
167
216
|
it "should open in a new Excel" do
|
@@ -172,9 +221,11 @@ describe Book do
|
|
172
221
|
book2.should_not == @book
|
173
222
|
@book.Readonly.should be_false
|
174
223
|
book2.Readonly.should be_true
|
224
|
+
book2.close
|
175
225
|
end
|
176
226
|
|
177
|
-
|
227
|
+
|
228
|
+
it "should open in a given Excel, not provide identity transparency, because old book readonly, new book writable" do
|
178
229
|
book2 = Book.open(@simple_file, :force_excel => :new)
|
179
230
|
book2.excel.should_not == @book.excel
|
180
231
|
book3 = Book.open(@simple_file, :force_excel => :new)
|
@@ -185,6 +236,27 @@ describe Book do
|
|
185
236
|
book4.should be_alive
|
186
237
|
book4.should be_a Book
|
187
238
|
book4.excel.should == book2.excel
|
239
|
+
book4.Readonly.should == true
|
240
|
+
book4.should_not == book2
|
241
|
+
book4.close
|
242
|
+
book3.close
|
243
|
+
end
|
244
|
+
|
245
|
+
it "should open in a given Excel, provide identity transparency, because book can be readonly, such that the old and the new book are readonly" do
|
246
|
+
book2 = Book.open(@simple_file, :force_excel => :new)
|
247
|
+
book2.excel.should_not == @book.excel
|
248
|
+
book3 = Book.open(@simple_file, :force_excel => :new)
|
249
|
+
book3.excel.should_not == book2.excel
|
250
|
+
book3.excel.should_not == @book.excel
|
251
|
+
book2.close
|
252
|
+
book3.close
|
253
|
+
@book.close
|
254
|
+
book4 = Book.open(@simple_file, :force_excel => book2.excel, :read_only => true)
|
255
|
+
book4.should be_alive
|
256
|
+
book4.should be_a Book
|
257
|
+
book4.excel.should == book2.excel
|
258
|
+
book4.ReadOnly.should be_true
|
259
|
+
book4.should == book2
|
188
260
|
book4.close
|
189
261
|
book3.close
|
190
262
|
end
|
@@ -201,6 +273,7 @@ describe Book do
|
|
201
273
|
context "with :default_excel" do
|
202
274
|
|
203
275
|
before do
|
276
|
+
excel = Excel.new(:reuse => false)
|
204
277
|
@book = Book.open(@simple_file)
|
205
278
|
end
|
206
279
|
|
@@ -208,7 +281,7 @@ describe Book do
|
|
208
281
|
@book.close rescue nil
|
209
282
|
end
|
210
283
|
|
211
|
-
it "should
|
284
|
+
it "should use the open book" do
|
212
285
|
book2 = Book.open(@simple_file, :default_excel => :reuse)
|
213
286
|
book2.excel.should == @book.excel
|
214
287
|
book2.should be_alive
|
@@ -217,19 +290,52 @@ describe Book do
|
|
217
290
|
book2.close
|
218
291
|
end
|
219
292
|
|
220
|
-
it "should reopen
|
293
|
+
it "should reopen the book in the excel instance where it was opened before" do
|
294
|
+
excel = Excel.new(:reuse => false)
|
221
295
|
@book.close
|
222
|
-
book2 = Book.open(@simple_file
|
296
|
+
book2 = Book.open(@simple_file)
|
223
297
|
book2.should be_alive
|
224
298
|
book2.should be_a Book
|
225
299
|
book2.excel.should == @book.excel
|
300
|
+
book2.excel.should_not == excel
|
226
301
|
book2.filename.should == @book.filename
|
227
302
|
@book.should be_alive
|
228
303
|
book2.should == @book
|
229
304
|
book2.close
|
230
305
|
end
|
231
306
|
|
232
|
-
it "should
|
307
|
+
it "should reopen a book in a new Excel if all Excel instances are closed" do
|
308
|
+
excel = Excel.new(:reuse => false)
|
309
|
+
excel2 = @book.excel
|
310
|
+
fn = @book.filename
|
311
|
+
@book.close
|
312
|
+
Excel.close_all
|
313
|
+
book2 = Book.open(@simple_file, :default_excel => :reuse)
|
314
|
+
book2.should be_alive
|
315
|
+
book2.should be_a Book
|
316
|
+
book2.filename.should == fn
|
317
|
+
@book.should be_alive
|
318
|
+
book2.should == @book
|
319
|
+
book2.close
|
320
|
+
end
|
321
|
+
|
322
|
+
it "should reopen a book in the first opened Excel if the old Excel is closed" do
|
323
|
+
excel = @book.excel
|
324
|
+
Excel.close_all
|
325
|
+
new_excel = Excel.new(:reuse => false)
|
326
|
+
new_excel2 = Excel.new(:reuse => false)
|
327
|
+
book2 = Book.open(@simple_file, :default_excel => :reuse)
|
328
|
+
book2.should be_alive
|
329
|
+
book2.should be_a Book
|
330
|
+
#book2.excel.should_not == excel
|
331
|
+
#book2.excel.should_not == new_excel2
|
332
|
+
#book2.excel.should == new_excel
|
333
|
+
@book.should be_alive
|
334
|
+
book2.should == @book
|
335
|
+
book2.close
|
336
|
+
end
|
337
|
+
|
338
|
+
it "should reopen a book in the first opened excel, if the book cannot be reopened" do
|
233
339
|
@book.close
|
234
340
|
Excel.close_all
|
235
341
|
excel1 = Excel.new(:reuse => false)
|
@@ -242,6 +348,19 @@ describe Book do
|
|
242
348
|
book2.close
|
243
349
|
end
|
244
350
|
|
351
|
+
it "should reopen a book in the excel instance where it was opened most recently" do
|
352
|
+
book2 = Book.open(@simple_file, :force_excel => :new)
|
353
|
+
@book.close
|
354
|
+
book2.close
|
355
|
+
book3 = Book.open(@simple_file)
|
356
|
+
book2.should be_alive
|
357
|
+
book2.should be_a Book
|
358
|
+
book3.excel.should == book2.excel
|
359
|
+
book3.excel.should_not == @book.excel
|
360
|
+
book3.should == book2
|
361
|
+
book3.should_not == @book
|
362
|
+
end
|
363
|
+
|
245
364
|
it "should open a new excel, if the book cannot be reopened" do
|
246
365
|
@book.close
|
247
366
|
new_excel = Excel.new(:reuse => false)
|
@@ -493,10 +612,13 @@ describe Book do
|
|
493
612
|
@new_book.close
|
494
613
|
end
|
495
614
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
615
|
+
it "should open the book in a new excel instance, if :if_unsaved is default" do
|
616
|
+
@new_book = Book.open(@simple_file)
|
617
|
+
@book.should be_alive
|
618
|
+
@new_book.should be_alive
|
619
|
+
@new_book.filename.should == @book.filename
|
620
|
+
@new_book.excel.should_not == @book.excel
|
621
|
+
@new_book.close
|
500
622
|
end
|
501
623
|
|
502
624
|
it "should raise an error, if :if_unsaved is invalid option" do
|
@@ -574,11 +696,14 @@ describe Book do
|
|
574
696
|
@new_book.excel.should_not == @book.excel
|
575
697
|
end
|
576
698
|
|
577
|
-
it "should
|
578
|
-
|
579
|
-
|
580
|
-
|
699
|
+
it "should open the book in a new excel instance, if :if_obstructed is default" do
|
700
|
+
@new_book = Book.open(@simple_file)
|
701
|
+
@book.should be_alive
|
702
|
+
@new_book.should be_alive
|
703
|
+
@new_book.filename.should_not == @book.filename
|
704
|
+
@new_book.excel.should_not == @book.excel
|
581
705
|
end
|
706
|
+
|
582
707
|
|
583
708
|
it "should raise an error, if :if_obstructed is invalid option" do
|
584
709
|
expect {
|
@@ -647,6 +772,79 @@ describe Book do
|
|
647
772
|
|
648
773
|
context "with :read_only" do
|
649
774
|
|
775
|
+
it "should reopen the book with writable (unsaved changes from readonly are not saved)" do
|
776
|
+
book = Book.open(@simple_file, :read_only => true)
|
777
|
+
book.ReadOnly.should be_true
|
778
|
+
book.should be_alive
|
779
|
+
sheet = book[0]
|
780
|
+
old_cell_value = sheet[0,0].value
|
781
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
782
|
+
book.Saved.should be_false
|
783
|
+
new_book = Book.open(@simple_file, :read_only => false, :if_unsaved => :accept)
|
784
|
+
new_book.ReadOnly.should be_false
|
785
|
+
new_book.should be_alive
|
786
|
+
book.should be_alive
|
787
|
+
new_book.should == book
|
788
|
+
new_sheet = new_book[0]
|
789
|
+
new_cell_value = new_sheet[0,0].value
|
790
|
+
new_cell_value.should == old_cell_value
|
791
|
+
end
|
792
|
+
|
793
|
+
it "should reopen the book with readonly (unsaved changes of the writable should be saved)" do
|
794
|
+
book = Book.open(@simple_file, :read_only => false)
|
795
|
+
book.ReadOnly.should be_false
|
796
|
+
book.should be_alive
|
797
|
+
sheet = book[0]
|
798
|
+
old_cell_value = sheet[0,0].value
|
799
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
800
|
+
book.Saved.should be_false
|
801
|
+
new_book = Book.open(@simple_file, :read_only => true, :if_unsaved => :accept)
|
802
|
+
new_book.ReadOnly.should be_true
|
803
|
+
new_book.should be_alive
|
804
|
+
book.should be_alive
|
805
|
+
new_book.should == book
|
806
|
+
new_sheet = new_book[0]
|
807
|
+
new_cell_value = new_sheet[0,0].value
|
808
|
+
new_cell_value.should_not == old_cell_value
|
809
|
+
end
|
810
|
+
|
811
|
+
it "should reopen the book with writable (unsaved changes from readonly are not saved)" do
|
812
|
+
book = Book.open(@simple_file, :force_excel => :new, :read_only => true)
|
813
|
+
book.ReadOnly.should be_true
|
814
|
+
book.should be_alive
|
815
|
+
sheet = book[0]
|
816
|
+
old_cell_value = sheet[0,0].value
|
817
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
818
|
+
book.Saved.should be_false
|
819
|
+
new_book = Book.open(@simple_file, :force_excel => book.excel, :read_only => false, :if_unsaved => :accept)
|
820
|
+
new_book.ReadOnly.should be_false
|
821
|
+
new_book.should be_alive
|
822
|
+
book.should be_alive
|
823
|
+
new_book.should == book
|
824
|
+
new_sheet = new_book[0]
|
825
|
+
new_cell_value = new_sheet[0,0].value
|
826
|
+
new_cell_value.should == old_cell_value
|
827
|
+
end
|
828
|
+
|
829
|
+
it "should reopen the book with readonly (unsaved changes of the writable should be saved)" do
|
830
|
+
book = Book.open(@simple_file, :force_excel => :new, :read_only => false)
|
831
|
+
book.ReadOnly.should be_false
|
832
|
+
book.should be_alive
|
833
|
+
sheet = book[0]
|
834
|
+
old_cell_value = sheet[0,0].value
|
835
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
836
|
+
book.Saved.should be_false
|
837
|
+
new_book = Book.open(@simple_file, :force_excel => book.excel, :read_only => true, :if_unsaved => :accept)
|
838
|
+
new_book.ReadOnly.should be_true
|
839
|
+
new_book.should be_alive
|
840
|
+
book.should be_alive
|
841
|
+
new_book.should == book
|
842
|
+
new_sheet = new_book[0]
|
843
|
+
new_cell_value = new_sheet[0,0].value
|
844
|
+
new_cell_value.should_not == old_cell_value
|
845
|
+
end
|
846
|
+
|
847
|
+
|
650
848
|
it "should open the second book in another Excel as writable" do
|
651
849
|
book = Book.open(@simple_file, :read_only => true)
|
652
850
|
book.ReadOnly.should be_true
|
@@ -665,7 +863,7 @@ describe Book do
|
|
665
863
|
book.close
|
666
864
|
end
|
667
865
|
|
668
|
-
it "should be able to save, if :read_only is
|
866
|
+
it "should be able to save, if :read_only is default" do
|
669
867
|
book = Book.open(@simple_file)
|
670
868
|
book.should be_a Book
|
671
869
|
expect {
|
@@ -736,6 +934,24 @@ describe Book do
|
|
736
934
|
end
|
737
935
|
end
|
738
936
|
|
937
|
+
context "with no open book" do
|
938
|
+
|
939
|
+
it "should open unobtrusively in a new Excel" do
|
940
|
+
expect{ unobtrusively_ok? }.to_not raise_error
|
941
|
+
end
|
942
|
+
|
943
|
+
it "should open unobtrusively in the first opened Excel" do
|
944
|
+
excel = Excel.new(:reuse => false)
|
945
|
+
new_excel = Excel.new(:reuse => false)
|
946
|
+
Book.unobtrusively(@simple_file) do |book|
|
947
|
+
book.should be_a Book
|
948
|
+
book.should be_alive
|
949
|
+
book.excel.should == excel
|
950
|
+
book.excel.should_not == new_excel
|
951
|
+
end
|
952
|
+
end
|
953
|
+
end
|
954
|
+
|
739
955
|
context "with an open book" do
|
740
956
|
|
741
957
|
before do
|
@@ -744,6 +960,7 @@ describe Book do
|
|
744
960
|
|
745
961
|
after do
|
746
962
|
@book.close(:if_unsaved => :forget)
|
963
|
+
@book2.close(:if_unsaved => :forget) rescue nil
|
747
964
|
end
|
748
965
|
|
749
966
|
it "should let a saved book saved" do
|
@@ -758,18 +975,36 @@ describe Book do
|
|
758
975
|
sheet[0,0].value.should_not == old_cell_value
|
759
976
|
end
|
760
977
|
|
761
|
-
|
978
|
+
it "should let the unsaved book unsaved" do
|
762
979
|
sheet = @book[0]
|
763
|
-
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
764
|
-
@book.Saved.should be_false
|
765
|
-
@book.should be_alive
|
980
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
766
981
|
old_cell_value = sheet[0,0].value
|
767
|
-
unobtrusively_ok?
|
768
982
|
@book.Saved.should be_false
|
983
|
+
unobtrusively_ok?
|
769
984
|
@book.should be_alive
|
770
|
-
|
771
|
-
|
985
|
+
@book.Saved.should be_false
|
986
|
+
@book.close(:if_unsaved => :forget)
|
987
|
+
@book2 = Book.open(@simple_file)
|
988
|
+
sheet2 = @book2[0]
|
989
|
+
sheet2[0,0].value.should_not == old_cell_value
|
772
990
|
end
|
991
|
+
|
992
|
+
it "should modify unobtrusively the second, writable book" do
|
993
|
+
@book2 = Book.open(@simple_file, :force_excel => :new)
|
994
|
+
@book.ReadOnly.should be_false
|
995
|
+
@book2.ReadOnly.should be_true
|
996
|
+
sheet = @book2[0]
|
997
|
+
old_cell_value = sheet[0,0].value
|
998
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
999
|
+
unobtrusively_ok?
|
1000
|
+
@book2.should be_alive
|
1001
|
+
@book2.Saved.should be_false
|
1002
|
+
@book2.close(:if_unsaved => :forget)
|
1003
|
+
@book.close
|
1004
|
+
@book = Book.open(@simple_file)
|
1005
|
+
sheet2 = @book[0]
|
1006
|
+
sheet2[0,0].value.should_not == old_cell_value
|
1007
|
+
end
|
773
1008
|
end
|
774
1009
|
|
775
1010
|
context "with a closed book" do
|
@@ -779,8 +1014,7 @@ describe Book do
|
|
779
1014
|
end
|
780
1015
|
|
781
1016
|
after do
|
782
|
-
@book.close(:if_unsaved => :forget)
|
783
|
-
Excel.close_all
|
1017
|
+
@book.close(:if_unsaved => :forget)
|
784
1018
|
end
|
785
1019
|
|
786
1020
|
it "should let the closed book closed by default" do
|
@@ -810,57 +1044,13 @@ describe Book do
|
|
810
1044
|
end
|
811
1045
|
@book.should be_alive
|
812
1046
|
@book.close
|
813
|
-
|
814
|
-
sheet =
|
1047
|
+
new_book = Book.open(@simple_file)
|
1048
|
+
sheet = new_book[0]
|
815
1049
|
sheet[0,0].value.should_not == old_cell_value
|
816
1050
|
end
|
817
1051
|
end
|
818
1052
|
|
819
|
-
context "with
|
820
|
-
|
821
|
-
before do
|
822
|
-
@book = Book.open(@simple_file)
|
823
|
-
end
|
824
|
-
|
825
|
-
after do
|
826
|
-
@book.close(:if_unsaved => :forget)
|
827
|
-
@book2.close(:if_unsaved => :forget)
|
828
|
-
end
|
829
|
-
|
830
|
-
it "should let the unsaved book unsaved" do
|
831
|
-
sheet = @book[0]
|
832
|
-
old_cell_value = sheet[0,0].value
|
833
|
-
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
834
|
-
old_cell_value = sheet[0,0].value
|
835
|
-
@book.Saved.should be_false
|
836
|
-
unobtrusively_ok?
|
837
|
-
@book.should be_alive
|
838
|
-
@book.Saved.should be_false
|
839
|
-
@book.close(:if_unsaved => :forget)
|
840
|
-
@book2 = Book.open(@simple_file)
|
841
|
-
sheet2 = @book2[0]
|
842
|
-
sheet2[0,0].value.should_not == old_cell_value
|
843
|
-
end
|
844
|
-
|
845
|
-
it "should modify unobtrusively the second, writable book" do
|
846
|
-
@book2 = Book.open(@simple_file, :force_excel => :new)
|
847
|
-
@book.ReadOnly.should be_false
|
848
|
-
@book2.ReadOnly.should be_true
|
849
|
-
sheet = @book2[0]
|
850
|
-
old_cell_value = sheet[0,0].value
|
851
|
-
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
852
|
-
unobtrusively_ok?
|
853
|
-
@book2.should be_alive
|
854
|
-
@book2.Saved.should be_false
|
855
|
-
@book2.close(:if_unsaved => :forget)
|
856
|
-
@book.close
|
857
|
-
@book = Book.open(@simple_file)
|
858
|
-
sheet2 = @book[0]
|
859
|
-
sheet2[0,0].value.should_not == old_cell_value
|
860
|
-
end
|
861
|
-
end
|
862
|
-
|
863
|
-
context "with read_only book" do
|
1053
|
+
context "with a read_only book" do
|
864
1054
|
|
865
1055
|
before do
|
866
1056
|
@book = Book.open(@simple_file, :read_only => true)
|
@@ -902,6 +1092,29 @@ describe Book do
|
|
902
1092
|
# modifies unobtrusively the saved version, not the unsaved version
|
903
1093
|
sheet2[0,0].value.should == cell_value
|
904
1094
|
end
|
1095
|
+
|
1096
|
+
it "should modify one of the unobtrusively books" do
|
1097
|
+
book2 = Book.open(@simple_file, :force_excel => :new, :read_only => true)
|
1098
|
+
@book.ReadOnly.should be_true
|
1099
|
+
book2.Readonly.should be_true
|
1100
|
+
sheet = @book[0]
|
1101
|
+
cell_value = sheet[0,0].value
|
1102
|
+
Book.unobtrusively(@simple_file) do |book|
|
1103
|
+
book.should be_a Book
|
1104
|
+
sheet = book[0]
|
1105
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
1106
|
+
book.should be_alive
|
1107
|
+
book.Saved.should be_false
|
1108
|
+
end
|
1109
|
+
@book.Saved.should be_true
|
1110
|
+
@book.ReadOnly.should be_true
|
1111
|
+
@book.close
|
1112
|
+
book2.close
|
1113
|
+
book3 = Book.open(@simple_file)
|
1114
|
+
new_sheet = book3[0]
|
1115
|
+
new_sheet[0,0].value.should_not == cell_value
|
1116
|
+
book3.close
|
1117
|
+
end
|
905
1118
|
end
|
906
1119
|
|
907
1120
|
context "with a virgin Book class" do
|
@@ -953,7 +1166,7 @@ describe Book do
|
|
953
1166
|
m_time2.should_not == m_time
|
954
1167
|
end
|
955
1168
|
|
956
|
-
it "should not save the book was not modified during unobtrusively" do
|
1169
|
+
it "should not save the book if it was not modified during unobtrusively" do
|
957
1170
|
m_time = File.mtime(@book1.stored_filename)
|
958
1171
|
Book.unobtrusively(@simple_file) do |book|
|
959
1172
|
@book1.Saved.should be_true
|
@@ -1024,7 +1237,7 @@ describe Book do
|
|
1024
1237
|
@book1.close(:if_unsaved => :forget)
|
1025
1238
|
end
|
1026
1239
|
|
1027
|
-
it "should unobtrusively use a book
|
1240
|
+
it "should unobtrusively use a book invisible" do
|
1028
1241
|
@book1.excel.Visible.should be_false
|
1029
1242
|
Book.unobtrusively(@simple_file, :visible => false) do |book|
|
1030
1243
|
@book1.excel.Visible.should be_false
|
@@ -1037,7 +1250,7 @@ describe Book do
|
|
1037
1250
|
@book1.excel.Visible.should be_false
|
1038
1251
|
end
|
1039
1252
|
|
1040
|
-
it "should unobtrusively use a book
|
1253
|
+
it "should unobtrusively use a book visible" do
|
1041
1254
|
@book1.excel.Visible.should be_false
|
1042
1255
|
Book.unobtrusively(@simple_file, :visible => true) do |book|
|
1043
1256
|
@book1.excel.Visible.should be_true
|
@@ -1063,6 +1276,96 @@ describe Book do
|
|
1063
1276
|
@book1.excel.Visible.should be_false
|
1064
1277
|
end
|
1065
1278
|
end
|
1279
|
+
|
1280
|
+
context "with several Excel instances" do
|
1281
|
+
|
1282
|
+
it "should open unobtrusively the closed book in the most recent Excel" do
|
1283
|
+
book1 = Book.open(@simple_file)
|
1284
|
+
book2 = Book.open(@simple_file, :force_excel => :new)
|
1285
|
+
book1.Readonly.should == false
|
1286
|
+
book2.Readonly.should == true
|
1287
|
+
book1.close
|
1288
|
+
book2.close
|
1289
|
+
Book.unobtrusively(@simple_file) do |book|
|
1290
|
+
book.excel.should == book2.excel
|
1291
|
+
book.excel.should_not == book1.excel
|
1292
|
+
book.Readonly.should == false
|
1293
|
+
end
|
1294
|
+
end
|
1295
|
+
|
1296
|
+
it "should open unobtrusively the closed book in the most recent Excel where it was open before" do
|
1297
|
+
book1 = Book.open(@simple_file)
|
1298
|
+
book2 = Book.open(@simple_file, :force_excel => :new)
|
1299
|
+
book2.Readonly.should == true
|
1300
|
+
old_sheet = book1[0]
|
1301
|
+
old_cell_value = old_sheet[0,0].value
|
1302
|
+
book1.close
|
1303
|
+
book2.close
|
1304
|
+
book1.should_not be_alive
|
1305
|
+
book2.should_not be_alive
|
1306
|
+
Book.unobtrusively(@simple_file) do |book|
|
1307
|
+
book.excel.should == book2.excel
|
1308
|
+
book.excel.should_not == book1.excel
|
1309
|
+
book.ReadOnly.should == false
|
1310
|
+
sheet = book[0]
|
1311
|
+
cell = sheet[0,0]
|
1312
|
+
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
1313
|
+
book.Saved.should be_false
|
1314
|
+
end
|
1315
|
+
new_book = Book.open(@simple_file)
|
1316
|
+
sheet = new_book[0]
|
1317
|
+
sheet[0,0].value.should_not == old_cell_value
|
1318
|
+
end
|
1319
|
+
|
1320
|
+
it "should open unobtrusively the closed book in a new Excel if the Excel is not alive anymore" do
|
1321
|
+
book1 = Book.open(@simple_file)
|
1322
|
+
book2 = Book.open(@simple_file, :force_excel => :new)
|
1323
|
+
book2.Readonly.should == true
|
1324
|
+
old_sheet = book1[0]
|
1325
|
+
old_cell_value = old_sheet[0,0].value
|
1326
|
+
book1.close
|
1327
|
+
book2.close
|
1328
|
+
book1.should_not be_alive
|
1329
|
+
book2.should_not be_alive
|
1330
|
+
Excel.close_all
|
1331
|
+
Book.unobtrusively(@simple_file) do |book|
|
1332
|
+
book.ReadOnly.should == false
|
1333
|
+
#book.excel.should_not == book1.excel
|
1334
|
+
#book.excel.should_not == book2.excel
|
1335
|
+
sheet = book[0]
|
1336
|
+
cell = sheet[0,0]
|
1337
|
+
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
1338
|
+
book.Saved.should be_false
|
1339
|
+
end
|
1340
|
+
new_book = Book.open(@simple_file)
|
1341
|
+
sheet = new_book[0]
|
1342
|
+
sheet[0,0].value.should_not == old_cell_value
|
1343
|
+
end
|
1344
|
+
|
1345
|
+
it "should open unobtrusively the once opened book in a new Excel if the Excel is not alive anymore" do
|
1346
|
+
book1 = Book.open(@simple_file)
|
1347
|
+
book2 = Book.open(@simple_file, :force_excel => :new)
|
1348
|
+
book2.Readonly.should == true
|
1349
|
+
old_sheet = book1[0]
|
1350
|
+
old_cell_value = old_sheet[0,0].value
|
1351
|
+
book1.should be_alive
|
1352
|
+
book2.should be_alive
|
1353
|
+
Excel.close_all
|
1354
|
+
Book.unobtrusively(@simple_file) do |book|
|
1355
|
+
book.ReadOnly.should == false
|
1356
|
+
#book.excel.should_not == book1.excel
|
1357
|
+
#book.excel.should_not == book2.excel
|
1358
|
+
sheet = book[0]
|
1359
|
+
cell = sheet[0,0]
|
1360
|
+
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
1361
|
+
book.Saved.should be_false
|
1362
|
+
end
|
1363
|
+
new_book = Book.open(@simple_file)
|
1364
|
+
sheet = new_book[0]
|
1365
|
+
sheet[0,0].value.should_not == old_cell_value
|
1366
|
+
end
|
1367
|
+
|
1368
|
+
end
|
1066
1369
|
end
|
1067
1370
|
|
1068
1371
|
describe "nvalue" do
|
@@ -1228,18 +1531,6 @@ describe Book do
|
|
1228
1531
|
end
|
1229
1532
|
end
|
1230
1533
|
end
|
1231
|
-
|
1232
|
-
it "should raise error for default" do
|
1233
|
-
expect{
|
1234
|
-
@book.close
|
1235
|
-
}.to raise_error(ExcelErrorClose, "book is unsaved (#{File.basename(@simple_file)})")
|
1236
|
-
end
|
1237
|
-
|
1238
|
-
it "should raise error for invalid option" do
|
1239
|
-
expect{
|
1240
|
-
@book.close(:if_unsaved => :invalid)
|
1241
|
-
}.to raise_error(ExcelErrorClose, ":if_unsaved: invalid option")
|
1242
|
-
end
|
1243
1534
|
end
|
1244
1535
|
end
|
1245
1536
|
|
@@ -1555,21 +1846,17 @@ describe Book do
|
|
1555
1846
|
end
|
1556
1847
|
|
1557
1848
|
it "should make Excel visible" do
|
1558
|
-
@book.visible = false
|
1849
|
+
@book.excel.visible = false
|
1559
1850
|
@book.excel.visible.should be_false
|
1560
|
-
@book.visible
|
1561
|
-
@book.visible = true
|
1851
|
+
@book.excel.visible = true
|
1562
1852
|
@book.excel.visible.should be_true
|
1563
|
-
@book.visible.should be_true
|
1564
1853
|
end
|
1565
1854
|
|
1566
1855
|
it "should enable DisplayAlerts in Excel" do
|
1567
|
-
@book.displayalerts = false
|
1856
|
+
@book.excel.displayalerts = false
|
1568
1857
|
@book.excel.displayalerts.should be_false
|
1569
|
-
@book.displayalerts
|
1570
|
-
@book.displayalerts = true
|
1858
|
+
@book.excel.displayalerts = true
|
1571
1859
|
@book.excel.displayalerts.should be_true
|
1572
|
-
@book.displayalerts.should be_true
|
1573
1860
|
end
|
1574
1861
|
|
1575
1862
|
end
|