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
         |