iron_titan 0.3.10 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +201 -0
  3. data/README.md +6 -5
  4. data/lib/iron_titan/api/groups_api.rb +34 -31
  5. data/lib/iron_titan/api/jobs_api.rb +140 -182
  6. data/lib/iron_titan/api/runner_api.rb +43 -47
  7. data/lib/iron_titan/api_client.rb +48 -8
  8. data/lib/iron_titan/api_error.rb +12 -1
  9. data/lib/iron_titan/configuration.rb +23 -0
  10. data/lib/iron_titan/models/complete.rb +63 -27
  11. data/lib/iron_titan/models/error.rb +59 -21
  12. data/lib/iron_titan/models/error_body.rb +61 -24
  13. data/lib/iron_titan/models/group.rb +112 -28
  14. data/lib/iron_titan/models/group_wrapper.rb +60 -21
  15. data/lib/iron_titan/models/groups_wrapper.rb +60 -21
  16. data/lib/iron_titan/models/id_status.rb +89 -28
  17. data/lib/iron_titan/models/job.rb +168 -90
  18. data/lib/iron_titan/models/job_wrapper.rb +60 -21
  19. data/lib/iron_titan/models/jobs_wrapper.rb +62 -24
  20. data/lib/iron_titan/models/new_job.rb +91 -42
  21. data/lib/iron_titan/models/new_jobs_wrapper.rb +60 -21
  22. data/lib/iron_titan/models/start.rb +59 -21
  23. data/lib/iron_titan/version.rb +13 -2
  24. data/lib/iron_titan.rb +12 -1
  25. data/spec/api/groups_api_spec.rb +16 -17
  26. data/spec/api/jobs_api_spec.rb +37 -78
  27. data/spec/api/runner_api_spec.rb +20 -21
  28. data/spec/api_client_spec.rb +296 -0
  29. data/spec/configuration_spec.rb +48 -0
  30. data/spec/models/complete_spec.rb +16 -17
  31. data/spec/models/error_body_spec.rb +15 -12
  32. data/spec/models/error_spec.rb +14 -7
  33. data/spec/models/group_spec.rb +33 -12
  34. data/spec/models/group_wrapper_spec.rb +14 -7
  35. data/spec/models/groups_wrapper_spec.rb +14 -7
  36. data/spec/models/id_status_spec.rb +18 -12
  37. data/spec/models/job_spec.rb +43 -88
  38. data/spec/models/job_wrapper_spec.rb +14 -7
  39. data/spec/models/jobs_wrapper_spec.rb +15 -12
  40. data/spec/models/new_job_spec.rb +20 -37
  41. data/spec/models/new_jobs_wrapper_spec.rb +14 -7
  42. data/spec/models/start_spec.rb +14 -7
  43. data/spec/spec_helper.rb +122 -0
  44. metadata +9 -2
@@ -3,18 +3,30 @@ Titan API
3
3
 
4
4
  The ultimate, language agnostic, container based job processing framework.
5
5
 
6
- OpenAPI spec version: 0.3.10
6
+ OpenAPI spec version: 0.4.0
7
7
 
8
8
  Generated by: https://github.com/swagger-api/swagger-codegen.git
9
9
 
10
+ Licensed under the Apache License, Version 2.0 (the "License");
11
+ you may not use this file except in compliance with the License.
12
+ You may obtain a copy of the License at
13
+
14
+ http://www.apache.org/licenses/LICENSE-2.0
15
+
16
+ Unless required by applicable law or agreed to in writing, software
17
+ distributed under the License is distributed on an "AS IS" BASIS,
18
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ See the License for the specific language governing permissions and
20
+ limitations under the License.
10
21
 
11
22
  =end
12
23
 
13
24
  require 'date'
14
25
 
15
26
  module IronTitan
27
+
16
28
  class Job
17
- # Name of image to use.
29
+ # Name of Docker image to use. This is optional and can be used to override the image defined at the group level.
18
30
  attr_accessor :image
19
31
 
20
32
  # Payload for the job. This is what you pass into each job to make it do something.
@@ -23,13 +35,13 @@ module IronTitan
23
35
  # Number of seconds to wait before queueing the job for consumption for the first time. Must be a positive integer. Jobs with a delay start in state \"delayed\" and transition to \"running\" after delay seconds.
24
36
  attr_accessor :delay
25
37
 
26
- # Maximum runtime in seconds. If a consumer retrieves the\njob, but does not change it's status within timeout seconds, the job\nis considered failed, with reason timeout (Titan may allow a small\ngrace period). The consumer should also kill the job after timeout\nseconds. If a consumer tries to change status after Titan has already\ntimed out the job, the consumer will be ignored.\n
38
+ # Maximum runtime in seconds. If a consumer retrieves the job, but does not change it's status within timeout seconds, the job is considered failed, with reason timeout (Titan may allow a small grace period). The consumer should also kill the job after timeout seconds. If a consumer tries to change status after Titan has already timed out the job, the consumer will be ignored.
27
39
  attr_accessor :timeout
28
40
 
29
41
  # Priority of the job. Higher has more priority. 3 levels from 0-2. Jobs at same priority are processed in FIFO order.
30
42
  attr_accessor :priority
31
43
 
32
- # \"Number of automatic retries this job is allowed. A retry will be attempted if a task fails. Max 25. Automatic retries are performed by titan when a task reaches a failed state and has `max_retries` > 0. A retry is performed by queueing a new job with the same image id and payload. The new job's max_retries is one less than the original. The new job's `retry_of` field is set to the original Job ID. Titan will delay the new job for retries_delay seconds before queueing it. Cancelled or successful tasks are never automatically retried.\"\n
44
+ # \"Number of automatic retries this job is allowed. A retry will be attempted if a task fails. Max 25. Automatic retries are performed by titan when a task reaches a failed state and has `max_retries` > 0. A retry is performed by queueing a new job with the same image id and payload. The new job's max_retries is one less than the original. The new job's `retry_of` field is set to the original Job ID. Titan will delay the new job for retries_delay seconds before queueing it. Cancelled or successful tasks are never automatically retried.\"
33
45
  attr_accessor :max_retries
34
46
 
35
47
  # Time in seconds to wait before retrying the job. Must be a non-negative integer.
@@ -38,16 +50,16 @@ module IronTitan
38
50
  # Unique identifier representing a specific job.
39
51
  attr_accessor :id
40
52
 
41
- # States and valid transitions.\n\n +---------+\n +---------> delayed <----------------+\n +----+----+ |\n | |\n | |\n +----v----+ |\n +---------> queued <----------------+\n +----+----+ *\n | *\n | retry * creates new job\n +----v----+ *\n | running | *\n +--+-+-+--+ |\n +---------|-|-|-----+-------------+\n +---|---------+ | +-----|---------+ |\n | | | | | |\n+-----v---^-+ +--v-------^+ +--v---^-+\n| success | | cancelled | | error |\n+-----------+ +-----------+ +--------+\n\n* delayed - has a delay.\n* queued - Ready to be consumed when it's turn comes.\n* running - Currently consumed by a runner which will attempt to process it.\n* success - (or complete? success/error is common javascript terminology)\n* error - Something went wrong. In this case more information can be obtained\n by inspecting the \"reason\" field.\n - timeout\n - killed - forcibly killed by worker due to resource restrictions or access\n violations.\n - bad_exit - exited with non-zero status due to program termination/crash.\n* cancelled - cancelled via API. More information in the reason field.\n - client_request - Request was cancelled by a client.\n
53
+ # States and valid transitions. +---------+ +---------> delayed <----------------+ +----+----+ | | | | | +----v----+ | +---------> queued <----------------+ +----+----+ * | * | retry * creates new job +----v----+ * | running | * +--+-+-+--+ | +---------|-|-|-----+-------------+ +---|---------+ | +-----|---------+ | | | | | | | +-----v---^-+ +--v-------^+ +--v---^-+ | success | | cancelled | | error | +-----------+ +-----------+ +--------+ * delayed - has a delay. * queued - Ready to be consumed when it's turn comes. * running - Currently consumed by a runner which will attempt to process it. * success - (or complete? success/error is common javascript terminology) * error - Something went wrong. In this case more information can be obtained by inspecting the \"reason\" field. - timeout - killed - forcibly killed by worker due to resource restrictions or access violations. - bad_exit - exited with non-zero status due to program termination/crash. * cancelled - cancelled via API. More information in the reason field. - client_request - Request was cancelled by a client.
42
54
  attr_accessor :status
43
55
 
44
- # Group this job belongs to.
45
- attr_accessor :name
56
+ # Group this job belongs to.
57
+ attr_accessor :group_name
46
58
 
47
59
  # The error message, if status is 'error'. This is errors due to things outside the job itself. Errors from user code will be found in the log.
48
60
  attr_accessor :error
49
61
 
50
- # Machine usable reason for job being in this state.\nValid values for error status are `timeout | killed | bad_exit`.\nValid values for cancelled status are `client_request`.\nFor everything else, this is undefined.\n
62
+ # Machine usable reason for job being in this state. Valid values for error status are `timeout | killed | bad_exit`. Valid values for cancelled status are `client_request`. For everything else, this is undefined.
51
63
  attr_accessor :reason
52
64
 
53
65
  # Time when job was submitted. Always in UTC.
@@ -65,44 +77,52 @@ module IronTitan
65
77
  # If this field is set, then this job was retried by the job referenced in this field.
66
78
  attr_accessor :retry_at
67
79
 
80
+ # Env vars for the task. Comes from the ones set on the Group.
81
+ attr_accessor :env_vars
82
+
83
+ class EnumAttributeValidator
84
+ attr_reader :datatype
85
+ attr_reader :allowable_values
86
+
87
+ def initialize(datatype, allowable_values)
88
+ @allowable_values = allowable_values.map do |value|
89
+ case datatype.to_s
90
+ when /Integer/i
91
+ value.to_i
92
+ when /Float/i
93
+ value.to_f
94
+ else
95
+ value
96
+ end
97
+ end
98
+ end
99
+
100
+ def valid?(value)
101
+ !value || allowable_values.include?(value)
102
+ end
103
+ end
104
+
68
105
  # Attribute mapping from ruby-style variable name to JSON key.
69
106
  def self.attribute_map
70
107
  {
71
-
72
108
  :'image' => :'image',
73
-
74
109
  :'payload' => :'payload',
75
-
76
110
  :'delay' => :'delay',
77
-
78
111
  :'timeout' => :'timeout',
79
-
80
112
  :'priority' => :'priority',
81
-
82
113
  :'max_retries' => :'max_retries',
83
-
84
114
  :'retries_delay' => :'retries_delay',
85
-
86
115
  :'id' => :'id',
87
-
88
116
  :'status' => :'status',
89
-
90
- :'name' => :'name',
91
-
117
+ :'group_name' => :'group_name',
92
118
  :'error' => :'error',
93
-
94
119
  :'reason' => :'reason',
95
-
96
120
  :'created_at' => :'created_at',
97
-
98
121
  :'started_at' => :'started_at',
99
-
100
122
  :'completed_at' => :'completed_at',
101
-
102
123
  :'retry_of' => :'retry_of',
103
-
104
- :'retry_at' => :'retry_at'
105
-
124
+ :'retry_at' => :'retry_at',
125
+ :'env_vars' => :'env_vars'
106
126
  }
107
127
  end
108
128
 
@@ -118,122 +138,166 @@ module IronTitan
118
138
  :'retries_delay' => :'Integer',
119
139
  :'id' => :'String',
120
140
  :'status' => :'String',
121
- :'name' => :'String',
141
+ :'group_name' => :'String',
122
142
  :'error' => :'String',
123
143
  :'reason' => :'String',
124
144
  :'created_at' => :'DateTime',
125
145
  :'started_at' => :'DateTime',
126
146
  :'completed_at' => :'DateTime',
127
147
  :'retry_of' => :'String',
128
- :'retry_at' => :'String'
129
-
148
+ :'retry_at' => :'String',
149
+ :'env_vars' => :'Hash<String, String>'
130
150
  }
131
151
  end
132
152
 
153
+ # Initializes the object
154
+ # @param [Hash] attributes Model attributes in the form of hash
133
155
  def initialize(attributes = {})
134
156
  return unless attributes.is_a?(Hash)
135
157
 
136
158
  # convert string to symbol for hash key
137
- attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
159
+ attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
138
160
 
139
-
140
- if attributes[:'image']
161
+ if attributes.has_key?(:'image')
141
162
  self.image = attributes[:'image']
142
163
  end
143
-
144
- if attributes[:'payload']
164
+
165
+ if attributes.has_key?(:'payload')
145
166
  self.payload = attributes[:'payload']
146
167
  end
147
-
148
- if attributes[:'delay']
168
+
169
+ if attributes.has_key?(:'delay')
149
170
  self.delay = attributes[:'delay']
150
171
  else
151
172
  self.delay = 0
152
173
  end
153
-
154
- if attributes[:'timeout']
174
+
175
+ if attributes.has_key?(:'timeout')
155
176
  self.timeout = attributes[:'timeout']
156
177
  else
157
178
  self.timeout = 60
158
179
  end
159
-
160
- if attributes[:'priority']
180
+
181
+ if attributes.has_key?(:'priority')
161
182
  self.priority = attributes[:'priority']
162
183
  end
163
-
164
- if attributes[:'max_retries']
184
+
185
+ if attributes.has_key?(:'max_retries')
165
186
  self.max_retries = attributes[:'max_retries']
166
187
  else
167
188
  self.max_retries = 0
168
189
  end
169
-
170
- if attributes[:'retries_delay']
190
+
191
+ if attributes.has_key?(:'retries_delay')
171
192
  self.retries_delay = attributes[:'retries_delay']
172
193
  else
173
194
  self.retries_delay = 60
174
195
  end
175
-
176
- if attributes[:'id']
196
+
197
+ if attributes.has_key?(:'id')
177
198
  self.id = attributes[:'id']
178
199
  end
179
-
180
- if attributes[:'status']
200
+
201
+ if attributes.has_key?(:'status')
181
202
  self.status = attributes[:'status']
182
203
  end
183
-
184
- if attributes[:'name']
185
- self.name = attributes[:'name']
204
+
205
+ if attributes.has_key?(:'group_name')
206
+ self.group_name = attributes[:'group_name']
186
207
  end
187
-
188
- if attributes[:'error']
208
+
209
+ if attributes.has_key?(:'error')
189
210
  self.error = attributes[:'error']
190
211
  end
191
-
192
- if attributes[:'reason']
212
+
213
+ if attributes.has_key?(:'reason')
193
214
  self.reason = attributes[:'reason']
194
215
  end
195
-
196
- if attributes[:'created_at']
216
+
217
+ if attributes.has_key?(:'created_at')
197
218
  self.created_at = attributes[:'created_at']
198
219
  end
199
-
200
- if attributes[:'started_at']
220
+
221
+ if attributes.has_key?(:'started_at')
201
222
  self.started_at = attributes[:'started_at']
202
223
  end
203
-
204
- if attributes[:'completed_at']
224
+
225
+ if attributes.has_key?(:'completed_at')
205
226
  self.completed_at = attributes[:'completed_at']
206
227
  end
207
-
208
- if attributes[:'retry_of']
228
+
229
+ if attributes.has_key?(:'retry_of')
209
230
  self.retry_of = attributes[:'retry_of']
210
231
  end
211
-
212
- if attributes[:'retry_at']
232
+
233
+ if attributes.has_key?(:'retry_at')
213
234
  self.retry_at = attributes[:'retry_at']
214
235
  end
215
-
236
+
237
+ if attributes.has_key?(:'env_vars')
238
+ if (value = attributes[:'env_vars']).is_a?(Array)
239
+ self.env_vars = value
240
+ end
241
+ end
242
+
243
+ end
244
+
245
+ # Show invalid properties with the reasons. Usually used together with valid?
246
+ # @return Array for valid properies with the reasons
247
+ def list_invalid_properties
248
+ invalid_properties = Array.new
249
+ return invalid_properties
250
+ end
251
+
252
+ # Check to see if the all the properties in the model are valid
253
+ # @return true if the model is valid
254
+ def valid?
255
+ return false if @image.nil?
256
+ return false if @payload.to_s.length <
257
+ return false if @priority.nil?
258
+ status_validator = EnumAttributeValidator.new('String', ["delayed", "queued", "running", "success", "error", "cancelled"])
259
+ return false unless status_validator.valid?(@status)
260
+ reason_validator = EnumAttributeValidator.new('String', ["timeout", "killed", "bad_exit", "client_request"])
261
+ return false unless reason_validator.valid?(@reason)
262
+ return true
263
+ end
264
+
265
+ # Custom attribute writer method with validation
266
+ # @param [Object] payload Value to be assigned
267
+ def payload=(payload)
268
+ if payload.nil?
269
+ fail ArgumentError, "payload cannot be nil"
270
+ end
271
+
272
+ if payload.to_s.length <
273
+ fail ArgumentError, "invalid value for 'payload', the character length must be great than or equal to ."
274
+ end
275
+
276
+ @payload = payload
216
277
  end
217
278
 
218
279
  # Custom attribute writer method checking allowed values (enum).
280
+ # @param [Object] status Object to be assigned
219
281
  def status=(status)
220
- allowed_values = ["delayed", "queued", "running", "success", "error", "cancelled"]
221
- if status && !allowed_values.include?(status)
222
- fail "invalid value for 'status', must be one of #{allowed_values}"
282
+ validator = EnumAttributeValidator.new('String', ["delayed", "queued", "running", "success", "error", "cancelled"])
283
+ unless validator.valid?(status)
284
+ fail ArgumentError, "invalid value for 'status', must be one of #{validator.allowable_values}."
223
285
  end
224
286
  @status = status
225
287
  end
226
288
 
227
289
  # Custom attribute writer method checking allowed values (enum).
290
+ # @param [Object] reason Object to be assigned
228
291
  def reason=(reason)
229
- allowed_values = ["timeout", "killed", "bad_exit", "client_request"]
230
- if reason && !allowed_values.include?(reason)
231
- fail "invalid value for 'reason', must be one of #{allowed_values}"
292
+ validator = EnumAttributeValidator.new('String', ["timeout", "killed", "bad_exit", "client_request"])
293
+ unless validator.valid?(reason)
294
+ fail ArgumentError, "invalid value for 'reason', must be one of #{validator.allowable_values}."
232
295
  end
233
296
  @reason = reason
234
297
  end
235
298
 
236
- # Check equality by comparing each attribute.
299
+ # Checks equality by comparing each attribute.
300
+ # @param [Object] Object to be compared
237
301
  def ==(o)
238
302
  return true if self.equal?(o)
239
303
  self.class == o.class &&
@@ -246,46 +310,53 @@ module IronTitan
246
310
  retries_delay == o.retries_delay &&
247
311
  id == o.id &&
248
312
  status == o.status &&
249
- name == o.name &&
313
+ group_name == o.group_name &&
250
314
  error == o.error &&
251
315
  reason == o.reason &&
252
316
  created_at == o.created_at &&
253
317
  started_at == o.started_at &&
254
318
  completed_at == o.completed_at &&
255
319
  retry_of == o.retry_of &&
256
- retry_at == o.retry_at
320
+ retry_at == o.retry_at &&
321
+ env_vars == o.env_vars
257
322
  end
258
323
 
259
324
  # @see the `==` method
325
+ # @param [Object] Object to be compared
260
326
  def eql?(o)
261
327
  self == o
262
328
  end
263
329
 
264
- # Calculate hash code according to all attributes.
330
+ # Calculates hash code according to all attributes.
331
+ # @return [Fixnum] Hash code
265
332
  def hash
266
- [image, payload, delay, timeout, priority, max_retries, retries_delay, id, status, name, error, reason, created_at, started_at, completed_at, retry_of, retry_at].hash
333
+ [image, payload, delay, timeout, priority, max_retries, retries_delay, id, status, group_name, error, reason, created_at, started_at, completed_at, retry_of, retry_at, env_vars].hash
267
334
  end
268
335
 
269
- # build the object from hash
336
+ # Builds the object from hash
337
+ # @param [Hash] attributes Model attributes in the form of hash
338
+ # @return [Object] Returns the model itself
270
339
  def build_from_hash(attributes)
271
340
  return nil unless attributes.is_a?(Hash)
272
341
  self.class.swagger_types.each_pair do |key, type|
273
342
  if type =~ /^Array<(.*)>/i
343
+ # check to ensure the input is an array given that the the attribute
344
+ # is documented as an array but the input is not
274
345
  if attributes[self.class.attribute_map[key]].is_a?(Array)
275
346
  self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
276
- else
277
- #TODO show warning in debug mode
278
347
  end
279
348
  elsif !attributes[self.class.attribute_map[key]].nil?
280
349
  self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
281
- else
282
- # data not found in attributes(hash), not an issue as the data can be optional
283
- end
350
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
284
351
  end
285
352
 
286
353
  self
287
354
  end
288
355
 
356
+ # Deserializes the data based on type
357
+ # @param string type Data type
358
+ # @param string value Value to be deserialized
359
+ # @return [Object] Deserialized data
289
360
  def _deserialize(type, value)
290
361
  case type.to_sym
291
362
  when :DateTime
@@ -319,21 +390,25 @@ module IronTitan
319
390
  end
320
391
  end
321
392
  else # model
322
- _model = IronTitan.const_get(type).new
323
- _model.build_from_hash(value)
393
+ temp_model = IronTitan.const_get(type).new
394
+ temp_model.build_from_hash(value)
324
395
  end
325
396
  end
326
397
 
398
+ # Returns the string representation of the object
399
+ # @return [String] String presentation of the object
327
400
  def to_s
328
401
  to_hash.to_s
329
402
  end
330
403
 
331
- # to_body is an alias to to_body (backward compatibility))
404
+ # to_body is an alias to to_hash (backward compatibility)
405
+ # @return [Hash] Returns the object in the form of hash
332
406
  def to_body
333
407
  to_hash
334
408
  end
335
409
 
336
- # return the object in the form of hash
410
+ # Returns the object in the form of hash
411
+ # @return [Hash] Returns the object in the form of hash
337
412
  def to_hash
338
413
  hash = {}
339
414
  self.class.attribute_map.each_pair do |attr, param|
@@ -344,8 +419,10 @@ module IronTitan
344
419
  hash
345
420
  end
346
421
 
347
- # Method to output non-array value in the form of hash
422
+ # Outputs non-array value in the form of hash
348
423
  # For object, use to_hash. Otherwise, just return the value
424
+ # @param [Object] value Any valid value
425
+ # @return [Hash] Returns the value in the form of hash
349
426
  def _to_hash(value)
350
427
  if value.is_a?(Array)
351
428
  value.compact.map{ |v| _to_hash(v) }
@@ -361,4 +438,5 @@ module IronTitan
361
438
  end
362
439
 
363
440
  end
441
+
364
442
  end
@@ -3,25 +3,36 @@ Titan API
3
3
 
4
4
  The ultimate, language agnostic, container based job processing framework.
5
5
 
6
- OpenAPI spec version: 0.3.10
6
+ OpenAPI spec version: 0.4.0
7
7
 
8
8
  Generated by: https://github.com/swagger-api/swagger-codegen.git
9
9
 
10
+ Licensed under the Apache License, Version 2.0 (the "License");
11
+ you may not use this file except in compliance with the License.
12
+ You may obtain a copy of the License at
13
+
14
+ http://www.apache.org/licenses/LICENSE-2.0
15
+
16
+ Unless required by applicable law or agreed to in writing, software
17
+ distributed under the License is distributed on an "AS IS" BASIS,
18
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ See the License for the specific language governing permissions and
20
+ limitations under the License.
10
21
 
11
22
  =end
12
23
 
13
24
  require 'date'
14
25
 
15
26
  module IronTitan
27
+
16
28
  class JobWrapper
17
29
  attr_accessor :job
18
30
 
31
+
19
32
  # Attribute mapping from ruby-style variable name to JSON key.
20
33
  def self.attribute_map
21
34
  {
22
-
23
35
  :'job' => :'job'
24
-
25
36
  }
26
37
  end
27
38
 
@@ -29,24 +40,39 @@ module IronTitan
29
40
  def self.swagger_types
30
41
  {
31
42
  :'job' => :'Job'
32
-
33
43
  }
34
44
  end
35
45
 
46
+ # Initializes the object
47
+ # @param [Hash] attributes Model attributes in the form of hash
36
48
  def initialize(attributes = {})
37
49
  return unless attributes.is_a?(Hash)
38
50
 
39
51
  # convert string to symbol for hash key
40
- attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
52
+ attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
41
53
 
42
-
43
- if attributes[:'job']
54
+ if attributes.has_key?(:'job')
44
55
  self.job = attributes[:'job']
45
56
  end
46
-
57
+
58
+ end
59
+
60
+ # Show invalid properties with the reasons. Usually used together with valid?
61
+ # @return Array for valid properies with the reasons
62
+ def list_invalid_properties
63
+ invalid_properties = Array.new
64
+ return invalid_properties
65
+ end
66
+
67
+ # Check to see if the all the properties in the model are valid
68
+ # @return true if the model is valid
69
+ def valid?
70
+ return false if @job.nil?
71
+ return true
47
72
  end
48
73
 
49
- # Check equality by comparing each attribute.
74
+ # Checks equality by comparing each attribute.
75
+ # @param [Object] Object to be compared
50
76
  def ==(o)
51
77
  return true if self.equal?(o)
52
78
  self.class == o.class &&
@@ -54,35 +80,41 @@ module IronTitan
54
80
  end
55
81
 
56
82
  # @see the `==` method
83
+ # @param [Object] Object to be compared
57
84
  def eql?(o)
58
85
  self == o
59
86
  end
60
87
 
61
- # Calculate hash code according to all attributes.
88
+ # Calculates hash code according to all attributes.
89
+ # @return [Fixnum] Hash code
62
90
  def hash
63
91
  [job].hash
64
92
  end
65
93
 
66
- # build the object from hash
94
+ # Builds the object from hash
95
+ # @param [Hash] attributes Model attributes in the form of hash
96
+ # @return [Object] Returns the model itself
67
97
  def build_from_hash(attributes)
68
98
  return nil unless attributes.is_a?(Hash)
69
99
  self.class.swagger_types.each_pair do |key, type|
70
100
  if type =~ /^Array<(.*)>/i
101
+ # check to ensure the input is an array given that the the attribute
102
+ # is documented as an array but the input is not
71
103
  if attributes[self.class.attribute_map[key]].is_a?(Array)
72
104
  self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
73
- else
74
- #TODO show warning in debug mode
75
105
  end
76
106
  elsif !attributes[self.class.attribute_map[key]].nil?
77
107
  self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
78
- else
79
- # data not found in attributes(hash), not an issue as the data can be optional
80
- end
108
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
81
109
  end
82
110
 
83
111
  self
84
112
  end
85
113
 
114
+ # Deserializes the data based on type
115
+ # @param string type Data type
116
+ # @param string value Value to be deserialized
117
+ # @return [Object] Deserialized data
86
118
  def _deserialize(type, value)
87
119
  case type.to_sym
88
120
  when :DateTime
@@ -116,21 +148,25 @@ module IronTitan
116
148
  end
117
149
  end
118
150
  else # model
119
- _model = IronTitan.const_get(type).new
120
- _model.build_from_hash(value)
151
+ temp_model = IronTitan.const_get(type).new
152
+ temp_model.build_from_hash(value)
121
153
  end
122
154
  end
123
155
 
156
+ # Returns the string representation of the object
157
+ # @return [String] String presentation of the object
124
158
  def to_s
125
159
  to_hash.to_s
126
160
  end
127
161
 
128
- # to_body is an alias to to_body (backward compatibility))
162
+ # to_body is an alias to to_hash (backward compatibility)
163
+ # @return [Hash] Returns the object in the form of hash
129
164
  def to_body
130
165
  to_hash
131
166
  end
132
167
 
133
- # return the object in the form of hash
168
+ # Returns the object in the form of hash
169
+ # @return [Hash] Returns the object in the form of hash
134
170
  def to_hash
135
171
  hash = {}
136
172
  self.class.attribute_map.each_pair do |attr, param|
@@ -141,8 +177,10 @@ module IronTitan
141
177
  hash
142
178
  end
143
179
 
144
- # Method to output non-array value in the form of hash
180
+ # Outputs non-array value in the form of hash
145
181
  # For object, use to_hash. Otherwise, just return the value
182
+ # @param [Object] value Any valid value
183
+ # @return [Hash] Returns the value in the form of hash
146
184
  def _to_hash(value)
147
185
  if value.is_a?(Array)
148
186
  value.compact.map{ |v| _to_hash(v) }
@@ -158,4 +196,5 @@ module IronTitan
158
196
  end
159
197
 
160
198
  end
199
+
161
200
  end