Sha256: b93886ace1bd170e7ba1efa31a97b57958a3350f42db0e4ee65d4ed070a7f1fe
Contents?: true
Size: 1.27 KB
Versions: 2
Compression:
Stored size: 1.27 KB
Contents
require "rubygems" require "rwget" require "parsley" require "fastercsv" require "activesupport" require "fileutils" class CSVStore def initialize(options = {}) @output_folder = options[:prefix] || "." @filters = options[:filter] || [] FileUtils.mkdir_p(@output_folder) @parselets = (options[:parselets] || []).map{|path| Parsley.new(File.read(path)) } @files = {} @headers = {} end def put(host, tmpfile) @parselets.each do |parselet| begin output = parselet.parse(:file => tmpfile.path) walk(output) rescue ParsleyError => e STDERR.puts "warning: #{e.message}" end end end def walk(data, prefix = nil) data.each do |prefix, values| values = [values] unless values.is_a?(Array) file_name = File.join(@output_folder, "#{prefix}.csv") h = @headers[prefix] ||= values.first.keys f = @files[prefix] ||= FasterCSV.open(file_name, "a", :headers => h, :write_headers => true) values.each do |hash| arr = h.inject([]) do |memo, key| memo << hash[key] end @row = FasterCSV::Row.new(h, arr) @filters.each {|filter| eval(filter) } f << @row end end end def close @files.each do |k, v| v.close end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
fizx-csvget-0.3.0 | lib/csvget.rb |
fizx-csvget-0.3.1 | lib/csvget.rb |