rspreadsheet 0.4.4 → 0.4.5
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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -1
- data/DEVEL_BLOG.md +1 -4
- data/lib/helpers/class_extensions.rb +7 -1
- data/lib/rspreadsheet/cell.rb +21 -13
- data/lib/rspreadsheet/row.rb +9 -3
- data/lib/rspreadsheet/tools.rb +16 -17
- data/lib/rspreadsheet/version.rb +1 -1
- data/lib/rspreadsheet/worksheet.rb +3 -2
- data/lib/rspreadsheet/xml_tied_array.rb +2 -3
- data/lib/rspreadsheet/xml_tied_repeatable.rb +1 -1
- data/rspreadsheet.gemspec +1 -1
- data/spec/cell_spec.rb +21 -0
- data/spec/class_extensions_spec.rb +3 -3
- data/spec/io_spec.rb +1 -2
- data/spec/row_spec.rb +1 -1
- data/spec/rspreadsheet_spec.rb +1 -2
- data/spec/worksheet_spec.rb +1 -0
- data/spec/xml_tied_spec.rb +30 -0
- metadata +5 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1baffe562cc732b33a3919529ebac6eee2a4e337
|
4
|
+
data.tar.gz: 0405d76a41fecf70a3a131f0fcfdabd41877cb71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a60aa7bc6cbcd3af3d8de9b161b220d8f9f0db92279ee14715a107cd7bb0f902e27dfb87d4b3c42e86634f198c7163e18a01a8721b5a7501ade4d54246cd93a9
|
7
|
+
data.tar.gz: 7f44c68924b04255565aaf06e0ac77ba6b3e719a748630122f8f7fd2bff5fe563033321a1e42db3c1070a9164627dd373fec7cba42901b2e9fe4536ac5f3c7b1
|
data/.travis.yml
CHANGED
data/DEVEL_BLOG.md
CHANGED
@@ -74,10 +74,7 @@ RSpreadsheet.generate('pricelist.ods') do
|
|
74
74
|
|
75
75
|
## Release notes
|
76
76
|
|
77
|
-
|
78
|
-
- file can be saced to any IO now, making it suitable for creating files on fly.
|
79
|
-
- basic image handling implemented (issue [#24](https://github.com/gorn/rspreadsheet/issues/24))
|
80
|
-
- bug corrected: inserted row was not empty, but rather copy of the row below.
|
77
|
+
Release notes are maintaned [on github](https://github.com/gorn/rspreadsheet/releases).
|
81
78
|
|
82
79
|
## Developing this gem
|
83
80
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
if
|
1
|
+
if RUBY_VERSION > '2.1'
|
2
2
|
|
3
3
|
module ClassExtensions
|
4
4
|
|
@@ -10,6 +10,9 @@ if RUBY_VERSION > '2.1'
|
|
10
10
|
inject(0){ |sum, element| sum.to_f + element.to_f } || identity
|
11
11
|
end
|
12
12
|
end
|
13
|
+
def self.marker
|
14
|
+
'yes'
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
refine LibXML::XML::Node do
|
@@ -69,6 +72,9 @@ else # Monkeypatching
|
|
69
72
|
inject(0){ |sum, element| sum.to_f + element.to_f } || identity
|
70
73
|
end
|
71
74
|
end
|
75
|
+
def self.marker
|
76
|
+
'yes2'
|
77
|
+
end
|
72
78
|
end
|
73
79
|
|
74
80
|
class LibXML::XML::Node
|
data/lib/rspreadsheet/cell.rb
CHANGED
@@ -46,6 +46,10 @@ class Cell < XMLTiedItem
|
|
46
46
|
end
|
47
47
|
def row; @worksheet.rows(rowi) end
|
48
48
|
def coordinates; [rowi,coli] end
|
49
|
+
def address
|
50
|
+
Tools.convert_cell_coordinates_to_address(coordinates)
|
51
|
+
end
|
52
|
+
|
49
53
|
def to_s; value.to_s end
|
50
54
|
def valuexml; self.valuexmlnode.andand.inner_xml end
|
51
55
|
def valuexmlnode; self.xmlnode.elements.first end
|
@@ -128,8 +132,9 @@ class Cell < XMLTiedItem
|
|
128
132
|
when gt == Float then
|
129
133
|
remove_all_value_attributes_and_content
|
130
134
|
set_type_attribute('float')
|
131
|
-
|
132
|
-
|
135
|
+
sav=avalue.to_f.to_s # to_f handles case when avalue is decimal number
|
136
|
+
Tools.set_ns_attribute(xmlnode,'office','value', sav)
|
137
|
+
xmlnode << Tools.prepare_ns_node('text','p', sav)
|
133
138
|
when gt == String then
|
134
139
|
remove_all_value_attributes_and_content
|
135
140
|
set_type_attribute('string')
|
@@ -137,14 +142,18 @@ class Cell < XMLTiedItem
|
|
137
142
|
when gt == :datetime then
|
138
143
|
remove_all_value_attributes_and_content
|
139
144
|
set_type_attribute('date')
|
140
|
-
avalue
|
141
|
-
|
142
|
-
|
145
|
+
if avalue.kind_of?(DateTime) or avalue.kind_of?(Date) or avalue.kind_of?(Time)
|
146
|
+
avalue = avalue.strftime(InternalDateTimeFormat)
|
147
|
+
Tools.set_ns_attribute(xmlnode,'office','date-value', avalue)
|
148
|
+
xmlnode << Tools.prepare_ns_node('text','p', avalue)
|
149
|
+
end
|
143
150
|
when gt == :time then
|
144
151
|
remove_all_value_attributes_and_content
|
145
152
|
set_type_attribute('time')
|
146
|
-
|
147
|
-
|
153
|
+
if avalue.kind_of?(DateTime) or avalue.kind_of?(Date) or avalue.kind_of?(Time)
|
154
|
+
Tools.set_ns_attribute(xmlnode,'office','time-value', avalue.strftime(InternalTimeFormat))
|
155
|
+
xmlnode << Tools.prepare_ns_node('text','p', avalue.strftime('%H:%M'))
|
156
|
+
end
|
148
157
|
when gt == :percentage then
|
149
158
|
remove_all_value_attributes_and_content
|
150
159
|
set_type_attribute('percentage')
|
@@ -153,8 +162,10 @@ class Cell < XMLTiedItem
|
|
153
162
|
when gt == :currency then
|
154
163
|
remove_all_value_attributes_and_content
|
155
164
|
set_type_attribute('currency')
|
156
|
-
|
157
|
-
|
165
|
+
unless avalue.nil?
|
166
|
+
Tools.set_ns_attribute(xmlnode,'office','value', '%f' % avalue.to_d)
|
167
|
+
xmlnode << Tools.prepare_ns_node('text','p', avalue.to_d.to_s+' '+self.format.currency)
|
168
|
+
end
|
158
169
|
end
|
159
170
|
else
|
160
171
|
raise "Unknown cell mode #{self.mode}"
|
@@ -203,7 +214,7 @@ class Cell < XMLTiedItem
|
|
203
214
|
else nil
|
204
215
|
end
|
205
216
|
result = valueguess
|
206
|
-
|
217
|
+
|
207
218
|
if valueguess.nil? # valueguess is most important if not succesfull then try guessing by type from node xml
|
208
219
|
typ = xmlnode.nil? ? 'N/A' : xmlnode.attributes['value-type']
|
209
220
|
typeguess = case typ
|
@@ -256,9 +267,6 @@ class Cell < XMLTiedItem
|
|
256
267
|
def format
|
257
268
|
@format ||= CellFormat.new(self)
|
258
269
|
end
|
259
|
-
def address
|
260
|
-
Tools.convert_cell_coordinates_to_address(coordinates)
|
261
|
-
end
|
262
270
|
|
263
271
|
def formula
|
264
272
|
rawformula = Tools.get_ns_attribute(xmlnode,'table','formula',nil).andand.value
|
data/lib/rspreadsheet/row.rb
CHANGED
@@ -37,12 +37,18 @@ class Row < XMLTiedItem
|
|
37
37
|
initialize_xml_tied_item(aworksheet,arowi)
|
38
38
|
end
|
39
39
|
|
40
|
-
# @!group Syntactic sugar
|
41
|
-
def cells(*params)
|
40
|
+
# @!group Syntactic sugar
|
41
|
+
def cells(*params)
|
42
|
+
if params.length == 1
|
43
|
+
subitems(Tools.convert_column_name_to_index(params[0]))
|
44
|
+
else
|
45
|
+
subitems(*params)
|
46
|
+
end
|
47
|
+
end
|
42
48
|
alias :cell :cells
|
43
49
|
|
44
50
|
## @return [String or Float or Date] value of the cell
|
45
|
-
# @param coli [Integer] colum index of the cell
|
51
|
+
# @param coli [Integer ot String] colum index of the cell of colum letter
|
46
52
|
# returns value of the cell at column `coli`.
|
47
53
|
#
|
48
54
|
# @row = @worksheet.rows(5) # with cells containing names of months
|
data/lib/rspreadsheet/tools.rb
CHANGED
@@ -13,22 +13,22 @@ module Tools
|
|
13
13
|
if addr.length == 1
|
14
14
|
addr[0].to_s.match(/^([A-Za-z]{1,3})(\d{1,8})$/)
|
15
15
|
colname = $~[1]
|
16
|
-
|
16
|
+
rowi = $~[2].to_i
|
17
17
|
elsif addr.length == 2
|
18
18
|
a = addr[0]; b = addr[1]
|
19
19
|
if a.kind_of?(Integer) and b.kind_of?(Integer) # most common case first
|
20
|
-
colname,
|
20
|
+
colname,rowi = b,a
|
21
21
|
elsif only_letters?(a)
|
22
22
|
if kind_of_integer?(b)
|
23
|
-
colname,
|
23
|
+
colname,rowi = a,b.to_i
|
24
24
|
else
|
25
25
|
raise 'Wrong parameters - first is letters, but the seconds is not digits only'
|
26
26
|
end
|
27
27
|
elsif kind_of_integer?(a)
|
28
28
|
if only_letters?(b)
|
29
|
-
colname,
|
29
|
+
colname,rowi = b,a.to_i
|
30
30
|
elsif kind_of_integer?(b)
|
31
|
-
colname,
|
31
|
+
colname,rowi = b.to_i,a.to_i
|
32
32
|
else
|
33
33
|
raise 'Wrong second out of two paremeters - mix of digits and numbers'
|
34
34
|
end
|
@@ -39,24 +39,23 @@ module Tools
|
|
39
39
|
raise 'Wrong number of arguments'
|
40
40
|
end
|
41
41
|
|
42
|
+
return [rowi,convert_column_name_to_index(colname)]
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.convert_column_name_to_index(colname)
|
46
|
+
return colname if colname.kind_of?(Integer)
|
42
47
|
## first possibility how to implement it
|
43
48
|
# colname=colname.rjust(3,'@')
|
44
|
-
#
|
49
|
+
# return (colname[-1].ord-64)+(colname[-2].ord-64)*26+(colname[-3].ord-64)*26*26
|
45
50
|
|
46
51
|
## second possibility how to implement it
|
47
|
-
#
|
52
|
+
# return (colname.to_i(36)-('A'*colname.size).to_i(36)).to_s(36).to_i(26)+('1'*colname.size).to_i(26)
|
48
53
|
|
49
|
-
if colname.kind_of?(Integer)
|
50
|
-
col=colname
|
51
|
-
else
|
52
54
|
## third possibility how to implement it (second one little shortened)
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
row = rowname
|
58
|
-
return [row,col]
|
55
|
+
s=colname.size
|
56
|
+
return (colname.to_s.upcase.to_i(36)-(36**s-1).div(3.5)).to_s(36).to_i(26)+(26**s-1)/25
|
59
57
|
end
|
58
|
+
|
60
59
|
def self.convert_cell_coordinates_to_address(*coords)
|
61
60
|
coords = coords[0] if coords.length == 1
|
62
61
|
raise 'Wrong number of arguments' if coords.length != 2
|
@@ -200,4 +199,4 @@ class Range
|
|
200
199
|
res = self.end-self.begin+1
|
201
200
|
res>0 ? res : 0
|
202
201
|
end
|
203
|
-
end
|
202
|
+
end
|
data/lib/rspreadsheet/version.rb
CHANGED
@@ -106,7 +106,7 @@ class Worksheet
|
|
106
106
|
when 1..2
|
107
107
|
r,c = Rspreadsheet::Tools.a2c(*params)
|
108
108
|
row(r).andand.cell(c)
|
109
|
-
else raise
|
109
|
+
else raise ArgumentError.new('Wrong number of arguments.')
|
110
110
|
end
|
111
111
|
end
|
112
112
|
alias :cell :cells
|
@@ -128,8 +128,9 @@ class Worksheet
|
|
128
128
|
super
|
129
129
|
end
|
130
130
|
end
|
131
|
+
alias :rowcount :size
|
131
132
|
def used_rows_range
|
132
|
-
1..self.
|
133
|
+
1..self.rowcount
|
133
134
|
end
|
134
135
|
end
|
135
136
|
|
@@ -74,7 +74,7 @@ module XMLTiedArray
|
|
74
74
|
case params.length
|
75
75
|
when 0 then subitems_array
|
76
76
|
when 1 then subitem(params[0])
|
77
|
-
else raise
|
77
|
+
else raise ArgumentError.new('Wrong number of arguments.')
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -129,7 +129,6 @@ module XMLTiedArray
|
|
129
129
|
# @!group inserting new subnodes TODO: refactor out repeatable connected code
|
130
130
|
def insert_new_empty_subnode_before(aindex)
|
131
131
|
node_after = my_subnode(aindex)
|
132
|
-
|
133
132
|
if !node_after.nil?
|
134
133
|
node_after.prev = prepare_empty_subnode
|
135
134
|
return node_after.prev
|
@@ -162,7 +161,7 @@ module XMLTiedArray
|
|
162
161
|
def prepare_empty_xmlnode
|
163
162
|
raise 'xmlnode is empty and I do not know how to create empty xmlnode. Please provide prepare_empty_xmlnode method in your object.'
|
164
163
|
end
|
165
|
-
|
164
|
+
|
166
165
|
# @!group finding and accessing subnodes
|
167
166
|
# array containing subnodes of xmlnode which represent subitems
|
168
167
|
def xmlsubnodes
|
@@ -61,7 +61,7 @@ module XMLTiedArray_WithRepeatableItems
|
|
61
61
|
node.remove! # remove the original node
|
62
62
|
else # insert outbound xmlnode
|
63
63
|
[index+1..aindex-1,aindex..aindex].reject {|range| range.size<1}.each do |range|
|
64
|
-
axmlnode <<
|
64
|
+
axmlnode << prepare_repeated_subnode(range.size, options)
|
65
65
|
end
|
66
66
|
end #TODO: Out of bounds indexes handling
|
67
67
|
return my_subnode(aindex)
|
data/rspreadsheet.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
|
28
28
|
# runtime dependencies
|
29
29
|
unless package_natively_installed?('ruby-libxml')
|
30
|
-
spec.add_runtime_dependency 'libxml-ruby', '
|
30
|
+
spec.add_runtime_dependency 'libxml-ruby', '3.0' # parsing XML files
|
31
31
|
end
|
32
32
|
spec.add_runtime_dependency 'rubyzip', '~>1.1' # opening zip files
|
33
33
|
spec.add_runtime_dependency 'andand', '~>1.3'
|
data/spec/cell_spec.rb
CHANGED
@@ -452,4 +452,25 @@ describe Rspreadsheet::Cell do
|
|
452
452
|
it 'automatically creates new style, if a style is automatic, some of its attributes changes and there are several cells pointing to it', :penting=>'' do
|
453
453
|
|
454
454
|
end
|
455
|
+
|
456
|
+
it 'gracedully accepts nil in assignement' do
|
457
|
+
expect {
|
458
|
+
@sheet2.cell('B1').value = nil
|
459
|
+
@sheet2.cell('B2').value = nil
|
460
|
+
@sheet2.cell('B3').value = nil
|
461
|
+
@sheet2.cell('B22').value = nil
|
462
|
+
@sheet2.cell('D22').value = nil
|
463
|
+
@sheet2.cell('F22').value = nil
|
464
|
+
}.not_to raise_error
|
465
|
+
end
|
466
|
+
it 'can be inserted before existing cell and this one is shifted right' do
|
467
|
+
@sheet1.B2 = 'test'
|
468
|
+
@sheet1.B2.should == 'test'
|
469
|
+
inscell = @sheet1.insert_cell_before(2,2)
|
470
|
+
inscell.value = 'new'
|
471
|
+
@sheet1.B2.should == 'new'
|
472
|
+
@sheet1.C2.should == 'test'
|
473
|
+
inscell = @sheet1.insert_cell_before(2,4) # should not move cells with data
|
474
|
+
@sheet1.C2.should == 'test'
|
475
|
+
end
|
455
476
|
end
|
@@ -21,8 +21,8 @@ if RUBY_VERSION > '2.1'
|
|
21
21
|
@m2 = LibXML::XML::Node.new('a')
|
22
22
|
end
|
23
23
|
it 'can compare nodes' do
|
24
|
-
@n.should == @m
|
25
|
-
@n.should_not == @m2
|
24
|
+
@n.to_s.should == @m.to_s
|
25
|
+
@n.to_s.should_not == @m2.to_s
|
26
26
|
end
|
27
27
|
it 'has correct elements' do
|
28
28
|
# raise @n.first_diff(@m).inspect
|
@@ -46,4 +46,4 @@ if RUBY_VERSION > '2.1'
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
|
-
end
|
49
|
+
end
|
data/spec/io_spec.rb
CHANGED
data/spec/row_spec.rb
CHANGED
data/spec/rspreadsheet_spec.rb
CHANGED
@@ -48,8 +48,7 @@ describe Rspreadsheet do
|
|
48
48
|
|
49
49
|
@content_xml2.root.first_diff(@content_xml1.root).should be_nil
|
50
50
|
@content_xml1.root.first_diff(@content_xml2.root).should be_nil
|
51
|
-
|
52
|
-
@content_xml1.root.should == @content_xml2.root
|
51
|
+
@content_xml1.root.to_s.should == @content_xml2.root.to_s
|
53
52
|
end
|
54
53
|
|
55
54
|
it 'when open and save file modified, than the file is different' do
|
data/spec/worksheet_spec.rb
CHANGED
@@ -8,6 +8,7 @@ describe Rspreadsheet::Worksheet do
|
|
8
8
|
end
|
9
9
|
it 'contains nonempty xml in rows for testfile' do
|
10
10
|
@sheet.rows(1).xmlnode.elements.size.should be >1
|
11
|
+
@sheet.rows(1).xml.index '<text:p>text</text:p>'
|
11
12
|
end
|
12
13
|
it 'uses detach_my_subnode_respect_repeated well' do
|
13
14
|
@sheet.cell(50,12).mode.should_not == :regular
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rspreadsheet/xml_tied_array'
|
3
|
+
|
4
|
+
describe Rspreadsheet::XMLTiedArray do
|
5
|
+
before do
|
6
|
+
@book = Rspreadsheet.new
|
7
|
+
@sheet = @book.create_worksheet
|
8
|
+
class TestXMLTiedArray
|
9
|
+
include Rspreadsheet::XMLTiedArray
|
10
|
+
end
|
11
|
+
end
|
12
|
+
it 'method subitems does not accept 2 parameteres' do
|
13
|
+
expect {@sheet.subitems(1,2)}.to raise_error ArgumentError
|
14
|
+
end
|
15
|
+
it 'does not have xmlnode method by default' do
|
16
|
+
tx = TestXMLTiedArray.new
|
17
|
+
expect {tx.xmlnode}.to raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'raises when prepare_empty_xmlnode fails in insert_new_empty_subnode_before' do
|
21
|
+
class TestXMLTiedArray
|
22
|
+
def subitem_xml_options; {} end
|
23
|
+
def xmlnode; nil end
|
24
|
+
end
|
25
|
+
|
26
|
+
tx = TestXMLTiedArray.new
|
27
|
+
expect {tx.insert_new_empty_subnode_before(0)}.to raise_error IndexError
|
28
|
+
expect {tx.insert_new_empty_subnode_before(1)}.to raise_error /create empty xmlnode/
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspreadsheet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
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: 2017-04
|
11
|
+
date: 2017-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: libxml-ruby
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.8'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '2.8'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rubyzip
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,34 +108,6 @@ dependencies:
|
|
122
108
|
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0.7'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: guard
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '2.13'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '2.13'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: guard-rspec
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '4.6'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '4.6'
|
153
111
|
description: Manipulating OpenDocument spreadsheets with Ruby. This gem can create
|
154
112
|
new, read existing files abd modify them. When modyfying files, it tries to change
|
155
113
|
as little as possible, making it as much forward compatifle as possible.
|
@@ -208,6 +166,7 @@ files:
|
|
208
166
|
- spec/tools_spec.rb
|
209
167
|
- spec/workbook_spec.rb
|
210
168
|
- spec/worksheet_spec.rb
|
169
|
+
- spec/xml_tied_spec.rb
|
211
170
|
homepage: https://github.com/gorn/rspreadsheet
|
212
171
|
licenses:
|
213
172
|
- GPL
|
@@ -228,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
187
|
version: '0'
|
229
188
|
requirements: []
|
230
189
|
rubyforge_project:
|
231
|
-
rubygems_version: 2.
|
190
|
+
rubygems_version: 2.2.2
|
232
191
|
signing_key:
|
233
192
|
specification_version: 4
|
234
193
|
summary: Manipulating spreadsheets with Ruby (read / create / modify OpenDocument
|
@@ -250,3 +209,4 @@ test_files:
|
|
250
209
|
- spec/tools_spec.rb
|
251
210
|
- spec/workbook_spec.rb
|
252
211
|
- spec/worksheet_spec.rb
|
212
|
+
- spec/xml_tied_spec.rb
|