module Itesttool
Constants
- VERSION
Public Class Methods
add_headers(request)
click to toggle source
# File lib/itesttool.rb, line 89 def add_headers(request) if @headers then @headers.each{|k, v| request.add_field k, v} end end
decorate_response(res, method, url, res_format)
click to toggle source
# File lib/itesttool.rb, line 112 def decorate_response(res, method, url, res_format) class << res attr_accessor :url, :res_format, :method def [](path) select(path) end def select(path, &block) result = if res_format && res_format == "xml" Nokogiri::XML(body).xpath(path).map{|x| x.text} elsif res_format && res_format == "html" Nokogiri::HTML(body).css(path).map{|x| x.text} elsif res_format && res_format == "json" JsonPath.on(body, path) end block.call(result) unless block.nil? result end def to_s method + " " + url end end res.url = url res.res_format = res_format res.method = method res end
execute_request(url_obj, data, &block)
click to toggle source
# File lib/itesttool.rb, line 140 def execute_request(url_obj, data, &block) Net::HTTP.start(url_obj.host, url_obj.port, :use_ssl => /https/ === url_obj.scheme) {|http| request = block.call set_body(request, data) unless data.nil? add_headers(request) http.request(request) } end
get(url, res_format="text", query="")
click to toggle source
# File lib/itesttool.rb, line 55 def get(url, res_format="text", query="") url_obj = URI.parse(url) queries = [] queries.push(query) unless query.empty? queries.push(url_obj.query) unless url_obj.query.nil? path_with_query = if queries.empty? url_obj.path else url_obj.path + "?" + queries.join("&") end res = execute_request(url_obj, nil){Net::HTTP::Get.new(path_with_query)} decorate_response(res, "GET", url, res_format) end
post(url, data, res_format)
click to toggle source
# File lib/itesttool.rb, line 70 def post(url, data, res_format) url_obj = URI.parse(url) res = execute_request(url_obj, data){Net::HTTP::Post.new(url_obj.path)} decorate_response(res, "POST", url, res_format) end
Public Instance Methods
as_html()
click to toggle source
# File lib/itesttool.rb, line 22 def as_html() "html" end
Also aliased as: res_is_html
as_json()
click to toggle source
# File lib/itesttool.rb, line 20 def as_json() "json" end
Also aliased as: res_is_json
as_text()
click to toggle source
# File lib/itesttool.rb, line 19 def as_text() "text" end
as_xml()
click to toggle source
# File lib/itesttool.rb, line 21 def as_xml() "xml" end
Also aliased as: res_is_xml
body(data = "")
click to toggle source
# File lib/itesttool.rb, line 44 def body(data = "") {:body => data} end
body_as_form(data = {})
click to toggle source
# File lib/itesttool.rb, line 47 def body_as_form(data = {}) {:form => data} end
body_as_json(data = {})
click to toggle source
# File lib/itesttool.rb, line 50 def body_as_json(data = {}) {:json => data} end
delete(url, data, res_format)
click to toggle source
# File lib/itesttool.rb, line 82 def delete(url, data, res_format) url_obj = URI.parse(url) res = execute_request(url_obj, data){Net::HTTP::DELETE.new(url_obj.path)} decorate_response(res, "DELETE", url, res_format) end
headers(h = {})
click to toggle source
# File lib/itesttool.rb, line 28 def headers(h = {}) @headers = h end
put(url, data, res_format)
click to toggle source
# File lib/itesttool.rb, line 76 def put(url, data, res_format) url_obj = URI.parse(url) res = execute_request(url_obj, data){Net::HTTP::Put.new(url_obj.path)} decorate_response(res, "PUT", url, res_format) end
query(h = {})
click to toggle source
# File lib/itesttool.rb, line 32 def query(h = {}) q = [] h.each do |k, v| if v.is_a? Array q.concat( v.map { | p | URI.encode(k.to_s) + "=" + URI.encode(p.to_s) } ) else q << URI.encode(k.to_s) + "=" + URI.encode(v.to_s) end end q.join("&") end
Private Instance Methods
add_headers(request)
click to toggle source
# File lib/itesttool.rb, line 89 def add_headers(request) if @headers then @headers.each{|k, v| request.add_field k, v} end end
decorate_response(res, method, url, res_format)
click to toggle source
# File lib/itesttool.rb, line 112 def decorate_response(res, method, url, res_format) class << res attr_accessor :url, :res_format, :method def [](path) select(path) end def select(path, &block) result = if res_format && res_format == "xml" Nokogiri::XML(body).xpath(path).map{|x| x.text} elsif res_format && res_format == "html" Nokogiri::HTML(body).css(path).map{|x| x.text} elsif res_format && res_format == "json" JsonPath.on(body, path) end block.call(result) unless block.nil? result end def to_s method + " " + url end end res.url = url res.res_format = res_format res.method = method res end
encode_kvpair(k, vs)
click to toggle source
# File lib/itesttool.rb, line 108 def encode_kvpair(k, vs) Array(vs).map {|v| "#{URI::encode(k.to_s)}=#{URI::encode(v.to_s)}" } end
execute_request(url_obj, data, &block)
click to toggle source
# File lib/itesttool.rb, line 140 def execute_request(url_obj, data, &block) Net::HTTP.start(url_obj.host, url_obj.port, :use_ssl => /https/ === url_obj.scheme) {|http| request = block.call set_body(request, data) unless data.nil? add_headers(request) http.request(request) } end
get(url, res_format="text", query="")
click to toggle source
# File lib/itesttool.rb, line 55 def get(url, res_format="text", query="") url_obj = URI.parse(url) queries = [] queries.push(query) unless query.empty? queries.push(url_obj.query) unless url_obj.query.nil? path_with_query = if queries.empty? url_obj.path else url_obj.path + "?" + queries.join("&") end res = execute_request(url_obj, nil){Net::HTTP::Get.new(path_with_query)} decorate_response(res, "GET", url, res_format) end
post(url, data, res_format)
click to toggle source
# File lib/itesttool.rb, line 70 def post(url, data, res_format) url_obj = URI.parse(url) res = execute_request(url_obj, data){Net::HTTP::Post.new(url_obj.path)} decorate_response(res, "POST", url, res_format) end
set_body(request, data)
click to toggle source
# File lib/itesttool.rb, line 93 def set_body(request, data) if data.include? :form set_form_data(request, data[:form]) elsif data.include? :json request.body = JSON.generate(data[:json]) else request.body = data[:body] end end
set_form_data(request, params, sep = '&')
click to toggle source
# File lib/itesttool.rb, line 103 def set_form_data(request, params, sep = '&') request.body = params.map {|k, v| encode_kvpair(k, v) }.flatten.join(sep) request.content_type = 'application/x-www-form-urlencoded' end