fluidfeatures 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/fluidfeatures/client.rb +48 -11
 - data/lib/fluidfeatures/version.rb +1 -1
 - metadata +1 -1
 
    
        data/lib/fluidfeatures/client.rb
    CHANGED
    
    | 
         @@ -14,6 +14,9 @@ module FluidFeatures 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                API_REQUEST_LOG_MAX_SIZE = 200
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
                # Do not gzip request or response body if size is under N bytes
         
     | 
| 
      
 18 
     | 
    
         
            +
                MIN_GZIP_SIZE = 1024
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       17 
20 
     | 
    
         
             
                def initialize(base_uri, logger)
         
     | 
| 
       18 
21 
     | 
    
         | 
| 
       19 
22 
     | 
    
         
             
                  @uuid = UUID.new.generate
         
     | 
| 
         @@ -83,8 +86,10 @@ module FluidFeatures 
     | 
|
| 
       83 
86 
     | 
    
         
             
                  begin
         
     | 
| 
       84 
87 
     | 
    
         | 
| 
       85 
88 
     | 
    
         
             
                    request = Net::HTTP::Get.new url_path
         
     | 
| 
      
 89 
     | 
    
         
            +
                    request["Authorization"] = auth_token
         
     | 
| 
       86 
90 
     | 
    
         
             
                    request["Accept"] = "application/json"
         
     | 
| 
       87 
     | 
    
         
            -
                    request[ 
     | 
| 
      
 91 
     | 
    
         
            +
                    request["Accept-Encoding"] = "gzip"
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
       88 
93 
     | 
    
         
             
                    @etags_lock.synchronize do
         
     | 
| 
       89 
94 
     | 
    
         
             
                      if cache and @etags.has_key? url_path
         
     | 
| 
       90 
95 
     | 
    
         
             
                        request["If-None-Match"] = @etags[url_path][:etag]
         
     | 
| 
         @@ -101,7 +106,7 @@ module FluidFeatures 
     | 
|
| 
       101 
106 
     | 
    
         
             
                        no_change = true
         
     | 
| 
       102 
107 
     | 
    
         
             
                        success = true
         
     | 
| 
       103 
108 
     | 
    
         
             
                      elsif response.is_a? Net::HTTPSuccess
         
     | 
| 
       104 
     | 
    
         
            -
                        payload =  
     | 
| 
      
 109 
     | 
    
         
            +
                        payload = parse_response_body response
         
     | 
| 
       105 
110 
     | 
    
         
             
                        if cache
         
     | 
| 
       106 
111 
     | 
    
         
             
                          @etags_lock.synchronize do
         
     | 
| 
       107 
112 
     | 
    
         
             
                            @etags[url_path] = {
         
     | 
| 
         @@ -112,7 +117,7 @@ module FluidFeatures 
     | 
|
| 
       112 
117 
     | 
    
         
             
                        end
         
     | 
| 
       113 
118 
     | 
    
         
             
                        success = true
         
     | 
| 
       114 
119 
     | 
    
         
             
                      else
         
     | 
| 
       115 
     | 
    
         
            -
                        payload =  
     | 
| 
      
 120 
     | 
    
         
            +
                        payload = parse_response_body response
         
     | 
| 
       116 
121 
     | 
    
         
             
                        if payload and payload.is_a? Hash and payload.has_key? "error"
         
     | 
| 
       117 
122 
     | 
    
         
             
                          err_msg = payload["error"]
         
     | 
| 
       118 
123 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -143,11 +148,12 @@ module FluidFeatures 
     | 
|
| 
       143 
148 
     | 
    
         
             
                  err_msg = nil
         
     | 
| 
       144 
149 
     | 
    
         
             
                  success = false
         
     | 
| 
       145 
150 
     | 
    
         
             
                  begin
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
       146 
152 
     | 
    
         
             
                    request = Net::HTTP::Put.new uri_path
         
     | 
| 
       147 
     | 
    
         
            -
                    request[" 
     | 
| 
      
 153 
     | 
    
         
            +
                    request["Authorization"] = auth_token
         
     | 
| 
       148 
154 
     | 
    
         
             
                    request["Accept"] = "application/json"
         
     | 
| 
       149 
     | 
    
         
            -
                    request[ 
     | 
| 
       150 
     | 
    
         
            -
                    request 
     | 
| 
      
 155 
     | 
    
         
            +
                    request["Accept-Encoding"] = "gzip"
         
     | 
| 
      
 156 
     | 
    
         
            +
                    encode_request_body(request, payload)
         
     | 
| 
       151 
157 
     | 
    
         | 
| 
       152 
158 
     | 
    
         
             
                    request_start_time = Time.now
         
     | 
| 
       153 
159 
     | 
    
         
             
                    response = @http.request uri, request
         
     | 
| 
         @@ -158,7 +164,7 @@ module FluidFeatures 
     | 
|
| 
       158 
164 
     | 
    
         
             
                    if response.is_a? Net::HTTPSuccess
         
     | 
| 
       159 
165 
     | 
    
         
             
                      success = true
         
     | 
| 
       160 
166 
     | 
    
         
             
                    else
         
     | 
| 
       161 
     | 
    
         
            -
                      response_payload =  
     | 
| 
      
 167 
     | 
    
         
            +
                      response_payload = parse_response_body response
         
     | 
| 
       162 
168 
     | 
    
         
             
                      if response_payload.is_a? Hash and response_payload.has_key? "error"
         
     | 
| 
       163 
169 
     | 
    
         
             
                        err_msg = response_payload["error"]
         
     | 
| 
       164 
170 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -183,11 +189,12 @@ module FluidFeatures 
     | 
|
| 
       183 
189 
     | 
    
         
             
                  err_msg = nil
         
     | 
| 
       184 
190 
     | 
    
         
             
                  success = false
         
     | 
| 
       185 
191 
     | 
    
         
             
                  begin
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
       186 
193 
     | 
    
         
             
                    request = Net::HTTP::Post.new url_path
         
     | 
| 
       187 
     | 
    
         
            -
                    request["Content-Type"] = "application/json"
         
     | 
| 
       188 
194 
     | 
    
         
             
                    request["Accept"] = "application/json"
         
     | 
| 
       189 
     | 
    
         
            -
                    request[ 
     | 
| 
       190 
     | 
    
         
            -
                    request 
     | 
| 
      
 195 
     | 
    
         
            +
                    request["Accept-Encoding"] = "gzip"
         
     | 
| 
      
 196 
     | 
    
         
            +
                    request["Authorization"] = auth_token
         
     | 
| 
      
 197 
     | 
    
         
            +
                    encode_request_body(request, payload)
         
     | 
| 
       191 
198 
     | 
    
         | 
| 
       192 
199 
     | 
    
         
             
                    request_start_time = Time.now
         
     | 
| 
       193 
200 
     | 
    
         
             
                    response = @http.request request
         
     | 
| 
         @@ -198,7 +205,7 @@ module FluidFeatures 
     | 
|
| 
       198 
205 
     | 
    
         
             
                    if response.is_a? Net::HTTPSuccess
         
     | 
| 
       199 
206 
     | 
    
         
             
                      success = true
         
     | 
| 
       200 
207 
     | 
    
         
             
                    else
         
     | 
| 
       201 
     | 
    
         
            -
                      response_payload =  
     | 
| 
      
 208 
     | 
    
         
            +
                      response_payload = parse_response_body response
         
     | 
| 
       202 
209 
     | 
    
         
             
                      if response_payload.is_a? Hash and response_payload.has_key? "error"
         
     | 
| 
       203 
210 
     | 
    
         
             
                        err_msg = response_payload["error"]
         
     | 
| 
       204 
211 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -215,5 +222,35 @@ module FluidFeatures 
     | 
|
| 
       215 
222 
     | 
    
         
             
                  return success
         
     | 
| 
       216 
223 
     | 
    
         
             
                end
         
     | 
| 
       217 
224 
     | 
    
         | 
| 
      
 225 
     | 
    
         
            +
                def parse_response_body response
         
     | 
| 
      
 226 
     | 
    
         
            +
                  content = response.body
         
     | 
| 
      
 227 
     | 
    
         
            +
                  if response["Content-Encoding"] == "gzip"
         
     | 
| 
      
 228 
     | 
    
         
            +
                    content = Zlib::GzipReader.new(
         
     | 
| 
      
 229 
     | 
    
         
            +
                      StringIO.new(content)
         
     | 
| 
      
 230 
     | 
    
         
            +
                    ).read
         
     | 
| 
      
 231 
     | 
    
         
            +
                  end
         
     | 
| 
      
 232 
     | 
    
         
            +
                  JSON.load(content) rescue nil
         
     | 
| 
      
 233 
     | 
    
         
            +
                end
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
                def encode_request_body(request, payload, encoding="gzip")
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
                  # Encode as JSON string
         
     | 
| 
      
 238 
     | 
    
         
            +
                  content = JSON.dump(payload)
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
                  # Gzip compress if necessary
         
     | 
| 
      
 241 
     | 
    
         
            +
                  if encoding == "gzip" and content.size >= MIN_GZIP_SIZE
         
     | 
| 
      
 242 
     | 
    
         
            +
                    compressed = StringIO.new
         
     | 
| 
      
 243 
     | 
    
         
            +
                    gz_writer = Zlib::GzipWriter.new(compressed)
         
     | 
| 
      
 244 
     | 
    
         
            +
                    gz_writer.write(content)
         
     | 
| 
      
 245 
     | 
    
         
            +
                    gz_writer.close
         
     | 
| 
      
 246 
     | 
    
         
            +
                    content = compressed.string
         
     | 
| 
      
 247 
     | 
    
         
            +
                  end
         
     | 
| 
      
 248 
     | 
    
         
            +
             
     | 
| 
      
 249 
     | 
    
         
            +
                  request["Content-Type"] = "application/json"
         
     | 
| 
      
 250 
     | 
    
         
            +
                  request["Content-Encoding"] = encoding
         
     | 
| 
      
 251 
     | 
    
         
            +
                  request.body = content
         
     | 
| 
      
 252 
     | 
    
         
            +
             
     | 
| 
      
 253 
     | 
    
         
            +
                end
         
     | 
| 
      
 254 
     | 
    
         
            +
             
     | 
| 
       218 
255 
     | 
    
         
             
              end
         
     | 
| 
       219 
256 
     | 
    
         
             
            end
         
     |