phrase 1.0.3 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a2a3ba240b5fe6192611ada80af8b0e4801f5d8b3719537257c63acff09d41e
4
- data.tar.gz: 61a4a7f0c7a3dabd110a1b5c9c585c59238977a5cbdcf52f6139e8d2bac3d9de
3
+ metadata.gz: 786cd863ec921dca3b5e1cb94b076fd60d161c941b851dcda43e81be41d00c29
4
+ data.tar.gz: 7b190b38c23011e0587d7fe0096ebffc546e8760bf87977c4e69f65361fbbfad
5
5
  SHA512:
6
- metadata.gz: 7a798dcbf704b4b174f4cf7aca3df46abea328efd23dcd0668c23c775e79f73ebaf1dfa2620cfb06e0db2eb20aa12d5b94be4ba4dfb8d817d17f82fa856c2540
7
- data.tar.gz: 36f134b201a9d3c770a413b67bad3418fe2ad9b1e254dc0de6fdce651f21ff0a2b02df37d40edf2176698f4a91119486bda4163820ee01d7c470a52ca7a837cc
6
+ metadata.gz: 842413258da9682e4c40f6d98cb5dc2de6c1f046bf00d27f9923686ad8a9316eb694f84d96e29764c995cbbbc19e10d868759c4372956fab35d5f8050a5872cc
7
+ data.tar.gz: 5190235afcfa191f12002945acb66646a9bbbb16b7965ebed8bc0e4201a8a3b17f80b041e56b2ee6b241594eb397d715e2d0e3b760ab1f7708305d175058f34b
data/README.md CHANGED
@@ -7,7 +7,7 @@ Phrase is a translation management platform for software projects. You can colla
7
7
  ## This SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
8
8
 
9
9
  - API version: 2.0.0
10
- - Package version: 1.0.3
10
+ - Package version: 1.0.8
11
11
  - Build package: org.openapitools.codegen.languages.RubyClientCodegen
12
12
  For more information, please visit [https://developers.phrase.com/api/](https://developers.phrase.com/api/)
13
13
 
@@ -56,10 +56,10 @@ gem build phrase.gemspec
56
56
  Then install the gem locally:
57
57
 
58
58
  ```shell
59
- gem install ./phrase-1.0.3.gem
59
+ gem install ./phrase-1.0.8.gem
60
60
  ```
61
61
 
62
- (for development, run `gem install --dev ./phrase-1.0.3.gem` to install the development dependencies)
62
+ (for development, run `gem install --dev ./phrase-1.0.8.gem` to install the development dependencies)
63
63
 
64
64
  ## Getting Started
65
65
 
@@ -186,6 +186,7 @@ Class | Method | HTTP request | Description
186
186
  *Phrase::JobsApi* | [**job_show**](docs/JobsApi.md#job_show) | **GET** /projects/{project_id}/jobs/{id} | Get a single job
187
187
  *Phrase::JobsApi* | [**job_start**](docs/JobsApi.md#job_start) | **POST** /projects/{project_id}/jobs/{id}/start | Start a job
188
188
  *Phrase::JobsApi* | [**job_update**](docs/JobsApi.md#job_update) | **PATCH** /projects/{project_id}/jobs/{id} | Update a job
189
+ *Phrase::JobsApi* | [**jobs_by_account**](docs/JobsApi.md#jobs_by_account) | **GET** /accounts/{account_id}/jobs | List account jobs
189
190
  *Phrase::JobsApi* | [**jobs_list**](docs/JobsApi.md#jobs_list) | **GET** /projects/{project_id}/jobs | List jobs
190
191
  *Phrase::KeysApi* | [**key_create**](docs/KeysApi.md#key_create) | **POST** /projects/{project_id}/keys | Create a key
191
192
  *Phrase::KeysApi* | [**key_delete**](docs/KeysApi.md#key_delete) | **DELETE** /projects/{project_id}/keys/{id} | Delete a key
@@ -9,8 +9,10 @@ Name | Type | Description | Notes
9
9
  **briefing** | **String** | | [optional]
10
10
  **due_date** | **DateTime** | | [optional]
11
11
  **state** | **String** | | [optional]
12
+ **ticket_url** | **String** | | [optional]
12
13
  **created_at** | **DateTime** | | [optional]
13
14
  **updated_at** | **DateTime** | | [optional]
15
+ **project** | [**ProjectShort**](ProjectShort.md) | | [optional]
14
16
 
15
17
  ## Code Sample
16
18
 
@@ -22,8 +24,10 @@ instance = Phrase::Job.new(id: null,
22
24
  briefing: null,
23
25
  due_date: null,
24
26
  state: null,
27
+ ticket_url: null,
25
28
  created_at: null,
26
- updated_at: null)
29
+ updated_at: null,
30
+ project: null)
27
31
  ```
28
32
 
29
33
 
@@ -8,6 +8,7 @@ Name | Type | Description | Notes
8
8
  **name** | **String** | Job name | [optional]
9
9
  **briefing** | **String** | Briefing for the translators | [optional]
10
10
  **due_date** | **DateTime** | Date the job should be finished | [optional]
11
+ **ticket_url** | **String** | URL to a ticket for this job (e.g. Jira, Trello) | [optional]
11
12
  **tags** | **Array<String>** | tags of keys that should be included within the job | [optional]
12
13
  **translation_key_ids** | **Array<String>** | ids of keys that should be included within the job | [optional]
13
14
 
@@ -20,6 +21,7 @@ instance = Phrase::JobCreateParameters.new(branch: my-feature-branch,
20
21
  name: de,
21
22
  briefing: de-DE,
22
23
  due_date: null,
24
+ ticket_url: https://example.atlassian.net/browse/FOO,
23
25
  tags: ["myUploadTag"],
24
26
  translation_key_ids: ["abcd1234cdef1234abcd1234cdef1234"])
25
27
  ```
@@ -9,8 +9,10 @@ Name | Type | Description | Notes
9
9
  **briefing** | **String** | | [optional]
10
10
  **due_date** | **DateTime** | | [optional]
11
11
  **state** | **String** | | [optional]
12
+ **ticket_url** | **String** | | [optional]
12
13
  **created_at** | **DateTime** | | [optional]
13
14
  **updated_at** | **DateTime** | | [optional]
15
+ **project** | [**ProjectShort**](ProjectShort.md) | | [optional]
14
16
  **owner** | [**UserPreview**](UserPreview.md) | | [optional]
15
17
  **job_tag_name** | **String** | | [optional]
16
18
  **locales** | [**Array<LocalePreview>**](LocalePreview.md) | | [optional]
@@ -26,8 +28,10 @@ instance = Phrase::JobDetails.new(id: null,
26
28
  briefing: null,
27
29
  due_date: null,
28
30
  state: null,
31
+ ticket_url: null,
29
32
  created_at: null,
30
33
  updated_at: null,
34
+ project: null,
31
35
  owner: null,
32
36
  job_tag_name: null,
33
37
  locales: null,
@@ -8,6 +8,7 @@ Name | Type | Description | Notes
8
8
  **name** | **String** | Job name | [optional]
9
9
  **briefing** | **String** | Briefing for the translators | [optional]
10
10
  **due_date** | **DateTime** | Date the job should be finished | [optional]
11
+ **ticket_url** | **String** | URL to a ticket for this job (e.g. Jira, Trello) | [optional]
11
12
 
12
13
  ## Code Sample
13
14
 
@@ -17,7 +18,8 @@ require 'Phrase'
17
18
  instance = Phrase::JobUpdateParameters.new(branch: my-feature-branch,
18
19
  name: de,
19
20
  briefing: de-DE,
20
- due_date: null)
21
+ due_date: null,
22
+ ticket_url: https://example.atlassian.net/browse/FOO)
21
23
  ```
22
24
 
23
25
 
@@ -13,6 +13,7 @@ Method | HTTP request | Description
13
13
  [**job_show**](JobsApi.md#job_show) | **GET** /projects/{project_id}/jobs/{id} | Get a single job
14
14
  [**job_start**](JobsApi.md#job_start) | **POST** /projects/{project_id}/jobs/{id}/start | Start a job
15
15
  [**job_update**](JobsApi.md#job_update) | **PATCH** /projects/{project_id}/jobs/{id} | Update a job
16
+ [**jobs_by_account**](JobsApi.md#jobs_by_account) | **GET** /accounts/{account_id}/jobs | List account jobs
16
17
  [**jobs_list**](JobsApi.md#jobs_list) | **GET** /projects/{project_id}/jobs | List jobs
17
18
 
18
19
 
@@ -600,6 +601,77 @@ Response<([**JobDetails**](JobDetails.md))>
600
601
  - **Accept**: application/json
601
602
 
602
603
 
604
+ ## jobs_by_account
605
+
606
+ > Array&lt;Job&gt; jobs_by_account(account_id, opts)
607
+
608
+ List account jobs
609
+
610
+ List all jobs for the given account.
611
+
612
+ ### Example
613
+
614
+ ```ruby
615
+ # load the gem
616
+ require 'phrase'
617
+ # setup authorization
618
+ Phrase.configure do |config|
619
+ # Configure HTTP basic authorization: Basic
620
+ config.username = 'YOUR USERNAME'
621
+ config.password = 'YOUR PASSWORD'
622
+
623
+ # Configure API key authorization: Token
624
+ config.api_key['Authorization'] = 'YOUR API KEY'
625
+ config.api_key_prefix['Authorization'] = 'token'
626
+ end
627
+
628
+ api_instance = Phrase::JobsApi.new
629
+ account_id = 'account_id_example' # String | Account ID
630
+ opts = {
631
+ x_phrase_app_otp: 'x_phrase_app_otp_example', # String | Two-Factor-Authentication token (optional)
632
+ page: 1, # Integer | Page number
633
+ per_page: 25, # Integer | allows you to specify a page size up to 100 items, 25 by default
634
+ owned_by: 'abcd1234cdef1234abcd1234cdef1234', # String | filter by user owning job
635
+ assigned_to: 'abcd1234cdef1234abcd1234cdef1234', # String | filter by user assigned to job
636
+ state: 'completed' # String | filter by state of job Valid states are <code>draft</code>, <code>in_progress</code>, <code>completed</code>
637
+ }
638
+
639
+ begin
640
+ #List account jobs
641
+ result = api_instance.jobs_by_account(account_id, opts)
642
+ pp result
643
+ rescue Phrase::ApiError => e
644
+ puts "Exception when calling JobsApi->jobs_by_account: #{e}"
645
+ end
646
+ ```
647
+
648
+ ### Parameters
649
+
650
+
651
+ Name | Type | Description | Notes
652
+ ------------- | ------------- | ------------- | -------------
653
+ **account_id** | **String**| Account ID |
654
+ **x_phrase_app_otp** | **String**| Two-Factor-Authentication token (optional) | [optional]
655
+ **page** | **Integer**| Page number | [optional]
656
+ **per_page** | **Integer**| allows you to specify a page size up to 100 items, 25 by default | [optional]
657
+ **owned_by** | **String**| filter by user owning job | [optional]
658
+ **assigned_to** | **String**| filter by user assigned to job | [optional]
659
+ **state** | **String**| filter by state of job Valid states are &lt;code&gt;draft&lt;/code&gt;, &lt;code&gt;in_progress&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt; | [optional]
660
+
661
+ ### Return type
662
+
663
+ Response<([**Array&lt;Job&gt;**](Job.md))>
664
+
665
+ ### Authorization
666
+
667
+ [Basic](../README.md#Basic), [Token](../README.md#Token)
668
+
669
+ ### HTTP request headers
670
+
671
+ - **Content-Type**: Not defined
672
+ - **Accept**: application/json
673
+
674
+
603
675
  ## jobs_list
604
676
 
605
677
  > Array&lt;Job&gt; jobs_list(project_id, opts)
@@ -294,7 +294,8 @@ project_id = 'project_id_example' # String | Project ID
294
294
  opts = {
295
295
  x_phrase_app_otp: 'x_phrase_app_otp_example', # String | Two-Factor-Authentication token (optional)
296
296
  page: 1, # Integer | Page number
297
- per_page: 25 # Integer | allows you to specify a page size up to 100 items, 25 by default
297
+ per_page: 25, # Integer | allows you to specify a page size up to 100 items, 25 by default
298
+ key_id: 'abcd1234cdef1234abcd1234cdef1234' # String | filter by key
298
299
  }
299
300
 
300
301
  begin
@@ -315,6 +316,7 @@ Name | Type | Description | Notes
315
316
  **x_phrase_app_otp** | **String**| Two-Factor-Authentication token (optional) | [optional]
316
317
  **page** | **Integer**| Page number | [optional]
317
318
  **per_page** | **Integer**| allows you to specify a page size up to 100 items, 25 by default | [optional]
319
+ **key_id** | **String**| filter by key | [optional]
318
320
 
319
321
  ### Return type
320
322
 
@@ -5,6 +5,7 @@
5
5
  Name | Type | Description | Notes
6
6
  ------------ | ------------- | ------------- | -------------
7
7
  **callback_url** | **String** | Callback URL to send requests to | [optional]
8
+ **secret** | **String** | Webhook secret used to calculate signature. If empty, the default project secret will be used. | [optional]
8
9
  **description** | **String** | Webhook description | [optional]
9
10
  **events** | **String** | List of event names to trigger the webhook (separated by comma) | [optional]
10
11
  **active** | **Boolean** | Whether webhook is active or inactive | [optional]
@@ -15,6 +16,7 @@ Name | Type | Description | Notes
15
16
  require 'Phrase'
16
17
 
17
18
  instance = Phrase::WebhookCreateParameters.new(callback_url: http://example.com/hooks/phraseapp-notifications,
19
+ secret: secr3t,
18
20
  description: My webhook for chat notifications,
19
21
  events: locales:create,translations:update,
20
22
  active: null)
@@ -5,6 +5,7 @@
5
5
  Name | Type | Description | Notes
6
6
  ------------ | ------------- | ------------- | -------------
7
7
  **callback_url** | **String** | Callback URL to send requests to | [optional]
8
+ **secret** | **String** | Webhook secret used to calculate signature. If empty, the default project secret will be used. | [optional]
8
9
  **description** | **String** | Webhook description | [optional]
9
10
  **events** | **String** | List of event names to trigger the webhook (separated by comma) | [optional]
10
11
  **active** | **Boolean** | Whether webhook is active or inactive | [optional]
@@ -15,6 +16,7 @@ Name | Type | Description | Notes
15
16
  require 'Phrase'
16
17
 
17
18
  instance = Phrase::WebhookUpdateParameters.new(callback_url: http://example.com/hooks/phraseapp-notifications,
19
+ secret: secr3t,
18
20
  description: My webhook for chat notifications,
19
21
  events: locales:create,translations:update,
20
22
  active: null)
@@ -705,6 +705,87 @@ module Phrase
705
705
  return response, status_code, headers
706
706
  end
707
707
 
708
+ # List account jobs
709
+ # List all jobs for the given account.
710
+ # @param account_id [String] Account ID
711
+ # @param [Hash] opts the optional parameters
712
+ # @option opts [String] :x_phrase_app_otp Two-Factor-Authentication token (optional)
713
+ # @option opts [Integer] :page Page number
714
+ # @option opts [Integer] :per_page allows you to specify a page size up to 100 items, 25 by default
715
+ # @option opts [String] :owned_by filter by user owning job
716
+ # @option opts [String] :assigned_to filter by user assigned to job
717
+ # @option opts [String] :state filter by state of job Valid states are &lt;code&gt;draft&lt;/code&gt;, &lt;code&gt;in_progress&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt;
718
+ # @return [Array<Job>]
719
+ def jobs_by_account(account_id, opts = {})
720
+ data, _status_code, _headers = jobs_by_account_with_http_info(account_id, opts)
721
+ data
722
+ end
723
+
724
+ # List account jobs
725
+ # List all jobs for the given account.
726
+ # @param account_id [String] Account ID
727
+ # @param [Hash] opts the optional parameters
728
+ # @option opts [String] :x_phrase_app_otp Two-Factor-Authentication token (optional)
729
+ # @option opts [Integer] :page Page number
730
+ # @option opts [Integer] :per_page allows you to specify a page size up to 100 items, 25 by default
731
+ # @option opts [String] :owned_by filter by user owning job
732
+ # @option opts [String] :assigned_to filter by user assigned to job
733
+ # @option opts [String] :state filter by state of job Valid states are &lt;code&gt;draft&lt;/code&gt;, &lt;code&gt;in_progress&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt;
734
+ # @return [Array<(Response<(Array<Job>)>, Integer, Hash)>] Response<(Array<Job>)> data, response status code and response headers
735
+ def jobs_by_account_with_http_info(account_id, opts = {})
736
+ if @api_client.config.debugging
737
+ @api_client.config.logger.debug 'Calling API: JobsApi.jobs_by_account ...'
738
+ end
739
+ # verify the required parameter 'account_id' is set
740
+ if @api_client.config.client_side_validation && account_id.nil?
741
+ fail ArgumentError, "Missing the required parameter 'account_id' when calling JobsApi.jobs_by_account"
742
+ end
743
+ # resource path
744
+ local_var_path = '/accounts/{account_id}/jobs'.sub('{' + 'account_id' + '}', CGI.escape(account_id.to_s))
745
+
746
+ # query parameters
747
+ query_params = opts[:query_params] || {}
748
+ query_params[:'page'] = opts[:'page'] if !opts[:'page'].nil?
749
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
750
+ query_params[:'owned_by'] = opts[:'owned_by'] if !opts[:'owned_by'].nil?
751
+ query_params[:'assigned_to'] = opts[:'assigned_to'] if !opts[:'assigned_to'].nil?
752
+ query_params[:'state'] = opts[:'state'] if !opts[:'state'].nil?
753
+
754
+ # header parameters
755
+ header_params = opts[:header_params] || {}
756
+ # HTTP header 'Accept' (if needed)
757
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
758
+ header_params[:'X-PhraseApp-OTP'] = opts[:'x_phrase_app_otp'] if !opts[:'x_phrase_app_otp'].nil?
759
+
760
+ # form parameters
761
+ form_params = opts[:form_params] || {}
762
+
763
+ # http body (model)
764
+ post_body = opts[:body]
765
+
766
+ # return_type
767
+ return_type = opts[:return_type] || 'Array<Job>'
768
+
769
+ # auth_names
770
+ auth_names = opts[:auth_names] || ['Basic', 'Token']
771
+
772
+ new_options = opts.merge(
773
+ :header_params => header_params,
774
+ :query_params => query_params,
775
+ :form_params => form_params,
776
+ :body => post_body,
777
+ :auth_names => auth_names,
778
+ :return_type => return_type
779
+ )
780
+
781
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
782
+ if @api_client.config.debugging
783
+ @api_client.config.logger.debug "API called: JobsApi#jobs_by_account\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
784
+ end
785
+ response = ::Phrase::Response.new(data, headers)
786
+ return response, status_code, headers
787
+ end
788
+
708
789
  # List jobs
709
790
  # List all jobs for the given project.
710
791
  # @param project_id [String] Project ID
@@ -310,6 +310,7 @@ module Phrase
310
310
  # @option opts [String] :x_phrase_app_otp Two-Factor-Authentication token (optional)
311
311
  # @option opts [Integer] :page Page number
312
312
  # @option opts [Integer] :per_page allows you to specify a page size up to 100 items, 25 by default
313
+ # @option opts [String] :key_id filter by key
313
314
  # @return [Array<Screenshot>]
314
315
  def screenshots_list(project_id, opts = {})
315
316
  data, _status_code, _headers = screenshots_list_with_http_info(project_id, opts)
@@ -323,6 +324,7 @@ module Phrase
323
324
  # @option opts [String] :x_phrase_app_otp Two-Factor-Authentication token (optional)
324
325
  # @option opts [Integer] :page Page number
325
326
  # @option opts [Integer] :per_page allows you to specify a page size up to 100 items, 25 by default
327
+ # @option opts [String] :key_id filter by key
326
328
  # @return [Array<(Response<(Array<Screenshot>)>, Integer, Hash)>] Response<(Array<Screenshot>)> data, response status code and response headers
327
329
  def screenshots_list_with_http_info(project_id, opts = {})
328
330
  if @api_client.config.debugging
@@ -339,6 +341,7 @@ module Phrase
339
341
  query_params = opts[:query_params] || {}
340
342
  query_params[:'page'] = opts[:'page'] if !opts[:'page'].nil?
341
343
  query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
344
+ query_params[:'key_id'] = opts[:'key_id'] if !opts[:'key_id'].nil?
342
345
 
343
346
  # header parameters
344
347
  header_params = opts[:header_params] || {}
@@ -128,9 +128,11 @@ module Phrase
128
128
  data = {}
129
129
  form_params.each do |key, value|
130
130
  case value
131
- when ::File, ::Array, nil
132
- # let typhoeus handle File, Array and nil parameters
131
+ when ::File, ::Tempfile, ::Array, nil
132
+ # let typhoeus handle File, Tempfile, Array and nil parameters
133
133
  data[key] = value
134
+ when ::Hash
135
+ data[key] = build_request_body(header_params, value, body)
134
136
  else
135
137
  data[key] = value.to_s
136
138
  end
@@ -12,10 +12,14 @@ module Phrase
12
12
 
13
13
  attr_accessor :state
14
14
 
15
+ attr_accessor :ticket_url
16
+
15
17
  attr_accessor :created_at
16
18
 
17
19
  attr_accessor :updated_at
18
20
 
21
+ attr_accessor :project
22
+
19
23
  # Attribute mapping from ruby-style variable name to JSON key.
20
24
  def self.attribute_map
21
25
  {
@@ -24,8 +28,10 @@ module Phrase
24
28
  :'briefing' => :'briefing',
25
29
  :'due_date' => :'due_date',
26
30
  :'state' => :'state',
31
+ :'ticket_url' => :'ticket_url',
27
32
  :'created_at' => :'created_at',
28
- :'updated_at' => :'updated_at'
33
+ :'updated_at' => :'updated_at',
34
+ :'project' => :'project'
29
35
  }
30
36
  end
31
37
 
@@ -37,8 +43,10 @@ module Phrase
37
43
  :'briefing' => :'String',
38
44
  :'due_date' => :'DateTime',
39
45
  :'state' => :'String',
46
+ :'ticket_url' => :'String',
40
47
  :'created_at' => :'DateTime',
41
- :'updated_at' => :'DateTime'
48
+ :'updated_at' => :'DateTime',
49
+ :'project' => :'ProjectShort'
42
50
  }
43
51
  end
44
52
 
@@ -83,6 +91,10 @@ module Phrase
83
91
  self.state = attributes[:'state']
84
92
  end
85
93
 
94
+ if attributes.key?(:'ticket_url')
95
+ self.ticket_url = attributes[:'ticket_url']
96
+ end
97
+
86
98
  if attributes.key?(:'created_at')
87
99
  self.created_at = attributes[:'created_at']
88
100
  end
@@ -90,6 +102,10 @@ module Phrase
90
102
  if attributes.key?(:'updated_at')
91
103
  self.updated_at = attributes[:'updated_at']
92
104
  end
105
+
106
+ if attributes.key?(:'project')
107
+ self.project = attributes[:'project']
108
+ end
93
109
  end
94
110
 
95
111
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -115,8 +131,10 @@ module Phrase
115
131
  briefing == o.briefing &&
116
132
  due_date == o.due_date &&
117
133
  state == o.state &&
134
+ ticket_url == o.ticket_url &&
118
135
  created_at == o.created_at &&
119
- updated_at == o.updated_at
136
+ updated_at == o.updated_at &&
137
+ project == o.project
120
138
  end
121
139
 
122
140
  # @see the `==` method
@@ -128,7 +146,7 @@ module Phrase
128
146
  # Calculates hash code according to all attributes.
129
147
  # @return [Integer] Hash code
130
148
  def hash
131
- [id, name, briefing, due_date, state, created_at, updated_at].hash
149
+ [id, name, briefing, due_date, state, ticket_url, created_at, updated_at, project].hash
132
150
  end
133
151
 
134
152
  # Builds the object from hash