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