class Plagscan::Request

PlagScan HTTP request service

Constants

DEFAULT_REQUEST_OPTIONS

Public Class Methods

api_url(path = '') click to toggle source
# File lib/plagscan/request.rb, line 17
def api_url(path = '')
  Plagscan.api_base + path
end
json_request(path, options = {}) click to toggle source
# File lib/plagscan/request.rb, line 32
def json_request(path, options = {})
  response = Plagscan::Request.request(path, options)

  unless response.is_a?(options[:expected_result] || Net::HTTPSuccess)
    raise Plagscan::HTTPError, "Invalid http response: #{response.code} - #{response.body}"
  end

  JSON.parse response.body, symbolize_names: true
rescue JSON::ParserError
  raise Plagscan::JsonParseError, "PlagScan response parse error: #{response.body}"
end
request(path, options = {}) click to toggle source
# File lib/plagscan/request.rb, line 25
def request(path, options = {})
  options = DEFAULT_REQUEST_OPTIONS.merge(options)
  http = create_http(options)
  req = create_request(path, options)
  http.start { http.request(req) }
end
user_agent() click to toggle source
# File lib/plagscan/request.rb, line 21
def user_agent
  "PlagScan-Ruby/#{Plagscan::VERSION}"
end

Private Class Methods

add_body(request, body) click to toggle source
# File lib/plagscan/request.rb, line 84
def add_body(request, body)
  if body.is_a? Hash
    if body.any? { |_, v| v.is_a? File }
      encoded_body = body.map { |k, v| [k.to_s, v.is_a?(File) ? v : v.to_s] }
      request.set_form encoded_body, 'multipart/form-data'
    else
      request.body = body.to_json
      request.content_type = 'application/json'
    end
  else
    request.body = body.to_s
  end
end
body_request(uri, headers, options) click to toggle source
# File lib/plagscan/request.rb, line 70
def body_request(uri, headers, options)
  uri += '?access_token=' + options[:access_token] if options[:access_token]
  req = http_method(options).new(uri, headers)
  add_body(req, options[:body]) if options[:body]
  req
end
create_http(options) click to toggle source
# File lib/plagscan/request.rb, line 46
def create_http(options)
  uri = URI api_url
  http = Net::HTTP.new(uri.host, uri.port)

  if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = options[:ssl_verify_mode]
    http.ca_file = options[:ssl_ca_file] if options[:ssl_ca_file]
  end

  http
end
create_request(path, options) click to toggle source
# File lib/plagscan/request.rb, line 59
def create_request(path, options)
  headers = { 'User-Agent' => user_agent }
  uri = api_url path

  if %i[post put patch].include? options[:method]
    body_request uri, headers, options
  else
    uri_request uri, headers, options
  end
end
http_method(options) click to toggle source
# File lib/plagscan/request.rb, line 98
def http_method(options)
  method = options[:method].to_s.downcase
  method = method[0].upcase.concat(method[1..-1])
  Net::HTTP.const_get(method)
rescue NameError
  raise Plagscan::InvalidMethodError, "`#{options[:method]}` is not a valid HTTP method"
end
uri_request(uri, headers, options) click to toggle source
# File lib/plagscan/request.rb, line 77
def uri_request(uri, headers, options)
  body = options[:body] || {}
  body[:access_token] = options[:access_token] if options[:access_token]
  uri += '?' + body.map { |k, v| "#{k}=#{v}" }.join('&') unless body.empty?
  http_method(options).new(uri, headers)
end