zendesk2 1.9.0 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
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