rspreadsheet 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -2
- data/DEVEL_BLOG.md +12 -2
- data/GUIDE.md +3 -3
- data/Guardfile +1 -1
- data/investigate.rb +19 -0
- data/lib/class_extensions.rb +29 -17
- data/lib/rspreadsheet/cell.rb +152 -40
- data/lib/rspreadsheet/empty_file_template.ods +0 -0
- data/lib/rspreadsheet/empty_file_template.old.ods +0 -0
- data/lib/rspreadsheet/row.rb +283 -4
- data/lib/rspreadsheet/tools.rb +79 -5
- data/lib/rspreadsheet/version.rb +1 -1
- data/lib/rspreadsheet/workbook.rb +28 -20
- data/lib/rspreadsheet/worksheet.rb +23 -29
- data/rspreadsheet.gemspec +3 -2
- data/spec/cell_spec.rb +49 -0
- data/spec/row_spec.rb +127 -0
- data/spec/rspreadsheet_spec.rb +40 -109
- data/spec/spec_helper.rb +7 -0
- data/spec/testfile1.ods +0 -0
- data/spec/workbook_spec.rb +19 -0
- data/spec/worksheet_spec.rb +50 -0
- metadata +20 -10
data/spec/row_spec.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rspreadsheet::Row do
|
4
|
+
before do
|
5
|
+
@sheet1 = Rspreadsheet.new.create_worksheet
|
6
|
+
@sheet2 = Rspreadsheet.new($test_filename).worksheets[1]
|
7
|
+
end
|
8
|
+
it 'allows access to cells in a row' do
|
9
|
+
@row = @sheet2.rows(1)
|
10
|
+
@c = @row.cells(1)
|
11
|
+
@c.value = 3
|
12
|
+
@c.value.should == 3
|
13
|
+
end
|
14
|
+
it 'creates minimal row on demand, which contains correctly namespaced attributes only'do
|
15
|
+
@sheet1.rows(1).cells(2).value = 'nejakydata'
|
16
|
+
@row = @sheet1.rows(1)
|
17
|
+
@xmlnode = @row.xmlnode
|
18
|
+
@xmlnode.namespaces.to_a.size.should >5
|
19
|
+
@xmlnode.namespaces.namespace.should_not be_nil
|
20
|
+
@xmlnode.namespaces.namespace.prefix.should == 'table'
|
21
|
+
end
|
22
|
+
it 'cells in row are settable through sheet' do
|
23
|
+
@sheet1.rows(9).add_cell
|
24
|
+
@sheet1.rows(9).cells(1).value = 2
|
25
|
+
@sheet1.rows(9).cells(1).value.should == 2
|
26
|
+
|
27
|
+
@sheet1.rows(7).add_cell
|
28
|
+
@sheet1.rows(7).cells(1).value = 7
|
29
|
+
@sheet1.rows(7).cells(1).value.should == 7
|
30
|
+
|
31
|
+
@sheet1.rows(5).cells(1).value = 5
|
32
|
+
@sheet1.rows(5).cells(1).value.should == 5
|
33
|
+
|
34
|
+
(2..5).each { |i| @sheet1.rows(3).cells(i).value = i }
|
35
|
+
(2..5).each { |i|
|
36
|
+
a = @sheet1.rows(3)
|
37
|
+
c = a.cells(i)
|
38
|
+
c.value.should == i
|
39
|
+
}
|
40
|
+
end
|
41
|
+
it 'is found even in empty sheets' do
|
42
|
+
@sheet1.rows(5).should be_kind_of(Rspreadsheet::Row)
|
43
|
+
@sheet1.rows(25).should be_kind_of(Rspreadsheet::Row)
|
44
|
+
@sheet1.cells(10,10).value = 'ahoj'
|
45
|
+
@sheet1.rows(9).should be_kind_of(Rspreadsheet::Row)
|
46
|
+
@sheet1.rows(10).should be_kind_of(Rspreadsheet::Row)
|
47
|
+
@sheet1.rows(11).should be_kind_of(Rspreadsheet::Row)
|
48
|
+
end
|
49
|
+
it 'detachment works as expected' do
|
50
|
+
@sheet1.rows(5).detach
|
51
|
+
@sheet1.rows(5).repeated?.should == false
|
52
|
+
@sheet1.rows(5).repeated.should == 1
|
53
|
+
@sheet1.rows(5).xmlnode.should_not == nil
|
54
|
+
@sheet1.rows(3).repeated?.should == true
|
55
|
+
@sheet1.rows(3).repeated.should == 4
|
56
|
+
@sheet1.rows(3).xmlnode.should_not == nil
|
57
|
+
@table_ns_href = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"
|
58
|
+
@sheet1.rows(3).xmlnode.attributes.get_attribute_ns(@table_ns_href,'number-rows-repeated').value.should == '4'
|
59
|
+
end
|
60
|
+
it 'by assigning value, the repeated row is automatically detached' do
|
61
|
+
row = @sheet1.rows(5)
|
62
|
+
row.detach
|
63
|
+
@table_ns_href = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"
|
64
|
+
|
65
|
+
@sheet1.rows(5).style_name = 'newstylename'
|
66
|
+
@sheet1.rows(5).xmlnode.attributes.get_attribute_ns(@table_ns_href,'style-name').value.should == 'newstylename'
|
67
|
+
|
68
|
+
@sheet1.rows(17).style_name = 'newstylename2'
|
69
|
+
@sheet1.rows(17).xmlnode.attributes.get_attribute_ns(@table_ns_href,'style-name').value.should == 'newstylename2'
|
70
|
+
end
|
71
|
+
it 'ignores negative any zero row indexes' do
|
72
|
+
@sheet1.rows(0).should be_nil
|
73
|
+
@sheet1.rows(-78).should be_nil
|
74
|
+
end
|
75
|
+
it 'has correct rowindex' do
|
76
|
+
@sheet1.rows(5).detach
|
77
|
+
(4..6).each do |i|
|
78
|
+
@sheet1.rows(i).row.should == i
|
79
|
+
end
|
80
|
+
end
|
81
|
+
it 'can open ods testfile and read its content' do
|
82
|
+
book = Rspreadsheet.new($test_filename)
|
83
|
+
s = book.worksheets[1]
|
84
|
+
(1..10).each do |i|
|
85
|
+
s.rows(i).should be_kind_of(Rspreadsheet::Row)
|
86
|
+
s.rows(i).repeated.should == 1
|
87
|
+
s.rows(i).used_range.size>0
|
88
|
+
end
|
89
|
+
s[1,2].should === 'text'
|
90
|
+
s[2,2].should === Date.new(2014,1,1)
|
91
|
+
end
|
92
|
+
it 'normalizes to itself if single line' do
|
93
|
+
@sheet1.rows(5).detach
|
94
|
+
@sheet1.rows(5).cells(4).value='test'
|
95
|
+
@sheet1.rows(5).normalize
|
96
|
+
@sheet1.rows(5).cells(4).value.should == 'test'
|
97
|
+
end
|
98
|
+
it 'cell manipulation does not contain attributes without namespace nor doubled attributes' do # inspired by a real bug regarding namespaces manipulation
|
99
|
+
@sheet2.rows(1).xmlnode.attributes.each { |attr| attr.ns.should_not be_nil}
|
100
|
+
@sheet2.rows(1).cells(1).value.should_not == 'xyzxyz'
|
101
|
+
@sheet2.rows(1).cells(1).value ='xyzxyz'
|
102
|
+
@sheet2.rows(1).cells(1).value.should == 'xyzxyz'
|
103
|
+
|
104
|
+
## attributes have namespaces
|
105
|
+
@sheet2.rows(1).xmlnode.attributes.each { |attr| attr.ns.should_not be_nil}
|
106
|
+
|
107
|
+
## attributes are not douubled
|
108
|
+
xmlattrs = @sheet2.rows(1).xmlnode.attributes.to_a.collect{ |a| [a.ns.andand.prefix.to_s,a.name].reject{|x| x.empty?}.join(':')}
|
109
|
+
duplication_hash = xmlattrs.inject(Hash.new(0)){ |h,e| h[e] += 1; h }
|
110
|
+
duplication_hash.each { |k,v| v.should_not >1 } # should not contain duplicates
|
111
|
+
end
|
112
|
+
it 'out of bount automagically generated row pick up values when created' do
|
113
|
+
@row1 = @sheet1.rows(23)
|
114
|
+
@row2 = @sheet1.rows(23)
|
115
|
+
@row2.cells(5).value = 'hojala'
|
116
|
+
@row1.cells(5).value.should == 'hojala'
|
117
|
+
end
|
118
|
+
it 'nonempty cells work properly' do
|
119
|
+
nec = @sheet2.rows(1).nonemptycells
|
120
|
+
nec.collect{ |c| [c.row,c.col]}.should == [[1,1],[1,2]]
|
121
|
+
|
122
|
+
nec = @sheet2.rows(19).nonemptycells
|
123
|
+
nec.collect{ |c| [c.row,c.col]}.should == [[19,6]]
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
|
data/spec/rspreadsheet_spec.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
$test_filename = './spec/testfile1.ods'
|
4
|
-
|
5
3
|
describe Rspreadsheet::Tools do
|
6
|
-
it '
|
4
|
+
it 'converts correctly cell adresses' do
|
7
5
|
Rspreadsheet::Tools.convert_cell_address('A1') [0].should == 1
|
8
6
|
Rspreadsheet::Tools.convert_cell_address('A1')[1].should == 1
|
9
7
|
Rspreadsheet::Tools.convert_cell_address('C5')[0].should == 5
|
@@ -11,24 +9,10 @@ describe Rspreadsheet::Tools do
|
|
11
9
|
end
|
12
10
|
end
|
13
11
|
|
14
|
-
describe Rspreadsheet::Tools::SparseRepeatedArray do
|
15
|
-
before do
|
16
|
-
# @a = Rspreadsheet::Tools::SparseRepeatedArray.new()
|
17
|
-
end
|
18
|
-
# Float::INFINITY
|
19
|
-
its 'set values can be read back unchanged' do
|
20
|
-
skip
|
21
|
-
@a[3..5]='test'
|
22
|
-
@a[4].should == 'test'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
12
|
describe Rspreadsheet do
|
27
13
|
it 'can open ods testfile and reads its content correctly' do
|
28
14
|
book = Rspreadsheet.new($test_filename)
|
29
|
-
book.worksheets[
|
30
|
-
book.worksheets[0].class.should == Rspreadsheet::Worksheet
|
31
|
-
s = book.worksheets[0]
|
15
|
+
s = book.worksheets[1]
|
32
16
|
(1..10).each do |i|
|
33
17
|
s[i,1].should === i
|
34
18
|
end
|
@@ -43,8 +27,8 @@ describe Rspreadsheet do
|
|
43
27
|
|
44
28
|
book1 = Rspreadsheet.new($test_filename) # now open both again
|
45
29
|
book2 = Rspreadsheet.new(tmp_filename)
|
46
|
-
@sheet1 = book1.worksheets[
|
47
|
-
@sheet2 = book2.worksheets[
|
30
|
+
@sheet1 = book1.worksheets[1]
|
31
|
+
@sheet2 = book2.worksheets[1]
|
48
32
|
|
49
33
|
@sheet1.nonemptycells.each do |cell| # and test identity
|
50
34
|
@sheet2[cell.row,cell.col].should == cell.value
|
@@ -63,15 +47,23 @@ describe Rspreadsheet do
|
|
63
47
|
@content_xml2 = Zip::File.open(tmp_filename) do |zip|
|
64
48
|
LibXML::XML::Document.io zip.get_input_stream('content.xml')
|
65
49
|
end
|
50
|
+
|
51
|
+
@content_xml2.root.first_diff(@content_xml1.root).should be_nil
|
52
|
+
@content_xml1.root.first_diff(@content_xml2.root).should be_nil
|
53
|
+
|
66
54
|
@content_xml1.root.equals?(@content_xml2.root).should == true
|
67
55
|
end
|
68
56
|
it 'when open and save file modified, than the file is different' do
|
69
57
|
tmp_filename = '/tmp/testfile1.ods' # first delete temp file
|
70
58
|
File.delete(tmp_filename) if File.exists?(tmp_filename)
|
71
59
|
book = Rspreadsheet.new($test_filename) # than open test file
|
72
|
-
book.worksheets[
|
73
|
-
book.worksheets[
|
74
|
-
book.worksheets[
|
60
|
+
book.worksheets[1].rows(1).cells(1).value.should_not == 'xyzxyz'
|
61
|
+
book.worksheets[1].rows(1).cells(1).value ='xyzxyz'
|
62
|
+
book.worksheets[1].rows(1).cells(1).value.should == 'xyzxyz'
|
63
|
+
|
64
|
+
# book.worksheets[1][1,1].should_not == 'xyzxyz'
|
65
|
+
# book.worksheets[1][1,1]='xyzxyz'
|
66
|
+
# book.worksheets[1][1,1].should == 'xyzxyz'
|
75
67
|
book.save(tmp_filename) # and save it as temp file
|
76
68
|
|
77
69
|
# now compare them
|
@@ -92,91 +84,30 @@ describe Rspreadsheet do
|
|
92
84
|
end
|
93
85
|
end
|
94
86
|
|
95
|
-
describe Rspreadsheet::Cell do
|
96
|
-
before do
|
97
|
-
book1 = Rspreadsheet.new
|
98
|
-
@sheet1 = book1.create_worksheet
|
99
|
-
@sheet1[0,0] = 'text'
|
100
|
-
book2 = Rspreadsheet.new($test_filename)
|
101
|
-
@sheet2 = book2.worksheets[0]
|
102
|
-
end
|
103
|
-
it 'contains good row and col coordinates' do
|
104
|
-
@cell = @sheet1.cells(1,3)
|
105
|
-
@cell.row.should == 1
|
106
|
-
@cell.col.should == 3
|
107
|
-
@cell.coordinates.should == [1,3]
|
108
|
-
|
109
|
-
@cell = @sheet2.cells(7,2)
|
110
|
-
@cell.row.should == 7
|
111
|
-
@cell.col.should == 2
|
112
|
-
@cell.coordinates.should == [7,2]
|
113
|
-
end
|
114
|
-
it 'can be referenced by more vars and both are synchronized' do
|
115
|
-
@cell = @sheet1.cells(1,1)
|
116
|
-
@sheet1[1,1] = 'novinka'
|
117
|
-
@cell.value.should == 'novinka'
|
118
|
-
end
|
119
|
-
it 'can be modified by more ways and all are identical' do
|
120
|
-
@cell = @sheet1.cells(2,2)
|
121
|
-
@sheet1[2,2] = 'zaprve'
|
122
|
-
@cell.value.should == 'zaprve'
|
123
|
-
@sheet1.cells(2,2).value = 'zadruhe'
|
124
|
-
@cell.value.should == 'zadruhe'
|
125
|
-
@sheet1.B2 = 'zatreti'
|
126
|
-
@cell.value.should == 'zatreti'
|
127
|
-
end
|
128
|
-
it 'can include links' do
|
129
|
-
@sheet2.A12.should == '[http://example.org/]'
|
130
|
-
end
|
131
|
-
it 'contains good row and col coordinates even after table:number-columns-repeated cells' do
|
132
|
-
skip
|
133
|
-
@cell = @sheet2.cells(13,5)
|
134
|
-
@cell.value.should == 'afterrepeated'
|
135
|
-
@cell.row.should == 13
|
136
|
-
@cell.col.should == 5
|
137
|
-
end
|
138
|
-
end
|
139
87
|
|
140
|
-
describe Rspreadsheet::Worksheet do
|
141
|
-
before do
|
142
|
-
book = Rspreadsheet.new
|
143
|
-
@sheet = book.create_worksheet
|
144
|
-
end
|
145
|
-
it 'remembers the value stored to A1 cell' do
|
146
|
-
@sheet[1,1].should == nil
|
147
|
-
@sheet[1,1] = 'test text'
|
148
|
-
@sheet[1,1].class.should == String
|
149
|
-
@sheet[1,1].should == 'test text'
|
150
|
-
end
|
151
|
-
it 'value stored to A1 is accesible using different syntax' do
|
152
|
-
@sheet[1,1] = 'test text'
|
153
|
-
@sheet[1,1].should == 'test text'
|
154
|
-
@sheet.cells(1,1).value.should == 'test text'
|
155
|
-
end
|
156
|
-
it 'makes Cell object accessible' do
|
157
|
-
@sheet.cells(1,1).value = 'test text'
|
158
|
-
@sheet.cells(1,1).class.should == Rspreadsheet::Cell
|
159
|
-
end
|
160
|
-
it 'has name, which can be changed and is remembered' do
|
161
|
-
@sheet.name.should be(nil)
|
162
|
-
@sheet.name = 'Icecream'
|
163
|
-
@sheet.name.should == 'Icecream'
|
164
|
-
@sheet.name = 'Cofee'
|
165
|
-
@sheet.name.should == 'Cofee'
|
166
|
-
end
|
167
|
-
end
|
168
88
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
data/spec/spec_helper.rb
CHANGED
data/spec/testfile1.ods
CHANGED
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rspreadsheet::Workbook do
|
4
|
+
it 'has correct number of sheets' do
|
5
|
+
book = Rspreadsheet.new($test_filename)
|
6
|
+
book.worksheets_count.should == 1
|
7
|
+
book.worksheets[0].should be_nil
|
8
|
+
book.worksheets[1].should be_kind_of(Rspreadsheet::Worksheet)
|
9
|
+
book.worksheets[2].should be_nil
|
10
|
+
book.worksheets[nil].should be_nil
|
11
|
+
end
|
12
|
+
it 'freshly created has correctly namespaced xmlnode' do
|
13
|
+
@xmlnode = Rspreadsheet.new.xmlnode
|
14
|
+
@xmlnode.namespaces.to_a.size.should >5
|
15
|
+
@xmlnode.namespaces.find_by_prefix('office').should_not be_nil
|
16
|
+
@xmlnode.namespaces.find_by_prefix('table').should_not be_nil
|
17
|
+
@xmlnode.namespaces.namespace.prefix.should == 'office'
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rspreadsheet::Worksheet do
|
4
|
+
before do
|
5
|
+
@sheet = Rspreadsheet.new($test_filename).worksheets[1]
|
6
|
+
end
|
7
|
+
it 'contains nonempty xml in rows for testfile' do
|
8
|
+
@sheet.rows(1).xmlnode.elements.size.should be >1
|
9
|
+
end
|
10
|
+
it 'freshly created has correctly namespaced xmlnode' do
|
11
|
+
@spreadsheet = Rspreadsheet.new
|
12
|
+
@spreadsheet.create_worksheet
|
13
|
+
@xmlnode = @spreadsheet.worksheets[1].xmlnode
|
14
|
+
@xmlnode.namespaces.to_a.size.should >5
|
15
|
+
@xmlnode.namespaces.find_by_prefix('office').should_not be_nil
|
16
|
+
@xmlnode.namespaces.find_by_prefix('table').should_not be_nil
|
17
|
+
@xmlnode.namespaces.namespace.should_not be_nil
|
18
|
+
@xmlnode.namespaces.namespace.prefix.should == 'table'
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe Rspreadsheet::Worksheet do
|
24
|
+
before do
|
25
|
+
book = Rspreadsheet.new
|
26
|
+
@sheet = book.create_worksheet
|
27
|
+
end
|
28
|
+
it 'remembers the value stored to A1 cell' do
|
29
|
+
@sheet[1,1].should == nil
|
30
|
+
@sheet[1,1] = 'test text'
|
31
|
+
@sheet[1,1].class.should == String
|
32
|
+
@sheet[1,1].should == 'test text'
|
33
|
+
end
|
34
|
+
it 'value stored to A1 is accesible using different syntax' do
|
35
|
+
@sheet[1,1] = 'test text'
|
36
|
+
@sheet[1,1].should == 'test text'
|
37
|
+
@sheet.cells(1,1).value.should == 'test text'
|
38
|
+
end
|
39
|
+
it 'makes Cell object accessible' do
|
40
|
+
@sheet.cells(1,1).value = 'test text'
|
41
|
+
@sheet.cells(1,1).class.should == Rspreadsheet::Cell
|
42
|
+
end
|
43
|
+
it 'has name, which can be changed and is remembered' do
|
44
|
+
@sheet.name.should be(nil)
|
45
|
+
@sheet.name = 'Icecream'
|
46
|
+
@sheet.name.should == 'Icecream'
|
47
|
+
@sheet.name = 'Cofee'
|
48
|
+
@sheet.name.should == 'Cofee'
|
49
|
+
end
|
50
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspreadsheet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub A.Těšínský
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: libxml-ruby
|
@@ -95,33 +95,33 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '2'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: pry-nav
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: coveralls
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '0.7'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '0.7'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: guard
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,19 +169,25 @@ files:
|
|
169
169
|
- LICENSE.md
|
170
170
|
- README.md
|
171
171
|
- Rakefile
|
172
|
+
- investigate.rb
|
172
173
|
- lib/class_extensions.rb
|
173
174
|
- lib/rspreadsheet.rb
|
174
175
|
- lib/rspreadsheet/cell.rb
|
175
176
|
- lib/rspreadsheet/empty_file_template.ods
|
177
|
+
- lib/rspreadsheet/empty_file_template.old.ods
|
176
178
|
- lib/rspreadsheet/row.rb
|
177
179
|
- lib/rspreadsheet/tools.rb
|
178
180
|
- lib/rspreadsheet/version.rb
|
179
181
|
- lib/rspreadsheet/workbook.rb
|
180
182
|
- lib/rspreadsheet/worksheet.rb
|
181
183
|
- rspreadsheet.gemspec
|
184
|
+
- spec/cell_spec.rb
|
185
|
+
- spec/row_spec.rb
|
182
186
|
- spec/rspreadsheet_spec.rb
|
183
187
|
- spec/spec_helper.rb
|
184
188
|
- spec/testfile1.ods
|
189
|
+
- spec/workbook_spec.rb
|
190
|
+
- spec/worksheet_spec.rb
|
185
191
|
homepage: https://github.com/gorn/rspreadsheet
|
186
192
|
licenses:
|
187
193
|
- GPL
|
@@ -208,6 +214,10 @@ specification_version: 4
|
|
208
214
|
summary: Manipulating spreadsheets with Ruby (read / create / modify OpenDocument
|
209
215
|
Spreadsheet).
|
210
216
|
test_files:
|
217
|
+
- spec/cell_spec.rb
|
218
|
+
- spec/row_spec.rb
|
211
219
|
- spec/rspreadsheet_spec.rb
|
212
220
|
- spec/spec_helper.rb
|
213
221
|
- spec/testfile1.ods
|
222
|
+
- spec/workbook_spec.rb
|
223
|
+
- spec/worksheet_spec.rb
|