zendesk2 1.12.0 → 1.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +2 -0
- data/lib/zendesk2.rb +14 -0
- data/lib/zendesk2/brand.rb +58 -0
- data/lib/zendesk2/brands.rb +13 -0
- data/lib/zendesk2/create_brand.rb +41 -0
- data/lib/zendesk2/create_ticket.rb +1 -1
- data/lib/zendesk2/create_ticket_field.rb +2 -1
- data/lib/zendesk2/create_ticket_form.rb +41 -0
- data/lib/zendesk2/destroy_brand.rb +17 -0
- data/lib/zendesk2/destroy_ticket_form.rb +17 -0
- data/lib/zendesk2/get_brand.rb +15 -0
- data/lib/zendesk2/get_brands.rb +13 -0
- data/lib/zendesk2/get_ticket_form.rb +15 -0
- data/lib/zendesk2/get_ticket_forms.rb +37 -0
- data/lib/zendesk2/help_center/article.rb +5 -1
- data/lib/zendesk2/help_center/create_help_center_article.rb +33 -19
- data/lib/zendesk2/mock.rb +2 -0
- data/lib/zendesk2/ticket.rb +4 -0
- data/lib/zendesk2/ticket_field.rb +2 -0
- data/lib/zendesk2/ticket_form.rb +52 -0
- data/lib/zendesk2/ticket_forms.rb +16 -0
- data/lib/zendesk2/update_brand.rb +20 -0
- data/lib/zendesk2/update_ticket_form.rb +20 -0
- data/lib/zendesk2/version.rb +1 -1
- data/spec/brands_spec.rb +12 -0
- data/spec/help_center/articles_spec.rb +2 -1
- data/spec/help_center/categories_spec.rb +5 -2
- data/spec/help_center/sections_spec.rb +5 -2
- data/spec/help_center/subscriptions_spec.rb +2 -1
- data/spec/help_center/translations_spec.rb +3 -1
- data/spec/ticket_fields_spec.rb +1 -1
- data/spec/ticket_forms_spec.rb +11 -0
- data/spec/tickets_spec.rb +16 -0
- metadata +21 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 976b953f93c756c82467fc000cf0ec1bbb81f7b8811592474e115aaba2395134
|
4
|
+
data.tar.gz: 4f6c9bb551ea4801c525c7925ead6aa331c97d549c32c4901ead32f60af2656d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0add53ea5c6a5d74d31adc1609b8cba4a8db75d3421695473e6543ec3269c84b37bc2ee946ba117fd3e63b26594f1337b7ecf168f32838556faf3b6158b70fb
|
7
|
+
data.tar.gz: d81940091f8df258e37f22ee46e408ef85dabb71c32b980dce14bc6a85f603820201eb7e79f9374acac21df25f17c1bfd7973f914def13ae9d7587a3095061bf
|
data/README.md
CHANGED
@@ -61,6 +61,7 @@ Zendesk2.new(url: "http://support.cloud.engineyard.com", username: "mate", token
|
|
61
61
|
Currently support resources:
|
62
62
|
|
63
63
|
* Audit Events
|
64
|
+
* Brands
|
64
65
|
* Categories
|
65
66
|
* Forums
|
66
67
|
* Groups
|
@@ -69,6 +70,7 @@ Currently support resources:
|
|
69
70
|
* Ticket Audits
|
70
71
|
* Ticket Fields
|
71
72
|
* Tickets
|
73
|
+
* Ticket Forms
|
72
74
|
* Topic Comments
|
73
75
|
* Topics
|
74
76
|
* User Identities
|
data/lib/zendesk2.rb
CHANGED
@@ -59,12 +59,14 @@ require 'zendesk2/model'
|
|
59
59
|
require 'zendesk2/collection'
|
60
60
|
require 'zendesk2/help_center'
|
61
61
|
|
62
|
+
require 'zendesk2/create_brand'
|
62
63
|
require 'zendesk2/create_category'
|
63
64
|
require 'zendesk2/create_forum'
|
64
65
|
require 'zendesk2/create_group'
|
65
66
|
require 'zendesk2/create_membership'
|
66
67
|
require 'zendesk2/create_organization'
|
67
68
|
require 'zendesk2/create_ticket'
|
69
|
+
require 'zendesk2/create_ticket_form'
|
68
70
|
require 'zendesk2/create_ticket_field'
|
69
71
|
require 'zendesk2/create_topic'
|
70
72
|
require 'zendesk2/create_topic_comment'
|
@@ -72,12 +74,14 @@ require 'zendesk2/create_user'
|
|
72
74
|
require 'zendesk2/create_user_field'
|
73
75
|
require 'zendesk2/create_user_identity'
|
74
76
|
require 'zendesk2/create_view'
|
77
|
+
require 'zendesk2/destroy_brand'
|
75
78
|
require 'zendesk2/destroy_category'
|
76
79
|
require 'zendesk2/destroy_forum'
|
77
80
|
require 'zendesk2/destroy_group'
|
78
81
|
require 'zendesk2/destroy_membership'
|
79
82
|
require 'zendesk2/destroy_organization'
|
80
83
|
require 'zendesk2/destroy_ticket'
|
84
|
+
require 'zendesk2/destroy_ticket_form'
|
81
85
|
require 'zendesk2/destroy_ticket_field'
|
82
86
|
require 'zendesk2/destroy_topic'
|
83
87
|
require 'zendesk2/destroy_topic_comment'
|
@@ -86,6 +90,8 @@ require 'zendesk2/destroy_user_field'
|
|
86
90
|
require 'zendesk2/destroy_user_identity'
|
87
91
|
require 'zendesk2/destroy_view'
|
88
92
|
require 'zendesk2/get_assignable_groups'
|
93
|
+
require 'zendesk2/get_brand'
|
94
|
+
require 'zendesk2/get_brands'
|
89
95
|
require 'zendesk2/get_categories'
|
90
96
|
require 'zendesk2/get_category'
|
91
97
|
require 'zendesk2/get_ccd_tickets'
|
@@ -109,6 +115,8 @@ require 'zendesk2/get_ticket_audits'
|
|
109
115
|
require 'zendesk2/get_ticket_comments'
|
110
116
|
require 'zendesk2/get_ticket_field'
|
111
117
|
require 'zendesk2/get_ticket_fields'
|
118
|
+
require 'zendesk2/get_ticket_form'
|
119
|
+
require 'zendesk2/get_ticket_forms'
|
112
120
|
require 'zendesk2/get_ticket_metric'
|
113
121
|
require 'zendesk2/get_ticket_metrics'
|
114
122
|
require 'zendesk2/get_tickets'
|
@@ -130,10 +138,12 @@ require 'zendesk2/get_views'
|
|
130
138
|
require 'zendesk2/mark_membership_default'
|
131
139
|
require 'zendesk2/mark_user_identity_primary'
|
132
140
|
require 'zendesk2/update_category'
|
141
|
+
require 'zendesk2/update_brand'
|
133
142
|
require 'zendesk2/update_forum'
|
134
143
|
require 'zendesk2/update_group'
|
135
144
|
require 'zendesk2/update_organization'
|
136
145
|
require 'zendesk2/update_ticket'
|
146
|
+
require 'zendesk2/update_ticket_form'
|
137
147
|
require 'zendesk2/update_ticket_field'
|
138
148
|
require 'zendesk2/update_topic'
|
139
149
|
require 'zendesk2/update_user'
|
@@ -147,6 +157,7 @@ require 'zendesk2/search_user'
|
|
147
157
|
|
148
158
|
require 'zendesk2/audit_event'
|
149
159
|
|
160
|
+
require 'zendesk2/brand'
|
150
161
|
require 'zendesk2/category'
|
151
162
|
require 'zendesk2/forum'
|
152
163
|
require 'zendesk2/group'
|
@@ -156,6 +167,7 @@ require 'zendesk2/ticket'
|
|
156
167
|
require 'zendesk2/ticket_audit'
|
157
168
|
require 'zendesk2/ticket_comment'
|
158
169
|
require 'zendesk2/ticket_field'
|
170
|
+
require 'zendesk2/ticket_form'
|
159
171
|
require 'zendesk2/topic'
|
160
172
|
require 'zendesk2/topic_comment'
|
161
173
|
require 'zendesk2/user'
|
@@ -163,6 +175,7 @@ require 'zendesk2/user_field'
|
|
163
175
|
require 'zendesk2/user_identity'
|
164
176
|
require 'zendesk2/view'
|
165
177
|
|
178
|
+
require 'zendesk2/brands'
|
166
179
|
require 'zendesk2/categories'
|
167
180
|
require 'zendesk2/forums'
|
168
181
|
require 'zendesk2/groups'
|
@@ -171,6 +184,7 @@ require 'zendesk2/organizations'
|
|
171
184
|
require 'zendesk2/ticket_audits'
|
172
185
|
require 'zendesk2/ticket_comments'
|
173
186
|
require 'zendesk2/ticket_fields'
|
187
|
+
require 'zendesk2/ticket_forms'
|
174
188
|
require 'zendesk2/tickets'
|
175
189
|
require 'zendesk2/topic_comments'
|
176
190
|
require 'zendesk2/topics'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::Brand
|
3
|
+
include Zendesk2::Model
|
4
|
+
|
5
|
+
extend Zendesk2::Attributes
|
6
|
+
|
7
|
+
# @return [integer] Automatically assigned upon creation
|
8
|
+
identity :id, type: :integer
|
9
|
+
|
10
|
+
# @return [String] The API url of this brand
|
11
|
+
attribute :url, type: :string
|
12
|
+
# @return [String] The name of the brand
|
13
|
+
attribute :name, type: :string
|
14
|
+
# @return [String] The url of the brand
|
15
|
+
attribute :brand_url, type: :string
|
16
|
+
# @return [Boolean] If the brand has a Help Center
|
17
|
+
attribute :has_help_center, type: :boolean
|
18
|
+
# @return [String] The state of the Help Center: enabled, disabled, or restricted
|
19
|
+
attribute :help_center_state, type: :string
|
20
|
+
# @return [Boolean] If the brand is set as active
|
21
|
+
attribute :active, type: :boolean
|
22
|
+
# @return [Boolean] Is the brand the default brand for this account
|
23
|
+
attribute :default, type: :boolean
|
24
|
+
# @return [Attachment] Logo image for this brand
|
25
|
+
attribute :logo, type: :Attachment
|
26
|
+
# @return [Array] The ids of ticket forms that are available for use by a brand
|
27
|
+
attribute :ticket_form_ids, type: :array
|
28
|
+
# @return [Date] The time the brand was created
|
29
|
+
attribute :created_at, type: :date
|
30
|
+
# @return [Date] The time of the last update of the brand
|
31
|
+
attribute :updated_at, type: :date
|
32
|
+
# @return [String] The subdomain of the brand
|
33
|
+
attribute :subdomain, type: :string
|
34
|
+
# @return [String] The hostmapping to this brand, if any (only admins view this key)
|
35
|
+
attribute :host_mapping, type: :string
|
36
|
+
# @return [String] The signature template for a brand
|
37
|
+
attribute :signature_template, type: :string
|
38
|
+
|
39
|
+
def save!
|
40
|
+
data = if new_record?
|
41
|
+
requires :name
|
42
|
+
|
43
|
+
cistern.create_brand('brand' => attributes)
|
44
|
+
else
|
45
|
+
requires :identity
|
46
|
+
|
47
|
+
cistern.update_brand('brand' => attributes)
|
48
|
+
end.body['brand']
|
49
|
+
|
50
|
+
merge_attributes(data)
|
51
|
+
end
|
52
|
+
|
53
|
+
def destroy!
|
54
|
+
requires :identity
|
55
|
+
|
56
|
+
cistern.destroy_brand('brand' => { 'id' => identity })
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::Brands
|
3
|
+
include Zendesk2::Collection
|
4
|
+
|
5
|
+
model Zendesk2::Brand
|
6
|
+
|
7
|
+
attribute :count, type: :integer
|
8
|
+
|
9
|
+
self.collection_method = :get_brands
|
10
|
+
self.collection_root = 'brands'
|
11
|
+
self.model_method = :get_brand
|
12
|
+
self.model_root = 'brand'
|
13
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::CreateBrand
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :post
|
6
|
+
request_path { |_| '/brands.json' }
|
7
|
+
request_body { |r| { 'brand' => r.brand_params } }
|
8
|
+
|
9
|
+
def self.accepted_attributes
|
10
|
+
%w(name brand_url has_help_center help_center_state active default ticket_form_ids
|
11
|
+
subdomain host_mapping signature_template)
|
12
|
+
end
|
13
|
+
|
14
|
+
def brand_params
|
15
|
+
Cistern::Hash.slice(params.fetch('brand'), *self.class.accepted_attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def mock
|
19
|
+
identity = cistern.serial_id
|
20
|
+
|
21
|
+
record = {
|
22
|
+
'id' => identity,
|
23
|
+
'name' => params['name'],
|
24
|
+
'brand_url' => '',
|
25
|
+
'has_help_center' => true,
|
26
|
+
'help_center_state' => true,
|
27
|
+
'active' => true,
|
28
|
+
'end_user_visible' => true,
|
29
|
+
'default' => false,
|
30
|
+
'ticket_form_ids' => params['ticket_form_ids'],
|
31
|
+
'subdomain' => params['subdomain'],
|
32
|
+
'host_mapping' => '',
|
33
|
+
'signature_template' => '',
|
34
|
+
'url' => url_for("/brands/#{identity}.json"),
|
35
|
+
}.merge(brand_params)
|
36
|
+
|
37
|
+
data[:brands][identity] = record
|
38
|
+
|
39
|
+
mock_response('brand' => record)
|
40
|
+
end
|
41
|
+
end
|
@@ -8,7 +8,7 @@ class Zendesk2::CreateTicket
|
|
8
8
|
|
9
9
|
def self.accepted_attributes
|
10
10
|
%w(external_id via priority requester requester_id submitter_id assignee_id organization_id subject description
|
11
|
-
custom_fields recipient status collaborator_ids collaborators tags)
|
11
|
+
custom_fields recipient status collaborator_ids collaborators tags ticket_form_id brand_id)
|
12
12
|
end
|
13
13
|
|
14
14
|
def ticket_params
|
@@ -8,7 +8,7 @@ class Zendesk2::CreateTicketField
|
|
8
8
|
|
9
9
|
def self.accepted_attributes
|
10
10
|
%w(type title description position active required collapsed_for_agents regexp_for_validation title_in_portal
|
11
|
-
visible_in_portal editable_in_portal required_in_portal tag custom_field_options)
|
11
|
+
visible_in_portal editable_in_portal required_in_portal tag custom_field_options agent_description)
|
12
12
|
end
|
13
13
|
|
14
14
|
def ticket_field_params
|
@@ -35,6 +35,7 @@ class Zendesk2::CreateTicketField
|
|
35
35
|
'updated_at' => timestamp,
|
36
36
|
'url' => url_for("/ticket_fields/#{identity}.json"),
|
37
37
|
'visible_in_portal' => false,
|
38
|
+
'agent_description' => '',
|
38
39
|
}.merge(ticket_field_params)
|
39
40
|
|
40
41
|
data[:ticket_fields][identity] = record
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::CreateTicketForm
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :post
|
6
|
+
request_path { |_| '/ticket_forms.json' }
|
7
|
+
request_body { |r| { 'ticket_form' => r.ticket_form_params } }
|
8
|
+
|
9
|
+
def self.accepted_attributes
|
10
|
+
%w(name raw_name display_name raw_display_name position active end_user_visible default ticket_field_ids
|
11
|
+
in_all_brands restricted_brand_ids)
|
12
|
+
end
|
13
|
+
|
14
|
+
def ticket_form_params
|
15
|
+
Cistern::Hash.slice(params.fetch('ticket_form'), *self.class.accepted_attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def mock
|
19
|
+
identity = cistern.serial_id
|
20
|
+
|
21
|
+
record = {
|
22
|
+
'id' => identity,
|
23
|
+
'name' => params['name'],
|
24
|
+
'raw_name' => '',
|
25
|
+
'display_name' => '',
|
26
|
+
'raw_display_name' => '',
|
27
|
+
'position' => 9999,
|
28
|
+
'active' => true,
|
29
|
+
'end_user_visible' => true,
|
30
|
+
'default' => false,
|
31
|
+
'ticket_field_ids' => params['ticket_field_ids'],
|
32
|
+
'in_all_brands' => false,
|
33
|
+
'restricted_brand_ids' => params['restricted_brand_ids'],
|
34
|
+
'url' => url_for("/ticket_forms/#{identity}.json"),
|
35
|
+
}.merge(ticket_form_params)
|
36
|
+
|
37
|
+
data[:ticket_forms][identity] = record
|
38
|
+
|
39
|
+
mock_response('ticket_form' => record)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::DestroyBrand
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :delete
|
6
|
+
request_path { |r| "/brands/#{r.brand_id}.json" }
|
7
|
+
|
8
|
+
def brand_id
|
9
|
+
params.fetch('brand').fetch('id')
|
10
|
+
end
|
11
|
+
|
12
|
+
def mock
|
13
|
+
delete!(:brands, brand_id)
|
14
|
+
|
15
|
+
mock_response(nil)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::DestroyTicketForm
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :delete
|
6
|
+
request_path { |r| "/ticket_forms/#{r.ticket_form_id}.json" }
|
7
|
+
|
8
|
+
def ticket_form_id
|
9
|
+
params.fetch('ticket_form').fetch('id')
|
10
|
+
end
|
11
|
+
|
12
|
+
def mock
|
13
|
+
delete!(:ticket_forms, ticket_form_id)
|
14
|
+
|
15
|
+
mock_response(nil)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::GetBrand
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :get
|
6
|
+
request_path { |r| "/brands/#{r.brand_id}.json" }
|
7
|
+
|
8
|
+
def brand_id
|
9
|
+
params.fetch('brand').fetch('id').to_i
|
10
|
+
end
|
11
|
+
|
12
|
+
def mock
|
13
|
+
mock_response('brand' => find!(:brands, brand_id))
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::GetTicketForm
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :get
|
6
|
+
request_path { |r| "/ticket_forms/#{r.ticket_form_id}.json" }
|
7
|
+
|
8
|
+
def ticket_form_id
|
9
|
+
params.fetch('ticket_form').fetch('id').to_i
|
10
|
+
end
|
11
|
+
|
12
|
+
def mock
|
13
|
+
mock_response('ticket_form' => find!(:ticket_forms, ticket_form_id))
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::GetTicketForms
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :get
|
6
|
+
request_path { |_| '/ticket_forms.json' }
|
7
|
+
request_params do |r|
|
8
|
+
result = {}
|
9
|
+
result['active'] = r.active unless r.active.nil?
|
10
|
+
result['end_user_visible'] = r.end_user_visible unless r.end_user_visible.nil?
|
11
|
+
result['fallback_to_default'] = r.fallback_to_default unless r.fallback_to_default.nil?
|
12
|
+
result['associated_to_brand'] = r.associated_to_brand unless r.associated_to_brand.nil?
|
13
|
+
result
|
14
|
+
end
|
15
|
+
|
16
|
+
page_params!
|
17
|
+
|
18
|
+
def active
|
19
|
+
params['active']
|
20
|
+
end
|
21
|
+
|
22
|
+
def end_user_visible
|
23
|
+
params['end_user_visible']
|
24
|
+
end
|
25
|
+
|
26
|
+
def fallback_to_default
|
27
|
+
params['fallback_to_default']
|
28
|
+
end
|
29
|
+
|
30
|
+
def associated_to_brand
|
31
|
+
params['associated_to_brand']
|
32
|
+
end
|
33
|
+
|
34
|
+
def mock
|
35
|
+
page(:ticket_forms)
|
36
|
+
end
|
37
|
+
end
|
@@ -45,6 +45,10 @@ class Zendesk2::HelpCenter::Article
|
|
45
45
|
attribute :vote_count, type: :integer # ro:yes required:no
|
46
46
|
# @return [Integer] The total sum of votes on this article
|
47
47
|
attribute :vote_sum, type: :integer # ro:yes required:no
|
48
|
+
# @return [Integer] The id of the user segment which defines who can see this article
|
49
|
+
attribute :user_segment_id, type: :integer, default: nil # ro:no required:yes
|
50
|
+
# @return [Integer] The id of the permission group which defines who can edit and publish this article
|
51
|
+
attribute :permission_group_id, type: :integer # ro:no required:yes
|
48
52
|
|
49
53
|
assoc_accessor :section, collection: :help_center_sections
|
50
54
|
|
@@ -62,7 +66,7 @@ class Zendesk2::HelpCenter::Article
|
|
62
66
|
|
63
67
|
def save!
|
64
68
|
response = if new_record?
|
65
|
-
requires :title, :locale, :section_id
|
69
|
+
requires :title, :locale, :section_id, :permission_group_id
|
66
70
|
|
67
71
|
cistern.create_help_center_article('article' => attributes)
|
68
72
|
else
|
@@ -14,7 +14,19 @@ class Zendesk2::CreateHelpCenterArticle
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.accepted_attributes
|
17
|
-
%w(
|
17
|
+
%w(
|
18
|
+
author_id
|
19
|
+
body
|
20
|
+
comments_disabled
|
21
|
+
draft
|
22
|
+
label_names
|
23
|
+
locale
|
24
|
+
position
|
25
|
+
promoted
|
26
|
+
section_id
|
27
|
+
title user_segment_id
|
28
|
+
permission_group_id
|
29
|
+
)
|
18
30
|
end
|
19
31
|
|
20
32
|
def article_params
|
@@ -32,24 +44,26 @@ class Zendesk2::CreateHelpCenterArticle
|
|
32
44
|
position = data[:help_center_articles].values.select { |a| a['section_id'] == section_id }.size
|
33
45
|
|
34
46
|
record = {
|
35
|
-
'id'
|
36
|
-
'url'
|
37
|
-
'html_url'
|
38
|
-
'author_id'
|
39
|
-
'comments_disabled'
|
40
|
-
'label_names'
|
41
|
-
'draft'
|
42
|
-
'promoted'
|
43
|
-
'position'
|
44
|
-
'vote_sum'
|
45
|
-
'vote_count'
|
46
|
-
'section_id'
|
47
|
-
'created_at'
|
48
|
-
'updated_at'
|
49
|
-
'title'
|
50
|
-
'body'
|
51
|
-
'source_locale'
|
52
|
-
'outdated'
|
47
|
+
'id' => identity,
|
48
|
+
'url' => url_for("/help_center/#{locale}/articles/#{identity}.json"),
|
49
|
+
'html_url' => html_url_for("/hc/#{locale}/articles/#{identity}.json"),
|
50
|
+
'author_id' => cistern.current_user['id'],
|
51
|
+
'comments_disabled' => false,
|
52
|
+
'label_names' => [],
|
53
|
+
'draft' => false,
|
54
|
+
'promoted' => false,
|
55
|
+
'position' => position,
|
56
|
+
'vote_sum' => 0,
|
57
|
+
'vote_count' => 0,
|
58
|
+
'section_id' => section_id,
|
59
|
+
'created_at' => timestamp,
|
60
|
+
'updated_at' => timestamp,
|
61
|
+
'title' => '',
|
62
|
+
'body' => '',
|
63
|
+
'source_locale' => locale,
|
64
|
+
'outdated' => false,
|
65
|
+
'user_segment_id' => 0,
|
66
|
+
'permission_group_id' => 0,
|
53
67
|
}.merge(article_params)
|
54
68
|
|
55
69
|
data[:help_center_articles][identity] = record
|
data/lib/zendesk2/mock.rb
CHANGED
@@ -7,6 +7,7 @@ class Zendesk2::Mock
|
|
7
7
|
def self.data
|
8
8
|
@data ||= Hash.new do |h, k|
|
9
9
|
h[k] = {
|
10
|
+
brands: {},
|
10
11
|
categories: {},
|
11
12
|
forums: {},
|
12
13
|
groups: {},
|
@@ -24,6 +25,7 @@ class Zendesk2::Mock
|
|
24
25
|
ticket_audits: {},
|
25
26
|
ticket_comments: {},
|
26
27
|
ticket_fields: {},
|
28
|
+
ticket_forms: {},
|
27
29
|
ticket_metrics: {},
|
28
30
|
tickets: {},
|
29
31
|
topic_comments: {},
|
data/lib/zendesk2/ticket.rb
CHANGED
@@ -57,6 +57,10 @@ class Zendesk2::Ticket
|
|
57
57
|
attribute :url, type: :string
|
58
58
|
# @return [Hash] This object explains how the ticket was created
|
59
59
|
attribute :via
|
60
|
+
# @return [Integer] Enterprise only. The id of the ticket form to render for the ticket
|
61
|
+
attribute :ticket_form_id
|
62
|
+
# @return [Integer] Enterprise only. The id of the brand this ticket is associated with
|
63
|
+
attribute :brand_id
|
60
64
|
|
61
65
|
# @return [Zendesk2::Organization] organization assigned to ticket
|
62
66
|
assoc_reader :organization
|
@@ -45,6 +45,8 @@ class Zendesk2::TicketField
|
|
45
45
|
attribute :url, type: :string
|
46
46
|
# @return [Boolean] Whether this field is available to end users
|
47
47
|
attribute :visible_in_portal, type: :boolean
|
48
|
+
# @return [String] A description of the ticket field that only agents can see
|
49
|
+
attribute :agent_description, type: :string
|
48
50
|
|
49
51
|
def save!
|
50
52
|
data = if new_record?
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::TicketForm
|
3
|
+
include Zendesk2::Model
|
4
|
+
|
5
|
+
extend Zendesk2::Attributes
|
6
|
+
|
7
|
+
# @return [integer] Automatically assigned upon creation
|
8
|
+
identity :id, type: :integer
|
9
|
+
|
10
|
+
# @return [String] The name of the form
|
11
|
+
attribute :name, type: :string
|
12
|
+
# @return [String] The dynamic content placeholder, if present, or the "name" value, if not
|
13
|
+
attribute :raw_name, type: :string
|
14
|
+
# @return [String] The name of the form that is displayed to an end user
|
15
|
+
attribute :display_name, type: :string
|
16
|
+
# @return [String] The dynamic content placeholder, if present, or the "display_name" value, if not
|
17
|
+
attribute :raw_display_name, type: :string
|
18
|
+
# @return [Integer] The position of this form among other forms in the account, i.e. dropdown
|
19
|
+
attribute :position, type: :integer
|
20
|
+
# @return [Boolean] If the form is set as active
|
21
|
+
attribute :active, type: :boolean
|
22
|
+
# @return [Boolean] Is the form visible to the end user
|
23
|
+
attribute :end_user_visible, type: :boolean
|
24
|
+
# @return [Boolean] Is the form the default form for this account
|
25
|
+
attribute :default, type: :boolean
|
26
|
+
# @return [Array] ids of all ticket fields which are in this ticket form
|
27
|
+
attribute :ticket_field_ids, type: :array
|
28
|
+
# @return [Boolean] Is the form available for use in all brands on this account
|
29
|
+
attribute :in_all_brands, type: :boolean
|
30
|
+
# @return [Array] ids of all brands that this ticket form is restricted to
|
31
|
+
attribute :restricted_brand_ids, type: :array
|
32
|
+
|
33
|
+
def save!
|
34
|
+
data = if new_record?
|
35
|
+
requires :name
|
36
|
+
|
37
|
+
cistern.create_ticket_form('ticket_form' => attributes)
|
38
|
+
else
|
39
|
+
requires :identity
|
40
|
+
|
41
|
+
cistern.update_ticket_form('ticket_form' => attributes)
|
42
|
+
end.body['ticket_form']
|
43
|
+
|
44
|
+
merge_attributes(data)
|
45
|
+
end
|
46
|
+
|
47
|
+
def destroy!
|
48
|
+
requires :identity
|
49
|
+
|
50
|
+
cistern.destroy_ticket_form('ticket_form' => { 'id' => identity })
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::TicketForms
|
3
|
+
include Zendesk2::Collection
|
4
|
+
|
5
|
+
include Zendesk2::Searchable
|
6
|
+
|
7
|
+
model Zendesk2::TicketForm
|
8
|
+
|
9
|
+
attribute :count, type: :integer
|
10
|
+
|
11
|
+
self.collection_method = :get_ticket_forms
|
12
|
+
self.collection_root = 'ticket_forms'
|
13
|
+
self.model_method = :get_ticket_form
|
14
|
+
self.model_root = 'ticket_form'
|
15
|
+
self.search_type = 'ticket_form'
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::UpdateBrand
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :put
|
6
|
+
request_path { |r| "/brands/#{r.brand_id}.json" }
|
7
|
+
request_body { |r| { 'brand' => r.brand_params } }
|
8
|
+
|
9
|
+
def brand_id
|
10
|
+
params.fetch('brand').fetch('id')
|
11
|
+
end
|
12
|
+
|
13
|
+
def brand_params
|
14
|
+
Cistern::Hash.slice(params.fetch('brand'), *Zendesk2::CreateTicketForm.accepted_attributes)
|
15
|
+
end
|
16
|
+
|
17
|
+
def mock
|
18
|
+
mock_response('brand' => find!(:brands, brand_id).merge!(brand_params))
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Zendesk2::UpdateTicketForm
|
3
|
+
include Zendesk2::Request
|
4
|
+
|
5
|
+
request_method :put
|
6
|
+
request_path { |r| "/ticket_forms/#{r.ticket_form_id}.json" }
|
7
|
+
request_body { |r| { 'ticket_form' => r.ticket_form_params } }
|
8
|
+
|
9
|
+
def ticket_form_id
|
10
|
+
params.fetch('ticket_form').fetch('id')
|
11
|
+
end
|
12
|
+
|
13
|
+
def ticket_form_params
|
14
|
+
Cistern::Hash.slice(params.fetch('ticket_form'), *Zendesk2::CreateTicketForm.accepted_attributes)
|
15
|
+
end
|
16
|
+
|
17
|
+
def mock
|
18
|
+
mock_response('ticket_form' => find!(:ticket_forms, ticket_form_id).merge!(ticket_form_params))
|
19
|
+
end
|
20
|
+
end
|
data/lib/zendesk2/version.rb
CHANGED
data/spec/brands_spec.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe 'brands' do
|
5
|
+
let(:client) { create_client }
|
6
|
+
|
7
|
+
include_examples 'zendesk#resource', collection: -> { client.brands },
|
8
|
+
create_params: -> { { name: mock_uuid } },
|
9
|
+
update_params: -> { { name: mock_uuid } },
|
10
|
+
paged: false,
|
11
|
+
search: false
|
12
|
+
end
|
@@ -13,7 +13,8 @@ describe 'help_center/articles' do
|
|
13
13
|
|
14
14
|
include_examples 'zendesk#resource',
|
15
15
|
collection: -> { client.help_center_articles },
|
16
|
-
create_params:
|
16
|
+
create_params:
|
17
|
+
-> { { title: mock_uuid, locale: 'en-us', section: section, permission_group_id: 0 } },
|
17
18
|
update_params: -> { { title: mock_uuid } },
|
18
19
|
search_params: -> { Cistern::Hash.slice(create_params, :title) },
|
19
20
|
search: true
|
@@ -13,11 +13,14 @@ describe 'help_center/categories' do
|
|
13
13
|
context 'with a category, sections, and articles' do
|
14
14
|
let!(:category) { client.help_center_categories.create!(name: mock_uuid, locale: 'en-us') }
|
15
15
|
let!(:section) { category.sections.create!(name: mock_uuid, locale: 'en-us') }
|
16
|
-
let!(:articles)
|
16
|
+
let!(:articles) do
|
17
|
+
Array.new(2) { section.articles.create(title: mock_uuid, locale: 'en-us', permission_group_id: 0) }
|
18
|
+
end
|
17
19
|
|
18
20
|
before do
|
19
21
|
client.help_center_categories.create!(name: mock_uuid, locale: 'en-us')
|
20
|
-
.sections.create!(name: mock_uuid, locale: 'en-us')
|
22
|
+
.sections.create!(name: mock_uuid, locale: 'en-us')
|
23
|
+
.articles.create!(title: mock_uuid, locale: 'en-us', permission_group_id: 0)
|
21
24
|
end
|
22
25
|
|
23
26
|
it 'lists sections within a category' do
|
@@ -18,11 +18,14 @@ describe 'help_center/sections' do
|
|
18
18
|
|
19
19
|
context 'with a category, sections, and articles' do
|
20
20
|
let!(:section) { category.sections.create!(name: mock_uuid, locale: 'en-us') }
|
21
|
-
let!(:articles)
|
21
|
+
let!(:articles) do
|
22
|
+
Array.new(2) { section.articles.create(title: mock_uuid, locale: 'en-us', permission_group_id: 0) }
|
23
|
+
end
|
22
24
|
|
23
25
|
before do
|
24
26
|
client.help_center_categories.create!(name: mock_uuid, locale: 'en-us')
|
25
|
-
.sections.create!(name: mock_uuid, locale: 'en-us')
|
27
|
+
.sections.create!(name: mock_uuid, locale: 'en-us')
|
28
|
+
.articles.create!(title: mock_uuid, locale: 'en-us', permission_group_id: 0)
|
26
29
|
end
|
27
30
|
|
28
31
|
it 'lists articles within a section' do
|
@@ -29,7 +29,9 @@ describe 'help_center/translations' do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
describe 'by article' do
|
32
|
-
let!(:article)
|
32
|
+
let!(:article) do
|
33
|
+
client.help_center_articles.create!(title: mock_uuid, locale: 'en-us', section: section, permission_group_id: 0)
|
34
|
+
end
|
33
35
|
|
34
36
|
include_examples 'zendesk#resource',
|
35
37
|
collection: -> { article.translations },
|
data/spec/ticket_fields_spec.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe 'ticket_forms' do
|
5
|
+
let(:client) { create_client }
|
6
|
+
|
7
|
+
include_examples 'zendesk#resource', collection: -> { client.ticket_forms },
|
8
|
+
create_params: -> { { name: mock_uuid } },
|
9
|
+
update_params: -> { { name: mock_uuid } },
|
10
|
+
paged: false
|
11
|
+
end
|
data/spec/tickets_spec.rb
CHANGED
@@ -122,6 +122,22 @@ describe 'Zendesk2' do
|
|
122
122
|
expect(ticket.priority).to eq('urgent')
|
123
123
|
expect(client.tickets.get!(ticket.id).priority).to eq(priority)
|
124
124
|
end
|
125
|
+
|
126
|
+
it 'should set ticket_form_id' do
|
127
|
+
ticket_form_id = 42
|
128
|
+
|
129
|
+
ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, ticket_form_id: ticket_form_id)
|
130
|
+
|
131
|
+
expect(ticket.ticket_form_id).to eq(42)
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should set brand_id' do
|
135
|
+
brand_id = 42
|
136
|
+
|
137
|
+
ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, brand_id: brand_id)
|
138
|
+
|
139
|
+
expect(ticket.brand_id).to eq(42)
|
140
|
+
end
|
125
141
|
end
|
126
142
|
|
127
143
|
describe 'with a created ticket' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cistern
|
@@ -106,10 +106,13 @@ files:
|
|
106
106
|
- lib/zendesk2.rb
|
107
107
|
- lib/zendesk2/attributes.rb
|
108
108
|
- lib/zendesk2/audit_event.rb
|
109
|
+
- lib/zendesk2/brand.rb
|
110
|
+
- lib/zendesk2/brands.rb
|
109
111
|
- lib/zendesk2/categories.rb
|
110
112
|
- lib/zendesk2/category.rb
|
111
113
|
- lib/zendesk2/client.rb
|
112
114
|
- lib/zendesk2/collection.rb
|
115
|
+
- lib/zendesk2/create_brand.rb
|
113
116
|
- lib/zendesk2/create_category.rb
|
114
117
|
- lib/zendesk2/create_forum.rb
|
115
118
|
- lib/zendesk2/create_group.rb
|
@@ -117,12 +120,14 @@ files:
|
|
117
120
|
- lib/zendesk2/create_organization.rb
|
118
121
|
- lib/zendesk2/create_ticket.rb
|
119
122
|
- lib/zendesk2/create_ticket_field.rb
|
123
|
+
- lib/zendesk2/create_ticket_form.rb
|
120
124
|
- lib/zendesk2/create_topic.rb
|
121
125
|
- lib/zendesk2/create_topic_comment.rb
|
122
126
|
- lib/zendesk2/create_user.rb
|
123
127
|
- lib/zendesk2/create_user_field.rb
|
124
128
|
- lib/zendesk2/create_user_identity.rb
|
125
129
|
- lib/zendesk2/create_view.rb
|
130
|
+
- lib/zendesk2/destroy_brand.rb
|
126
131
|
- lib/zendesk2/destroy_category.rb
|
127
132
|
- lib/zendesk2/destroy_forum.rb
|
128
133
|
- lib/zendesk2/destroy_group.rb
|
@@ -130,6 +135,7 @@ files:
|
|
130
135
|
- lib/zendesk2/destroy_organization.rb
|
131
136
|
- lib/zendesk2/destroy_ticket.rb
|
132
137
|
- lib/zendesk2/destroy_ticket_field.rb
|
138
|
+
- lib/zendesk2/destroy_ticket_form.rb
|
133
139
|
- lib/zendesk2/destroy_topic.rb
|
134
140
|
- lib/zendesk2/destroy_topic_comment.rb
|
135
141
|
- lib/zendesk2/destroy_user.rb
|
@@ -140,6 +146,8 @@ files:
|
|
140
146
|
- lib/zendesk2/forum.rb
|
141
147
|
- lib/zendesk2/forums.rb
|
142
148
|
- lib/zendesk2/get_assignable_groups.rb
|
149
|
+
- lib/zendesk2/get_brand.rb
|
150
|
+
- lib/zendesk2/get_brands.rb
|
143
151
|
- lib/zendesk2/get_categories.rb
|
144
152
|
- lib/zendesk2/get_category.rb
|
145
153
|
- lib/zendesk2/get_ccd_tickets.rb
|
@@ -163,6 +171,8 @@ files:
|
|
163
171
|
- lib/zendesk2/get_ticket_comments.rb
|
164
172
|
- lib/zendesk2/get_ticket_field.rb
|
165
173
|
- lib/zendesk2/get_ticket_fields.rb
|
174
|
+
- lib/zendesk2/get_ticket_form.rb
|
175
|
+
- lib/zendesk2/get_ticket_forms.rb
|
166
176
|
- lib/zendesk2/get_ticket_metric.rb
|
167
177
|
- lib/zendesk2/get_ticket_metrics.rb
|
168
178
|
- lib/zendesk2/get_tickets.rb
|
@@ -270,6 +280,8 @@ files:
|
|
270
280
|
- lib/zendesk2/ticket_create.rb
|
271
281
|
- lib/zendesk2/ticket_field.rb
|
272
282
|
- lib/zendesk2/ticket_fields.rb
|
283
|
+
- lib/zendesk2/ticket_form.rb
|
284
|
+
- lib/zendesk2/ticket_forms.rb
|
273
285
|
- lib/zendesk2/ticket_metric.rb
|
274
286
|
- lib/zendesk2/ticket_metrics.rb
|
275
287
|
- lib/zendesk2/ticket_notification.rb
|
@@ -279,6 +291,7 @@ files:
|
|
279
291
|
- lib/zendesk2/topic_comment.rb
|
280
292
|
- lib/zendesk2/topic_comments.rb
|
281
293
|
- lib/zendesk2/topics.rb
|
294
|
+
- lib/zendesk2/update_brand.rb
|
282
295
|
- lib/zendesk2/update_category.rb
|
283
296
|
- lib/zendesk2/update_forum.rb
|
284
297
|
- lib/zendesk2/update_group.rb
|
@@ -286,6 +299,7 @@ files:
|
|
286
299
|
- lib/zendesk2/update_request.rb
|
287
300
|
- lib/zendesk2/update_ticket.rb
|
288
301
|
- lib/zendesk2/update_ticket_field.rb
|
302
|
+
- lib/zendesk2/update_ticket_form.rb
|
289
303
|
- lib/zendesk2/update_topic.rb
|
290
304
|
- lib/zendesk2/update_user.rb
|
291
305
|
- lib/zendesk2/update_user_field.rb
|
@@ -300,6 +314,7 @@ files:
|
|
300
314
|
- lib/zendesk2/version.rb
|
301
315
|
- lib/zendesk2/view.rb
|
302
316
|
- lib/zendesk2/views.rb
|
317
|
+
- spec/brands_spec.rb
|
303
318
|
- spec/categories_spec.rb
|
304
319
|
- spec/client_spec.rb
|
305
320
|
- spec/forums_spec.rb
|
@@ -320,6 +335,7 @@ files:
|
|
320
335
|
- spec/support/client_helper.rb
|
321
336
|
- spec/support/data_helper.rb
|
322
337
|
- spec/ticket_fields_spec.rb
|
338
|
+
- spec/ticket_forms_spec.rb
|
323
339
|
- spec/tickets_spec.rb
|
324
340
|
- spec/topic_comments_spec.rb
|
325
341
|
- spec/topics_spec.rb
|
@@ -348,12 +364,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
348
364
|
- !ruby/object:Gem::Version
|
349
365
|
version: '0'
|
350
366
|
requirements: []
|
351
|
-
|
352
|
-
rubygems_version: 2.5.1
|
367
|
+
rubygems_version: 3.0.1
|
353
368
|
signing_key:
|
354
369
|
specification_version: 4
|
355
370
|
summary: Zendesk V2 API client
|
356
371
|
test_files:
|
372
|
+
- spec/brands_spec.rb
|
357
373
|
- spec/categories_spec.rb
|
358
374
|
- spec/client_spec.rb
|
359
375
|
- spec/forums_spec.rb
|
@@ -374,6 +390,7 @@ test_files:
|
|
374
390
|
- spec/support/client_helper.rb
|
375
391
|
- spec/support/data_helper.rb
|
376
392
|
- spec/ticket_fields_spec.rb
|
393
|
+
- spec/ticket_forms_spec.rb
|
377
394
|
- spec/tickets_spec.rb
|
378
395
|
- spec/topic_comments_spec.rb
|
379
396
|
- spec/topics_spec.rb
|
@@ -382,4 +399,3 @@ test_files:
|
|
382
399
|
- spec/users_spec.rb
|
383
400
|
- spec/views_spec.rb
|
384
401
|
- spec/zendesk2_spec.rb
|
385
|
-
has_rdoc:
|