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
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ class Zendesk2::GetHelpCenterTopic
3
+ include Zendesk2::Request
4
+
5
+ request_path { |r| "/community/topics/#{r.topic_id}.json" }
6
+
7
+ def topic_id
8
+ params.fetch('topic').fetch('id')
9
+ end
10
+
11
+ def mock
12
+ mock_response('topic' => find!(:help_center_topics, topic_id))
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ class Zendesk2::GetHelpCenterTopics
3
+ include Zendesk2::Request
4
+
5
+ request_path { |_r| '/community/topics.json' }
6
+
7
+ def mock
8
+ resources(:help_center_topics, root: 'topics')
9
+ end
10
+ end
@@ -1,13 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::GetHelpCenterTranslation
2
3
  include Zendesk2::Request
3
4
  include Zendesk2::HelpCenter::TranslationSource::Request
4
5
 
5
6
  request_method :get
6
- request_path { |r|
7
+ request_path do |r|
7
8
  "/help_center/#{r.source_type_url}/#{r.source_id}/translations/#{r.locale}.json"
8
- }
9
+ end
9
10
 
10
- def mock(params={})
11
- mock_response("translation" => self.find!(:help_center_translations, mock_translation_key))
11
+ def mock(_params = {})
12
+ mock_response('translation' => find!(:help_center_translations, mock_translation_key))
12
13
  end
13
14
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::GetHelpCenterTranslations
2
3
  include Zendesk2::Request
3
4
  include Zendesk2::HelpCenter::TranslationSource::Request
4
5
 
5
6
  request_path { |r| "/help_center/#{r.source_type_url}/#{r.source_id}/translations.json" }
6
- request_params { |r| r.translation_params }
7
+ request_params(&:translation_params)
7
8
 
8
9
  page_params!
9
10
 
@@ -11,15 +12,15 @@ class Zendesk2::GetHelpCenterTranslations
11
12
  new_params = Cistern::Hash.slice(params, :outdated, :draft)
12
13
 
13
14
  # Extract locales and dedup "locale"
14
- locales = params["locales"] || []
15
- locales << params["locale"] unless !params["locale"] || params["locale"].empty?
15
+ locales = params['locales'] || []
16
+ locales << params['locale'] unless !params['locale'] || params['locale'].empty?
16
17
  locales.uniq!
17
- new_params["locales"] = locales.join(",") unless locales.empty?
18
+ new_params['locales'] = locales.join(',') unless locales.empty?
18
19
 
19
- return new_params
20
+ new_params
20
21
  end
21
22
 
22
23
  def mock
23
- page(:help_center_translations, root: "translations")
24
+ page(:help_center_translations, root: 'translations')
24
25
  end
25
26
  end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+ class Zendesk2::HelpCenter::Post
3
+ include Zendesk2::Model
4
+
5
+ extend Zendesk2::Attributes
6
+
7
+ # Automatically assigned when the post is created
8
+ identity :id, type: :integer
9
+
10
+ # API url of the post
11
+ attribute :url
12
+ # The community url of the post
13
+ attribute :html_url
14
+ # The title of the post
15
+ attribute :title
16
+ # The details of the post
17
+ attribute :details
18
+ # The id of the author of the post. *Writable on create by Help Center managers -- see Create Post
19
+ attribute :author_id, type: :integer
20
+ # When true, pins the post to the top of its topic
21
+ attribute :pinned, type: :boolean
22
+ # Whether the post is featured
23
+ attribute :featured, type: :boolean
24
+ # Whether further comments are allowed
25
+ attribute :closed, type: :boolean
26
+ # Possible values: "planned", "not_planned" , "answered", or "completed"
27
+ attribute :status
28
+ # The total sum of votes on the post
29
+ attribute :vote_sum, type: :integer
30
+ # The number of votes cast on the post
31
+ attribute :vote_count, type: :integer
32
+ # The number of comments on the post
33
+ attribute :comment_count, type: :integer
34
+ # The number of followers of the post
35
+ attribute :follower_count, type: :integer
36
+ # The id of the topic that the post belongs to
37
+ attribute :topic_id, type: :integer
38
+ # Post
39
+ attribute :created_at, type: :time
40
+ # When the post was last updated
41
+ attribute :updated_at, type: :time
42
+
43
+ def destroy!
44
+ requires :identity
45
+
46
+ cistern.destroy_help_center_post('post' => { 'id' => identity })
47
+ end
48
+
49
+ def save!
50
+ response = if new_record?
51
+ requires :title, :details, :topic_id
52
+
53
+ cistern.create_help_center_post('post' => attributes)
54
+ else
55
+ requires :identity
56
+
57
+ cistern.update_help_center_post('post' => attributes)
58
+ end
59
+
60
+ merge_attributes(response.body['post'])
61
+ end
62
+
63
+ def author
64
+ author_id && cistern.users.get!(author_id)
65
+ end
66
+
67
+ def topic
68
+ requires :topic_id
69
+
70
+ cistern.help_center_topics.get!(topic_id)
71
+ end
72
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ class Zendesk2::HelpCenter::Posts
3
+ include Zendesk2::Collection
4
+ include Zendesk2::PagedCollection
5
+
6
+ model Zendesk2::HelpCenter::Post
7
+
8
+ self.collection_method = :get_help_center_posts
9
+ self.collection_root = 'posts'
10
+ self.model_method = :get_help_center_post
11
+ self.model_root = 'post'
12
+
13
+ attribute :user_id, type: :integer
14
+ attribute :topic_id, type: :integer
15
+
16
+ scopes << :user_id
17
+ scopes << :topic_id
18
+ end
@@ -1,29 +1,30 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::SearchHelpCenterArticles
2
3
  include Zendesk2::Request
3
4
 
4
- request_path { |_| "/help_center/articles/search.json" }
5
+ request_path { |_| '/help_center/articles/search.json' }
5
6
 
6
7
  attr_reader :query
7
8
 
8
- def _mock(query, params={})
9
+ def _mock(query, params = {})
9
10
  @query = query
10
11
  setup(params)
11
12
  mock
12
13
  end
13
14
 
14
- def _real(query, params={})
15
+ def _real(query, params = {})
15
16
  @query = query
16
17
  setup(params)
17
18
  real
18
19
  end
19
20
 
20
21
  def mock
21
- terms = Hash[query.split(" ").map { |t| t.split(":") }]
22
+ terms = Hash[query.split(' ').map { |t| t.split(':') }]
22
23
 
23
- collection = self.data[:help_center_articles].values
24
+ collection = data[:help_center_articles].values
24
25
 
25
- results = collection.select { |v| terms.all?{ |term, condition| v[term.to_s].to_s == condition.to_s } }
26
+ results = collection.select { |v| terms.all? { |term, condition| v[term.to_s].to_s == condition.to_s } }
26
27
 
27
- page(results, params: {"query" => query}, root: "results")
28
+ page(results, params: { 'query' => query }, root: 'results')
28
29
  end
29
30
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::HelpCenter::Section
2
3
  include Zendesk2::Model
3
4
 
@@ -20,7 +21,8 @@ class Zendesk2::HelpCenter::Section
20
21
  attribute :name, type: :string # ro:no required:yes
21
22
  # @return [Boolean] Whether the section is out of date
22
23
  attribute :outdated, type: :boolean # ro:yes required:no
23
- # @return [Integer] The position of this section in the section list. By default the section is added to the end of the list
24
+ # @return [Integer] The position of this section in the section list. By default the section is added to the end of
25
+ # the list
24
26
  attribute :position, type: :integer # ro:no required:no
25
27
  # @return [String] The sorting of articles within this section. By default it's set to manual. See sorting below.
26
28
  attribute :sorting, type: :string # ro:no required:no
@@ -39,36 +41,34 @@ class Zendesk2::HelpCenter::Section
39
41
  def destroy!
40
42
  requires :identity
41
43
 
42
- cistern.destroy_help_center_section("section" => { "id" => self.identity })
44
+ cistern.destroy_help_center_section('section' => { 'id' => identity })
43
45
  end
44
46
 
45
47
  def save!
46
48
  response = if new_record?
47
49
  requires :name, :locale, :category_id
48
50
 
49
- cistern.create_help_center_section("section" => self.attributes)
51
+ cistern.create_help_center_section('section' => attributes)
50
52
  else
51
53
  requires :identity
52
54
 
53
- cistern.update_help_center_section("section" => self.attributes)
55
+ cistern.update_help_center_section('section' => attributes)
54
56
  end
55
57
 
56
- merge_attributes(response.body["section"])
58
+ merge_attributes(response.body['section'])
57
59
  end
58
60
 
59
61
  def articles
60
62
  requires :identity
61
63
 
62
- cistern.help_center_articles(section_id: self.identity)
64
+ cistern.help_center_articles(section_id: identity)
63
65
  end
64
66
 
65
67
  def access_policy
66
68
  requires :identity
67
69
 
68
- response = cistern.get_help_center_access_policy(section_id: self.identity).body["access_policy"]
69
- response.merge!({
70
- "section_id" => self.identity
71
- })
70
+ response = cistern.get_help_center_access_policy(section_id: identity).body['access_policy']
71
+ response['section_id'] = identity
72
72
 
73
73
  cistern.help_center_access_policy(response)
74
74
  end
@@ -76,6 +76,6 @@ class Zendesk2::HelpCenter::Section
76
76
  def translations
77
77
  requires :identity
78
78
 
79
- cistern.help_center_translations(source_id: self.identity, source_type: "Section")
79
+ cistern.help_center_translations(source_id: identity, source_type: 'Section')
80
80
  end
81
81
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::HelpCenter::Sections
2
3
  include Zendesk2::Collection
3
4
 
@@ -7,25 +8,25 @@ class Zendesk2::HelpCenter::Sections
7
8
  model Zendesk2::HelpCenter::Section
8
9
 
9
10
  self.collection_method = :get_help_center_sections
10
- self.collection_root = "sections"
11
+ self.collection_root = 'sections'
11
12
  self.model_method = :get_help_center_section
12
- self.model_root = "section"
13
+ self.model_root = 'section'
13
14
 
14
15
  attribute :category_id, type: :integer
15
16
 
16
17
  scopes << :category_id
17
18
 
18
- def collection_page(params={})
19
+ def collection_page(params = {})
19
20
  collection_method = if category_id
20
21
  :get_help_center_categories_sections
21
22
  else
22
23
  :get_help_center_sections
23
24
  end
24
25
 
25
- body = cistern.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
26
+ body = cistern.send(collection_method, Cistern::Hash.stringify_keys(attributes.merge(params))).body
26
27
 
27
- self.load(body[collection_root]) # 'results' is the key for paged searches
28
- self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
28
+ load(body[collection_root]) # 'results' is the key for paged searches
29
+ merge_attributes(Cistern::Hash.slice(body, 'count', 'next_page', 'previous_page'))
29
30
  self
30
31
  end
31
32
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+ class Zendesk2::HelpCenter::Topic
3
+ include Zendesk2::Model
4
+
5
+ extend Zendesk2::Attributes
6
+
7
+ # Automatically assigned when the topic is created
8
+ identity :id, type: :integer
9
+
10
+ # API url of the topic
11
+ attribute :url
12
+ # The community url of the topic
13
+ attribute :html_url
14
+ # The name of the topic
15
+ attribute :name
16
+ # By default an empty string
17
+ attribute :description
18
+ # The position of the topic relative to other topics in the community
19
+ attribute :position, type: :integer
20
+ # The number of users following the topic
21
+ attribute :follower_count, type: :integer
22
+ # When the topic was created
23
+ attribute :created_at, type: :time
24
+ # When the topic was last updated
25
+ attribute :updated_at, type: :time
26
+
27
+ def destroy!
28
+ requires :identity
29
+
30
+ cistern.destroy_help_center_topic('topic' => { 'id' => identity })
31
+ end
32
+
33
+ def save!
34
+ response = if new_record?
35
+ requires :name
36
+
37
+ cistern.create_help_center_topic('topic' => attributes)
38
+ else
39
+ requires :identity
40
+
41
+ cistern.update_help_center_topic('topic' => attributes)
42
+ end
43
+
44
+ merge_attributes(response.body['topic'])
45
+ end
46
+
47
+ def posts
48
+ requires :identity
49
+
50
+ cistern.help_center_posts(topic_id: identity)
51
+ end
52
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ class Zendesk2::HelpCenter::Topics
3
+ include Zendesk2::Collection
4
+
5
+ model Zendesk2::HelpCenter::Topic
6
+
7
+ attribute :count
8
+
9
+ self.collection_method = :get_help_center_topics
10
+ self.collection_root = 'topics'
11
+ self.model_method = :get_help_center_topic
12
+ self.model_root = 'topic'
13
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Zendesk2::HelpCenter::Translation
2
3
  include Zendesk2::Model
3
4
  include Zendesk2::HelpCenter::TranslationSource::Model
@@ -11,7 +12,7 @@ class Zendesk2::HelpCenter::Translation
11
12
  attribute :url, type: :string # ro:yes required:no
12
13
  # @return [String] The url of the translation in Help Center
13
14
  attribute :html_url, type: :string # ro:yes required:no
14
- # @return [Integer] The id of the item that has this translation
15
+ # @return [Integer] The id of the item that has this translation
15
16
  attribute :source_id, type: :integer # ro:yes required:no
16
17
  # @return [String] The type of the item that has this translation. Can be Article, Section, or Category
17
18
  attribute :source_type, type: :string # ro:yes required:no
@@ -29,20 +30,22 @@ class Zendesk2::HelpCenter::Translation
29
30
  def destroy!
30
31
  requires :locale, :source_id, :source_type
31
32
 
32
- cistern.destroy_help_center_translation("translation" => Cistern::Hash.slice(self.attributes, :source_id, :source_type, :locale))
33
+ cistern.destroy_help_center_translation(
34
+ 'translation' => Cistern::Hash.slice(attributes, :source_id, :source_type, :locale)
35
+ )
33
36
  end
34
37
 
35
38
  def save!
36
39
  response = if new_record?
37
40
  requires :locale, :source_id, :source_type
38
41
 
39
- cistern.create_help_center_translation("translation" => self.attributes)
42
+ cistern.create_help_center_translation('translation' => attributes)
40
43
  else
41
44
  requires :identity
42
45
 
43
- cistern.update_help_center_translation("translation" => self.attributes)
46
+ cistern.update_help_center_translation('translation' => attributes)
44
47
  end
45
48
 
46
- merge_attributes(response.body["translation"])
49
+ merge_attributes(response.body['translation'])
47
50
  end
48
51
  end
@@ -1,45 +1,48 @@
1
+ # frozen_string_literal: true
1
2
  module Zendesk2::HelpCenter::TranslationSource
3
+ # allow models to define their source type
2
4
  module Model
3
5
  def source=(source)
4
6
  if source.is_a?(Zendesk2::HelpCenter::Article)
5
- self.source_type = "Article"
7
+ self.source_type = 'Article'
6
8
  elsif source.is_a?(Zendesk2::HelpCenter::Section)
7
- self.source_type = "Section"
9
+ self.source_type = 'Section'
8
10
  elsif source.is_a?(Zendesk2::HelpCenter::Category)
9
- self.source_type = "Category"
11
+ self.source_type = 'Category'
10
12
  end
11
13
  self.source_id = source.id
12
14
  end
13
15
  end
14
16
 
17
+ # allow requests to read common pieces of information about the translation source
15
18
  module Request
16
19
  def source_id
17
- Integer((params["translation"] || params).fetch("source_id"))
20
+ Integer((params['translation'] || params).fetch('source_id'))
18
21
  end
19
22
 
20
23
  def source_type
21
- (params["translation"] || params).fetch("source_type")
24
+ (params['translation'] || params).fetch('source_type')
22
25
  end
23
26
 
24
27
  def source_type_url
25
28
  case source_type
26
- when "Article"
27
- "articles"
28
- when "Section"
29
- "sections"
30
- when "Category"
31
- "categories"
29
+ when 'Article'
30
+ 'articles'
31
+ when 'Section'
32
+ 'sections'
33
+ when 'Category'
34
+ 'categories'
32
35
  end
33
36
  end
34
37
 
35
38
  def locale
36
- (params["translation"] || params).fetch("locale") || "en-us"
39
+ (params['translation'] || params).fetch('locale') || 'en-us'
37
40
  end
38
41
 
39
42
  # Since Zendesk2::Request#find! calls .to_i on hash keys, we need an integer
40
43
  # key for this.
41
44
  def mock_translation_key
42
- [source_type, source_id, locale].join("-").each_byte.inject(0) {|char, acc| acc + char }
45
+ [source_type, source_id, locale].join('-').each_byte.reduce(0) { |a, e| a + e }
43
46
  end
44
47
  end
45
48
  end