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,30 +1,31 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::CreateTopic
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :post
5
- request_body { |r| { "topic" => r.topic_params } }
6
- request_path { |_| "/topics.json" }
6
+ request_body { |r| { 'topic' => r.topic_params } }
7
+ request_path { |_| '/topics.json' }
7
8
 
8
9
  def self.accepted_attributes
9
- %w[title body submitter_id updater_id forum_id locked pinned highlighted position tags]
10
+ %w(title body submitter_id updater_id forum_id locked pinned highlighted position tags)
10
11
  end
11
12
 
12
13
  def topic_params
13
- @_topic_params ||= Cistern::Hash.slice(params.fetch("topic"), *self.class.accepted_attributes)
14
+ @_topic_params ||= Cistern::Hash.slice(params.fetch('topic'), *self.class.accepted_attributes)
14
15
  end
15
16
 
16
17
  def mock
17
18
  identity = cistern.serial_id
18
19
 
19
20
  record = {
20
- "id" => identity,
21
- "url" => url_for("/topics/#{identity}.json"),
22
- "created_at" => Time.now.iso8601,
23
- "updated_at" => Time.now.iso8601,
21
+ 'id' => identity,
22
+ 'url' => url_for("/topics/#{identity}.json"),
23
+ 'created_at' => Time.now.iso8601,
24
+ 'updated_at' => Time.now.iso8601,
24
25
  }.merge(topic_params)
25
26
 
26
- self.data[:topics][identity] = record
27
+ data[:topics][identity] = record
27
28
 
28
- mock_response("topic" => record)
29
+ mock_response('topic' => record)
29
30
  end
30
31
  end
@@ -1,35 +1,36 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::CreateTopicComment
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :post
5
6
  request_path { |r| "/topics/#{r.topic_id}/comments.json" }
6
- request_body { |r| { "topic_comment" => r.topic_comment_params } }
7
+ request_body { |r| { 'topic_comment' => r.topic_comment_params } }
7
8
 
8
9
  def self.accepted_attributes
9
- %w[user_id body informative]
10
+ %w(user_id body informative)
10
11
  end
11
12
 
12
13
  def topic_id
13
- params.fetch("topic_comment").fetch("topic_id").to_i
14
+ params.fetch('topic_comment').fetch('topic_id').to_i
14
15
  end
15
16
 
16
17
  def topic_comment_params
17
- Cistern::Hash.slice(params.fetch("topic_comment"), *self.class.accepted_attributes)
18
+ Cistern::Hash.slice(params.fetch('topic_comment'), *self.class.accepted_attributes)
18
19
  end
19
20
 
20
21
  def mock
21
22
  identity = cistern.serial_id
22
23
 
23
24
  record = {
24
- "id" => identity,
25
- "url" => url_for("/topics/#{topic_id}/comments/#{identity}.json"),
26
- "created_at" => Time.now.iso8601,
27
- "updated_at" => Time.now.iso8601,
28
- "topic_id" => self.topic_id,
25
+ 'id' => identity,
26
+ 'url' => url_for("/topics/#{topic_id}/comments/#{identity}.json"),
27
+ 'created_at' => Time.now.iso8601,
28
+ 'updated_at' => Time.now.iso8601,
29
+ 'topic_id' => topic_id,
29
30
  }.merge(topic_comment_params)
30
31
 
31
- self.data[:topic_comments][identity] = record
32
+ data[:topic_comments][identity] = record
32
33
 
33
- mock_response("topic_comment" => record)
34
+ mock_response('topic_comment' => record)
34
35
  end
35
36
  end
@@ -1,68 +1,81 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::CreateUser
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :post
5
- request_path { |_| "/users.json" }
6
- request_body { |r| { "user" => r.user_params } }
6
+ request_path { |_| '/users.json' }
7
+ request_body { |r| { 'user' => r.user_params } }
7
8
 
8
9
  def self.accepted_attributes
9
- %w[name email organization_id external_id alias verified locate_id time_zone phone signature details notes role custom_role_id moderator ticket_restriction only_private_comments user_fields]
10
+ %w(name email organization_id external_id alias verified locate_id time_zone phone signature details notes role
11
+ custom_role_id moderator ticket_restriction only_private_comments user_fields)
10
12
  end
11
13
 
12
14
  def user_params
13
- Cistern::Hash.slice(params.fetch("user"), *self.class.accepted_attributes)
15
+ Cistern::Hash.slice(params.fetch('user'), *self.class.accepted_attributes)
14
16
  end
15
17
 
16
18
  def mock
17
19
  user_id = cistern.serial_id
18
20
 
19
- user = params.fetch("user")
20
-
21
- if organization_id = user["organization_id"]
22
- self.find!(:organizations, organization_id)
23
- end
21
+ user = params.fetch('user')
22
+ organization_id = user['organization_id']
23
+ organization_id && find!(:organizations, organization_id)
24
24
 
25
25
  record = {
26
- "id" => user_id,
27
- "url" => url_for("/users/#{user_id}.json"),
28
- "created_at" => Time.now.iso8601,
29
- "updated_at" => Time.now.iso8601,
30
- "role" => "end-user",
31
- "active" => true,
26
+ 'id' => user_id,
27
+ 'url' => url_for("/users/#{user_id}.json"),
28
+ 'created_at' => Time.now.iso8601,
29
+ 'updated_at' => Time.now.iso8601,
30
+ 'role' => 'end-user',
31
+ 'active' => true,
32
32
  }.merge(user_params)
33
33
 
34
- if record["external_id"] && self.data[:users].values.find { |o| o["external_id"].to_s.downcase == record["external_id"].to_s.downcase }
35
- error!(:invalid, details: {"name" => [ { "description" => "External has already been taken" } ]})
34
+ external_id = record['external_id']
35
+ matching_external_id = external_id && data[:users].values.find do |o|
36
+ o['external_id'].to_s.casecmp(external_id.to_s.downcase).zero?
37
+ end
38
+
39
+ if matching_external_id
40
+ error!(:invalid, details: { 'name' => [{ 'description' => 'External has already been taken' }] })
36
41
  end
37
42
 
38
- if (email = record["email"]) && self.data[:identities].find { |k,i| i["type"] == "email" && i["value"].to_s.downcase == email.downcase }
39
- error!(:invalid, :details => {
40
- "email" => [ {
41
- "description" => "Email: #{email} is already being used by another user"
42
- }]})
43
- else
44
- user_identity_id = cistern.serial_id
43
+ email = record['email']
44
+ matching_identity = email && data[:identities].values.find do |i|
45
+ i['type'] == 'email' && i['value'].to_s.casecmp(email.downcase).zero?
46
+ end
47
+
48
+ if matching_identity
49
+ error!(:invalid, details: {
50
+ 'email' => [{
51
+ 'description' => "Email: #{email} is already being used by another user",
52
+ },],
53
+ })
54
+ end
45
55
 
46
- user_identity = {
47
- "id" => user_identity_id,
48
- "url" => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
49
- "created_at" => Time.now.iso8601,
50
- "updated_at" => Time.now.iso8601,
51
- "type" => "email",
52
- "value" => record["email"],
53
- "verified" => false,
54
- "primary" => true,
55
- "user_id" => user_id,
56
- }
56
+ user_identity_id = cistern.serial_id
57
57
 
58
- self.data[:identities][user_identity_id] = user_identity
59
- self.data[:users][user_id] = record.reject { |k,v| k == "email" }
58
+ user_identity = {
59
+ 'id' => user_identity_id,
60
+ 'url' => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
61
+ 'created_at' => Time.now.iso8601,
62
+ 'updated_at' => Time.now.iso8601,
63
+ 'type' => 'email',
64
+ 'value' => record['email'],
65
+ 'verified' => false,
66
+ 'primary' => true,
67
+ 'user_id' => user_id,
68
+ }
60
69
 
61
- if organization_id
62
- cistern.create_membership("membership" => { "user_id" => user_id, "organization_id" => organization_id, "default" => true } )
63
- end
70
+ data[:identities][user_identity_id] = user_identity
71
+ data[:users][user_id] = record.reject { |k, _v| k == 'email' }
64
72
 
65
- mock_response({"user" => record}, {status: 201})
73
+ if organization_id
74
+ cistern.create_membership(
75
+ 'membership' => { 'user_id' => user_id, 'organization_id' => organization_id, 'default' => true }
76
+ )
66
77
  end
78
+
79
+ mock_response({ 'user' => record }, { status: 201 })
67
80
  end
68
81
  end
@@ -1,42 +1,43 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::CreateUserField
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :post
5
- request_path { |_| "/user_fields.json" }
6
- request_body { |r| { "user_field" => r.user_field_params } }
6
+ request_path { |_| '/user_fields.json' }
7
+ request_body { |r| { 'user_field' => r.user_field_params } }
7
8
 
8
9
  def self.accepted_attributes
9
- %w[key type title description position active, regexp_for_validation tag custom_field_options]
10
+ %w(key type title description position active regexp_for_validation tag custom_field_options)
10
11
  end
11
12
 
12
13
  def user_field_params
13
- Cistern::Hash.slice(params.fetch("user_field"), *self.class.accepted_attributes)
14
+ Cistern::Hash.slice(params.fetch('user_field'), *self.class.accepted_attributes)
14
15
  end
15
16
 
16
17
  def mock
17
18
  identity = cistern.serial_id
18
19
 
19
20
  record = {
20
- "active" => true,
21
- "collapsed_for_agents" => false,
22
- "created_at" => Time.now.iso8601,
23
- "description" => params["title"],
24
- "editable_in_portal" => false,
25
- "id" => identity,
26
- "position" => 9999,
27
- "regexp_for_validation" => "",
28
- "removable" => true,
29
- "required" => false,
30
- "required_in_portal" => false,
31
- "tag" => "",
32
- "title_in_portal" => params["title"],
33
- "updated_at" => Time.now.iso8601,
34
- "url" => url_for("/user_fields/#{identity}.json"),
35
- "visible_in_portal" => false,
21
+ 'active' => true,
22
+ 'collapsed_for_agents' => false,
23
+ 'created_at' => Time.now.iso8601,
24
+ 'description' => params['title'],
25
+ 'editable_in_portal' => false,
26
+ 'id' => identity,
27
+ 'position' => 9999,
28
+ 'regexp_for_validation' => '',
29
+ 'removable' => true,
30
+ 'required' => false,
31
+ 'required_in_portal' => false,
32
+ 'tag' => '',
33
+ 'title_in_portal' => params['title'],
34
+ 'updated_at' => Time.now.iso8601,
35
+ 'url' => url_for("/user_fields/#{identity}.json"),
36
+ 'visible_in_portal' => false,
36
37
  }.merge(user_field_params)
37
38
 
38
39
  cistern.data[:user_fields][identity] = record
39
40
 
40
- mock_response("user_field" => record)
41
+ mock_response('user_field' => record)
41
42
  end
42
43
  end
@@ -1,43 +1,46 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::CreateUserIdentity
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :post
5
6
  request_path { |r| "/users/#{r.user_id}/identities.json" }
6
- request_body { |r| { "identity" => r.user_identity_params } }
7
+ request_body { |r| { 'identity' => r.user_identity_params } }
7
8
 
8
9
  def self.accepted_attributes
9
- %w[primary verified type value user_id]
10
+ %w(primary verified type value user_id)
10
11
  end
11
12
 
12
13
  def user_identity_params
13
- Cistern::Hash.slice(params.fetch("user_identity"), *self.class.accepted_attributes)
14
+ Cistern::Hash.slice(params.fetch('user_identity'), *self.class.accepted_attributes)
14
15
  end
15
16
 
16
17
  def user_id
17
- params.fetch("user_identity").fetch("user_id").to_i
18
+ params.fetch('user_identity').fetch('user_id').to_i
18
19
  end
19
20
 
20
21
  def mock
21
22
  identity = cistern.serial_id
22
23
 
23
24
  record = {
24
- "id" => identity,
25
- "url" => url_for("/user/#{user_id}/identities/#{identity}.json"),
26
- "created_at" => Time.now.iso8601,
27
- "updated_at" => Time.now.iso8601,
28
- "verified" => false,
29
- "primary" => false,
30
- "user_id" => user_id,
25
+ 'id' => identity,
26
+ 'url' => url_for("/user/#{user_id}/identities/#{identity}.json"),
27
+ 'created_at' => Time.now.iso8601,
28
+ 'updated_at' => Time.now.iso8601,
29
+ 'verified' => false,
30
+ 'primary' => false,
31
+ 'user_id' => user_id,
31
32
  }.merge(user_identity_params)
32
33
 
33
- record.merge("primary" => true) if cistern.data[:identities].values.find { |ui| ui["user_id"] == user_id }.nil?
34
+ record.merge('primary' => true) if cistern.data[:identities].values.find { |ui| ui['user_id'] == user_id }.nil?
34
35
 
35
- if cistern.data[:identities].values.find { |i| i["value"] == record["value"] }
36
- error!(:invalid, details: { "value" => [ { "description" => "Value: #{record["value"]} is already being used by another user" } ] })
36
+ if cistern.data[:identities].values.find { |i| i['value'] == record['value'] }
37
+ error!(:invalid, details: {
38
+ 'value' => [{ 'description' => "Value: #{record['value']} is already being used by another user" }],
39
+ })
37
40
  end
38
41
 
39
42
  cistern.data[:identities][identity] = record
40
43
 
41
- mock_response("identity" => record)
44
+ mock_response('identity' => record)
42
45
  end
43
46
  end
@@ -1,98 +1,98 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::CreateView
2
3
  include Zendesk2::Request
3
4
 
4
5
  request_method :post
5
- request_path { |_| "/views.json" }
6
- request_body { |r| { "view" => r.view_params } }
6
+ request_path { |_| '/views.json' }
7
+ request_body { |r| { 'view' => r.view_params } }
7
8
 
8
9
  def self.accepted_attributes
9
- %w[title all any active output restriction]
10
+ %w(title all any active output restriction)
10
11
  end
11
12
 
12
13
  def self.view_columns
13
14
  @_view_columns ||= {
14
- "assigned" => "Assigned date",
15
- "assignee" => "Assignee",
16
- "brand" => "Brand",
17
- "created" => "Request date",
18
- "description" => "Subject",
19
- "due_date" => "Due Date",
20
- "group" => "Group",
21
- "locale_id" => "Requester language",
22
- "nice_id" => "ID",
23
- "organization" => "Organization",
24
- "priority" => "Priority",
25
- "requester" => "Requester",
26
- "satisfaction_score" => "Satisfaction",
27
- "score" => "Score",
28
- "solved" => "Solved date",
29
- "status" => "Status",
30
- "submitter" => "Submitter",
31
- "ticket_form" => "Ticket form",
32
- "type" => "Ticket type",
33
- "updated" => "Latest update",
34
- "updated_assignee" => "Latest update by assignee",
35
- "updated_by_type" => "Latest updater type (agent/end-user)",
36
- "updated_requester" => "Latest update by requester",
15
+ 'assigned' => 'Assigned date',
16
+ 'assignee' => 'Assignee',
17
+ 'brand' => 'Brand',
18
+ 'created' => 'Request date',
19
+ 'description' => 'Subject',
20
+ 'due_date' => 'Due Date',
21
+ 'group' => 'Group',
22
+ 'locale_id' => 'Requester language',
23
+ 'nice_id' => 'ID',
24
+ 'organization' => 'Organization',
25
+ 'priority' => 'Priority',
26
+ 'requester' => 'Requester',
27
+ 'satisfaction_score' => 'Satisfaction',
28
+ 'score' => 'Score',
29
+ 'solved' => 'Solved date',
30
+ 'status' => 'Status',
31
+ 'submitter' => 'Submitter',
32
+ 'ticket_form' => 'Ticket form',
33
+ 'type' => 'Ticket type',
34
+ 'updated' => 'Latest update',
35
+ 'updated_assignee' => 'Latest update by assignee',
36
+ 'updated_by_type' => 'Latest updater type (agent/end-user)',
37
+ 'updated_requester' => 'Latest update by requester',
37
38
  }.freeze
38
39
  end
39
40
 
40
41
  def view_params
41
- @_view_params ||= Cistern::Hash.slice(params.fetch("view"), *self.class.accepted_attributes)
42
+ Cistern::Hash.slice(params.fetch('view'), *self.class.accepted_attributes)
42
43
  end
43
44
 
44
- # {:status=>422, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:58:50 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"262", "connection"=>"close", "status"=>"422 Unprocessable Entity", "x-zendesk-api-version"=>"v2", "x-frame-options"=>"SAMEORIGIN", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app5.pod5.iad1.zdsys.com", "x-request-id"=>"8dec47a7-f80d-4823-c8e2-b8ca3a6b1aa9", "x-runtime"=>"0.106400", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"6efea4cc3c46093df8b1"}, :body=>{"error"=>"RecordInvalid", "description"=>"Record validation errors", "details"=>{"base"=>[{"description"=>"View must test for at least <strong>one</strong> of the following ticket properties in the ALL conditions section: Status, Type, Group, Assignee, Requester."}]}}}
45
- # {:status=>400, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:58:39 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"142", "connection"=>"close", "status"=>"400 Bad Request", "x-zendesk-api-version"=>"v2", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app5.pod5.iad1.zdsys.com", "x-request-id"=>"55216728-1c4b-49ce-c988-b8ca3a6b1a09", "x-runtime"=>"0.077761", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"a49e204bdb7ceb6d22b2"}, :body=>{"error"=>{"title"=>"Invalid attribute", "message"=>"You passed an invalid value for the value attribute. must be a string"}}}
46
- # {:status=>422, :headers=>{"server"=>"nginx", "date"=>"Fri, 10 Jul 2015 18:57:38 GMT", "content-type"=>"application/json; charset=UTF-8", "content-length"=>"326", "connection"=>"close", "status"=>"422 Unprocessable Entity", "x-zendesk-api-version"=>"v2", "x-frame-options"=>"SAMEORIGIN", "strict-transport-security"=>"max-age=31536000;", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "x-zendesk-origin-server"=>"app19.pod5.iad1.zdsys.com", "x-request-id"=>"577927e1-1a98-4642-c636-b8ca3a6bdb18", "x-runtime"=>"0.114688", "x-rack-cache"=>"invalidate, pass", "x-zendesk-request-id"=>"6f646a8ab4e30717d593"}, :body=>{"error"=>"RecordInvalid", "description"=>"Record validation errors", "details"=>{"base"=>[{"description"=>"Organization 1 was deleted and cannot be used"}, {"description"=>"View must test for at least <strong>one</strong> of the following ticket properties in the ALL conditions section: Status, Type, Group, Assignee, Requester."}]}}}
47
45
  def mock
48
- create_params = view_params.dup
46
+ create_params = view_params
49
47
 
50
- if create_params["title"].nil? || create_params["title"] == ""
51
- error!(:invalid, :details => {"base" => [{"title" => "Title: cannot be blank"}]})
48
+ if Zendesk2.blank?(create_params['title'])
49
+ error!(:invalid, details: { 'base' => [{ 'title' => 'Title: cannot be blank' }] })
52
50
  end
53
51
 
54
- if Array(create_params["any"]).empty? && Array(create_params["all"]).empty?
55
- error!(:invalid, :details => {"base" => ["Invalid conditions: You must select at least one condition"]})
52
+ if Array(create_params['any']).empty? && Array(create_params['all']).empty?
53
+ error!(:invalid, details: { 'base' => ['Invalid conditions: You must select at least one condition'] })
56
54
  end
57
55
 
58
56
  identity = cistern.serial_id
59
57
 
60
- output = view_params.delete("output") || {}
61
- columns = (output["columns"] || []).inject([]) { |r,c| r << {"id" => c, "name" => self.class.view_columns.fetch(c)} }
58
+ output = view_params.delete('output') || {}
59
+ columns = (output['columns'] || []).inject([]) do |a, e|
60
+ a << { 'id' => e, 'name' => self.class.view_columns.fetch(e) }
61
+ end
62
62
 
63
63
  record = {
64
- "id" => identity,
65
- "url" => url_for("/views/#{identity}.json"),
66
- "created_at" => Time.now.iso8601,
67
- "updated_at" => Time.now.iso8601,
68
- "active" => true,
69
- "execution" => {
70
- "columns" => columns,
71
- "fields" => columns,
72
- "custom_fields" => [],
73
- "group_by" => create_params["group_by"],
74
- "group_order" => create_params["group_order"],
75
- "sort_by" => create_params["sort_by"],
76
- "sort_order" => create_params["sort_order"],
77
- "sort" => {
78
- "id" => create_params["sort_by"],
79
- "order" => create_params["sort_order"],
80
- "title" => (create_params["sort_by"] && create_params["sort_by"].to_s.upcase),
64
+ 'id' => identity,
65
+ 'url' => url_for("/views/#{identity}.json"),
66
+ 'created_at' => Time.now.iso8601,
67
+ 'updated_at' => Time.now.iso8601,
68
+ 'active' => true,
69
+ 'execution' => {
70
+ 'columns' => columns,
71
+ 'fields' => columns,
72
+ 'custom_fields' => [],
73
+ 'group_by' => create_params['group_by'],
74
+ 'group_order' => create_params['group_order'],
75
+ 'sort_by' => create_params['sort_by'],
76
+ 'sort_order' => create_params['sort_order'],
77
+ 'sort' => {
78
+ 'id' => create_params['sort_by'],
79
+ 'order' => create_params['sort_order'],
80
+ 'title' => (create_params['sort_by'] && create_params['sort_by'].to_s.upcase),
81
81
  },
82
- "group" => {
83
- "id" => create_params["group_by"],
84
- "order" => create_params["group_order"],
85
- "title" => (create_params["group_by"] && create_params["group_by"].to_s.upcase),
82
+ 'group' => {
83
+ 'id' => create_params['group_by'],
84
+ 'order' => create_params['group_order'],
85
+ 'title' => (create_params['group_by'] && create_params['group_by'].to_s.upcase),
86
86
  },
87
87
  },
88
- "conditions" => {
89
- "any" => Array(create_params["any"]),
90
- "all" => Array(create_params["all"]),
88
+ 'conditions' => {
89
+ 'any' => Array(create_params['any']),
90
+ 'all' => Array(create_params['all']),
91
91
  },
92
92
  }.merge(create_params)
93
93
 
94
94
  cistern.data[:views][identity] = record
95
95
 
96
- mock_response("view" => record)
96
+ mock_response('view' => record)
97
97
  end
98
98
  end