ms_rest_azure 0.2.3 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3bc35b29a1cb68a457f14527a362b628b2974677
4
- data.tar.gz: 2a05929f18773754540929f509aab0d18d80d650
3
+ metadata.gz: 97a38496ee61b6d8aae2c6014a39ea693cd14c5a
4
+ data.tar.gz: 0df39d7496a44bd6602792d88e2ddd066dad5409
5
5
  SHA512:
6
- metadata.gz: 57237e0f415c933903b374234a61549443fc74f56c459fa7735686ccbec25ce9cf7e7c9a79c679e27301c9b128e3db1cf597883a827abd277c55bfd871f58418
7
- data.tar.gz: 4ba53a1a08501303f8b6dfe35c447ee750910690d3b8d9a4ee85a05418eb1346b679b25dbc26f74eddb006087954e0ebd46619d10f373ade3d10bf523a2cd3df
6
+ metadata.gz: 8613403ac1c8b3057992513a0b640f088525b70a8d3a1ffb9c907ef89d5571966316b4232902633b27f27eaa73666e7480a7b535d2c5961ab06a7f5f634dde2c
7
+ data.tar.gz: 0349cec779491afc9bec38e9769a90014c439a59d041a86ef89b55fa9ce38165df8613b3f39878ca2fd726d4d9dd044899a34164c43f8962980f652fe1d076f1
@@ -0,0 +1,5 @@
1
+ ##2016.07.14 ms_rest_azure version 0.3.0
2
+ * Embracing latest ms_rest version [0.3.0](https://rubygems.org/gems/ms_rest)
3
+
4
+ ##2016.05.19 ms_rest_azure version 0.2.3
5
+ * Support patch for long running operations. See [#1011](https://github.com/Azure/autorest/pull/1011), [#1056](https://github.com/Azure/autorest/pull/1056)
data/README.md CHANGED
@@ -38,7 +38,7 @@ To start working on the gem the only additional dev dependecy is required - rspe
38
38
  Reference it in the gemfile and also add this line to your client's gemspec file:
39
39
 
40
40
  ```ruby
41
- spec.add_runtime_dependency 'ms_rest_azure', '~> 0.1.0'
41
+ spec.add_runtime_dependency 'ms_rest_azure', '~> 0.3.0'
42
42
  ```
43
43
 
44
44
  Don't forget to correct the version.
@@ -7,13 +7,14 @@ module MsRestAzure
7
7
  # Defines values for AsyncOperationStatus enum.
8
8
  #
9
9
  class AsyncOperationStatus
10
+ ACCEPTED = 'Accepted'
10
11
  IN_PROGRESS_STATUS = 'InProgress'
11
12
  RUNNING = 'Running'
12
13
  SUCCESS_STATUS = 'Succeeded'
13
14
  FAILED_STATUS = 'Failed'
14
15
  CANCELED_STATUS = 'Canceled'
15
16
 
16
- ALL_STATUSES = [FAILED_STATUS, CANCELED_STATUS, SUCCESS_STATUS, IN_PROGRESS_STATUS, RUNNING]
17
+ ALL_STATUSES = [ACCEPTED, FAILED_STATUS, CANCELED_STATUS, SUCCESS_STATUS, IN_PROGRESS_STATUS, RUNNING]
17
18
  FAILED_STATUSES = [FAILED_STATUS, CANCELED_STATUS]
18
19
  TERMINAL_STATUSES = [FAILED_STATUS, CANCELED_STATUS, SUCCESS_STATUS]
19
20
 
@@ -20,6 +20,7 @@ module MsRestAzure
20
20
  # @param custom_deserialization_block [Proc] custom logic for response deserialization.
21
21
  #
22
22
  # @return [MsRest::HttpOperationResponse] the response.
23
+ #
23
24
  def get_long_running_operation_result(azure_response, custom_deserialization_block)
24
25
  check_for_status_code_failure(azure_response)
25
26
 
@@ -36,7 +37,7 @@ module MsRestAzure
36
37
  elsif !polling_state.location_header_link.nil?
37
38
  update_state_from_location_header(polling_state.get_request(headers: request.headers, base_uri: request.base_uri), polling_state, custom_deserialization_block)
38
39
  elsif http_method === :put
39
- get_request = MsRest::HttpOperationRequest.new(request.base_uri, request.build_path.to_s, :get, query_params: request.query_params)
40
+ get_request = MsRest::HttpOperationRequest.new(request.base_uri, request.build_path.to_s, :get, {query_params: request.query_params, headers: request.headers})
40
41
  update_state_from_get_resource_operation(get_request, polling_state, custom_deserialization_block)
41
42
  else
42
43
  task.shutdown
@@ -64,7 +65,7 @@ module MsRestAzure
64
65
  end
65
66
 
66
67
  if (http_method === :put || http_method === :patch) && AsyncOperationStatus.is_successful_status(polling_state.status) && polling_state.resource.nil?
67
- get_request = MsRest::HttpOperationRequest.new(request.base_uri, request.build_path.to_s, :get, query_params: request.query_params)
68
+ get_request = MsRest::HttpOperationRequest.new(request.base_uri, request.build_path.to_s, :get, {query_params: request.query_params, headers: request.headers})
68
69
  update_state_from_get_resource_operation(get_request, polling_state, custom_deserialization_block)
69
70
  end
70
71
 
@@ -75,29 +76,10 @@ module MsRestAzure
75
76
  polling_state.get_operation_response
76
77
  end
77
78
 
78
- # @TODO Update name of the method to get_put_or_patch_operation_result when introducing breaking change / updating major version of gem
79
- # Retrieves the result of 'PUT' or 'PATCH' operation. Performs polling of required.
80
- # @param azure_response [MsRestAzure::AzureOperationResponse] response from Azure service.
81
- # @param custom_deserialization_block [Proc] custom logic for response deserialization.
82
- #
83
- # @return [MsRest::HttpOperationResponse] the response.
84
- def get_put_operation_result(azure_response, custom_deserialization_block)
85
- get_long_running_operation_result(azure_response, custom_deserialization_block)
86
- end
87
-
88
- #
89
- # Retrieves the result of 'POST' or 'DELETE' operations. Performs polling of required.
90
- # @param azure_response [MsRestAzure::AzureOperationResponse] response from Azure service.
91
- # @param custom_deserialization_block [Proc] custom logic for response deserialization.
92
- #
93
- # @return [MsRest::HttpOperationResponse] the response.
94
- def get_post_or_delete_operation_result(azure_response, custom_deserialization_block)
95
- get_long_running_operation_result(azure_response, custom_deserialization_block)
96
- end
97
-
98
79
  #
99
80
  # Verifies for unexpected polling status code
100
81
  # @param azure_response [MsRestAzure::AzureOperationResponse] response from Azure service.
82
+ #
101
83
  def check_for_status_code_failure(azure_response)
102
84
  fail MsRest::ValidationError, 'Azure response cannot be nil' if azure_response.nil?
103
85
  fail MsRest::ValidationError, 'Azure response cannot have empty response object' if azure_response.response.nil?
@@ -122,8 +104,12 @@ module MsRestAzure
122
104
 
123
105
  fail AzureOperationError, 'The response from long running operation does not contain a body' if result.response.body.nil? || result.response.body.empty?
124
106
 
107
+ # On non flattened resource, we should find provisioning_state inside 'properties'
125
108
  if result.body.respond_to?(:properties) && result.body.properties.respond_to?(:provisioning_state) && !result.body.properties.provisioning_state.nil?
126
109
  polling_state.status = result.body.properties.provisioning_state
110
+ # On flattened resource, we should find provisioning_state at the top level
111
+ elsif result.body.respond_to?(:provisioning_state) && !result.body.provisioning_state.nil?
112
+ polling_state.status = result.body.provisioning_state
127
113
  else
128
114
  polling_state.status = AsyncOperationStatus::SUCCESS_STATUS
129
115
  end
@@ -143,6 +129,7 @@ module MsRestAzure
143
129
  # @param request [MsRest::HttpOperationRequest] The url retrieve data from.
144
130
  # @param polling_state [MsRestAzure::PollingState] polling state to update.
145
131
  # @param custom_deserialization_block [Proc] custom deserialization method for parsing response.
132
+ #
146
133
  def update_state_from_location_header(request, polling_state, custom_deserialization_block)
147
134
  result = get_async_with_custom_deserialization(request, custom_deserialization_block)
148
135
 
@@ -171,6 +158,7 @@ module MsRestAzure
171
158
  #
172
159
  # Updates polling state from Azure async operation header.
173
160
  # @param polling_state [MsRestAzure::PollingState] polling state.
161
+ #
174
162
  def update_state_from_azure_async_operation_header(request, polling_state)
175
163
  result = get_async_with_async_operation_deserialization(request)
176
164
 
@@ -181,6 +169,8 @@ module MsRestAzure
181
169
  polling_state.response = result.response
182
170
  polling_state.request = result.request
183
171
  polling_state.resource = nil
172
+
173
+ polling_state
184
174
  end
185
175
 
186
176
  #
@@ -189,6 +179,7 @@ module MsRestAzure
189
179
  # @param custom_deserialization_block [Proc] function to perform deserialization of the HTTP response.
190
180
  #
191
181
  # @return [MsRest::HttpOperationResponse] the response.
182
+ #
192
183
  def get_async_with_custom_deserialization(request, custom_deserialization_block)
193
184
  result = get_async_common(request)
194
185
 
@@ -208,10 +199,12 @@ module MsRestAzure
208
199
  # @param request [MsRest::HttpOperationRequest] the URL.
209
200
  #
210
201
  # @return [MsRest::HttpOperationResponse] the response.
202
+ #
211
203
  def get_async_with_async_operation_deserialization(request)
212
204
  result = get_async_common(request)
213
205
 
214
206
  result.body = AsyncOperationStatus.deserialize_object(result.body)
207
+
215
208
  result
216
209
  end
217
210
 
@@ -220,11 +213,13 @@ module MsRestAzure
220
213
  # @param request [MsRest::HttpOperationRequest] the URL.
221
214
  #
222
215
  # @return [MsRest::HttpOperationResponse] the response.
216
+ #
223
217
  def get_async_common(request)
224
218
  fail ValidationError, 'Request cannot be nil' if request.nil?
225
219
 
226
220
  request.middlewares = [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]]
227
- request.headers.merge!({'x-ms-client-request-id' => SecureRandom.uuid, 'Content-Type' => 'application/json'})
221
+ request.headers.merge!({'x-ms-client-request-id' => SecureRandom.uuid}) unless request.headers.key?('x-ms-client-request-id')
222
+ request.headers.merge!({'Content-Type' => 'application/json'}) unless request.headers.key?('Content-Type')
228
223
 
229
224
  # Send Request
230
225
  http_response = request.run_promise do |req|
@@ -35,8 +35,12 @@ module MsRestAzure
35
35
  update_response(azure_response.response)
36
36
  @resource = azure_response.body
37
37
 
38
+ # On non flattened resource, we should find provisioning_state inside 'properties'
38
39
  if (!@resource.nil? && @resource.respond_to?(:properties) && @resource.properties.respond_to?(:provisioning_state) && !@resource.properties.provisioning_state.nil?)
39
40
  @status = @resource.properties.provisioning_state
41
+ # On flattened resource, we should find provisioning_state at the top level
42
+ elsif !@resource.nil? && @resource.respond_to?(:provisioning_state) && !@resource.provisioning_state.nil?
43
+ @status = @resource.provisioning_state
40
44
  else
41
45
  case @response.status
42
46
  when 202
@@ -56,7 +60,7 @@ module MsRestAzure
56
60
  def get_delay
57
61
  return @retry_timeout unless @retry_timeout.nil?
58
62
 
59
- if (!response.nil? && !response.headers['Retry-After'].nil?)
63
+ if !response.nil? && !response.headers['Retry-After'].nil?
60
64
  return response.headers['Retry-After'].to_i
61
65
  end
62
66
 
@@ -69,7 +73,7 @@ module MsRestAzure
69
73
  def update_response(response)
70
74
  @response = response
71
75
 
72
- if (!response.nil?)
76
+ unless response.nil?
73
77
  @azure_async_operation_header_link = response.headers['Azure-AsyncOperation'] unless response.headers['Azure-AsyncOperation'].nil?
74
78
  @location_header_link = response.headers['Location'] unless response.headers['Location'].nil?
75
79
  end
@@ -94,6 +98,7 @@ module MsRestAzure
94
98
 
95
99
  def get_request(options = {})
96
100
  link = @azure_async_operation_header_link || @location_header_link
101
+ options[:connection] = create_connection(options[:base_uri])
97
102
  MsRest::HttpOperationRequest.new(nil, link, :get, options)
98
103
  end
99
104
 
@@ -101,6 +106,20 @@ module MsRestAzure
101
106
 
102
107
  # @return [Integer] retry timeout.
103
108
  attr_accessor :retry_timeout
109
+
110
+ attr_accessor :connection
111
+
112
+ def create_connection(base_url)
113
+ @connection ||= Faraday.new(:url => base_url) do |faraday|
114
+ [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]].each{ |args| faraday.use(*args) }
115
+ faraday.adapter Faraday.default_adapter
116
+ faraday.headers = request.headers
117
+ logging = ENV['AZURE_HTTP_LOGGING'] || request.log
118
+ if logging
119
+ faraday.response :logger, nil, { :bodies => logging == 'full' }
120
+ end
121
+ end
122
+ end
104
123
  end
105
124
 
106
125
  end
@@ -23,67 +23,61 @@ module MsRestAzure
23
23
  # @return [Hash{String => String}] the tags attached to resources (optional).
24
24
  attr_accessor :tags
25
25
 
26
- #
27
- # Serializes given resource object into hash.
28
- # @param object [Resource] resource object to serialize.
29
- #
30
- # @return [Hash] hash representation of resource.
31
- def self.serialize_object(object)
32
- object.validate
33
- output_object = {}
34
-
35
- serialized_property = object.id
36
- output_object['id'] = serialized_property unless serialized_property.nil?
37
-
38
- serialized_property = object.name
39
- output_object['name'] = serialized_property unless serialized_property.nil?
40
-
41
- serialized_property = object.type
42
- output_object['type'] = serialized_property unless serialized_property.nil?
43
-
44
- serialized_property = object.location
45
- output_object['location'] = serialized_property unless serialized_property.nil?
46
-
47
- serialized_property = object.tags
48
- output_object['tags'] = serialized_property unless serialized_property.nil?
49
-
50
- output_object
26
+ def self.mapper
27
+ {
28
+ required: false,
29
+ serialized_name: 'Resource',
30
+ type: {
31
+ name: 'Composite',
32
+ class_name: 'Resource',
33
+ model_properties: {
34
+ id: {
35
+ required: false,
36
+ serialized_name: 'id',
37
+ type: {
38
+ name: 'String'
39
+ }
40
+ },
41
+ name: {
42
+ required: false,
43
+ read_only: true,
44
+ serialized_name: 'name',
45
+ type: {
46
+ name: 'String'
47
+ }
48
+ },
49
+ type: {
50
+ required: false,
51
+ read_only: true,
52
+ serialized_name: 'type',
53
+ type: {
54
+ name: 'String'
55
+ }
56
+ },
57
+ location: {
58
+ required: false,
59
+ serialized_name: 'location',
60
+ type: {
61
+ name: 'String'
62
+ }
63
+ },
64
+ tags: {
65
+ required: false,
66
+ serialized_name: 'tags',
67
+ type: {
68
+ name: 'Dictionary',
69
+ value: {
70
+ required: false,
71
+ serialized_name: 'StringElementType',
72
+ type: {
73
+ name: 'String'
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
51
81
  end
52
-
53
- #
54
- # Deserializes given hash object into resource.
55
- # @param object [Hash] resource in hash representation to deserialize.
56
- #
57
- # @return [Resource] deserialized resource.
58
- def self.deserialize_object(object)
59
- return if object.nil?
60
- output_object = Resource.new
61
-
62
- deserialized_property = object['id']
63
- output_object.id = deserialized_property
64
-
65
- deserialized_property = object['name']
66
- output_object.name = deserialized_property
67
-
68
- deserialized_property = object['type']
69
- output_object.type = deserialized_property
70
-
71
- deserialized_property = object['location']
72
- output_object.location = deserialized_property
73
-
74
- deserialized_property = object['tags']
75
- output_object.tags = deserialized_property
76
-
77
- output_object.validate
78
- output_object
79
- end
80
-
81
- #
82
- # Validates the resource. Throws error if there is any property is incorrect.
83
- #
84
- def validate
85
- fail MsRest::ValidationError, 'Location cannot be nil in the Resource object' if @location.nil?
86
- end
87
-
88
82
  end
89
83
  end
@@ -11,41 +11,24 @@ module MsRestAzure
11
11
  # @return [String] the id of the subresource.
12
12
  attr_accessor :id
13
13
 
14
- #
15
- # Serializes given subresource object into hash.
16
- # @param object [SubResource] subresource object to serialize.
17
- #
18
- # @return [Hash] hash representation of subresource.
19
- def self.serialize_object(object)
20
- object.validate
21
- output_object = {}
22
-
23
- serialized_property = object.id
24
- output_object['id'] = serialized_property unless serialized_property.nil?
25
-
26
- output_object
27
- end
28
-
29
- #
30
- # Deserializes given hash object into subresource.
31
- # @param object [Hash] subresource in hash representation to deserialize.
32
- #
33
- # @return [SubResource] deserialized subresource.
34
- def self.deserialize_object(object)
35
- return if object.nil?
36
- output_object = SubResource.new
37
-
38
- deserialized_property = object['id']
39
- output_object.id = deserialized_property
40
-
41
- output_object.validate
42
- output_object
43
- end
44
-
45
- #
46
- # Validates the subresource. Throws error if there is any property is incorrect.
47
- #
48
- def validate
14
+ def self.mapper
15
+ {
16
+ required: false,
17
+ serialized_name: 'SubResource',
18
+ type: {
19
+ name: 'Composite',
20
+ class_name: 'SubResource',
21
+ model_properties: {
22
+ id: {
23
+ required: false,
24
+ serialized_name: 'id',
25
+ type: {
26
+ name: 'String'
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
49
32
  end
50
33
  end
51
34
  end
@@ -3,5 +3,5 @@
3
3
  # Licensed under the MIT License. See License.txt in the project root for license information.
4
4
 
5
5
  module MsRestAzure
6
- VERSION = '0.2.3'
6
+ VERSION = '0.3.0'
7
7
  end
@@ -32,5 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
33
33
  spec.add_runtime_dependency 'faraday', '~> 0.9'
34
34
  spec.add_runtime_dependency 'faraday-cookie_jar', '~> 0.0.6'
35
- spec.add_runtime_dependency 'ms_rest', '~> 0.2.1'
35
+ spec.add_runtime_dependency 'ms_rest', '~> 0.3.0'
36
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ms_rest_azure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Microsoft Corporation
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-19 00:00:00.000000000 Z
11
+ date: 2016-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.2.1
117
+ version: 0.3.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.2.1
124
+ version: 0.3.0
125
125
  description: Azure Client Library for Ruby.
126
126
  email: azsdkteam@microsoft.com
127
127
  executables: []
@@ -130,6 +130,7 @@ extra_rdoc_files: []
130
130
  files:
131
131
  - ".gitignore"
132
132
  - ".travis.yml"
133
+ - ChangeLog.md
133
134
  - Gemfile
134
135
  - LICENSE.txt
135
136
  - README.md