DistelliClientFramework 1.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/distelli/clientframework.rb +42 -25
  2. metadata +3 -3
@@ -62,10 +62,10 @@ module Distelli
62
62
  end
63
63
 
64
64
  # Canonicalize the resource
65
- if request_info.resource_uri == nil
65
+ if request_info.resource == nil
66
66
  string_to_sign.push("")
67
67
  else
68
- string_to_sign.push(request_info.resource_uri)
68
+ string_to_sign.push(request_info.resource)
69
69
  end
70
70
 
71
71
  sorted_params = Array.new
@@ -122,15 +122,30 @@ module Distelli
122
122
 
123
123
  end
124
124
 
125
+ private
126
+ def get_netloc(endpoint)
127
+ uriparse_result = URI.parse(endpoint)
128
+ netloc = uriparse_result.host
129
+ scheme = uriparse_result.scheme
130
+ port = uriparse_result.port
131
+ if port != nil
132
+ if scheme == "http" and port != 80
133
+ netloc = netloc+":"+port.to_s
134
+ else
135
+ netloc = netloc+":"+port
136
+ end
137
+ end
138
+ if scheme != nil and scheme.length() > 0
139
+ return scheme+"://"+netloc
140
+ end
141
+ return netloc
142
+ end
143
+
125
144
  def execute(request_info)
126
145
  if @endpoint == nil
127
146
  raise ClientException.new("Invalid endpoint: "+@endpoint.to_s)
128
147
  end
129
- @logger.debug("Executing request to endpoint: "+@endpoint.to_s)
130
- # uri_str = @endpoint
131
- # if request_info.resource_uri != nil
132
- # uri_str = uri_str+request_info.resource_uri
133
- # end
148
+ # @logger.debug("Executing request to endpoint: "+@endpoint.to_s)
134
149
 
135
150
  request_info.add_header(ServiceConstants::OPERATION_HEADER, request_info.operation)
136
151
  request_info.add_header(ServiceConstants::CONTENT_TYPE_HEADER, request_info.content_type)
@@ -154,10 +169,21 @@ module Distelli
154
169
  request_info.add_header(ServiceConstants::DATE_HEADER, cur_time.strftime("%a, %d %b %Y %H:%M:%S %z"))
155
170
 
156
171
  # Create the URI
157
- uri = URI.parse(request_info.get_uri(@endpoint))
172
+ endpoint = get_netloc(@endpoint)
173
+ if request_info.resource == nil
174
+ request_info.resource = "/"
175
+ end
158
176
 
159
- # TODO: Set the Content-MD5 header
177
+ query_string = request_info.get_query_string()
178
+ if query_string == nil
179
+ uri = URI.join(endpoint.to_s, request_info.resource.to_s)
180
+ else
181
+ uri = URI.join(endpoint.to_s, request_info.resource.to_s, query_string.to_s)
182
+ end
160
183
 
184
+ @logger.debug("Executing request to [#{endpoint}], [#{request_info.resource}] uri: "+uri.to_s)
185
+
186
+ # TODO: Set the Content-MD5 header
161
187
  # Set the authentication headers
162
188
  if @credentials != nil
163
189
  signer = RequestSigner.new
@@ -278,14 +304,14 @@ module Distelli
278
304
  end
279
305
 
280
306
  class RequestInfo
281
- attr_accessor :query_params, :headers, :resource_uri, :operation, :request_id, :request, :request_bytes
307
+ attr_accessor :query_params, :headers, :resource, :operation, :request_id, :request, :request_bytes
282
308
  VALID_CONTENT_TYPES = Set.new [ServiceConstants::CONTENT_TYPE_JSON, ServiceConstants::CONTENT_TYPE_XML, ServiceConstants::CONTENT_TYPE_OCTET_STREAM]
283
309
  VALID_HTTP_METHODS = Set.new [ServiceConstants::HTTP_METHOD_GET, ServiceConstants::HTTP_METHOD_PUT, ServiceConstants::HTTP_METHOD_POST, ServiceConstants::HTTP_METHOD_DELETE]
284
310
  VALID_RESPONSE_TYPES = Set.new [ServiceConstants::RESPONSE_TYPE_XML, ServiceConstants::RESPONSE_TYPE_JSON]
285
311
  def initialize()
286
312
  @query_params = Hash.new
287
313
  @headers = Hash.new
288
- @resource_uri = "/"
314
+ @resource = "/"
289
315
  @operation = nil
290
316
  @request_id = nil
291
317
  @content_type = ServiceConstants::CONTENT_TYPE_JSON
@@ -295,26 +321,17 @@ module Distelli
295
321
  @response_type = ServiceConstants::RESPONSE_TYPE_JSON
296
322
  end
297
323
 
298
- # Returns tho fully qualified uri by concatenating the endpoint
299
- # and the resource_uri and adding the query params
300
- def get_uri(endpoint)
301
- uriparse_result = URI.parse(endpoint)
302
- uri_str = endpoint
303
- resource_uri = uriparse_result.path
304
- if resource_uri == nil or resource_uri.length() == 0
305
- resource_uri = "/"
306
- uri_str = endpoint+resource_uri
307
- end
308
-
309
- @resource_uri = resource_uri
310
- # now build the query string
324
+ def get_query_string()
311
325
  query_param_list = Array.new
312
326
  @query_params.each_pair do |k,v|
313
327
  v.each do |x|
314
328
  query_param_list.push(k+'='+x)
315
329
  end
316
330
  end
317
- return uri_str+'?'+query_param_list.join('&')
331
+ if query_param_list.length() > 0
332
+ return '?'+query_param_list.join('&')
333
+ end
334
+ return nil
318
335
  end
319
336
 
320
337
  #Lets implement the to_s method of the RequestInfo
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: DistelliClientFramework
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.1'
4
+ version: '1.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-04 00:00:00.000000000 Z
12
+ date: 2012-12-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: DistelliServiceMarshallers
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  version: '0'
55
55
  requirements: []
56
56
  rubyforge_project:
57
- rubygems_version: 1.8.23
57
+ rubygems_version: 1.8.24
58
58
  signing_key:
59
59
  specification_version: 3
60
60
  summary: Distelli Client classes and marshallers for Ruby Clients