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
res_is_html()
Alias for: as_html
res_is_json()
Alias for: as_json
res_is_xml()
Alias for: as_xml

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