zendesk2 1.8.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -1
  3. data/lib/zendesk2/attributes.rb +1 -1
  4. data/lib/zendesk2/audit_event.rb +1 -1
  5. data/lib/zendesk2/category.rb +3 -3
  6. data/lib/zendesk2/collection.rb +2 -2
  7. data/lib/zendesk2/create_category.rb +2 -2
  8. data/lib/zendesk2/create_forum.rb +2 -2
  9. data/lib/zendesk2/create_group.rb +1 -1
  10. data/lib/zendesk2/create_membership.rb +1 -1
  11. data/lib/zendesk2/create_organization.rb +1 -1
  12. data/lib/zendesk2/create_ticket.rb +9 -9
  13. data/lib/zendesk2/create_ticket_field.rb +1 -1
  14. data/lib/zendesk2/create_topic.rb +1 -1
  15. data/lib/zendesk2/create_topic_comment.rb +1 -1
  16. data/lib/zendesk2/create_user.rb +3 -3
  17. data/lib/zendesk2/create_user_field.rb +2 -2
  18. data/lib/zendesk2/create_user_identity.rb +4 -4
  19. data/lib/zendesk2/create_view.rb +2 -2
  20. data/lib/zendesk2/destroy_user.rb +2 -2
  21. data/lib/zendesk2/forum.rb +3 -3
  22. data/lib/zendesk2/get_assignable_groups.rb +1 -1
  23. data/lib/zendesk2/get_ccd_tickets.rb +1 -1
  24. data/lib/zendesk2/get_current_user.rb +1 -1
  25. data/lib/zendesk2/get_user_identities.rb +1 -1
  26. data/lib/zendesk2/group.rb +3 -3
  27. data/lib/zendesk2/groups.rb +2 -2
  28. data/lib/zendesk2/help_center.rb +9 -0
  29. data/lib/zendesk2/help_center/access_policy.rb +1 -1
  30. data/lib/zendesk2/help_center/article.rb +9 -3
  31. data/lib/zendesk2/help_center/articles.rb +1 -1
  32. data/lib/zendesk2/help_center/category.rb +11 -5
  33. data/lib/zendesk2/help_center/create_help_center_article.rb +2 -2
  34. data/lib/zendesk2/help_center/create_help_center_category.rb +2 -2
  35. data/lib/zendesk2/help_center/create_help_center_section.rb +4 -4
  36. data/lib/zendesk2/help_center/create_help_center_translation.rb +37 -0
  37. data/lib/zendesk2/help_center/destroy_help_center_translation.rb +13 -0
  38. data/lib/zendesk2/help_center/get_help_center_translation.rb +13 -0
  39. data/lib/zendesk2/help_center/get_help_center_translations.rb +25 -0
  40. data/lib/zendesk2/help_center/section.rb +12 -6
  41. data/lib/zendesk2/help_center/sections.rb +1 -1
  42. data/lib/zendesk2/help_center/translation.rb +48 -0
  43. data/lib/zendesk2/help_center/translation_source.rb +45 -0
  44. data/lib/zendesk2/help_center/translations.rb +29 -0
  45. data/lib/zendesk2/help_center/update_help_center_translation.rb +16 -0
  46. data/lib/zendesk2/mark_user_identity_primary.rb +1 -1
  47. data/lib/zendesk2/membership.rb +3 -3
  48. data/lib/zendesk2/memberships.rb +3 -3
  49. data/lib/zendesk2/mock.rb +2 -1
  50. data/lib/zendesk2/organization.rb +8 -8
  51. data/lib/zendesk2/organizations.rb +2 -2
  52. data/lib/zendesk2/paged_collection.rb +3 -3
  53. data/lib/zendesk2/real.rb +6 -6
  54. data/lib/zendesk2/request.rb +9 -9
  55. data/lib/zendesk2/search.rb +2 -2
  56. data/lib/zendesk2/searchable.rb +1 -1
  57. data/lib/zendesk2/ticket.rb +9 -9
  58. data/lib/zendesk2/ticket_audit.rb +2 -2
  59. data/lib/zendesk2/ticket_audits.rb +3 -3
  60. data/lib/zendesk2/ticket_comment.rb +1 -1
  61. data/lib/zendesk2/ticket_comment_privacy_change.rb +1 -1
  62. data/lib/zendesk2/ticket_comments.rb +2 -2
  63. data/lib/zendesk2/ticket_field.rb +3 -3
  64. data/lib/zendesk2/ticket_metric.rb +1 -1
  65. data/lib/zendesk2/ticket_voice_comment.rb +1 -1
  66. data/lib/zendesk2/tickets.rb +1 -1
  67. data/lib/zendesk2/topic.rb +3 -3
  68. data/lib/zendesk2/topic_comment.rb +4 -4
  69. data/lib/zendesk2/update_organization.rb +1 -1
  70. data/lib/zendesk2/update_ticket.rb +5 -5
  71. data/lib/zendesk2/update_user.rb +4 -4
  72. data/lib/zendesk2/user.rb +13 -13
  73. data/lib/zendesk2/user_field.rb +3 -3
  74. data/lib/zendesk2/user_identity.rb +5 -5
  75. data/lib/zendesk2/users.rb +1 -1
  76. data/lib/zendesk2/version.rb +1 -1
  77. data/lib/zendesk2/view.rb +4 -4
  78. data/spec/help_center/articles_spec.rb +18 -0
  79. data/spec/help_center/categories_spec.rb +13 -0
  80. data/spec/help_center/sections_spec.rb +14 -1
  81. data/spec/support/client_helper.rb +0 -1
  82. metadata +10 -2
@@ -1,11 +1,15 @@
1
1
  module Zendesk2::HelpCenter; end
2
2
 
3
+ require 'zendesk2/help_center/translation_source'
4
+
3
5
  require 'zendesk2/help_center/create_help_center_article'
4
6
  require 'zendesk2/help_center/create_help_center_category'
5
7
  require 'zendesk2/help_center/create_help_center_section'
8
+ require 'zendesk2/help_center/create_help_center_translation'
6
9
  require 'zendesk2/help_center/destroy_help_center_article'
7
10
  require 'zendesk2/help_center/destroy_help_center_category'
8
11
  require 'zendesk2/help_center/destroy_help_center_section'
12
+ require 'zendesk2/help_center/destroy_help_center_translation'
9
13
  require 'zendesk2/help_center/get_help_center_access_policy'
10
14
  require 'zendesk2/help_center/get_help_center_article'
11
15
  require 'zendesk2/help_center/get_help_center_articles'
@@ -16,17 +20,22 @@ require 'zendesk2/help_center/get_help_center_category'
16
20
  require 'zendesk2/help_center/get_help_center_section'
17
21
  require 'zendesk2/help_center/get_help_center_sections'
18
22
  require 'zendesk2/help_center/get_help_center_sections_articles'
23
+ require 'zendesk2/help_center/get_help_center_translation'
24
+ require 'zendesk2/help_center/get_help_center_translations'
19
25
  require 'zendesk2/help_center/search_help_center_articles'
20
26
  require 'zendesk2/help_center/update_help_center_access_policy'
21
27
  require 'zendesk2/help_center/update_help_center_article'
22
28
  require 'zendesk2/help_center/update_help_center_category'
23
29
  require 'zendesk2/help_center/update_help_center_section'
30
+ require 'zendesk2/help_center/update_help_center_translation'
24
31
 
25
32
  require 'zendesk2/help_center/access_policy'
26
33
  require 'zendesk2/help_center/article'
27
34
  require 'zendesk2/help_center/category'
28
35
  require 'zendesk2/help_center/section'
36
+ require 'zendesk2/help_center/translation'
29
37
 
30
38
  require 'zendesk2/help_center/articles'
31
39
  require 'zendesk2/help_center/categories'
32
40
  require 'zendesk2/help_center/sections'
41
+ require 'zendesk2/help_center/translations'
@@ -20,7 +20,7 @@ class Zendesk2::HelpCenter::AccessPolicy
20
20
  def save!
21
21
  requires :section_id
22
22
 
23
- response = service.update_help_center_access_policy("access_policy" => self.attributes, "section_id" => self.section_id)
23
+ response = cistern.update_help_center_access_policy("access_policy" => self.attributes, "section_id" => self.section_id)
24
24
  merge_attributes(response.body["access_policy"])
25
25
  end
26
26
  end
@@ -45,15 +45,21 @@ class Zendesk2::HelpCenter::Article
45
45
 
46
46
  assoc_accessor :section, collection: :help_center_sections
47
47
 
48
+ def translations
49
+ requires :identity
50
+
51
+ cistern.help_center_translations(source_id: self.identity, source_type: "Article")
52
+ end
53
+
48
54
  def save!
49
55
  response = if new_record?
50
56
  requires :title, :locale, :section_id
51
57
 
52
- service.create_help_center_article("article" => self.attributes)
58
+ cistern.create_help_center_article("article" => self.attributes)
53
59
  else
54
60
  requires :identity
55
61
 
56
- service.update_help_center_article("article" => self.attributes)
62
+ cistern.update_help_center_article("article" => self.attributes)
57
63
  end
58
64
 
59
65
  merge_attributes(response.body["article"])
@@ -62,6 +68,6 @@ class Zendesk2::HelpCenter::Article
62
68
  def destroy!
63
69
  requires :identity
64
70
 
65
- service.destroy_help_center_article("article" => { "id" => self.identity })
71
+ cistern.destroy_help_center_article("article" => { "id" => self.identity })
66
72
  end
67
73
  end
@@ -28,7 +28,7 @@ class Zendesk2::HelpCenter::Articles
28
28
  :get_help_center_articles
29
29
  end
30
30
 
31
- body = service.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
31
+ body = cistern.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
32
32
 
33
33
  self.load(body[collection_root]) # 'results' is the key for paged searches
34
34
  self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
@@ -32,30 +32,36 @@ class Zendesk2::HelpCenter::Category
32
32
  def articles
33
33
  requires :identity
34
34
 
35
- service.help_center_articles(category_id: self.identity)
35
+ cistern.help_center_articles(category_id: self.identity)
36
36
  end
37
37
 
38
38
  def destroy!
39
39
  requires :identity
40
40
 
41
- service.destroy_help_center_category("category" => { "id" => self.identity })
41
+ cistern.destroy_help_center_category("category" => { "id" => self.identity })
42
42
  end
43
43
 
44
44
  def sections
45
45
  requires :identity
46
46
 
47
- service.help_center_sections(category_id: self.identity)
47
+ cistern.help_center_sections(category_id: self.identity)
48
+ end
49
+
50
+ def translations
51
+ requires :identity
52
+
53
+ cistern.help_center_translations(source_id: self.identity, source_type: "Category")
48
54
  end
49
55
 
50
56
  def save!
51
57
  response = if new_record?
52
58
  requires :name, :locale
53
59
 
54
- service.create_help_center_category("category" => self.attributes)
60
+ cistern.create_help_center_category("category" => self.attributes)
55
61
  else
56
62
  requires :identity
57
63
 
58
- service.update_help_center_category("category" => self.attributes)
64
+ cistern.update_help_center_category("category" => self.attributes)
59
65
  end
60
66
 
61
67
  merge_attributes(response.body["category"])
@@ -24,7 +24,7 @@ class Zendesk2::CreateHelpCenterArticle
24
24
  end
25
25
 
26
26
  def mock
27
- identity = service.serial_id
27
+ identity = cistern.serial_id
28
28
 
29
29
  locale = params["locale"] ||= "en-us"
30
30
  position = self.data[:help_center_articles].values.select { |a| a["section_id"] == section_id }.size
@@ -33,7 +33,7 @@ class Zendesk2::CreateHelpCenterArticle
33
33
  "id" => identity,
34
34
  "url" => url_for("/help_center/#{locale}/articles/#{identity}.json"),
35
35
  "html_url" => html_url_for("/hc/#{locale}/articles/#{identity}.json"),
36
- "author_id" => service.current_user["id"],
36
+ "author_id" => cistern.current_user["id"],
37
37
  "comments_disabled" => false,
38
38
  "label_names" => [],
39
39
  "draft" => false,
@@ -14,7 +14,7 @@ class Zendesk2::CreateHelpCenterCategory
14
14
  end
15
15
 
16
16
  def mock
17
- identity = service.serial_id
17
+ identity = cistern.serial_id
18
18
 
19
19
  locale = params["locale"] ||= "en-us"
20
20
  position = self.data[:help_center_categories].size
@@ -23,7 +23,7 @@ class Zendesk2::CreateHelpCenterCategory
23
23
  "id" => identity,
24
24
  "url" => url_for("/help_center/#{locale}/categories/#{identity}.json"),
25
25
  "html_url" => html_url_for("/hc/#{locale}/categories/#{identity}.json"),
26
- "author_id" => service.current_user["id"],
26
+ "author_id" => cistern.current_user["id"],
27
27
  "position" => position,
28
28
  "created_at" => Time.now.iso8601,
29
29
  "updated_at" => Time.now.iso8601,
@@ -18,7 +18,7 @@ class Zendesk2::CreateHelpCenterSection
18
18
  end
19
19
 
20
20
  def mock
21
- identity = service.serial_id
21
+ identity = cistern.serial_id
22
22
 
23
23
  locale = params["locale"] ||= "en-us"
24
24
  position = self.data[:help_center_sections].values.select { |a| a["category_id"] == category_id }.size
@@ -27,7 +27,7 @@ class Zendesk2::CreateHelpCenterSection
27
27
  "id" => identity,
28
28
  "url" => url_for("/help_center/#{locale}/sections/#{identity}.json"),
29
29
  "html_url" => html_url_for("/hc/#{locale}/sections/#{identity}.json"),
30
- "author_id" => service.current_user["id"],
30
+ "author_id" => cistern.current_user["id"],
31
31
  "comments_disabled" => false,
32
32
  "label_names" => [],
33
33
  "draft" => false,
@@ -44,7 +44,7 @@ class Zendesk2::CreateHelpCenterSection
44
44
  "outdated" => false,
45
45
  }.merge(section_params)
46
46
 
47
- service.data[:help_center_sections][identity] = record
47
+ cistern.data[:help_center_sections][identity] = record
48
48
 
49
49
  access_policy = {
50
50
  "viewable_by" => "everyone",
@@ -54,7 +54,7 @@ class Zendesk2::CreateHelpCenterSection
54
54
  "required_tags" => [],
55
55
  "section_id" => identity
56
56
  }
57
- service.data[:help_center_access_policies][identity] = access_policy
57
+ cistern.data[:help_center_access_policies][identity] = access_policy
58
58
 
59
59
  mock_response("section" => record)
60
60
  end
@@ -0,0 +1,37 @@
1
+ class Zendesk2::CreateHelpCenterTranslation
2
+ include Zendesk2::Request
3
+ include Zendesk2::HelpCenter::TranslationSource::Request
4
+
5
+ request_method :post
6
+ request_path { |r| "/help_center/#{r.source_type_url}/#{r.source_id}/translations/#{r.locale}.json" }
7
+ request_body { |r| { "translation" => r.translation_params } }
8
+
9
+ def self.accepted_attributes
10
+ %w[locale title body outdated draft]
11
+ end
12
+
13
+ def translation_params
14
+ Cistern::Hash.slice(params.fetch("translation"), *self.class.accepted_attributes)
15
+ end
16
+
17
+ def mock
18
+ identity = cistern.serial_id
19
+
20
+ record = {
21
+ "id" => identity,
22
+ "url" => url_for("/help_center/#{source_type_url}/#{source_id}/translation/#{locale}.json"),
23
+ "html_url" => html_url_for("/hc/#{locale}/#{source_type_url}/#{source_id}"),
24
+ "created_at" => Time.now.iso8601,
25
+ "updated_at" => Time.now.iso8601,
26
+ "title" => params.fetch("translation").fetch("title"),
27
+ "body" => (params.fetch("translation")["body"] || ""),
28
+ "outdated" => false,
29
+ "draft" => false,
30
+ "locale" => locale,
31
+ }.merge(translation_params)
32
+
33
+ cistern.data[:help_center_translations][mock_translation_key] = record
34
+
35
+ mock_response("translation" => record)
36
+ end
37
+ end
@@ -0,0 +1,13 @@
1
+ class Zendesk2::DestroyHelpCenterTranslation
2
+ include Zendesk2::Request
3
+ include Zendesk2::HelpCenter::TranslationSource::Request
4
+
5
+ request_method :delete
6
+ request_path { |r| "/help_center/#{r.source_type_url}/#{r.source_id}/translations/#{r.locale}.json" }
7
+
8
+ def mock
9
+ self.delete!(:help_center_translations, mock_translation_key)
10
+
11
+ mock_response(nil)
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ class Zendesk2::GetHelpCenterTranslation
2
+ include Zendesk2::Request
3
+ include Zendesk2::HelpCenter::TranslationSource::Request
4
+
5
+ request_method :get
6
+ request_path { |r|
7
+ "/help_center/#{r.source_type_url}/#{r.source_id}/translations/#{r.locale}.json"
8
+ }
9
+
10
+ def mock(params={})
11
+ mock_response("translation" => self.find!(:help_center_translations, mock_translation_key))
12
+ end
13
+ end
@@ -0,0 +1,25 @@
1
+ class Zendesk2::GetHelpCenterTranslations
2
+ include Zendesk2::Request
3
+ include Zendesk2::HelpCenter::TranslationSource::Request
4
+
5
+ request_path { |r| "/help_center/#{r.source_type_url}/#{r.source_id}/translations.json" }
6
+ request_params { |r| r.translation_params }
7
+
8
+ page_params!
9
+
10
+ def translation_params
11
+ new_params = Cistern::Hash.slice(params, :outdated, :draft)
12
+
13
+ # Extract locales and dedup "locale"
14
+ locales = params["locales"] || []
15
+ locales << params["locale"] unless !params["locale"] || params["locale"].empty?
16
+ locales.uniq!
17
+ new_params["locales"] = locales.join(",") unless locales.empty?
18
+
19
+ return new_params
20
+ end
21
+
22
+ def mock
23
+ page(:help_center_translations, root: "translations")
24
+ end
25
+ end
@@ -39,18 +39,18 @@ class Zendesk2::HelpCenter::Section
39
39
  def destroy!
40
40
  requires :identity
41
41
 
42
- service.destroy_help_center_section("section" => { "id" => self.identity })
42
+ cistern.destroy_help_center_section("section" => { "id" => self.identity })
43
43
  end
44
44
 
45
45
  def save!
46
46
  response = if new_record?
47
47
  requires :name, :locale, :category_id
48
48
 
49
- service.create_help_center_section("section" => self.attributes)
49
+ cistern.create_help_center_section("section" => self.attributes)
50
50
  else
51
51
  requires :identity
52
52
 
53
- service.update_help_center_section("section" => self.attributes)
53
+ cistern.update_help_center_section("section" => self.attributes)
54
54
  end
55
55
 
56
56
  merge_attributes(response.body["section"])
@@ -59,17 +59,23 @@ class Zendesk2::HelpCenter::Section
59
59
  def articles
60
60
  requires :identity
61
61
 
62
- service.help_center_articles(section_id: self.identity)
62
+ cistern.help_center_articles(section_id: self.identity)
63
63
  end
64
64
 
65
65
  def access_policy
66
66
  requires :identity
67
67
 
68
- response = service.get_help_center_access_policy(section_id: self.identity).body["access_policy"]
68
+ response = cistern.get_help_center_access_policy(section_id: self.identity).body["access_policy"]
69
69
  response.merge!({
70
70
  "section_id" => self.identity
71
71
  })
72
72
 
73
- service.help_center_access_policy(response)
73
+ cistern.help_center_access_policy(response)
74
+ end
75
+
76
+ def translations
77
+ requires :identity
78
+
79
+ cistern.help_center_translations(source_id: self.identity, source_type: "Section")
74
80
  end
75
81
  end
@@ -22,7 +22,7 @@ class Zendesk2::HelpCenter::Sections
22
22
  :get_help_center_sections
23
23
  end
24
24
 
25
- body = service.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
25
+ body = cistern.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
26
26
 
27
27
  self.load(body[collection_root]) # 'results' is the key for paged searches
28
28
  self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
@@ -0,0 +1,48 @@
1
+ class Zendesk2::HelpCenter::Translation
2
+ include Zendesk2::Model
3
+ include Zendesk2::HelpCenter::TranslationSource::Model
4
+
5
+ extend Zendesk2::Attributes
6
+
7
+ # @return [Integer] Automatically assigned when the translation is created
8
+ identity :id, type: :integer # ro:yes required:no
9
+
10
+ # @return [String] The API url of the translation
11
+ attribute :url, type: :string # ro:yes required:no
12
+ # @return [String] The url of the translation in Help Center
13
+ attribute :html_url, type: :string # ro:yes required:no
14
+ # @return [Integer] The id of the item that has this translation
15
+ attribute :source_id, type: :integer # ro:yes required:no
16
+ # @return [String] The type of the item that has this translation. Can be Article, Section, or Category
17
+ attribute :source_type, type: :string # ro:yes required:no
18
+ # @return [String] The locale of the translation
19
+ attribute :locale, type: :string # ro:no required:yes
20
+ # @return [String] The title of the translation
21
+ attribute :title, type: :string # ro:no required:yes
22
+ # @return [String] The body of the translation. Empty by default
23
+ attribute :body, type: :string # ro:no required:no
24
+ # @return [Boolean] True if the translation is outdated; false otherwise. False by default
25
+ attribute :outdated, type: :boolean # ro:no required:no
26
+ # @return [Boolean] True if the translation is a draft; false otherwise. False by default
27
+ attribute :draft, type: :boolean # ro:no required:no
28
+
29
+ def destroy!
30
+ requires :locale, :source_id, :source_type
31
+
32
+ cistern.destroy_help_center_translation("translation" => Cistern::Hash.slice(self.attributes, :source_id, :source_type, :locale))
33
+ end
34
+
35
+ def save!
36
+ response = if new_record?
37
+ requires :locale, :source_id, :source_type
38
+
39
+ cistern.create_help_center_translation("translation" => self.attributes)
40
+ else
41
+ requires :identity
42
+
43
+ cistern.update_help_center_translation("translation" => self.attributes)
44
+ end
45
+
46
+ merge_attributes(response.body["translation"])
47
+ end
48
+ end
@@ -0,0 +1,45 @@
1
+ module Zendesk2::HelpCenter::TranslationSource
2
+ module Model
3
+ def source=(source)
4
+ if source.is_a?(Zendesk2::HelpCenter::Article)
5
+ self.source_type = "Article"
6
+ elsif source.is_a?(Zendesk2::HelpCenter::Section)
7
+ self.source_type = "Section"
8
+ elsif source.is_a?(Zendesk2::HelpCenter::Category)
9
+ self.source_type = "Category"
10
+ end
11
+ self.source_id = source.id
12
+ end
13
+ end
14
+
15
+ module Request
16
+ def source_id
17
+ Integer((params["translation"] || params).fetch("source_id"))
18
+ end
19
+
20
+ def source_type
21
+ (params["translation"] || params).fetch("source_type")
22
+ end
23
+
24
+ def source_type_url
25
+ case source_type
26
+ when "Article"
27
+ "articles"
28
+ when "Section"
29
+ "sections"
30
+ when "Category"
31
+ "categories"
32
+ end
33
+ end
34
+
35
+ def locale
36
+ (params["translation"] || params).fetch("locale") || "en-us"
37
+ end
38
+
39
+ # Since Zendesk2::Request#find! calls .to_i on hash keys, we need an integer
40
+ # key for this.
41
+ def mock_translation_key
42
+ [source_type, source_id, locale].join("-").each_byte.inject(0) {|char, acc| acc + char }
43
+ end
44
+ end
45
+ end