roo 1.10.2 → 1.10.3
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/Gemfile +5 -1
- data/Gemfile.lock +13 -8
- data/History.txt +15 -0
- data/lib/roo.rb +1 -1
- data/lib/roo/excel2003xml.rb +0 -1
- data/lib/roo/excelx.rb +0 -1
- data/lib/roo/generic_spreadsheet.rb +5 -0
- data/lib/roo/openoffice.rb +26 -19
- data/roo.gemspec +6 -6
- data/test/test_helper.rb +2 -1
- data/test/test_roo.rb +16 -0
- metadata +8 -2
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,32 +1,36 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
roo (1.10.
|
5
|
-
nokogiri (>= 1.
|
6
|
-
rubyzip (>= 0.9.
|
4
|
+
roo (1.10.3)
|
5
|
+
nokogiri (>= 1.4.0)
|
6
|
+
rubyzip (>= 0.9.9)
|
7
7
|
spreadsheet (> 0.6.4)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
|
+
addressable (2.3.2)
|
12
13
|
bones (3.8.0)
|
13
14
|
little-plugger (~> 1.1.3)
|
14
15
|
loquacious (~> 1.9.1)
|
15
16
|
rake (>= 0.8.7)
|
17
|
+
crack (0.3.1)
|
16
18
|
little-plugger (1.1.3)
|
17
19
|
loquacious (1.9.1)
|
18
|
-
nokogiri (1.5.
|
19
|
-
nokogiri (1.5.5-java)
|
20
|
+
nokogiri (1.5.6)
|
20
21
|
rake (0.9.2.2)
|
21
|
-
ruby-ole (1.2.11.
|
22
|
+
ruby-ole (1.2.11.6)
|
22
23
|
rubyzip (0.9.9)
|
23
24
|
shoulda (3.0.1)
|
24
25
|
shoulda-context (~> 1.0.0)
|
25
26
|
shoulda-matchers (~> 1.0.0)
|
26
27
|
shoulda-context (1.0.0)
|
27
28
|
shoulda-matchers (1.0.0)
|
28
|
-
spreadsheet (0.
|
29
|
+
spreadsheet (0.8.2)
|
29
30
|
ruby-ole (>= 1.0)
|
31
|
+
webmock (1.9.0)
|
32
|
+
addressable (>= 2.2.7)
|
33
|
+
crack (>= 0.1.7)
|
30
34
|
|
31
35
|
PLATFORMS
|
32
36
|
java
|
@@ -35,4 +39,5 @@ PLATFORMS
|
|
35
39
|
DEPENDENCIES
|
36
40
|
bones (>= 3.8.0)
|
37
41
|
roo!
|
38
|
-
shoulda
|
42
|
+
shoulda
|
43
|
+
webmock
|
data/History.txt
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
== 1.10.3 2013-03-03
|
2
|
+
|
3
|
+
* 1 bugfix
|
4
|
+
* Support both nokogiri 1.5.5 and 1.5.6 (Karsten Richter) https://github.com/Empact/roo/pull/18
|
5
|
+
|
6
|
+
* 1 enhancement
|
7
|
+
* Relax our nokogiri dependency back to 1.4.0, as we have no particular reason
|
8
|
+
to require a newer version.
|
9
|
+
|
10
|
+
== 1.10.2 2013-02-03
|
11
|
+
|
12
|
+
* 2 bugfixes
|
13
|
+
* Support opening URIs with query strings https://github.com/Empact/roo/commit/abf94bdb59cabc16d4f7764025e88e3661983525
|
14
|
+
* Support both http: & https: urls https://github.com/Empact/roo/commit/fc5c5899d96dd5f9fbb68125d0efc8ce9be2c7e1
|
15
|
+
|
1
16
|
== 1.10.1 2011-11-14
|
2
17
|
|
3
18
|
* 2 bugfixes
|
data/lib/roo.rb
CHANGED
data/lib/roo/excel2003xml.rb
CHANGED
data/lib/roo/excelx.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'tmpdir'
|
4
4
|
require 'stringio'
|
5
|
+
require 'zip/zipfilesystem'
|
5
6
|
|
6
7
|
# Base class for all other types of spreadsheets
|
7
8
|
class Roo::GenericSpreadsheet
|
@@ -536,6 +537,10 @@ class Roo::GenericSpreadsheet
|
|
536
537
|
else
|
537
538
|
raise "unknown file type: #{ext}"
|
538
539
|
end
|
540
|
+
|
541
|
+
if uri?(filename) && qs_begin = filename.rindex('?')
|
542
|
+
filename = filename[0..qs_begin-1]
|
543
|
+
end
|
539
544
|
if File.extname(filename).downcase != ext
|
540
545
|
case warning_level
|
541
546
|
when :error
|
data/lib/roo/openoffice.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'fileutils'
|
3
|
-
require 'zip/zipfilesystem'
|
4
3
|
require 'date'
|
5
4
|
require 'nokogiri'
|
6
5
|
require 'cgi'
|
@@ -184,7 +183,7 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
184
183
|
def sheets
|
185
184
|
return_sheets = []
|
186
185
|
@doc.xpath("//*[local-name()='table']").each do |sheet|
|
187
|
-
return_sheets << sheet[
|
186
|
+
return_sheets << sheet.attributes["name"].value
|
188
187
|
end
|
189
188
|
return_sheets
|
190
189
|
end
|
@@ -271,7 +270,7 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
271
270
|
# read the version of the OO-Version
|
272
271
|
def oo_version
|
273
272
|
@doc.xpath("//*[local-name()='document-content']").each do |office|
|
274
|
-
@officeversion = office
|
273
|
+
@officeversion = attr(office,'version')
|
275
274
|
end
|
276
275
|
end
|
277
276
|
|
@@ -299,10 +298,10 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
299
298
|
@cell[sheet][key] = str_v
|
300
299
|
when :date
|
301
300
|
#TODO: if table_cell.attributes['date-value'].size != "XXXX-XX-XX".size
|
302
|
-
if table_cell
|
301
|
+
if attr(table_cell,'date-value').size != "XXXX-XX-XX".size
|
303
302
|
#-- dann ist noch eine Uhrzeit vorhanden
|
304
303
|
#-- "1961-11-21T12:17:18"
|
305
|
-
@cell[sheet][key] = DateTime.parse(table_cell
|
304
|
+
@cell[sheet][key] = DateTime.parse(attr(table_cell,'date-value').to_s)
|
306
305
|
@cell_type[sheet][key] = :datetime
|
307
306
|
else
|
308
307
|
@cell[sheet][key] = table_cell.attributes['date-value']
|
@@ -328,7 +327,7 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
328
327
|
sheet_found = false
|
329
328
|
|
330
329
|
@doc.xpath("//*[local-name()='table']").each do |ws|
|
331
|
-
if sheet == ws
|
330
|
+
if sheet == attr(ws,'name')
|
332
331
|
sheet_found = true
|
333
332
|
col = 1
|
334
333
|
row = 1
|
@@ -338,15 +337,15 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
338
337
|
@style_defaults[sheet] << table_element.attributes['default-cell-style-name']
|
339
338
|
when 'table-row'
|
340
339
|
if table_element.attributes['number-rows-repeated']
|
341
|
-
skip_row = table_element
|
340
|
+
skip_row = attr(table_element,'number-rows-repeated').to_s.to_i
|
342
341
|
row = row + skip_row - 1
|
343
342
|
end
|
344
343
|
table_element.children.each do |cell|
|
345
|
-
skip_col = cell
|
346
|
-
formula = cell
|
347
|
-
value_type = cell
|
348
|
-
v = cell
|
349
|
-
style_name = cell
|
344
|
+
skip_col = attr(cell, 'number-columns-repeated')
|
345
|
+
formula = attr(cell,'formula')
|
346
|
+
value_type = attr(cell,'value-type')
|
347
|
+
v = attr(cell,'value')
|
348
|
+
style_name = attr(cell,'style-name')
|
350
349
|
case value_type
|
351
350
|
when 'string'
|
352
351
|
str_v = ''
|
@@ -407,7 +406,7 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
407
406
|
when 'float'
|
408
407
|
#
|
409
408
|
when 'boolean'
|
410
|
-
v = cell
|
409
|
+
v = attr(cell,'boolean-value').to_s
|
411
410
|
else
|
412
411
|
# raise "unknown type #{value_type}"
|
413
412
|
end
|
@@ -449,8 +448,8 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
449
448
|
#-
|
450
449
|
# $Sheet1.$C$5
|
451
450
|
#+
|
452
|
-
name = ne
|
453
|
-
sheetname,coords = ne
|
451
|
+
name = attr(ne,'name').to_s
|
452
|
+
sheetname,coords = attr(ne,'cell-range-address').to_s.split('.$')
|
454
453
|
col, row = coords.split('$')
|
455
454
|
sheetname = sheetname[1..-1] if sheetname[0,1] == '$'
|
456
455
|
[name, [sheetname,row,col]]
|
@@ -461,12 +460,12 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
461
460
|
@style_definitions['Default'] = Roo::Openoffice::Font.new
|
462
461
|
style_elements.each do |style|
|
463
462
|
next unless style.name == 'style'
|
464
|
-
style_name = style
|
463
|
+
style_name = attr(style,'name')
|
465
464
|
style.each do |properties|
|
466
465
|
font = Roo::Openoffice::Font.new
|
467
|
-
font.bold = properties
|
468
|
-
font.italic = properties
|
469
|
-
font.underline = properties
|
466
|
+
font.bold = attr(properties,'font-weight')
|
467
|
+
font.italic = attr(properties,'font-style')
|
468
|
+
font.underline = attr(properties,'text-underline-style')
|
470
469
|
@style_definitions[style_name] = font
|
471
470
|
end
|
472
471
|
end
|
@@ -507,6 +506,14 @@ class Roo::Openoffice < Roo::GenericSpreadsheet
|
|
507
506
|
result
|
508
507
|
end
|
509
508
|
|
509
|
+
|
510
|
+
private
|
511
|
+
def attr(node, attr_name)
|
512
|
+
if node.attributes[attr_name]
|
513
|
+
node.attributes[attr_name].value
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
510
517
|
end # class
|
511
518
|
|
512
519
|
# Libreoffice is just an alias for Roo::Openoffice class
|
data/roo.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "roo"
|
5
|
-
s.version = "1.10.
|
5
|
+
s.version = "1.10.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Thomas Preymesser", "Hugh McGowan", "Ben Woosley"]
|
9
|
-
s.date = "
|
9
|
+
s.date = "2013-03-04"
|
10
10
|
s.description = "Roo can access the contents of various spreadsheet files. It can handle\n* Openoffice\n* Excel\n* Google spreadsheets\n* Excelx\n* Libreoffice\n* CSV"
|
11
11
|
s.email = "thopre@gmail.com"
|
12
12
|
s.executables = ["roo"]
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.rdoc_options = ["--main", "README.txt"]
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
s.rubyforge_project = "roo"
|
19
|
-
s.rubygems_version = "1.8.
|
19
|
+
s.rubygems_version = "1.8.24"
|
20
20
|
s.summary = "Roo can access the contents of various spreadsheet files."
|
21
21
|
s.test_files = ["test/test_generic_spreadsheet.rb", "test/test_helper.rb", "test/test_roo.rb"]
|
22
22
|
|
@@ -25,18 +25,18 @@ Gem::Specification.new do |s|
|
|
25
25
|
|
26
26
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
27
|
s.add_runtime_dependency(%q<spreadsheet>, ["> 0.6.4"])
|
28
|
-
s.add_runtime_dependency(%q<nokogiri>, [">= 1.
|
28
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.0"])
|
29
29
|
s.add_runtime_dependency(%q<rubyzip>, [">= 0.9.9"])
|
30
30
|
s.add_development_dependency(%q<bones>, [">= 3.8.0"])
|
31
31
|
else
|
32
32
|
s.add_dependency(%q<spreadsheet>, ["> 0.6.4"])
|
33
|
-
s.add_dependency(%q<nokogiri>, [">= 1.
|
33
|
+
s.add_dependency(%q<nokogiri>, [">= 1.4.0"])
|
34
34
|
s.add_dependency(%q<rubyzip>, [">= 0.9.9"])
|
35
35
|
s.add_dependency(%q<bones>, [">= 3.8.0"])
|
36
36
|
end
|
37
37
|
else
|
38
38
|
s.add_dependency(%q<spreadsheet>, ["> 0.6.4"])
|
39
|
-
s.add_dependency(%q<nokogiri>, [">= 1.
|
39
|
+
s.add_dependency(%q<nokogiri>, [">= 1.4.0"])
|
40
40
|
s.add_dependency(%q<rubyzip>, [">= 0.9.9"])
|
41
41
|
s.add_dependency(%q<bones>, [">= 3.8.0"])
|
42
42
|
end
|
data/test/test_helper.rb
CHANGED
@@ -7,6 +7,7 @@ require 'fileutils'
|
|
7
7
|
require 'timeout'
|
8
8
|
require 'logger'
|
9
9
|
require 'date'
|
10
|
+
require 'webmock/test_unit'
|
10
11
|
|
11
12
|
# require gem files
|
12
13
|
require File.dirname(__FILE__) + '/../lib/roo'
|
@@ -186,4 +187,4 @@ class Test::Unit::TestCase
|
|
186
187
|
# )
|
187
188
|
# end
|
188
189
|
# end
|
189
|
-
end
|
190
|
+
end
|
data/test/test_roo.rb
CHANGED
@@ -2684,6 +2684,22 @@ This attached file is the newer format of Microsoft Excel (.xlsx).
|
|
2684
2684
|
end
|
2685
2685
|
end
|
2686
2686
|
|
2687
|
+
def test_open_from_uri_with_query_string
|
2688
|
+
dir = File.expand_path("#{File.dirname __FILE__}/files")
|
2689
|
+
{ xls: [EXCEL, Roo::Excel],
|
2690
|
+
xlsx: [EXCELX, Roo::Excelx],
|
2691
|
+
ods: [OPENOFFICE, Roo::Openoffice]}.each do |extension, (flag, type)|
|
2692
|
+
if flag
|
2693
|
+
file = "#{dir}/simple_spreadsheet.#{extension}"
|
2694
|
+
url = "http://test.example.com/simple_spreadsheet.#{extension}?query-param=value"
|
2695
|
+
stub_request(:any, url).to_return(body: File.read(file))
|
2696
|
+
spreadsheet = type.new(url)
|
2697
|
+
spreadsheet.default_sheet = spreadsheet.sheets.first
|
2698
|
+
assert_equal 'Task 1', spreadsheet.cell('f', 4)
|
2699
|
+
end
|
2700
|
+
end
|
2701
|
+
end
|
2702
|
+
|
2687
2703
|
def test_to_ascii_openoffice #file does not exist
|
2688
2704
|
local_only do
|
2689
2705
|
with_each_spreadsheet(:name=>'verysimple_spreadsheet', :format=>:openoffice) do |oo|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.10.
|
4
|
+
version: 1.10.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-03-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: spreadsheet
|
@@ -252,12 +252,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
252
252
|
- - ! '>='
|
253
253
|
- !ruby/object:Gem::Version
|
254
254
|
version: '0'
|
255
|
+
segments:
|
256
|
+
- 0
|
257
|
+
hash: 888687487029488184
|
255
258
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
259
|
none: false
|
257
260
|
requirements:
|
258
261
|
- - ! '>='
|
259
262
|
- !ruby/object:Gem::Version
|
260
263
|
version: '0'
|
264
|
+
segments:
|
265
|
+
- 0
|
266
|
+
hash: 888687487029488184
|
261
267
|
requirements: []
|
262
268
|
rubyforge_project: roo
|
263
269
|
rubygems_version: 1.8.24
|