Sha256: 5206dd59552a0a721c21d48b807c0f1745918d992e105b981879a112582c6b8a

Contents?: true

Size: 1.29 KB

Versions: 30

Compression:

Stored size: 1.29 KB

Contents

module CouchRest
  class Streamer

    attr_accessor :default_curl_opts

    def initialize
      self.default_curl_opts = "--silent --no-buffer --tcp-nodelay -H \"Content-Type: application/json\""
    end

    def view(*args)
      raise "CouchRest::Streamer#view is depricated. Please use Database#view with block."
    end

    def get(url, &block)
      open_pipe("curl #{default_curl_opts} \"#{url}\"", &block)
    end

    def post(url, params = {}, &block)
      open_pipe("curl #{default_curl_opts} -d \"#{escape_quotes(MultiJson.encode(params))}\" \"#{url}\"", &block)
    end

    protected

    def escape_quotes(data)
      data.gsub(/"/, '\"')
    end

    def open_pipe(cmd, &block)
      first = nil
      IO.popen(cmd) do |f|
        first = f.gets # discard header
        while line = f.gets 
          row = parse_line(line)
          block.call row unless row.nil? # last line "}]" discarded
        end
      end
      parse_first(first)
    end

    def parse_line line
      return nil unless line
      if /(\{.*\}),?/.match(line.chomp)
        MultiJson.decode($1)
      end
    end

    def parse_first first
      return nil unless first
      parts = first.split(',')
      parts.pop
      line = parts.join(',')
      MultiJson.decode("#{line}}")
    rescue
      nil
    end

  end
end

Version data entries

30 entries across 30 versions & 2 rubygems

Version Path
vulcan-0.8.2 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.8.1 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.8.0 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.7.2 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.7.1 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.7.0 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.6.1 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.6.0 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.5.0 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.4.0 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.3.0 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.2.5 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.2.4 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.2.3 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.2.2 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.2.1 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.2.0 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.1.6 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.1.5 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb
vulcan-0.1.4 server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb