class Requeus::Request
Public Class Methods
from_json(json)
click to toggle source
# File lib/requeus/request.rb, line 25 def self.from_json json r = JSON.parse(json) new r['method'], r['path'], r['params'], r['headers'], r['force_endpoint'], r['files'] end
new(method, path, params, headers, force_endpoint, file_uids = nil)
click to toggle source
# File lib/requeus/request.rb, line 10 def initialize method, path, params, headers, force_endpoint, file_uids = nil @method = method @path = path @params = params.reject{|_, v| as_file(v)} @headers = headers @force_endpoint = force_endpoint if file_uids @files = file_uids else @files = params.reject{|_, v| !as_file(v)} @files.each {|k, v| @files[k] = upload_file(as_file(v)) if as_file(v)} end end
Public Instance Methods
delete_files()
click to toggle source
# File lib/requeus/request.rb, line 70 def delete_files @files.each do |_, uid| blob_sequence.any?{|bs| bs.delete uid} end end
do_request(endpoint)
click to toggle source
# File lib/requeus/request.rb, line 30 def do_request endpoint uri = URI.parse(("http://#{@force_endpoint}" || endpoint) + @path) req_klass = case @method.upcase when 'GET' Net::HTTP::Get when 'POST' Net::HTTP::Post when 'PUT' Net::HTTP::Put when 'DELETE' Net::HTTP::Delete end res = Net::HTTP.start uri.host, uri.port do |http| if @files.present? params = @params.dup @files.each do |k, uid| params[k] = UploadIO.new(download_file(uid), "application/octet-stream") end req = req_klass::Multipart.new uri.path, params else req = req_klass.new uri.path req.form_data = to_http_data(@params) if req_klass::REQUEST_HAS_BODY end @headers.each{|k,v| req.add_field(k, v)} http.request req end if res.is_a? Net::HTTPOK true else puts "Error #{res.code} returned for request:" puts self.to_json false end end
Private Instance Methods
as_file(param)
click to toggle source
# File lib/requeus/request.rb, line 96 def as_file param case param when File, Tempfile param when ActionDispatch::Http::UploadedFile param.tempfile else nil end end
blob_sequence()
click to toggle source
# File lib/requeus/request.rb, line 92 def blob_sequence Requeus::Impl.instance.blob_sequence end
download_file(uid)
click to toggle source
# File lib/requeus/request.rb, line 85 def download_file uid blob_sequence.each do |bs| file = bs.get uid return file if file end end
to_http_data(params)
click to toggle source
todo: make recursion
# File lib/requeus/request.rb, line 108 def to_http_data params result = {} params.each do |k, v| if v.is_a?(Hash) v.each do |k1, v1| result["#{k.to_s}[#{k1.to_s}]"] = (v1.is_a?(Hash) || v1.is_a?(Array)) ? v1.to_json : v1 end else result[k.to_s] = v end end result end
upload_file(file)
click to toggle source
# File lib/requeus/request.rb, line 78 def upload_file file blob_sequence.each do |bs| uid = bs.put file return uid if uid end end