phrase 1.0.3 → 1.0.8

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
  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