Class: Projects::Util::ZohoHTTPClient

Inherits:
Object
  • Object
show all
Includes:
Pexception
Defined in:
lib/projects/util/ZohoHTTPClient.rb

Overview

  • ZohoHTTPClient is used to make a HTTP request execution for GET, POST, PUT and DELETE requests.

Class Method Summary collapse

Class Method Details

.delete(url, queryMap) ⇒ Object



196
197
198
199
200
201
202
# File 'lib/projects/util/ZohoHTTPClient.rb', line 196

def self.delete(url,queryMap)
  url = getUrl(url, queryMap)
  http,uri= getHttpUri(url)
  request = Net::HTTP::Delete.new(uri.request_uri, initheader = getHeader)
  response = http.request(request)
  getResult(response)
end

.get(url, queryMap) ⇒ Object



113
114
115
116
117
118
119
# File 'lib/projects/util/ZohoHTTPClient.rb', line 113

def self.get(url,queryMap)
  url = getUrl(url, queryMap)
  http,uri= getHttpUri(url)
  request = Net::HTTP::Get.new(uri.request_uri, initheader = getHeader)
  response = http.request(request)
  getResult(response)
end

.getHeaderObject

Returns

  • header for the http request



75
76
77
78
79
80
81
82
# File 'lib/projects/util/ZohoHTTPClient.rb', line 75

def self.getHeader
  header = Hash.new
  header["Accept"] = "application/json"
  header["Content-Type"] = "application/x-www-form-urlencoded"
  header["Accept-Charset"] = "UTF-8"
  header["User-Agent"] = "ZohoProjects-Ruby-Wrappers/0.0.7"
  return header
end

.getHttpUri(url) ⇒ Object

  • Returns the http and uri objects for making request and response

Parameters

  • http
    • Object of NET::HTTP

  • uri
    • Object of URI which parses the url of the request



48
49
50
51
52
53
54
55
56
# File 'lib/projects/util/ZohoHTTPClient.rb', line 48

def self.getHttpUri(url)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http.open_timeout = 60
  http.read_timeout = 80
  return [http, uri]
end

.getResult(response) ⇒ Object

  • Evaluates the response

Parameters

  • response
    • The response of the HTTP request

  • Returns response body is success or terminates the program



92
93
94
95
96
97
98
99
100
# File 'lib/projects/util/ZohoHTTPClient.rb', line 92

def self.getResult(response)
  if response.code.to_i == 200 || response.code.to_i == 201
    return response.body
  elsif response.code.to_i == 204
    abort("No Result for the specified request")
  else
    throwsException(response.body)
  end
end

.getUrl(url, queryMap) ⇒ Object

  • Returns the url string for making the request.

Parameters

  • url
    • Service URL passed by the user.

  • queryMap
    • This queryMap contains the query string parameters in the form of key, value pair.

Returns

  • Url in String.



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/projects/util/ZohoHTTPClient.rb', line 26

def self.getUrl(url,queryMap)
  url = url + '?'
  i = 0
  queryMap.each do |key, value|
    if i == 0
      url = url+key+'='+String(value)
      i=i+1
    else
      url = url+'&'+key+'='+String(value)
    end
  end
  return url
end

.post(url, queryMap, paramMap, fileBody = nil) ⇒ Object

  • Make a POST request and create a resource for the given URL and a MultiPart form data.

  • Calls getResult to return the JSON response String.

Parameters

  • url
    • Service URL passed by the user.

  • queryMap
    • This queryMap contains the query string parameters in the form of key, value pair.

  • requestBody
    • This requestBody contains the form data for the POST request.

  • fileBody
    • This fileBody contains the attachment files for the POST request.



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/projects/util/ZohoHTTPClient.rb', line 135

def self.post(url, queryMap, paramMap, fileBody=nil)
  if fileBody == nil
    url = getUrl(url, queryMap)
    http,uri= getHttpUri(url)
    request = Net::HTTP::Post.new(uri.request_uri, initheader = getHeader)
    request.set_form_data(paramMap)
    response = http.request(request)
    getResult(response)
  else
    begin
      url = getUrl(url, queryMap)
      @BOUNDARY = "AaB03x"
      header = Hash.new
      header["Accept"] = "application/json"
      header["Content-Type"] = "multipart/form-data; boundary="+ @BOUNDARY
      header["Accept-Charset"] = "UTF-8"
      header["User-Agent"] = "ZohoBooks-Java-Wrappers/1.0"
      http,uri= getHttpUri(url)
      request = Net::HTTP::Post.new(uri.request_uri, initheader = header)
      post_body = []
      paramMap.each do |key, val|
        post_body << "--#{@BOUNDARY}\r\n"
        post_body << "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n#{val}\r\n"  
      end
      fileBody.each do |key, val|
        for i in 0...val.length
          post_body << "--#{@BOUNDARY}\r\n"
          post_body << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{File.basename(val[i].path)}\"\r\n"
          post_body << "Content-Type: application/octet-stream\r\n"
          post_body << "\r\n"
          post_body << File.read(val[i].path)
          post_body << "\r\n"
        end
      end
      post_body << "--#{@BOUNDARY}--\r\n"
      request.body = post_body.join
      response = http.request(request)
      getResult(response)
    ensure 
      fileBody.each do |key, val|
        for i in 0...val.length
          if !val[i].closed?
            val[i].close
          end
        end
      end
    end
  end
end

.throwsException(message) ⇒ Object

  • Raises ProjectsException when this method is called

Parameters

  • message
    • Response message of the request

Raises:



64
65
66
67
68
# File 'lib/projects/util/ZohoHTTPClient.rb', line 64

def self.throwsException(message)
  error_json = JSON.parse message
  error_array = error_json["error"]
  raise ProjectsException.new(error_array["code"],error_array["message"])
end