module SimpleUri

Constants

MODES
VERSION

Public Class Methods

connect(url='', method=nil, options={ params: nil, user: nil, password: nil, debug: debug_mode }) click to toggle source
# File lib/simple_uri.rb, line 13
def connect(url='', method=nil, options={ params: nil, user: nil, password: nil, debug: debug_mode })
  uri = URI.parse(URI.encode(prepare_url(url)))
  http = Net::HTTP.new(uri.host, uri.port)
  http.read_timeout = 1000
  debug_http(http)
  if url.match(/^https/)
    debug_msg 'Use SSL'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  req = "Net::HTTP::#{method.to_s.capitalize}".constantize.new(uri.path+options[:params].to_s)
  if options[:user] && options[:password]
    req.basic_auth options[:user], options[:password]
    debug_msg 'Basic auth'
  end
  [req, http]
end
req(url=nil, method=:get, options={ params: nil, req_body: nil, req_headers: nil, user: nil, password: nil, debug: debug_mode, autofix: autofix_mode, cookies: false })
Alias for: send_request
send_request(url=nil, method=:get, options={ params: nil, req_body: nil, req_headers: nil, user: nil, password: nil, debug: debug_mode, autofix: autofix_mode, cookies: false }) click to toggle source
# File lib/simple_uri.rb, line 31
def send_request(url=nil, method=:get, options={ params: nil, req_body: nil, req_headers: nil, user: nil, password: nil, debug: debug_mode, autofix: autofix_mode, cookies: false })
  enable_debug_mode(options[:debug])
  enable_autofix_mode(options[:autofix])
  get_params = options[:req_body] ? '?'+prepare_req_body(options[:req_body]).to_s : ''
  options[:params] = (method==:post || method==:put) ? nil : get_params
  req, http = connect(url, method, { params: options[:params], user: options[:user], password: options[:password], debug: options[:debug] })
  req.body = prepare_req_body(options[:req_body]) if (method==:post || method==:put)
  options[:req_headers].each { |k, v| req[k] = v } if options[:req_headers]
  res = http.request(req)
  res.body
  res_body = begin
               JSON.parse(res.body)
             rescue
               debug_msg 'Can\'t convert response to JSON'
               res.body
             end
  options[:cookies] ? { body: res_body, cookies: res.response['set-cookie'] } : res_body
end
Also aliased as: req

Private Class Methods

autofix_mode(mode=nil) click to toggle source
# File lib/simple_uri.rb, line 97
def autofix_mode(mode=nil)
  MODES[:autofix]=mode unless mode.nil?
  MODES[:autofix]
end
debug_http(http) click to toggle source
# File lib/simple_uri.rb, line 84
def debug_http(http)
  http.set_debug_output(debug_output) if debug_mode
end
debug_mode(mode=nil) click to toggle source
# File lib/simple_uri.rb, line 92
def debug_mode(mode=nil)
  MODES[:debug]=mode unless mode.nil?
  MODES[:debug]
end
debug_msg(msg) click to toggle source
# File lib/simple_uri.rb, line 80
def debug_msg(msg)
  @log.debug(msg) if @log && debug_mode
end
debug_output() click to toggle source
# File lib/simple_uri.rb, line 88
def debug_output
  STDOUT
end
enable_autofix_mode(enabled) click to toggle source
# File lib/simple_uri.rb, line 76
def enable_autofix_mode(enabled)
  autofix_mode(true) if enabled
end
enable_debug_mode(enabled) click to toggle source
# File lib/simple_uri.rb, line 68
def enable_debug_mode(enabled)
  if enabled
    debug_mode(true)
    @log = Logger.new(debug_output)
    @log.level = Logger::DEBUG
  end
end
prepare_req_body(body) click to toggle source
# File lib/simple_uri.rb, line 53
def prepare_req_body(body)
  (body.is_a?(Hash))? URI.encode_www_form(body) : body
end
prepare_url(url) click to toggle source
# File lib/simple_uri.rb, line 57
def prepare_url(url)
  if autofix_mode
    m = url.match(/http(s)?:\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.\w{2,5}(:\d+)?\/([1-9.\w])+(.{0})/) #TODO
    if m && m[0]==url && url[-1] != '/'
      url += '/'
      debug_msg 'Append \'/\' to url.'
    end
  end
  url
end