Sha256: 51411ba57a5aad9cec860a4dd60d31df1429055ecce223fa33dac272e1600dbb

Contents?: true

Size: 1.27 KB

Versions: 19

Compression:

Stored size: 1.27 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, mode: :strict)
      rescue
        $stderr.puts "Record is not valid JSON and will be skipped: '#{line.chomp}'"
        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

19 entries across 19 versions & 1 rubygems

Version Path
dap-1.3.1 lib/dap/input.rb
dap-1.3.0 lib/dap/input.rb
dap-1.2.9 lib/dap/input.rb
dap-1.2.8 lib/dap/input.rb
dap-1.2.7 lib/dap/input.rb
dap-1.2.6 lib/dap/input.rb
dap-1.2.5 lib/dap/input.rb
dap-1.2.4 lib/dap/input.rb
dap-1.2.3 lib/dap/input.rb
dap-1.2.2 lib/dap/input.rb
dap-1.2.1 lib/dap/input.rb
dap-1.2.0 lib/dap/input.rb
dap-1.0.2 lib/dap/input.rb
dap-1.0.1 lib/dap/input.rb
dap-1.0.0 lib/dap/input.rb
dap-0.1.24 lib/dap/input.rb
dap-0.1.23 lib/dap/input.rb
dap-0.1.22 lib/dap/input.rb
dap-0.1.21 lib/dap/input.rb