Sha256: c6f366776ceae63eb3e41ec2929f3918a375ccb8624904fa1430ae19d114c5b0

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'csv'
require 'open-uri'

module I2X

  ##
  # = CSVDetector
  #
  # Detect changes in CSV files (using column numbers).
  #
  class CSVDetector < Detector

    public
    ##
    # == Detect the changes
    #
    def detect object

      p "[i2x][CSV] Testing #{object[:uri]}"
      CSV.new(open(object[:uri]), :headers => :first_row).each do |row|
        begin
          unless object[:cache].nil? then
            p "[i2x][CSV] with cache, verifying"
            @response = Cashier.verify row[object[:cache].to_i], object, row, object[:seed]
            
          else
            p "[i2x][CSV] no cache, verifying"
            @cache = Cashier.verify row[0], object, row, object[:seed]
            
          end
        rescue Exception => e
          p "[i2x][CSVDetector] loading error: #{e.inspect}"
        end

        begin

          @cache = JSON.parse(@response, {:symbolize_names => true})
          @templates = @cache[:templates]
          # The actual processing
          #
          if @cache[:cache][:status] == 100 then

            # add row data to payload from selectors (key => key, value => column name)
            payload = Hash.new
            
            object[:selectors].each do |selector|
              selector.each do |k,v|
                payload[k] = row[v.to_i]
              end
            end
            # add payload object to payloads list
            @payloads.push payload
          end

        rescue Exception => e
          p "[i2x][CSVDetector] processing error: #{e.inspect}"
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
i2x-0.0.5 lib/i2x/csvdetector.rb