docusign_esign 3.4.0 → 3.5.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +73 -0
  3. data/docusign_esign-2.6.0.rc1.gem +0 -0
  4. data/lib/docusign_esign.rb +24 -0
  5. data/lib/docusign_esign/.DS_Store +0 -0
  6. data/lib/docusign_esign/api/.DS_Store +0 -0
  7. data/lib/docusign_esign/api/accounts_api.rb +362 -0
  8. data/lib/docusign_esign/api/bulk_envelopes_api.rb +126 -4
  9. data/lib/docusign_esign/api/envelopes_api.rb +320 -0
  10. data/lib/docusign_esign/client/.DS_Store +0 -0
  11. data/lib/docusign_esign/models/account_settings_information.rb +11 -1
  12. data/lib/docusign_esign/models/bulk_send_batch_status.rb +287 -0
  13. data/lib/docusign_esign/models/bulk_send_batch_summaries.rb +277 -0
  14. data/lib/docusign_esign/models/bulk_send_batch_summary.rb +255 -0
  15. data/lib/docusign_esign/models/bulk_send_error_status.rb +207 -0
  16. data/lib/docusign_esign/models/conditional_recipient_rule.rb +216 -0
  17. data/lib/docusign_esign/models/conditional_recipient_rule_condition.rb +207 -0
  18. data/lib/docusign_esign/models/conditional_recipient_rule_filter.rb +235 -0
  19. data/lib/docusign_esign/models/e_note_configuration.rb +11 -1
  20. data/lib/docusign_esign/models/envelope.rb +13 -4
  21. data/lib/docusign_esign/models/envelope_definition.rb +13 -4
  22. data/lib/docusign_esign/models/envelope_template.rb +13 -4
  23. data/lib/docusign_esign/models/new_user.rb +11 -1
  24. data/lib/docusign_esign/models/proof_service_resource_token.rb +14 -4
  25. data/lib/docusign_esign/models/recipient_additional_notification.rb +14 -4
  26. data/lib/docusign_esign/models/recipient_group.rb +207 -0
  27. data/lib/docusign_esign/models/recipient_option.rb +225 -0
  28. data/lib/docusign_esign/models/recipient_routing.rb +184 -0
  29. data/lib/docusign_esign/models/recipient_rules.rb +187 -0
  30. data/lib/docusign_esign/models/report_in_product_csv_run_request.rb +437 -0
  31. data/lib/docusign_esign/models/report_in_product_field.rb +215 -0
  32. data/lib/docusign_esign/models/report_in_product_get.rb +466 -0
  33. data/lib/docusign_esign/models/report_in_product_list.rb +187 -0
  34. data/lib/docusign_esign/models/report_in_product_list_item.rb +315 -0
  35. data/lib/docusign_esign/models/report_in_product_run_request.rb +397 -0
  36. data/lib/docusign_esign/models/report_in_product_run_response.rb +247 -0
  37. data/lib/docusign_esign/models/report_in_product_run_response_row.rb +194 -0
  38. data/lib/docusign_esign/models/report_in_product_run_response_row_fields.rb +1395 -0
  39. data/lib/docusign_esign/models/report_in_product_save_response.rb +185 -0
  40. data/lib/docusign_esign/models/report_in_product_sent_by_details.rb +199 -0
  41. data/lib/docusign_esign/models/sender_email_notifications.rb +11 -1
  42. data/lib/docusign_esign/models/tab_metadata.rb +21 -1
  43. data/lib/docusign_esign/models/workflow.rb +207 -0
  44. data/lib/docusign_esign/models/workflow_step.rb +254 -0
  45. data/lib/docusign_esign/version.rb +1 -1
  46. data/tests/Gemfile.lock +3 -3
  47. metadata +33 -7
  48. data/docusign_esign-2.4.0.gem +0 -0
  49. data/docusign_esign-2.5.0.rc1.gem +0 -0
  50. data/docusign_esign-3.4.0.rc1.gem +0 -0
@@ -0,0 +1,185 @@
1
+ =begin
2
+ #DocuSign REST API
3
+
4
+ #The DocuSign REST API provides you with a powerful, convenient, and simple Web services API for interacting with DocuSign.
5
+
6
+ OpenAPI spec version: v2.1
7
+ Contact: devcenter@docusign.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.13-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module DocuSign_eSign
16
+ class ReportInProductSaveResponse
17
+ #
18
+ attr_accessor :report_customized_id
19
+
20
+ # Attribute mapping from ruby-style variable name to JSON key.
21
+ def self.attribute_map
22
+ {
23
+ :'report_customized_id' => :'reportCustomizedId'
24
+ }
25
+ end
26
+
27
+ # Attribute type mapping.
28
+ def self.swagger_types
29
+ {
30
+ :'report_customized_id' => :'String'
31
+ }
32
+ end
33
+
34
+ # Initializes the object
35
+ # @param [Hash] attributes Model attributes in the form of hash
36
+ def initialize(attributes = {})
37
+ return unless attributes.is_a?(Hash)
38
+
39
+ # convert string to symbol for hash key
40
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
41
+
42
+ if attributes.has_key?(:'reportCustomizedId')
43
+ self.report_customized_id = attributes[:'reportCustomizedId']
44
+ end
45
+ end
46
+
47
+ # Show invalid properties with the reasons. Usually used together with valid?
48
+ # @return Array for valid properties with the reasons
49
+ def list_invalid_properties
50
+ invalid_properties = Array.new
51
+ invalid_properties
52
+ end
53
+
54
+ # Check to see if the all the properties in the model are valid
55
+ # @return true if the model is valid
56
+ def valid?
57
+ true
58
+ end
59
+
60
+ # Checks equality by comparing each attribute.
61
+ # @param [Object] Object to be compared
62
+ def ==(o)
63
+ return true if self.equal?(o)
64
+ self.class == o.class &&
65
+ report_customized_id == o.report_customized_id
66
+ end
67
+
68
+ # @see the `==` method
69
+ # @param [Object] Object to be compared
70
+ def eql?(o)
71
+ self == o
72
+ end
73
+
74
+ # Calculates hash code according to all attributes.
75
+ # @return [Fixnum] Hash code
76
+ def hash
77
+ [report_customized_id].hash
78
+ end
79
+
80
+ # Builds the object from hash
81
+ # @param [Hash] attributes Model attributes in the form of hash
82
+ # @return [Object] Returns the model itself
83
+ def build_from_hash(attributes)
84
+ return nil unless attributes.is_a?(Hash)
85
+ self.class.swagger_types.each_pair do |key, type|
86
+ if type =~ /\AArray<(.*)>/i
87
+ # check to ensure the input is an array given that the attribute
88
+ # is documented as an array but the input is not
89
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
90
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
91
+ end
92
+ elsif !attributes[self.class.attribute_map[key]].nil?
93
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
94
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
95
+ end
96
+
97
+ self
98
+ end
99
+
100
+ # Deserializes the data based on type
101
+ # @param string type Data type
102
+ # @param string value Value to be deserialized
103
+ # @return [Object] Deserialized data
104
+ def _deserialize(type, value)
105
+ case type.to_sym
106
+ when :DateTime
107
+ DateTime.parse(value)
108
+ when :Date
109
+ Date.parse(value)
110
+ when :String
111
+ value.to_s
112
+ when :Integer
113
+ value.to_i
114
+ when :Float
115
+ value.to_f
116
+ when :BOOLEAN
117
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
118
+ true
119
+ else
120
+ false
121
+ end
122
+ when :Object
123
+ # generic object (usually a Hash), return directly
124
+ value
125
+ when /\AArray<(?<inner_type>.+)>\z/
126
+ inner_type = Regexp.last_match[:inner_type]
127
+ value.map { |v| _deserialize(inner_type, v) }
128
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
129
+ k_type = Regexp.last_match[:k_type]
130
+ v_type = Regexp.last_match[:v_type]
131
+ {}.tap do |hash|
132
+ value.each do |k, v|
133
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
134
+ end
135
+ end
136
+ else # model
137
+ temp_model = DocuSign_eSign.const_get(type).new
138
+ temp_model.build_from_hash(value)
139
+ end
140
+ end
141
+
142
+ # Returns the string representation of the object
143
+ # @return [String] String presentation of the object
144
+ def to_s
145
+ to_hash.to_s
146
+ end
147
+
148
+ # to_body is an alias to to_hash (backward compatibility)
149
+ # @return [Hash] Returns the object in the form of hash
150
+ def to_body
151
+ to_hash
152
+ end
153
+
154
+ # Returns the object in the form of hash
155
+ # @return [Hash] Returns the object in the form of hash
156
+ def to_hash
157
+ hash = {}
158
+ self.class.attribute_map.each_pair do |attr, param|
159
+ value = self.send(attr)
160
+ next if value.nil?
161
+ hash[param] = _to_hash(value)
162
+ end
163
+ hash
164
+ end
165
+
166
+ # Outputs non-array value in the form of hash
167
+ # For object, use to_hash. Otherwise, just return the value
168
+ # @param [Object] value Any valid value
169
+ # @return [Hash] Returns the value in the form of hash
170
+ def _to_hash(value)
171
+ if value.is_a?(Array)
172
+ value.compact.map { |v| _to_hash(v) }
173
+ elsif value.is_a?(Hash)
174
+ {}.tap do |hash|
175
+ value.each { |k, v| hash[k] = _to_hash(v) }
176
+ end
177
+ elsif value.respond_to? :to_hash
178
+ value.to_hash
179
+ else
180
+ value
181
+ end
182
+ end
183
+
184
+ end
185
+ end
@@ -0,0 +1,199 @@
1
+ =begin
2
+ #DocuSign REST API
3
+
4
+ #The DocuSign REST API provides you with a powerful, convenient, and simple Web services API for interacting with DocuSign.
5
+
6
+ OpenAPI spec version: v2.1
7
+ Contact: devcenter@docusign.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.13-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module DocuSign_eSign
16
+ class ReportInProductSentByDetails
17
+ # A collection group objects containing information about the groups returned.
18
+ attr_accessor :groups
19
+
20
+ #
21
+ attr_accessor :users
22
+
23
+ # Attribute mapping from ruby-style variable name to JSON key.
24
+ def self.attribute_map
25
+ {
26
+ :'groups' => :'groups',
27
+ :'users' => :'users'
28
+ }
29
+ end
30
+
31
+ # Attribute type mapping.
32
+ def self.swagger_types
33
+ {
34
+ :'groups' => :'Array<Group>',
35
+ :'users' => :'Array<UserInfo>'
36
+ }
37
+ end
38
+
39
+ # Initializes the object
40
+ # @param [Hash] attributes Model attributes in the form of hash
41
+ def initialize(attributes = {})
42
+ return unless attributes.is_a?(Hash)
43
+
44
+ # convert string to symbol for hash key
45
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
46
+
47
+ if attributes.has_key?(:'groups')
48
+ if (value = attributes[:'groups']).is_a?(Array)
49
+ self.groups = value
50
+ end
51
+ end
52
+
53
+ if attributes.has_key?(:'users')
54
+ if (value = attributes[:'users']).is_a?(Array)
55
+ self.users = value
56
+ end
57
+ end
58
+ end
59
+
60
+ # Show invalid properties with the reasons. Usually used together with valid?
61
+ # @return Array for valid properties with the reasons
62
+ def list_invalid_properties
63
+ invalid_properties = Array.new
64
+ 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
+ true
71
+ end
72
+
73
+ # Checks equality by comparing each attribute.
74
+ # @param [Object] Object to be compared
75
+ def ==(o)
76
+ return true if self.equal?(o)
77
+ self.class == o.class &&
78
+ groups == o.groups &&
79
+ users == o.users
80
+ end
81
+
82
+ # @see the `==` method
83
+ # @param [Object] Object to be compared
84
+ def eql?(o)
85
+ self == o
86
+ end
87
+
88
+ # Calculates hash code according to all attributes.
89
+ # @return [Fixnum] Hash code
90
+ def hash
91
+ [groups, users].hash
92
+ end
93
+
94
+ # Builds the object from hash
95
+ # @param [Hash] attributes Model attributes in the form of hash
96
+ # @return [Object] Returns the model itself
97
+ def build_from_hash(attributes)
98
+ return nil unless attributes.is_a?(Hash)
99
+ self.class.swagger_types.each_pair do |key, type|
100
+ if type =~ /\AArray<(.*)>/i
101
+ # check to ensure the input is an array given that the attribute
102
+ # is documented as an array but the input is not
103
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
104
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
105
+ end
106
+ elsif !attributes[self.class.attribute_map[key]].nil?
107
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
108
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
109
+ end
110
+
111
+ self
112
+ end
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
118
+ def _deserialize(type, value)
119
+ case type.to_sym
120
+ when :DateTime
121
+ DateTime.parse(value)
122
+ when :Date
123
+ Date.parse(value)
124
+ when :String
125
+ value.to_s
126
+ when :Integer
127
+ value.to_i
128
+ when :Float
129
+ value.to_f
130
+ when :BOOLEAN
131
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
132
+ true
133
+ else
134
+ false
135
+ end
136
+ when :Object
137
+ # generic object (usually a Hash), return directly
138
+ value
139
+ when /\AArray<(?<inner_type>.+)>\z/
140
+ inner_type = Regexp.last_match[:inner_type]
141
+ value.map { |v| _deserialize(inner_type, v) }
142
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
143
+ k_type = Regexp.last_match[:k_type]
144
+ v_type = Regexp.last_match[:v_type]
145
+ {}.tap do |hash|
146
+ value.each do |k, v|
147
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
148
+ end
149
+ end
150
+ else # model
151
+ temp_model = DocuSign_eSign.const_get(type).new
152
+ temp_model.build_from_hash(value)
153
+ end
154
+ end
155
+
156
+ # Returns the string representation of the object
157
+ # @return [String] String presentation of the object
158
+ def to_s
159
+ to_hash.to_s
160
+ end
161
+
162
+ # to_body is an alias to to_hash (backward compatibility)
163
+ # @return [Hash] Returns the object in the form of hash
164
+ def to_body
165
+ to_hash
166
+ end
167
+
168
+ # Returns the object in the form of hash
169
+ # @return [Hash] Returns the object in the form of hash
170
+ def to_hash
171
+ hash = {}
172
+ self.class.attribute_map.each_pair do |attr, param|
173
+ value = self.send(attr)
174
+ next if value.nil?
175
+ hash[param] = _to_hash(value)
176
+ end
177
+ hash
178
+ end
179
+
180
+ # Outputs non-array value in the form of hash
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
184
+ def _to_hash(value)
185
+ if value.is_a?(Array)
186
+ value.compact.map { |v| _to_hash(v) }
187
+ elsif value.is_a?(Hash)
188
+ {}.tap do |hash|
189
+ value.each { |k, v| hash[k] = _to_hash(v) }
190
+ end
191
+ elsif value.respond_to? :to_hash
192
+ value.to_hash
193
+ else
194
+ value
195
+ end
196
+ end
197
+
198
+ end
199
+ end
@@ -32,6 +32,9 @@ module DocuSign_eSign
32
32
  # When set to **true**, the user receives notification if the offline signing failed.
33
33
  attr_accessor :offline_signing_failed
34
34
 
35
+ #
36
+ attr_accessor :powerform_responses_limit_notification_email
37
+
35
38
  #
36
39
  attr_accessor :purge_documents
37
40
 
@@ -53,6 +56,7 @@ module DocuSign_eSign
53
56
  :'delivery_failed' => :'deliveryFailed',
54
57
  :'envelope_complete' => :'envelopeComplete',
55
58
  :'offline_signing_failed' => :'offlineSigningFailed',
59
+ :'powerform_responses_limit_notification_email' => :'powerformResponsesLimitNotificationEmail',
56
60
  :'purge_documents' => :'purgeDocuments',
57
61
  :'recipient_viewed' => :'recipientViewed',
58
62
  :'sender_envelope_declined' => :'senderEnvelopeDeclined',
@@ -69,6 +73,7 @@ module DocuSign_eSign
69
73
  :'delivery_failed' => :'String',
70
74
  :'envelope_complete' => :'String',
71
75
  :'offline_signing_failed' => :'String',
76
+ :'powerform_responses_limit_notification_email' => :'String',
72
77
  :'purge_documents' => :'String',
73
78
  :'recipient_viewed' => :'String',
74
79
  :'sender_envelope_declined' => :'String',
@@ -108,6 +113,10 @@ module DocuSign_eSign
108
113
  self.offline_signing_failed = attributes[:'offlineSigningFailed']
109
114
  end
110
115
 
116
+ if attributes.has_key?(:'powerformResponsesLimitNotificationEmail')
117
+ self.powerform_responses_limit_notification_email = attributes[:'powerformResponsesLimitNotificationEmail']
118
+ end
119
+
111
120
  if attributes.has_key?(:'purgeDocuments')
112
121
  self.purge_documents = attributes[:'purgeDocuments']
113
122
  end
@@ -149,6 +158,7 @@ module DocuSign_eSign
149
158
  delivery_failed == o.delivery_failed &&
150
159
  envelope_complete == o.envelope_complete &&
151
160
  offline_signing_failed == o.offline_signing_failed &&
161
+ powerform_responses_limit_notification_email == o.powerform_responses_limit_notification_email &&
152
162
  purge_documents == o.purge_documents &&
153
163
  recipient_viewed == o.recipient_viewed &&
154
164
  sender_envelope_declined == o.sender_envelope_declined &&
@@ -164,7 +174,7 @@ module DocuSign_eSign
164
174
  # Calculates hash code according to all attributes.
165
175
  # @return [Fixnum] Hash code
166
176
  def hash
167
- [changed_signer, comments_only_private_and_mention, comments_receive_all, delivery_failed, envelope_complete, offline_signing_failed, purge_documents, recipient_viewed, sender_envelope_declined, withdrawn_consent].hash
177
+ [changed_signer, comments_only_private_and_mention, comments_receive_all, delivery_failed, envelope_complete, offline_signing_failed, powerform_responses_limit_notification_email, purge_documents, recipient_viewed, sender_envelope_declined, withdrawn_consent].hash
168
178
  end
169
179
 
170
180
  # Builds the object from hash
@@ -115,9 +115,15 @@ module DocuSign_eSign
115
115
  #
116
116
  attr_accessor :payment_item_name
117
117
 
118
+ # When set to **true** and shared is true, information must be entered in this field to complete the envelope.
119
+ attr_accessor :require_all
120
+
118
121
  # When set to **true**, the signer is required to fill out this tab
119
122
  attr_accessor :required
120
123
 
124
+ # Optional element for field markup. When set to **true**, the signer is required to initial when they modify a shared field.
125
+ attr_accessor :require_initial_on_shared_change
126
+
121
127
  #
122
128
  attr_accessor :scale_value
123
129
 
@@ -187,7 +193,9 @@ module DocuSign_eSign
187
193
  :'payment_item_code' => :'paymentItemCode',
188
194
  :'payment_item_description' => :'paymentItemDescription',
189
195
  :'payment_item_name' => :'paymentItemName',
196
+ :'require_all' => :'requireAll',
190
197
  :'required' => :'required',
198
+ :'require_initial_on_shared_change' => :'requireInitialOnSharedChange',
191
199
  :'scale_value' => :'scaleValue',
192
200
  :'selected' => :'selected',
193
201
  :'shared' => :'shared',
@@ -239,7 +247,9 @@ module DocuSign_eSign
239
247
  :'payment_item_code' => :'String',
240
248
  :'payment_item_description' => :'String',
241
249
  :'payment_item_name' => :'String',
250
+ :'require_all' => :'String',
242
251
  :'required' => :'String',
252
+ :'require_initial_on_shared_change' => :'String',
243
253
  :'scale_value' => :'String',
244
254
  :'selected' => :'String',
245
255
  :'shared' => :'String',
@@ -400,10 +410,18 @@ module DocuSign_eSign
400
410
  self.payment_item_name = attributes[:'paymentItemName']
401
411
  end
402
412
 
413
+ if attributes.has_key?(:'requireAll')
414
+ self.require_all = attributes[:'requireAll']
415
+ end
416
+
403
417
  if attributes.has_key?(:'required')
404
418
  self.required = attributes[:'required']
405
419
  end
406
420
 
421
+ if attributes.has_key?(:'requireInitialOnSharedChange')
422
+ self.require_initial_on_shared_change = attributes[:'requireInitialOnSharedChange']
423
+ end
424
+
407
425
  if attributes.has_key?(:'scaleValue')
408
426
  self.scale_value = attributes[:'scaleValue']
409
427
  end
@@ -501,7 +519,9 @@ module DocuSign_eSign
501
519
  payment_item_code == o.payment_item_code &&
502
520
  payment_item_description == o.payment_item_description &&
503
521
  payment_item_name == o.payment_item_name &&
522
+ require_all == o.require_all &&
504
523
  required == o.required &&
524
+ require_initial_on_shared_change == o.require_initial_on_shared_change &&
505
525
  scale_value == o.scale_value &&
506
526
  selected == o.selected &&
507
527
  shared == o.shared &&
@@ -524,7 +544,7 @@ module DocuSign_eSign
524
544
  # Calculates hash code according to all attributes.
525
545
  # @return [Fixnum] Hash code
526
546
  def hash
527
- [anchor, anchor_case_sensitive, anchor_horizontal_alignment, anchor_ignore_if_not_present, anchor_match_whole_word, anchor_units, anchor_x_offset, anchor_y_offset, bold, collaborative, conceal_value_on_document, created_by_display_name, created_by_user_id, custom_tab_id, disable_auto_size, editable, font, font_color, font_size, height, included_in_email, initial_value, italic, items, last_modified, last_modified_by_display_name, last_modified_by_user_id, locked, maximum_length, merge_field, name, payment_item_code, payment_item_description, payment_item_name, required, scale_value, selected, shared, stamp_type, stamp_type_metadata, tab_label, type, underline, validation_message, validation_pattern, width].hash
547
+ [anchor, anchor_case_sensitive, anchor_horizontal_alignment, anchor_ignore_if_not_present, anchor_match_whole_word, anchor_units, anchor_x_offset, anchor_y_offset, bold, collaborative, conceal_value_on_document, created_by_display_name, created_by_user_id, custom_tab_id, disable_auto_size, editable, font, font_color, font_size, height, included_in_email, initial_value, italic, items, last_modified, last_modified_by_display_name, last_modified_by_user_id, locked, maximum_length, merge_field, name, payment_item_code, payment_item_description, payment_item_name, require_all, required, require_initial_on_shared_change, scale_value, selected, shared, stamp_type, stamp_type_metadata, tab_label, type, underline, validation_message, validation_pattern, width].hash
528
548
  end
529
549
 
530
550
  # Builds the object from hash