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