Sha256: 87970521ddbc58dab069f6f1647ac80ae1f909ed4e36c3a0aec97eda446296f3

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

require 'digest/md5'
require 'iconv'
require 'uri'
require 'tmpdir'
require 'active_support'
begin; require 'active_support/core_ext/object/blank'; rescue MissingSourceFile; end
begin; require 'active_support/core_ext/string/inflections'; rescue MissingSourceFile; end
begin; require 'active_support/core_ext/array/wrap'; rescue MissingSourceFile; end
begin; require 'active_support/core_ext/hash/except'; rescue MissingSourceFile; end
require 'fastercsv'
require 'slither'
require 'roo'
require 'remote_table/transform'
require 'remote_table/request'
require 'remote_table/package'
require 'remote_table/file'
require 'remote_table/file/csv'
require 'remote_table/file/fixed_width'
require 'remote_table/file/roo_spreadsheet'
require 'remote_table/file/ods'
require 'remote_table/file/xls'

class RemoteTable
  attr_accessor :request, :package, :file, :transform
  attr_accessor :table
  
  def initialize(bus)
    @transform = Transform.new(bus)
    @package = Package.new(bus)
    @request = Request.new(bus)
    @file = File.new(bus)
  end
  
  def each_row
    finish_table! unless table
    table.each_row { |row| yield row }
  end
  
  def rows
    cache_rows! if @_row_cache.nil?
    @_row_cache
  end
  
  private
  
  def finish_table!
    package_path = request.download
    file_path = package.stage(package_path)
    raw_table = file.tabulate(file_path)
    self.table = transform.apply(raw_table) # must return something that responds to each_row
  end
  
  def cache_rows!
    @_row_cache = []
    each_row { |row| @_row_cache << row }
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
remote_table-0.2.10 lib/remote_table.rb