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