Sha256: efdb9346f140ba31bcb5e742272e009cfdacc660a6ef028533f3bb9d2790b6e7

Contents?: true

Size: 1.26 KB

Versions: 5

Compression:

Stored size: 1.26 KB

Contents

module Dap
module Input

  require 'oj'

  #
  # Error codes for failed reads
  #
  module Error
    EOF   = :eof
    Empty = :empty
    InvalidFormat = :invalid
  end

  module FileSource

    attr_accessor :fd

    def open(file_name)
      close
      self.fd = ['-', 'stdin', nil].include?(file_name) ?
        $stdin : ::File.open(file_name, "rb")
    end

    def close
      self.close if self.fd
      self.fd = nil
    end
  end

  #
  # Line Input
  #
  class InputLines

    include FileSource

    def initialize(args)
      self.open(args.first)
    end

    def read_record
      line = self.fd.readline rescue nil
      return Error::EOF unless line
      { 'line' => line.chomp("\n") }
    end

  end

  #
  # JSON Input (line-delimited records)
  #
  class InputJSON

    include FileSource

    def initialize(args)
      self.open(args.first)
    end

    def read_record
      line = self.fd.readline rescue nil
      return Error::EOF unless line
      begin
        json = Oj.load(line.strip)
      rescue
        $stderr.puts "\nRecord is not valid JSON and will be skipped."
        $stderr.puts line
        return Error::InvalidFormat
      end
      return Error::Empty unless json
      json
    end

  end

end
end

require 'dap/input/warc'
require 'dap/input/csv'

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dap-0.0.15 lib/dap/input.rb
dap-0.0.14 lib/dap/input.rb
dap-0.0.13 lib/dap/input.rb
dap-0.0.12 lib/dap/input.rb
dap-0.0.11 lib/dap/input.rb