Class: Cloudsponge::Utility

Inherits:
Object
  • Object
show all
Defined in:
lib/cloudsponge/utility.rb

Class Method Summary collapse

Class Method Details

.decode_response(response) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/cloudsponge/utility.rb', line 31

def self.decode_response(response)
  if response.code_type == Net::HTTPOK
    # decode the response into an asscoiative array
    resp = decode_response_body(response.body, 'json')
    raise CsException.new(resp['error']['message'], response['code']) if resp['error']
  else
    raise CsException.new(response.body, response.code)
  end
  resp
end

.decode_response_body(response, format = 'json') ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/cloudsponge/utility.rb', line 42

def self.decode_response_body(response, format = 'json')
  # TODO: account for systems that use a different JSON parser. Look for json gem...
  # TODO: implement alternate formats: XML
  object = {'error' => {'message' => 'failed to parse data.', 'code' => 1}}
  begin
    object = ActiveSupport::JSON.decode(response)
  rescue
    begin 
      object = JSON.parse(response)
    rescue
    end
  end
  object
end

.get_and_decode_response(full_url) ⇒ Object



25
26
27
28
29
# File 'lib/cloudsponge/utility.rb', line 25

def self.get_and_decode_response(full_url)
  # get the response
  response = get_url(full_url)
  decode_response(response)
end

.get_url(url) ⇒ Object



57
58
59
60
# File 'lib/cloudsponge/utility.rb', line 57

def self.get_url(url)
  url = URI.parse(url)
  open_http(url).get("#{url.path}?#{url.query}")
end

.object_to_query(object) ⇒ Object



14
15
16
17
# File 'lib/cloudsponge/utility.rb', line 14

def self.object_to_query(object)
  return object unless object.is_a? Hash
  object.map{ |k,v| "#{URI.encode(k.to_s)}=#{URI.encode(v.to_s)}" }.join('&')
end

.open_http(url) ⇒ Object



67
68
69
70
71
72
73
74
75
76
# File 'lib/cloudsponge/utility.rb', line 67

def self.open_http(url)
  http = Net::HTTP.new(url.host, url.port)
  # @csimport_http.read_timeout = @timeout || 30
  if url.port == 443
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  http.start unless http.started?
  http
end

.post_and_decode_response(url, params) ⇒ Object



19
20
21
22
23
# File 'lib/cloudsponge/utility.rb', line 19

def self.post_and_decode_response(url, params)
  # post the response
  response = post_url(url, params)
  decode_response(response)
end

.post_url(url, params) ⇒ Object



62
63
64
65
# File 'lib/cloudsponge/utility.rb', line 62

def self.post_url(url, params)
  url = URI.parse(url)
  open_http(url).post("#{url.path}","#{object_to_query(params)}")
end