zendesk2 1.8.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -1
  3. data/lib/zendesk2/attributes.rb +1 -1
  4. data/lib/zendesk2/audit_event.rb +1 -1
  5. data/lib/zendesk2/category.rb +3 -3
  6. data/lib/zendesk2/collection.rb +2 -2
  7. data/lib/zendesk2/create_category.rb +2 -2
  8. data/lib/zendesk2/create_forum.rb +2 -2
  9. data/lib/zendesk2/create_group.rb +1 -1
  10. data/lib/zendesk2/create_membership.rb +1 -1
  11. data/lib/zendesk2/create_organization.rb +1 -1
  12. data/lib/zendesk2/create_ticket.rb +9 -9
  13. data/lib/zendesk2/create_ticket_field.rb +1 -1
  14. data/lib/zendesk2/create_topic.rb +1 -1
  15. data/lib/zendesk2/create_topic_comment.rb +1 -1
  16. data/lib/zendesk2/create_user.rb +3 -3
  17. data/lib/zendesk2/create_user_field.rb +2 -2
  18. data/lib/zendesk2/create_user_identity.rb +4 -4
  19. data/lib/zendesk2/create_view.rb +2 -2
  20. data/lib/zendesk2/destroy_user.rb +2 -2
  21. data/lib/zendesk2/forum.rb +3 -3
  22. data/lib/zendesk2/get_assignable_groups.rb +1 -1
  23. data/lib/zendesk2/get_ccd_tickets.rb +1 -1
  24. data/lib/zendesk2/get_current_user.rb +1 -1
  25. data/lib/zendesk2/get_user_identities.rb +1 -1
  26. data/lib/zendesk2/group.rb +3 -3
  27. data/lib/zendesk2/groups.rb +2 -2
  28. data/lib/zendesk2/help_center.rb +9 -0
  29. data/lib/zendesk2/help_center/access_policy.rb +1 -1
  30. data/lib/zendesk2/help_center/article.rb +9 -3
  31. data/lib/zendesk2/help_center/articles.rb +1 -1
  32. data/lib/zendesk2/help_center/category.rb +11 -5
  33. data/lib/zendesk2/help_center/create_help_center_article.rb +2 -2
  34. data/lib/zendesk2/help_center/create_help_center_category.rb +2 -2
  35. data/lib/zendesk2/help_center/create_help_center_section.rb +4 -4
  36. data/lib/zendesk2/help_center/create_help_center_translation.rb +37 -0
  37. data/lib/zendesk2/help_center/destroy_help_center_translation.rb +13 -0
  38. data/lib/zendesk2/help_center/get_help_center_translation.rb +13 -0
  39. data/lib/zendesk2/help_center/get_help_center_translations.rb +25 -0
  40. data/lib/zendesk2/help_center/section.rb +12 -6
  41. data/lib/zendesk2/help_center/sections.rb +1 -1
  42. data/lib/zendesk2/help_center/translation.rb +48 -0
  43. data/lib/zendesk2/help_center/translation_source.rb +45 -0
  44. data/lib/zendesk2/help_center/translations.rb +29 -0
  45. data/lib/zendesk2/help_center/update_help_center_translation.rb +16 -0
  46. data/lib/zendesk2/mark_user_identity_primary.rb +1 -1
  47. data/lib/zendesk2/membership.rb +3 -3
  48. data/lib/zendesk2/memberships.rb +3 -3
  49. data/lib/zendesk2/mock.rb +2 -1
  50. data/lib/zendesk2/organization.rb +8 -8
  51. data/lib/zendesk2/organizations.rb +2 -2
  52. data/lib/zendesk2/paged_collection.rb +3 -3
  53. data/lib/zendesk2/real.rb +6 -6
  54. data/lib/zendesk2/request.rb +9 -9
  55. data/lib/zendesk2/search.rb +2 -2
  56. data/lib/zendesk2/searchable.rb +1 -1
  57. data/lib/zendesk2/ticket.rb +9 -9
  58. data/lib/zendesk2/ticket_audit.rb +2 -2
  59. data/lib/zendesk2/ticket_audits.rb +3 -3
  60. data/lib/zendesk2/ticket_comment.rb +1 -1
  61. data/lib/zendesk2/ticket_comment_privacy_change.rb +1 -1
  62. data/lib/zendesk2/ticket_comments.rb +2 -2
  63. data/lib/zendesk2/ticket_field.rb +3 -3
  64. data/lib/zendesk2/ticket_metric.rb +1 -1
  65. data/lib/zendesk2/ticket_voice_comment.rb +1 -1
  66. data/lib/zendesk2/tickets.rb +1 -1
  67. data/lib/zendesk2/topic.rb +3 -3
  68. data/lib/zendesk2/topic_comment.rb +4 -4
  69. data/lib/zendesk2/update_organization.rb +1 -1
  70. data/lib/zendesk2/update_ticket.rb +5 -5
  71. data/lib/zendesk2/update_user.rb +4 -4
  72. data/lib/zendesk2/user.rb +13 -13
  73. data/lib/zendesk2/user_field.rb +3 -3
  74. data/lib/zendesk2/user_identity.rb +5 -5
  75. data/lib/zendesk2/users.rb +1 -1
  76. data/lib/zendesk2/version.rb +1 -1
  77. data/lib/zendesk2/view.rb +4 -4
  78. data/spec/help_center/articles_spec.rb +18 -0
  79. data/spec/help_center/categories_spec.rb +13 -0
  80. data/spec/help_center/sections_spec.rb +14 -1
  81. data/spec/support/client_helper.rb +0 -1
  82. metadata +10 -2
@@ -0,0 +1,29 @@
1
+ class Zendesk2::HelpCenter::Translations
2
+ include Zendesk2::Collection
3
+
4
+ include Zendesk2::PagedCollection
5
+ include Zendesk2::Searchable
6
+
7
+ model Zendesk2::HelpCenter::Translation
8
+
9
+ self.collection_method = :get_help_center_translations
10
+ self.collection_root = "translations"
11
+ self.model_method = :get_help_center_translation
12
+ self.model_root = "translation"
13
+
14
+ attribute :source_id, type: :integer
15
+ attribute :source_type, type: :string
16
+ attribute :locale, type: :string
17
+ attribute :locales, type: :array
18
+ attribute :outdated, type: :boolean
19
+ attribute :draft, type: :boolean
20
+
21
+ scopes << :source_id
22
+ scopes << :source_type
23
+
24
+ scopes << :locale
25
+ scopes << :locales
26
+
27
+ scopes << :outdated
28
+ scopes << :draft
29
+ end
@@ -0,0 +1,16 @@
1
+ class Zendesk2::UpdateHelpCenterTranslation
2
+ include Zendesk2::Request
3
+ include Zendesk2::HelpCenter::TranslationSource::Request
4
+
5
+ request_method :put
6
+ request_body { |r| { "translation" => r.translation_params } }
7
+ request_path { |r| "/help_center/#{r.source_type_url}/#{r.source_id}/translations/#{r.locale}.json" }
8
+
9
+ def translation_params
10
+ @_translation_params ||= Cistern::Hash.slice(params.fetch("translation"), *Zendesk2::CreateHelpCenterTranslation.accepted_attributes)
11
+ end
12
+
13
+ def mock
14
+ mock_response("translation" => self.find!(:help_center_translations, mock_translation_key).merge!(translation_params))
15
+ end
16
+ end
@@ -16,7 +16,7 @@ class Zendesk2::MarkUserIdentityPrimary
16
16
  user_identity = self.find!(:identities, user_identity_id)
17
17
 
18
18
  # only one user can be primary
19
- other_user_identities = service.data[:identities].values.select { |i| i["user_id"] == user_id }
19
+ other_user_identities = cistern.data[:identities].values.select { |i| i["user_id"] == user_id }
20
20
  other_user_identities.map { |i| i["primary"] = false }
21
21
 
22
22
  user_identity.merge!("primary" => true)
@@ -26,7 +26,7 @@ class Zendesk2::Membership
26
26
  data = if new_record?
27
27
  requires :organization_id, :user_id
28
28
 
29
- service.create_membership("membership" => self.attributes).body["organization_membership"]
29
+ cistern.create_membership("membership" => self.attributes).body["organization_membership"]
30
30
  else
31
31
  requires :identity
32
32
 
@@ -39,13 +39,13 @@ class Zendesk2::Membership
39
39
  def destroy!
40
40
  requires :identity
41
41
 
42
- service.destroy_membership("membership" => { "id" => self.identity })
42
+ cistern.destroy_membership("membership" => { "id" => self.identity })
43
43
  end
44
44
 
45
45
  def default!
46
46
  requires :identity, :user_id
47
47
 
48
- self.service.mark_membership_default(
48
+ self.cistern.mark_membership_default(
49
49
  "membership" => {
50
50
  "user_id" => self.user_id,
51
51
  "id" => self.identity
@@ -22,13 +22,13 @@ class Zendesk2::Memberships
22
22
  body = if self.user_id && self.organization_id
23
23
  {
24
24
  "organization_memberships" => [
25
- service.get_membership("user_id" => self.user_id, "organization_id" => self.organization_id).body["organization_membership"]
25
+ cistern.get_membership("user_id" => self.user_id, "organization_id" => self.organization_id).body["organization_membership"]
26
26
  ]
27
27
  }
28
28
  elsif self.user_id
29
- service.get_user_memberships({"membership" => { "user_id" => self.user_id }}.merge(params)).body
29
+ cistern.get_user_memberships({"membership" => { "user_id" => self.user_id }}.merge(params)).body
30
30
  else
31
- service.get_organization_memberships({"membership" => { "organization_id" => self.organization_id }}.merge(params)).body
31
+ cistern.get_organization_memberships({"membership" => { "organization_id" => self.organization_id }}.merge(params)).body
32
32
  end
33
33
 
34
34
  self.load(body[collection_root])
data/lib/zendesk2/mock.rb CHANGED
@@ -7,10 +7,11 @@ class Zendesk2::Mock
7
7
  :categories => {},
8
8
  :forums => {},
9
9
  :groups => {},
10
+ :help_center_access_policies => {},
10
11
  :help_center_articles => {},
11
12
  :help_center_categories => {},
12
13
  :help_center_sections => {},
13
- :help_center_access_policies => {},
14
+ :help_center_translations => {},
14
15
  :identities => {},
15
16
  :memberships => {},
16
17
  :organizations => {},
@@ -35,18 +35,18 @@ class Zendesk2::Organization
35
35
  def destroy!
36
36
  requires :identity
37
37
 
38
- service.destroy_organization("organization" => {"id" => self.identity})
38
+ cistern.destroy_organization("organization" => {"id" => self.identity})
39
39
  end
40
40
 
41
41
  def save!
42
42
  data = if new_record?
43
43
  requires :name
44
44
 
45
- service.create_organization("organization" => self.attributes)
45
+ cistern.create_organization("organization" => self.attributes)
46
46
  else
47
47
  requires :identity
48
48
 
49
- service.update_organization("organization" => self.attributes)
49
+ cistern.update_organization("organization" => self.attributes)
50
50
  end.body["organization"]
51
51
 
52
52
  merge_attributes(data)
@@ -56,8 +56,8 @@ class Zendesk2::Organization
56
56
  def users
57
57
  requires :identity
58
58
 
59
- service.users.load(
60
- service.get_organization_users("organization" => {"id" => self.identity}).body["users"]
59
+ cistern.users.load(
60
+ cistern.get_organization_users("organization" => {"id" => self.identity}).body["users"]
61
61
  )
62
62
  end
63
63
 
@@ -65,15 +65,15 @@ class Zendesk2::Organization
65
65
  def memberships
66
66
  requires :identity
67
67
 
68
- service.memberships(organization: self)
68
+ cistern.memberships(organization: self)
69
69
  end
70
70
 
71
71
  # @return [Zendesk2::Tickets] tickets associated with this organization
72
72
  def tickets
73
73
  requires :identity
74
74
 
75
- service.tickets.load(
76
- service.get_organization_tickets("organization_id" => self.identity).body["tickets"]
75
+ cistern.tickets.load(
76
+ cistern.get_organization_tickets("organization_id" => self.identity).body["tickets"]
77
77
  )
78
78
  end
79
79
  end
@@ -12,7 +12,7 @@ class Zendesk2::Organizations
12
12
  assoc_accessor :user
13
13
 
14
14
  def find_by_external_id(external_id)
15
- body = service.get_organization_by_external_id("external_id" => external_id).body
15
+ body = cistern.get_organization_by_external_id("external_id" => external_id).body
16
16
  if data = body.delete("organizations")
17
17
  collection = self.clone.load(data)
18
18
  collection.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
@@ -34,7 +34,7 @@ class Zendesk2::Organizations
34
34
  :get_organizations
35
35
  end
36
36
 
37
- body = service.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
37
+ body = cistern.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
38
38
 
39
39
  self.load(body[collection_root])
40
40
  self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
@@ -21,7 +21,7 @@ module Zendesk2::PagedCollection
21
21
  def model_root; self.class.model_root; end
22
22
 
23
23
  def new_page
24
- page = self.class.new(service: self.service)
24
+ page = self.class.new(cistern: self.cistern)
25
25
  page.merge_attributes(self.class.scopes.inject({}){|r,k| r.merge(k.to_s => send(k))})
26
26
  page
27
27
  end
@@ -129,7 +129,7 @@ module Zendesk2::PagedCollection
129
129
 
130
130
  scoped_attributes = { model_root => scoped_attributes }
131
131
 
132
- if data = self.service.send(model_method, scoped_attributes).body[self.model_root]
132
+ if data = self.cistern.send(model_method, scoped_attributes).body[self.model_root]
133
133
  new(data)
134
134
  end
135
135
  end
@@ -159,7 +159,7 @@ module Zendesk2::PagedCollection
159
159
 
160
160
  def collection_page(params)
161
161
  scoped_attributes = self.class.scopes.inject({}) { |r, k| r.merge(k.to_s => send(k)) }.merge(params)
162
- body = service.send(collection_method, scoped_attributes).body
162
+ body = cistern.send(collection_method, scoped_attributes).body
163
163
 
164
164
  self.load(body[collection_root]) # 'results' is the key for paged seraches
165
165
  self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
data/lib/zendesk2/real.rb CHANGED
@@ -13,19 +13,19 @@ class Zendesk2::Real
13
13
  @token = options.fetch(:token, Zendesk2.defaults[:token])
14
14
  password = options[:password] || Zendesk2.defaults[:password]
15
15
 
16
- service_options = options[:service_options] || {}
16
+ cistern_options = options[:cistern_options] || {}
17
17
 
18
18
  @auth_token = password || @token
19
- @username += "/token" if @auth_token == @token
19
+ @auth_id = "#{@username}/token" if @auth_token == @token
20
20
  @jwt_token = options[:jwt_token]
21
21
 
22
22
  raise "Missing required options: :url" unless @url
23
- raise "Missing required options: :username" unless @username
23
+ raise "Missing required options: :username" unless @auth_id
24
24
  raise "Missing required options: :password or :token" unless password || @token
25
25
 
26
- @service = Faraday.new({url: @url}.merge(service_options)) do |connection|
26
+ @cistern = Faraday.new({url: @url}.merge(cistern_options)) do |connection|
27
27
  # response
28
- connection.use Faraday::Request::BasicAuthentication, @username, @auth_token
28
+ connection.use Faraday::Request::BasicAuthentication, @auth_id, @auth_token
29
29
  connection.use Faraday::Response::RaiseError
30
30
  connection.response :json, content_type: /\bjson/
31
31
 
@@ -55,7 +55,7 @@ class Zendesk2::Real
55
55
  body = options[:body]
56
56
  headers = { "User-Agent" => Zendesk2::USER_AGENT }.merge(options[:headers] || {})
57
57
 
58
- @service.send(method) do |req|
58
+ @cistern.send(method) do |req|
59
59
  req.url(url)
60
60
  req.headers.merge!(headers)
61
61
  req.params.merge!(params)
@@ -114,16 +114,16 @@ module Zendesk2::Request
114
114
  end
115
115
 
116
116
  def data
117
- self.service.data
117
+ self.cistern.data
118
118
  end
119
119
 
120
120
  def html_url_for(path)
121
- File.join(service.url, path.to_s)
121
+ File.join(cistern.url, path.to_s)
122
122
  end
123
123
 
124
124
  def url_for(path, options={})
125
125
  URI.parse(
126
- File.join(service.url, "/api/v2", path.to_s)
126
+ File.join(cistern.url, "/api/v2", path.to_s)
127
127
  ).tap do |uri|
128
128
  if query = options[:query]
129
129
  uri.query = Faraday::NestedParamsEncoder.encode(query)
@@ -132,7 +132,7 @@ module Zendesk2::Request
132
132
  end
133
133
 
134
134
  def real(params={})
135
- service.request(:method => self.class.request_method,
135
+ cistern.request(:method => self.class.request_method,
136
136
  :path => self.request_path,
137
137
  :body => self.request_body,
138
138
  :url => params["url"],
@@ -161,7 +161,7 @@ module Zendesk2::Request
161
161
  end
162
162
 
163
163
  def find!(collection, identity, options={})
164
- if resource = self.service.data[collection][identity.to_i]
164
+ if resource = self.cistern.data[collection][identity.to_i]
165
165
  resource
166
166
  else
167
167
  error!(options[:error] || :not_found, options)
@@ -169,7 +169,7 @@ module Zendesk2::Request
169
169
  end
170
170
 
171
171
  def delete!(collection, identity, options={})
172
- self.service.data[collection].delete(identity.to_i) ||
172
+ self.cistern.data[collection].delete(identity.to_i) ||
173
173
  error!(options[:error] || :not_found, options)
174
174
  end
175
175
 
@@ -185,7 +185,7 @@ module Zendesk2::Request
185
185
  end
186
186
 
187
187
  def resources(collection, options={})
188
- page = collection.is_a?(Array) ? collection : service.data[collection.to_sym].values
188
+ page = collection.is_a?(Array) ? collection : cistern.data[collection.to_sym].values
189
189
  root = options.fetch(:root) { !collection.is_a?(Array) && collection.to_s }
190
190
 
191
191
  mock_response(
@@ -205,7 +205,7 @@ module Zendesk2::Request
205
205
 
206
206
  offset = (page_index - 1) * page_size
207
207
 
208
- resources = collection.is_a?(Array) ? collection : service.data[collection.to_sym].values
208
+ resources = collection.is_a?(Array) ? collection : cistern.data[collection.to_sym].values
209
209
  count = resources.size
210
210
  total_pages = (count / page_size) + 1
211
211
 
@@ -249,7 +249,7 @@ module Zendesk2::Request
249
249
  body = options[:response_body] || options[:body]
250
250
  method = options[:method] || :get
251
251
  params = options[:params]
252
- service.last_request = options[:request_body]
252
+ cistern.last_request = options[:request_body]
253
253
  status = options[:status] || 200
254
254
 
255
255
  path = options[:path]
@@ -26,9 +26,9 @@ class Zendesk2::Search
26
26
  type = terms.delete("type")
27
27
 
28
28
  collection = if type.nil?
29
- service.data.values
29
+ cistern.data.values
30
30
  else
31
- service.data[pluralize(type).to_sym]
31
+ cistern.data[pluralize(type).to_sym]
32
32
  end
33
33
 
34
34
  results = collection.values.select { |v| terms.all?{ |term, condition| v[term].to_s == condition.to_s } }
@@ -41,7 +41,7 @@ module Zendesk2::Searchable
41
41
  end
42
42
  end
43
43
 
44
- body = service.send(self.class.search_request, query, params).body
44
+ body = cistern.send(self.class.search_request, query, params).body
45
45
 
46
46
  if data = body.delete("results")
47
47
  self.load(data)
@@ -73,11 +73,11 @@ class Zendesk2::Ticket
73
73
  create_attributes.merge!("requester" => with_requester)
74
74
  end
75
75
 
76
- service.create_ticket("ticket" => create_attributes).body["ticket"]
76
+ cistern.create_ticket("ticket" => create_attributes).body["ticket"]
77
77
  else
78
78
  requires :identity
79
79
 
80
- service.update_ticket("ticket" => self.attributes).body["ticket"]
80
+ cistern.update_ticket("ticket" => self.attributes).body["ticket"]
81
81
  end
82
82
 
83
83
  merge_attributes(data)
@@ -86,7 +86,7 @@ class Zendesk2::Ticket
86
86
  def destroy!
87
87
  requires :identity
88
88
 
89
- service.destroy_ticket("ticket" => {"id" => self.identity})
89
+ cistern.destroy_ticket("ticket" => {"id" => self.identity})
90
90
  end
91
91
 
92
92
  # Adds a ticket comment
@@ -103,8 +103,8 @@ class Zendesk2::Ticket
103
103
 
104
104
  comment = Zendesk2.stringify_keys(options).merge("body" => text)
105
105
 
106
- service.ticket_comments.new(
107
- service.update_ticket(
106
+ cistern.ticket_comments.new(
107
+ cistern.update_ticket(
108
108
  "ticket" => {
109
109
  "id" => self.identity,
110
110
  "comment" => comment,
@@ -115,7 +115,7 @@ class Zendesk2::Ticket
115
115
 
116
116
  # @return [Array<Zendesk2::User>] All users CCD on this ticket
117
117
  def collaborators
118
- self.collaborator_ids.map { |cid| self.service.users.get(cid) }
118
+ self.collaborator_ids.map { |cid| self.cistern.users.get(cid) }
119
119
  end
120
120
 
121
121
  # Update list of users to be CCD on this ticket
@@ -126,16 +126,16 @@ class Zendesk2::Ticket
126
126
 
127
127
  # @return [Zendesk2::TicketAudits] all audits for this ticket
128
128
  def audits
129
- self.service.ticket_audits(ticket_id: self.identity).all
129
+ self.cistern.ticket_audits(ticket_id: self.identity).all
130
130
  end
131
131
 
132
132
  # @return [Zendesk2::TicketMetric] metrics for this ticket
133
133
  def metrics
134
- Zendesk2::TicketMetric.new(self.service.get_ticket_metric("ticket_id" => self.identity).body["ticket_metric"])
134
+ Zendesk2::TicketMetric.new(self.cistern.get_ticket_metric("ticket_id" => self.identity).body["ticket_metric"])
135
135
  end
136
136
 
137
137
  # @return [Array<Zendesk2::TicketComment>] all comments for this ticket
138
138
  def comments
139
- self.service.ticket_comments(ticket_id: self.identity).all
139
+ self.cistern.ticket_comments(ticket_id: self.identity).all
140
140
  end
141
141
  end
@@ -21,12 +21,12 @@ class Zendesk2::TicketAudit
21
21
  def ticket
22
22
  requires :ticket_id
23
23
 
24
- self.service.tickets.get(self.ticket_id)
24
+ self.cistern.tickets.get(self.ticket_id)
25
25
  end
26
26
 
27
27
  def events
28
28
  (self.attributes[:events] || []).map { |ae|
29
- Zendesk2::AuditEvent.for(ae.merge(ticket_audit: self, service: self.service))
29
+ Zendesk2::AuditEvent.for(ae.merge(ticket_audit: self, cistern: self.cistern))
30
30
  }
31
31
  end
32
32
  end
@@ -13,13 +13,13 @@ class Zendesk2::TicketAudits
13
13
  self.model_root = "audit"
14
14
 
15
15
  def ticket
16
- self.service.tickets.get(self.ticket_id)
16
+ self.cistern.tickets.get(self.ticket_id)
17
17
  end
18
18
 
19
19
  def all(params={})
20
20
  requires :ticket_id
21
21
 
22
- body = service.send(collection_method, {"ticket_id" => self.ticket_id}.merge(params)).body
22
+ body = cistern.send(collection_method, {"ticket_id" => self.ticket_id}.merge(params)).body
23
23
 
24
24
  collection = self.clone.load(body[collection_root])
25
25
  collection.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
@@ -29,7 +29,7 @@ class Zendesk2::TicketAudits
29
29
  def get(id)
30
30
  requires :ticket_id
31
31
 
32
- if data = self.service.send(model_method, {"ticket_id" => self.ticket_id, "id" => id}).body[self.model_root]
32
+ if data = self.cistern.send(model_method, {"ticket_id" => self.ticket_id, "id" => id}).body[self.model_root]
33
33
  new(data)
34
34
  end
35
35
  rescue Zendesk2::Error