zendesk2 1.9.0 → 1.10.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 (222) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +30 -0
  3. data/.travis.yml +3 -1
  4. data/Gemfile +4 -5
  5. data/Guardfile +4 -3
  6. data/Rakefile +4 -3
  7. data/lib/zendesk2.rb +9 -6
  8. data/lib/zendesk2/attributes.rb +11 -8
  9. data/lib/zendesk2/audit_event.rb +5 -3
  10. data/lib/zendesk2/categories.rb +4 -3
  11. data/lib/zendesk2/category.rb +10 -5
  12. data/lib/zendesk2/client.rb +3 -3
  13. data/lib/zendesk2/collection.rb +35 -21
  14. data/lib/zendesk2/create_category.rb +10 -9
  15. data/lib/zendesk2/create_forum.rb +11 -10
  16. data/lib/zendesk2/create_group.rb +13 -12
  17. data/lib/zendesk2/create_membership.rb +21 -20
  18. data/lib/zendesk2/create_organization.rb +24 -18
  19. data/lib/zendesk2/create_ticket.rb +60 -56
  20. data/lib/zendesk2/create_ticket_field.rb +24 -22
  21. data/lib/zendesk2/create_topic.rb +11 -10
  22. data/lib/zendesk2/create_topic_comment.rb +12 -11
  23. data/lib/zendesk2/create_user.rb +54 -41
  24. data/lib/zendesk2/create_user_field.rb +22 -21
  25. data/lib/zendesk2/create_user_identity.rb +18 -15
  26. data/lib/zendesk2/create_view.rb +62 -62
  27. data/lib/zendesk2/destroy_category.rb +2 -1
  28. data/lib/zendesk2/destroy_forum.rb +2 -1
  29. data/lib/zendesk2/destroy_group.rb +3 -2
  30. data/lib/zendesk2/destroy_membership.rb +7 -5
  31. data/lib/zendesk2/destroy_organization.rb +3 -2
  32. data/lib/zendesk2/destroy_ticket.rb +3 -2
  33. data/lib/zendesk2/destroy_ticket_field.rb +3 -2
  34. data/lib/zendesk2/destroy_topic.rb +3 -2
  35. data/lib/zendesk2/destroy_topic_comment.rb +4 -3
  36. data/lib/zendesk2/destroy_user.rb +11 -10
  37. data/lib/zendesk2/destroy_user_field.rb +3 -2
  38. data/lib/zendesk2/destroy_user_identity.rb +4 -3
  39. data/lib/zendesk2/destroy_view.rb +3 -2
  40. data/lib/zendesk2/error.rb +1 -1
  41. data/lib/zendesk2/forum.rb +36 -18
  42. data/lib/zendesk2/forums.rb +4 -3
  43. data/lib/zendesk2/get_assignable_groups.rb +3 -2
  44. data/lib/zendesk2/get_categories.rb +2 -1
  45. data/lib/zendesk2/get_category.rb +3 -2
  46. data/lib/zendesk2/get_ccd_tickets.rb +4 -3
  47. data/lib/zendesk2/get_current_user.rb +3 -2
  48. data/lib/zendesk2/get_forum.rb +3 -2
  49. data/lib/zendesk2/get_forums.rb +2 -1
  50. data/lib/zendesk2/get_group.rb +3 -2
  51. data/lib/zendesk2/get_groups.rb +2 -1
  52. data/lib/zendesk2/get_membership.rb +3 -2
  53. data/lib/zendesk2/get_memberships.rb +3 -2
  54. data/lib/zendesk2/get_organization.rb +3 -2
  55. data/lib/zendesk2/get_organization_by_external_id.rb +8 -5
  56. data/lib/zendesk2/get_organization_memberships.rb +5 -2
  57. data/lib/zendesk2/get_organization_tickets.rb +7 -5
  58. data/lib/zendesk2/get_organization_users.rb +6 -5
  59. data/lib/zendesk2/get_organizations.rb +2 -1
  60. data/lib/zendesk2/get_requested_tickets.rb +5 -4
  61. data/lib/zendesk2/get_ticket.rb +3 -2
  62. data/lib/zendesk2/get_ticket_audit.rb +5 -4
  63. data/lib/zendesk2/get_ticket_audits.rb +4 -3
  64. data/lib/zendesk2/get_ticket_comments.rb +6 -5
  65. data/lib/zendesk2/get_ticket_field.rb +3 -2
  66. data/lib/zendesk2/get_ticket_fields.rb +2 -1
  67. data/lib/zendesk2/get_ticket_metric.rb +4 -3
  68. data/lib/zendesk2/get_ticket_metrics.rb +3 -2
  69. data/lib/zendesk2/get_tickets.rb +2 -1
  70. data/lib/zendesk2/get_topic.rb +3 -2
  71. data/lib/zendesk2/get_topic_comment.rb +4 -3
  72. data/lib/zendesk2/get_topic_comments.rb +5 -4
  73. data/lib/zendesk2/get_topics.rb +2 -1
  74. data/lib/zendesk2/get_user.rb +7 -7
  75. data/lib/zendesk2/get_user_field.rb +3 -2
  76. data/lib/zendesk2/get_user_fields.rb +3 -2
  77. data/lib/zendesk2/get_user_identities.rb +4 -3
  78. data/lib/zendesk2/get_user_identity.rb +4 -3
  79. data/lib/zendesk2/get_user_memberships.rb +4 -3
  80. data/lib/zendesk2/get_user_organizations.rb +5 -4
  81. data/lib/zendesk2/get_users.rb +3 -2
  82. data/lib/zendesk2/get_view.rb +3 -2
  83. data/lib/zendesk2/get_view_tickets.rb +19 -16
  84. data/lib/zendesk2/get_views.rb +2 -1
  85. data/lib/zendesk2/group.rb +6 -5
  86. data/lib/zendesk2/groups.rb +7 -6
  87. data/lib/zendesk2/help_center.rb +15 -0
  88. data/lib/zendesk2/help_center/access_policy.rb +3 -2
  89. data/lib/zendesk2/help_center/article.rb +10 -7
  90. data/lib/zendesk2/help_center/articles.rb +7 -7
  91. data/lib/zendesk2/help_center/categories.rb +3 -2
  92. data/lib/zendesk2/help_center/category.rb +8 -7
  93. data/lib/zendesk2/help_center/create_help_center_article.rb +31 -29
  94. data/lib/zendesk2/help_center/create_help_center_category.rb +17 -16
  95. data/lib/zendesk2/help_center/create_help_center_post.rb +37 -0
  96. data/lib/zendesk2/help_center/create_help_center_section.rb +32 -31
  97. data/lib/zendesk2/help_center/create_help_center_topic.rb +36 -0
  98. data/lib/zendesk2/help_center/create_help_center_translation.rb +15 -14
  99. data/lib/zendesk2/help_center/destroy_help_center_article.rb +3 -2
  100. data/lib/zendesk2/help_center/destroy_help_center_category.rb +3 -2
  101. data/lib/zendesk2/help_center/destroy_help_center_post.rb +15 -0
  102. data/lib/zendesk2/help_center/destroy_help_center_section.rb +3 -2
  103. data/lib/zendesk2/help_center/destroy_help_center_topic.rb +15 -0
  104. data/lib/zendesk2/help_center/destroy_help_center_translation.rb +2 -1
  105. data/lib/zendesk2/help_center/get_help_center_access_policy.rb +6 -5
  106. data/lib/zendesk2/help_center/get_help_center_article.rb +7 -9
  107. data/lib/zendesk2/help_center/get_help_center_articles.rb +3 -2
  108. data/lib/zendesk2/help_center/get_help_center_categories.rb +6 -2
  109. data/lib/zendesk2/help_center/get_help_center_categories_articles.rb +8 -7
  110. data/lib/zendesk2/help_center/get_help_center_categories_sections.rb +6 -5
  111. data/lib/zendesk2/help_center/get_help_center_category.rb +7 -9
  112. data/lib/zendesk2/help_center/get_help_center_post.rb +19 -0
  113. data/lib/zendesk2/help_center/get_help_center_posts.rb +28 -0
  114. data/lib/zendesk2/help_center/get_help_center_section.rb +8 -10
  115. data/lib/zendesk2/help_center/get_help_center_sections.rb +3 -2
  116. data/lib/zendesk2/help_center/get_help_center_sections_articles.rb +9 -8
  117. data/lib/zendesk2/help_center/get_help_center_topic.rb +14 -0
  118. data/lib/zendesk2/help_center/get_help_center_topics.rb +10 -0
  119. data/lib/zendesk2/help_center/get_help_center_translation.rb +5 -4
  120. data/lib/zendesk2/help_center/get_help_center_translations.rb +7 -6
  121. data/lib/zendesk2/help_center/post.rb +72 -0
  122. data/lib/zendesk2/help_center/posts.rb +18 -0
  123. data/lib/zendesk2/help_center/search_help_center_articles.rb +8 -7
  124. data/lib/zendesk2/help_center/section.rb +11 -11
  125. data/lib/zendesk2/help_center/sections.rb +7 -6
  126. data/lib/zendesk2/help_center/topic.rb +52 -0
  127. data/lib/zendesk2/help_center/topics.rb +13 -0
  128. data/lib/zendesk2/help_center/translation.rb +8 -5
  129. data/lib/zendesk2/help_center/translation_source.rb +16 -13
  130. data/lib/zendesk2/help_center/translations.rb +3 -2
  131. data/lib/zendesk2/help_center/update_help_center_access_policy.rb +8 -7
  132. data/lib/zendesk2/help_center/update_help_center_article.rb +9 -11
  133. data/lib/zendesk2/help_center/update_help_center_category.rb +9 -11
  134. data/lib/zendesk2/help_center/update_help_center_post.rb +20 -0
  135. data/lib/zendesk2/help_center/update_help_center_section.rb +9 -11
  136. data/lib/zendesk2/help_center/update_help_center_topic.rb +20 -0
  137. data/lib/zendesk2/help_center/update_help_center_translation.rb +4 -3
  138. data/lib/zendesk2/logger.rb +3 -2
  139. data/lib/zendesk2/mark_membership_default.rb +7 -6
  140. data/lib/zendesk2/mark_user_identity_primary.rb +7 -6
  141. data/lib/zendesk2/membership.rb +10 -8
  142. data/lib/zendesk2/memberships.rb +18 -12
  143. data/lib/zendesk2/mock.rb +39 -34
  144. data/lib/zendesk2/model.rb +14 -3
  145. data/lib/zendesk2/organization.rb +7 -7
  146. data/lib/zendesk2/organizations.rb +14 -12
  147. data/lib/zendesk2/paged_collection.rb +40 -36
  148. data/lib/zendesk2/rate_limit.rb +4 -3
  149. data/lib/zendesk2/real.rb +25 -22
  150. data/lib/zendesk2/request.rb +78 -82
  151. data/lib/zendesk2/search.rb +8 -7
  152. data/lib/zendesk2/search_organization.rb +14 -14
  153. data/lib/zendesk2/search_user.rb +41 -37
  154. data/lib/zendesk2/searchable.rb +36 -26
  155. data/lib/zendesk2/ticket.rb +20 -18
  156. data/lib/zendesk2/ticket_audit.rb +5 -4
  157. data/lib/zendesk2/ticket_audits.rb +10 -11
  158. data/lib/zendesk2/ticket_change.rb +10 -11
  159. data/lib/zendesk2/ticket_comment.rb +2 -1
  160. data/lib/zendesk2/ticket_comment_privacy_change.rb +12 -14
  161. data/lib/zendesk2/ticket_comments.rb +7 -6
  162. data/lib/zendesk2/ticket_create.rb +8 -9
  163. data/lib/zendesk2/ticket_field.rb +5 -4
  164. data/lib/zendesk2/ticket_fields.rb +4 -3
  165. data/lib/zendesk2/ticket_metric.rb +2 -2
  166. data/lib/zendesk2/ticket_metrics.rb +3 -2
  167. data/lib/zendesk2/ticket_notification.rb +12 -13
  168. data/lib/zendesk2/ticket_voice_comment.rb +28 -29
  169. data/lib/zendesk2/tickets.rb +8 -7
  170. data/lib/zendesk2/topic.rb +49 -22
  171. data/lib/zendesk2/topic_comment.rb +12 -9
  172. data/lib/zendesk2/topic_comments.rb +4 -3
  173. data/lib/zendesk2/topics.rb +4 -3
  174. data/lib/zendesk2/update_category.rb +8 -6
  175. data/lib/zendesk2/update_forum.rb +5 -4
  176. data/lib/zendesk2/update_group.rb +5 -4
  177. data/lib/zendesk2/update_organization.rb +18 -9
  178. data/lib/zendesk2/update_request.rb +6 -5
  179. data/lib/zendesk2/update_ticket.rb +39 -38
  180. data/lib/zendesk2/update_ticket_field.rb +5 -4
  181. data/lib/zendesk2/update_topic.rb +5 -4
  182. data/lib/zendesk2/update_user.rb +39 -31
  183. data/lib/zendesk2/update_user_field.rb +4 -3
  184. data/lib/zendesk2/update_user_identity.rb +7 -6
  185. data/lib/zendesk2/update_view.rb +38 -34
  186. data/lib/zendesk2/user.rb +41 -37
  187. data/lib/zendesk2/user_field.rb +9 -6
  188. data/lib/zendesk2/user_fields.rb +4 -3
  189. data/lib/zendesk2/user_identities.rb +4 -3
  190. data/lib/zendesk2/user_identity.rb +12 -9
  191. data/lib/zendesk2/users.rb +5 -4
  192. data/lib/zendesk2/version.rb +2 -1
  193. data/lib/zendesk2/view.rb +24 -13
  194. data/lib/zendesk2/views.rb +3 -2
  195. data/spec/categories_spec.rb +63 -60
  196. data/spec/client_spec.rb +6 -5
  197. data/spec/forums_spec.rb +64 -61
  198. data/spec/groups_spec.rb +7 -8
  199. data/spec/help_center/articles_spec.rb +22 -26
  200. data/spec/help_center/categories_spec.rb +26 -27
  201. data/spec/help_center/posts_spec.rb +39 -0
  202. data/spec/help_center/sections_spec.rb +32 -33
  203. data/spec/help_center/topics_spec.rb +13 -0
  204. data/spec/lib/paged_collection_spec.rb +11 -11
  205. data/spec/lib/rate_limit_spec.rb +9 -8
  206. data/spec/memberships_spec.rb +38 -27
  207. data/spec/organizations_spec.rb +92 -87
  208. data/spec/shared/zendesk_resource.rb +40 -25
  209. data/spec/spec_helper.rb +8 -13
  210. data/spec/support/client_helper.rb +5 -4
  211. data/spec/support/data_helper.rb +1 -0
  212. data/spec/ticket_fields_spec.rb +6 -7
  213. data/spec/tickets_spec.rb +69 -58
  214. data/spec/topic_comments_spec.rb +7 -8
  215. data/spec/topics_spec.rb +5 -6
  216. data/spec/user_fields_spec.rb +7 -7
  217. data/spec/user_identities_spec.rb +29 -25
  218. data/spec/users_spec.rb +88 -78
  219. data/spec/views_spec.rb +45 -34
  220. data/spec/zendesk2_spec.rb +3 -2
  221. data/zendesk2.gemspec +15 -14
  222. metadata +21 -2
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::TopicComments
2
3
  include Zendesk2::Collection
3
4
 
@@ -9,10 +10,10 @@ class Zendesk2::TopicComments
9
10
  attribute :topic_id, type: :integer
10
11
 
11
12
  self.collection_method = :get_topic_comments
12
- self.collection_root = "topic_comments"
13
+ self.collection_root = 'topic_comments'
13
14
  self.model_method = :get_topic_comment
14
- self.model_root = "topic_comment"
15
- self.search_type = "topic_comment"
15
+ self.model_root = 'topic_comment'
16
+ self.search_type = 'topic_comment'
16
17
 
17
18
  scopes << :topic_id
18
19
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::Topics
2
3
  include Zendesk2::Collection
3
4
 
@@ -7,8 +8,8 @@ class Zendesk2::Topics
7
8
  model Zendesk2::Topic
8
9
 
9
10
  self.collection_method = :get_topics
10
- self.collection_root = "topics"
11
+ self.collection_root = 'topics'
11
12
  self.model_method = :get_topic
12
- self.model_root = "topic"
13
- self.search_type = "topic"
13
+ self.model_root = 'topic'
14
+ self.search_type = 'topic'
14
15
  end
@@ -1,21 +1,23 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateCategory
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
- request_body { |r| { "category" => Cistern::Hash.except(r.category, "id") } }
6
+ request_body { |r| { 'category' => Cistern::Hash.except(r.category, 'id') } }
6
7
  request_path { |r| "/categories/#{r.category_id}.json" }
7
8
 
8
9
  def category
9
- self.params.fetch("category")
10
+ params.fetch('category')
10
11
  end
11
12
 
12
13
  def category_id
13
- category.fetch("id")
14
+ category.fetch('id')
14
15
  end
15
16
 
16
17
  def mock
17
- mock_response(
18
- "category" => find!(:categories, category_id).merge!(Cistern::Hash.slice(category, *Zendesk2::CreateCategory.accepted_attributes))
19
- )
18
+ category_data = find!(:categories, category_id)
19
+ category_data.merge!(Cistern::Hash.slice(category, *Zendesk2::CreateCategory.accepted_attributes))
20
+
21
+ mock_response('category' => category_data)
20
22
  end
21
23
  end
@@ -1,21 +1,22 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateForum
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
6
  request_path { |r| "/forums/#{r.forum_id}.json" }
6
- request_body { |r| { "forum" => r.forum_params } }
7
+ request_body { |r| { 'forum' => r.forum_params } }
7
8
 
8
9
  def forum_params
9
- Cistern::Hash.slice(params.fetch("forum"), *Zendesk2::CreateForum.accepted_attributes)
10
+ Cistern::Hash.slice(params.fetch('forum'), *Zendesk2::CreateForum.accepted_attributes)
10
11
  end
11
12
 
12
13
  def forum_id
13
- params.fetch("forum").fetch("id")
14
+ params.fetch('forum').fetch('id')
14
15
  end
15
16
 
16
17
  def mock
17
18
  mock_response(
18
- "forum" => find!(:forums, forum_id).merge!(forum_params),
19
+ 'forum' => find!(:forums, forum_id).merge!(forum_params)
19
20
  )
20
21
  end
21
22
  end
@@ -1,19 +1,20 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateGroup
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
6
  request_path { |r| "/groups/#{r.group_id}.json" }
6
- request_body { |r| { "group" => r.group_params } }
7
+ request_body { |r| { 'group' => r.group_params } }
7
8
 
8
9
  def group_params
9
- @_group_params ||= Cistern::Hash.slice(params.fetch("group"), *Zendesk2::CreateGroup.accepted_attributes)
10
+ @_group_params ||= Cistern::Hash.slice(params.fetch('group'), *Zendesk2::CreateGroup.accepted_attributes)
10
11
  end
11
12
 
12
13
  def group_id
13
- @_group_id ||= params.fetch("group").fetch("id")
14
+ @_group_id ||= params.fetch('group').fetch('id')
14
15
  end
15
16
 
16
17
  def mock
17
- mock_response("group" => find!(:groups, group_id).merge!(group_params))
18
+ mock_response('group' => find!(:groups, group_id).merge!(group_params))
18
19
  end
19
20
  end
@@ -1,38 +1,47 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateOrganization
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
6
  request_path { |r| "/organizations/#{r.organization_id}.json" }
6
- request_body { |r| { "organization" => r.organization_params } }
7
+ request_body { |r| { 'organization' => r.organization_params } }
7
8
 
8
9
  def organization_params
9
10
  @_organization_params ||= Cistern::Hash.slice(organization, *Zendesk2::CreateOrganization.accepted_attributes)
10
11
  end
11
12
 
12
13
  def organization
13
- params.fetch("organization")
14
+ params.fetch('organization')
14
15
  end
15
16
 
16
17
  def organization_id
17
- organization.fetch("id").to_i
18
+ organization.fetch('id').to_i
18
19
  end
19
20
 
20
21
  def mock
21
- record = self.find!(:organizations, organization_id)
22
+ record = find!(:organizations, organization_id)
22
23
 
23
24
  other_organizations = cistern.data[:organizations].dup
24
25
  other_organizations.delete(organization_id)
25
26
 
26
- if organization["name"] && other_organizations.values.find { |o| o["name"].downcase == organization["name"].downcase }
27
- error!(:invalid, details: {"name" => [ { "description" => "Name: has already been taken" } ]})
27
+ other_named_organization = other_organizations.values.find do |o|
28
+ o['name'].casecmp(organization['name'].to_s.downcase).zero?
28
29
  end
29
30
 
30
- if organization["external_id"] && other_organizations.values.find { |o| o["external_id"].to_s.downcase == organization["external_id"].to_s.downcase }
31
- error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
31
+ if organization['name'] && other_named_organization
32
+ error!(:invalid, details: { 'name' => [{ 'description' => 'Name: has already been taken' }] })
33
+ end
34
+
35
+ other_external_organization = other_organizations.values.find do |o|
36
+ o['external_id'].to_s.casecmp(organization['external_id'].to_s.downcase).zero?
37
+ end
38
+
39
+ if organization['external_id'] && other_external_organization
40
+ error!(:invalid, details: { 'name' => [{ 'description' => 'External has already been taken' }] })
32
41
  end
33
42
 
34
43
  record.merge!(organization_params)
35
44
 
36
- mock_response("organization" => record)
45
+ mock_response('organization' => record)
37
46
  end
38
47
  end
@@ -1,18 +1,19 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateRequest
2
3
  include Zendesk2::Client
3
4
 
4
5
  request_method :put
5
- request_path { |r| "/requests/#{id}.json" }
6
- request_params { |r| { "request" => r.params } }
6
+ request_path { |_r| "/requests/#{id}.json" }
7
+ request_params { |r| { 'request' => r.params } }
7
8
 
8
9
  def request_id
9
- @_request_id ||= params.delete("id")
10
+ @_request_id ||= params.delete('id')
10
11
  end
11
12
 
12
- def mock(params={})
13
+ def mock(params = {})
13
14
  ticket = find!(:tickets, request_id)
14
15
  ticket.merge!(params)
15
16
 
16
- mock_response("request" => ticket)
17
+ mock_response('request' => ticket)
17
18
  end
18
19
  end
@@ -1,76 +1,77 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateTicket
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
6
  request_path { |r| "/tickets/#{r.ticket_id}.json" }
6
- request_body { |r| { "ticket" => r.ticket_params } }
7
+ request_body { |r| { 'ticket' => r.ticket_params } }
7
8
 
8
9
  def self.accepted_attributes
9
- Zendesk2::CreateTicket.accepted_attributes + ["comment"]
10
+ Zendesk2::CreateTicket.accepted_attributes + ['comment']
10
11
  end
11
12
 
12
13
  def ticket_params
13
- @_ticket_params ||= Cistern::Hash.slice(params.fetch("ticket"), *self.class.accepted_attributes)
14
+ @_ticket_params ||= Cistern::Hash.slice(params.fetch('ticket'), *self.class.accepted_attributes)
14
15
  end
15
16
 
16
17
  def ticket_id
17
- params.fetch("ticket").fetch("id")
18
+ params.fetch('ticket').fetch('id')
18
19
  end
19
20
 
20
21
  def mock
21
- comment = params.fetch("ticket").delete("comment")
22
+ comment = params.fetch('ticket').delete('comment')
22
23
 
23
- body = self.find!(:tickets, ticket_id).merge!(ticket_params)
24
+ body = find!(:tickets, ticket_id).merge!(ticket_params)
24
25
 
25
26
  if comment
26
27
  comment_id = cistern.serial_id
27
28
 
28
29
  comment_data = cistern.data[:ticket_comments][comment_id] = {
29
- "id" => comment_id,
30
- "type" => "Comment",
31
- "author_id" => cistern.current_user["id"],
32
- "body" => comment["body"],
33
- "html_body" => "<p>#{comment["body"]}</p>",
34
- "public" => comment["public"].nil? ? true : comment["public"],
35
- "trusted" => comment["trusted"].nil? ? true : comment["trusted"],
36
- "attachments" => comment["attachments"] || [],
37
- "ticket_id" => ticket_id,
30
+ 'id' => comment_id,
31
+ 'type' => 'Comment',
32
+ 'author_id' => cistern.current_user['id'],
33
+ 'body' => comment['body'],
34
+ 'html_body' => "<p>#{comment['body']}</p>",
35
+ 'public' => comment['public'].nil? ? true : comment['public'],
36
+ 'trusted' => comment['trusted'].nil? ? true : comment['trusted'],
37
+ 'attachments' => comment['attachments'] || [],
38
+ 'ticket_id' => ticket_id,
38
39
  }
39
40
 
40
41
  audit_id = cistern.serial_id
41
42
 
42
43
  audit = {
43
- "id" => audit_id,
44
- "ticket_id" => ticket_id,
45
- "created_at" => Time.now,
46
- "author_id" => cistern.current_user["id"],
47
- "via" => {
48
- "channel" => "api",
49
- "source" => {
50
- "form" => {},
51
- "to" => {},
52
- "rel" => nil,
53
- }
44
+ 'id' => audit_id,
45
+ 'ticket_id' => ticket_id,
46
+ 'created_at' => Time.now,
47
+ 'author_id' => cistern.current_user['id'],
48
+ 'via' => {
49
+ 'channel' => 'api',
50
+ 'source' => {
51
+ 'form' => {},
52
+ 'to' => {},
53
+ 'rel' => nil,
54
+ },
54
55
  },
55
- "metadata" => {
56
- "system" => {
57
- "client" => Zendesk2::USER_AGENT,
58
- "ip_address" => "127.0.0.1",
59
- "location" => "Oakland, CA, United States",
60
- "latitude" => 37.83449999999999,
61
- "longitude" => -122.2647,
56
+ 'metadata' => {
57
+ 'system' => {
58
+ 'client' => Zendesk2::USER_AGENT,
59
+ 'ip_address' => '127.0.0.1',
60
+ 'location' => 'Oakland, CA, United States',
61
+ 'latitude' => 37.83449999999999,
62
+ 'longitude' => -122.2647,
62
63
  },
63
- "custom" => {},
64
+ 'custom' => {},
64
65
  },
65
- "events" => [comment_data]
66
+ 'events' => [comment_data],
66
67
  }
67
68
 
68
- self.data[:ticket_audits][audit_id] = audit
69
+ data[:ticket_audits][audit_id] = audit
69
70
  end
70
71
 
71
72
  mock_response(
72
- "ticket" => body,
73
- "audit" => audit,
73
+ 'ticket' => body,
74
+ 'audit' => audit
74
75
  )
75
76
  end
76
77
  end
@@ -1,19 +1,20 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateTicketField
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
6
  request_path { |r| "/ticket_fields/#{r.ticket_field_id}.json" }
6
- request_body { |r| { "ticket_field" => r.ticket_field_params } }
7
+ request_body { |r| { 'ticket_field' => r.ticket_field_params } }
7
8
 
8
9
  def ticket_field_id
9
- params.fetch("ticket_field").fetch("id")
10
+ params.fetch('ticket_field').fetch('id')
10
11
  end
11
12
 
12
13
  def ticket_field_params
13
- Cistern::Hash.slice(params.fetch("ticket_field"), *Zendesk2::CreateTicketField.accepted_attributes)
14
+ Cistern::Hash.slice(params.fetch('ticket_field'), *Zendesk2::CreateTicketField.accepted_attributes)
14
15
  end
15
16
 
16
17
  def mock
17
- mock_response("ticket_field" => self.find!(:ticket_fields, ticket_field_id).merge!(ticket_field_params))
18
+ mock_response('ticket_field' => find!(:ticket_fields, ticket_field_id).merge!(ticket_field_params))
18
19
  end
19
20
  end
@@ -1,19 +1,20 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateTopic
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
6
  request_path { |r| "/topics/#{r.topic_id}.json" }
6
- request_body { |r| { "topic" => r.topic_params } }
7
+ request_body { |r| { 'topic' => r.topic_params } }
7
8
 
8
9
  def topic_id
9
- params.fetch("topic").fetch("id").to_i
10
+ params.fetch('topic').fetch('id').to_i
10
11
  end
11
12
 
12
13
  def topic_params
13
- Cistern::Hash.slice(params.fetch("topic"), *Zendesk2::CreateTopic.accepted_attributes)
14
+ Cistern::Hash.slice(params.fetch('topic'), *Zendesk2::CreateTopic.accepted_attributes)
14
15
  end
15
16
 
16
17
  def mock
17
- mock_response("topic" => self.find!(:topics, topic_id).merge!(topic_params))
18
+ mock_response('topic' => find!(:topics, topic_id).merge!(topic_params))
18
19
  end
19
20
  end
@@ -1,60 +1,68 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::UpdateUser
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :put
5
6
  request_path { |r| "/users/#{r.user_id}.json" }
6
- request_body { |r| {"user" => r.user_params } }
7
+ request_body { |r| { 'user' => r.user_params } }
7
8
 
8
9
  def user_params
9
- @_user_params ||= Cistern::Hash.slice(params.fetch("user"), *Zendesk2::CreateUser.accepted_attributes)
10
+ Cistern::Hash.slice(params.fetch('user'), *Zendesk2::CreateUser.accepted_attributes)
10
11
  end
11
12
 
12
13
  def user_id
13
- @_user_id ||= params.fetch("user").fetch("id").to_i
14
+ @_user_id ||= params.fetch('user').fetch('id').to_i
14
15
  end
15
16
 
16
17
  def mock
17
- email = user_params["email"]
18
+ update_params = user_params
19
+
20
+ email = update_params['email']
18
21
 
19
22
  other_users = cistern.data[:users].dup
20
23
  other_users.delete(user_id)
21
24
 
22
- external_id = user_params["external_id"]
25
+ external_id = update_params['external_id']
23
26
 
24
- if external_id && other_users.values.find { |o| o["external_id"].to_s.downcase == external_id.to_s.downcase }
25
- error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
27
+ if external_id && other_users.values.find { |o| o['external_id'].to_s.casecmp(external_id.to_s.downcase).zero? }
28
+ error!(:invalid, details: { 'name' => [{ 'description' => 'External has already been taken' }] })
26
29
  end
27
30
 
28
- existing_identity = cistern.data[:identities].values.find { |i| i["type"] == "email" && i["value"] == email }
31
+ existing_identity = cistern.data[:identities].values.find { |i| i['type'] == 'email' && i['value'] == email }
29
32
 
30
33
  if !email
31
34
  # nvm
32
- elsif existing_identity && existing_identity["user_id"] != user_id
35
+ elsif existing_identity
33
36
  # email not allowed to conflict across users
34
- error!(:invalid, details: { "email" => [ {
35
- "description" => "Email #{params["email"]} is already being used by another user",
36
- } ] })
37
- elsif existing_identity && existing_identity["user_id"] == user_id
38
- # no-op email already used
37
+ existing_identity['user_id'] != user_id &&
38
+ error!(:invalid, details: { 'email' => [{
39
+ 'description' => "Email #{params['email']} is already being used by another user",
40
+ },], })
39
41
  else
40
- # add a new identity
41
- user_identity_id = cistern.serial_id
42
-
43
- user_identity = {
44
- "id" => user_identity_id,
45
- "url" => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
46
- "created_at" => Time.now.iso8601,
47
- "updated_at" => Time.now.iso8601,
48
- "type" => "email",
49
- "value" => email,
50
- "verified" => false,
51
- "primary" => false,
52
- "user_id" => user_id,
53
- }
54
-
55
- cistern.data[:identities][user_identity_id] = user_identity
42
+ add_user_identity(email)
56
43
  end
57
44
 
58
- mock_response("user" => self.find!(:users, user_id).merge!(user_params))
45
+ mock_response('user' => find!(:users, user_id).merge!(update_params))
46
+ end
47
+
48
+ private
49
+
50
+ def add_user_identity(email)
51
+ # add a new identity
52
+ user_identity_id = cistern.serial_id
53
+
54
+ user_identity = {
55
+ 'id' => user_identity_id,
56
+ 'url' => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
57
+ 'created_at' => Time.now.iso8601,
58
+ 'updated_at' => Time.now.iso8601,
59
+ 'type' => 'email',
60
+ 'value' => email,
61
+ 'verified' => false,
62
+ 'primary' => false,
63
+ 'user_id' => user_id,
64
+ }
65
+
66
+ cistern.data[:identities][user_identity_id] = user_identity
59
67
  end
60
68
  end