Sha256: e922a0654278e34a3897aef127a30c3d6cb52b516ad55f5a1b38c1f1e2e2d169

Contents?: true

Size: 1.06 KB

Versions: 8

Compression:

Stored size: 1.06 KB

Contents

# -- coding: utf-8


class KyotoTycoon
  module Tsvrpc
    def self.parse(body, colenc)
      decoder = case colenc
        when "U"
          lambda{|body| CGI.unescape(body)}
        when "B"
          lambda{|body| Base64.decode64(body)}
        when nil
          lambda{|body| body}
        else
          raise "Unknown colenc(response) '#{colenc}'"
      end
      body.split("\n").inject({}){|r, line|
        k,v = *line.split("\t", 2).map{|v| decoder.call(v)}
        r[k] = v
        r
      }
    end

    def self.build_query(params, colenc='U')
      query = ""
      if params
        encoder = case colenc.to_s.upcase.to_sym
          when :U
            lambda{|body| CGI.escape(body.to_s)}
          when :B
            lambda{|body| [body.to_s].pack('m').gsub("\n","")}
          else
            raise "Unknown colenc '#{colenc}'"
        end
        query = params.inject([]){|r, tmp|
          unless tmp.last.nil?
            r << tmp.map{|v| encoder.call(v)}.join("\t")
          end
          r
        }.join("\r\n")
      end
      query
    end
  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
genki-kyototycoon-0.6.1 lib/kyototycoon/tsvrpc.rb
kyototycoon-0.6.1 lib/kyototycoon/tsvrpc.rb
genki-kyototycoon-0.6.0.1 lib/kyototycoon/tsvrpc.rb
kyototycoon-0.6.0 lib/kyototycoon/tsvrpc.rb
kyototycoon-0.5.6 lib/kyototycoon/tsvrpc.rb
kyototycoon-0.5.5 lib/kyototycoon/tsvrpc.rb
kyototycoon-0.5.4 lib/kyototycoon/tsvrpc.rb
kyototycoon-0.5.3 lib/kyototycoon/tsvrpc.rb