class WebApiMethod

Constants

OK

Public Class Methods

new(target, type, data, header, dumper, parser, &block) click to toggle source
# File lib/web_api/web_api_method.rb, line 26
def initialize(target, type, data, header, dumper, parser, &block)
  @target, @type, @data, @header, @dumper, @parser, @block =
   target,  type,  data,  header,  dumper,  parser,  block
end

Public Instance Methods

escape(s) click to toggle source

Escapes value’s string representation for query string use.

# File lib/web_api/web_api_method.rb, line 10
def escape(s)
  # Contraction of ERB#url_encode method
  s.to_s.b.gsub(/[^\w\-.~]/n){sprintf("%%%02X",_1.unpack1("C"))}
end
http_response(request) click to toggle source
# File lib/web_api/web_api_method.rb, line 84
def http_response(request)
  http = net_http(request)
  case request.type
  when :get, :delete, :head, :copy, :move, :options, :trace
    http.method(request.type).call request.uri, request.header
  when :post, :patch, :lock, :unlock, :mkcol, :propfind, :proppatch
    http.method(request.type)
      .call request.uri, request.payload, request.header
  else
    raise UnsupportedMethodError,
      "Method type #{type}(#{type.class}) not supported by WebApi."
  end
end
http_response_body(request) click to toggle source
# File lib/web_api/web_api_method.rb, line 74
def http_response_body(request)
  response = http_response(request)
  unless OK === response.code.to_i
    $stderr.puts response.code
    $stderr.puts response.body
    raise ResponseError, response.message
  end
  return response.body, response['content-type'].sub(/;.*$/,'')
end
net_http(request) click to toggle source
# File lib/web_api/web_api_method.rb, line 98
def net_http(request)
  http = Net::HTTP.new(request.host, request.port)
  http.use_ssl = request.scheme=='https'
  return http
end
query_string(ah) click to toggle source
# File lib/web_api/web_api_method.rb, line 15
def query_string(ah)
  case ah
  when Array
    ah.select{!_1.empty?}.map{query_string _1}.join('&')
  when Hash
    ah.map{"#{_1}=#{escape _2}"}.join('&')
  else
    ah.to_s
  end
end
run(extension, type, data, header, dumper, parser, &block) click to toggle source
# File lib/web_api/web_api_method.rb, line 54
def run(extension, type, data, header, dumper, parser, &block)
  request        = CRStruct::Open.new
  request.url    = @target+extension
  request.type   = type || @type
  request.data   = @data.merge(data)
  request.header = @header.merge(header)
  request.dumper = dumper || @dumper

  parser ||= @parser
  block  ||= @block

  uri_parse(request)
  block.call(request) if block

  body, content = http_response_body(request)
  parser = parser[content]   if parser.is_a? Hash
  body   = parser.call(body) if parser and parser!=:none
  return body
end
uri_parse(request) click to toggle source

uri_parse(request: CRStruct) -> N/A Expects request to have url, data, type, and dumper. Sets the request’s scheme, host, port, uri, and payload

# File lib/web_api/web_api_method.rb, line 34
def uri_parse(request)
  uri = URI.parse(request.url)
  request_uri = uri.request_uri
  payload = ''
  unless request.data.empty?
    if request.type == :post
      if dumper=request.dumper and (dumper!=:none)
        payload = dumper.call(request.data)
      else
        payload = query_string(request.data)
      end
    else
      payload = query_string(request.data)
      request_uri += (uri.query ? '&' : '?') + payload
    end
  end
  request.scheme, request.host, request.port, request.uri, request.payload =
      uri.scheme,     uri.host,     uri.port, request_uri,         payload
end