zendesk2 1.11.0 → 1.12.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +2 -3
- data/Gemfile +1 -3
- data/README.md +2 -0
- data/lib/zendesk2.rb +1 -1
- data/lib/zendesk2/client.rb +11 -11
- data/lib/zendesk2/create_category.rb +2 -2
- data/lib/zendesk2/create_forum.rb +2 -2
- data/lib/zendesk2/create_group.rb +2 -2
- data/lib/zendesk2/create_organization.rb +2 -2
- data/lib/zendesk2/create_ticket.rb +36 -9
- data/lib/zendesk2/create_ticket_field.rb +2 -2
- data/lib/zendesk2/create_topic.rb +2 -2
- data/lib/zendesk2/create_topic_comment.rb +2 -2
- data/lib/zendesk2/create_user.rb +4 -4
- data/lib/zendesk2/create_user_field.rb +2 -2
- data/lib/zendesk2/create_user_identity.rb +2 -2
- data/lib/zendesk2/create_view.rb +2 -2
- data/lib/zendesk2/get_view_tickets.rb +2 -2
- data/lib/zendesk2/help_center/create_help_center_article.rb +2 -2
- data/lib/zendesk2/help_center/create_help_center_category.rb +2 -2
- data/lib/zendesk2/help_center/create_help_center_post.rb +2 -2
- data/lib/zendesk2/help_center/create_help_center_section.rb +2 -2
- data/lib/zendesk2/help_center/create_help_center_subscription.rb +2 -3
- data/lib/zendesk2/help_center/create_help_center_topic.rb +2 -2
- data/lib/zendesk2/help_center/create_help_center_translation.rb +2 -2
- data/lib/zendesk2/help_center/destroy_help_center_article.rb +3 -1
- data/lib/zendesk2/help_center/search_help_center_articles.rb +2 -9
- data/lib/zendesk2/help_center/subscription_request.rb +0 -1
- data/lib/zendesk2/help_center/update_help_center_subscription.rb +1 -1
- data/lib/zendesk2/mock.rb +1 -0
- data/lib/zendesk2/organizations.rb +6 -5
- data/lib/zendesk2/paged_collection.rb +10 -10
- data/lib/zendesk2/request.rb +7 -10
- data/lib/zendesk2/search.rb +2 -9
- data/lib/zendesk2/search_organization.rb +2 -9
- data/lib/zendesk2/search_user.rb +2 -9
- data/lib/zendesk2/searchable.rb +6 -6
- data/lib/zendesk2/ticket.rb +20 -11
- data/lib/zendesk2/update_user.rb +2 -2
- data/lib/zendesk2/update_view.rb +1 -1
- data/lib/zendesk2/version.rb +1 -1
- data/spec/tickets_spec.rb +41 -0
- data/zendesk2.gemspec +1 -0
- metadata +22 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a61d3d90ed074ac942698a76c6032da01d98dc49
|
|
4
|
+
data.tar.gz: c7c9d087bc7d353345a15e02455b679c745d3a91
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 68410198ef99c316d62bb865a3f2d29e9975848972ee8b706d37bd0acb84ba547209efecbff793afdee1d85edccda4fdfc93f0a069675f0a5968472c922b6cd1
|
|
7
|
+
data.tar.gz: bf5cc95b1b2e4dc8e616112aabc0ade9419a1b68ef1223ff136209f470b3f1b0e986dc2c154fa69f898a73347eee04f17728a3d89a43f63999ab6a0c7f357b1c
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
## [
|
|
4
|
-
|
|
5
|
-
[Full Changelog](https://github.com/lanej/zendesk2/compare/v1.10.0...HEAD)
|
|
3
|
+
## [v1.11.0](https://github.com/lanej/zendesk2/tree/v1.11.0) (2016-07-05)
|
|
4
|
+
[Full Changelog](https://github.com/lanej/zendesk2/compare/v1.10.0...v1.11.0)
|
|
6
5
|
|
|
7
6
|
**Implemented enhancements:**
|
|
8
7
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Zendesk2
|
|
2
2
|
|
|
3
|
+
[](https://gitter.im/lanej/zendesk2?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
4
|
+
|
|
3
5
|
[](http://travis-ci.org/lanej/zendesk2)
|
|
4
6
|
[](http://badge.fury.io/rb/zendesk2)
|
|
5
7
|
[](https://codeclimate.com/github/lanej/zendesk2)
|
data/lib/zendesk2.rb
CHANGED
|
@@ -19,7 +19,7 @@ require 'securerandom'
|
|
|
19
19
|
module Zendesk2
|
|
20
20
|
include Cistern::Client.with(interface: :module)
|
|
21
21
|
|
|
22
|
-
USER_AGENT = <<-UA
|
|
22
|
+
USER_AGENT = <<-UA.freeze
|
|
23
23
|
Ruby/#{RUBY_VERSION} (#{RUBY_PLATFORM}; #{RUBY_ENGINE}) Zendesk2/#{Zendesk2::VERSION} Faraday/#{Faraday::VERSION}
|
|
24
24
|
UA
|
|
25
25
|
|
data/lib/zendesk2/client.rb
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
# @deprecated use {#Zendesk2}
|
|
3
3
|
module Zendesk2::Client
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if Zendesk2.respond_to?(message)
|
|
8
|
-
Zendesk2.public_send(message, *args, &block)
|
|
9
|
-
else
|
|
10
|
-
super
|
|
4
|
+
class << self
|
|
5
|
+
def respond_to_missing?(method, *)
|
|
6
|
+
Zendesk2.respond_to?(method) || super
|
|
11
7
|
end
|
|
12
|
-
end
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
def method_missing(message, *args, &block)
|
|
10
|
+
Cistern.deprecation('Zendesk2::Client is deprecated, use Zendesk2', caller[1])
|
|
16
11
|
|
|
17
|
-
|
|
12
|
+
if Zendesk2.respond_to?(message)
|
|
13
|
+
Zendesk2.public_send(message, *args, &block)
|
|
14
|
+
else
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -16,8 +16,8 @@ class Zendesk2::CreateCategory
|
|
|
16
16
|
record = {
|
|
17
17
|
'id' => identity,
|
|
18
18
|
'url' => url_for("/categories/#{identity}.json"),
|
|
19
|
-
'created_at' =>
|
|
20
|
-
'updated_at' =>
|
|
19
|
+
'created_at' => timestamp,
|
|
20
|
+
'updated_at' => timestamp,
|
|
21
21
|
}.merge(Cistern::Hash.slice(params.fetch('category'), *self.class.accepted_attributes))
|
|
22
22
|
|
|
23
23
|
cistern.data[:categories][identity] = record
|
|
@@ -20,8 +20,8 @@ class Zendesk2::CreateForum
|
|
|
20
20
|
record = {
|
|
21
21
|
'id' => identity,
|
|
22
22
|
'url' => url_for("/forums/#{identity}.json"),
|
|
23
|
-
'created_at' =>
|
|
24
|
-
'updated_at' =>
|
|
23
|
+
'created_at' => timestamp,
|
|
24
|
+
'updated_at' => timestamp,
|
|
25
25
|
}.merge(Cistern::Hash.slice(params.fetch('forum'), *self.class.accepted_attributes))
|
|
26
26
|
|
|
27
27
|
cistern.data[:forums][identity] = record
|
|
@@ -20,8 +20,8 @@ class Zendesk2::CreateGroup
|
|
|
20
20
|
record = {
|
|
21
21
|
'id' => identity,
|
|
22
22
|
'url' => url_for("/groups/#{identity}.json"),
|
|
23
|
-
'created_at' =>
|
|
24
|
-
'updated_at' =>
|
|
23
|
+
'created_at' => timestamp,
|
|
24
|
+
'updated_at' => timestamp,
|
|
25
25
|
'deleted' => false,
|
|
26
26
|
}.merge(group_params)
|
|
27
27
|
|
|
@@ -20,8 +20,8 @@ class Zendesk2::CreateOrganization
|
|
|
20
20
|
record = {
|
|
21
21
|
'id' => identity,
|
|
22
22
|
'url' => url_for("/organizations/#{identity}.json"),
|
|
23
|
-
'created_at' =>
|
|
24
|
-
'updated_at' =>
|
|
23
|
+
'created_at' => timestamp,
|
|
24
|
+
'updated_at' => timestamp,
|
|
25
25
|
}.merge(organization_params)
|
|
26
26
|
|
|
27
27
|
unless record['name']
|
|
@@ -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 tags)
|
|
11
|
+
custom_fields recipient status collaborator_ids collaborators tags)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def ticket_params
|
|
@@ -24,6 +24,7 @@ class Zendesk2::CreateTicket
|
|
|
24
24
|
requester_id = create_params.delete('requester_id')
|
|
25
25
|
|
|
26
26
|
set_requester(create_params.delete('requester'), create_params)
|
|
27
|
+
set_collaborators(create_params)
|
|
27
28
|
custom_fields = get_custom_fields(create_params.delete('custom_fields') || [])
|
|
28
29
|
|
|
29
30
|
identity = cistern.serial_id
|
|
@@ -31,10 +32,9 @@ class Zendesk2::CreateTicket
|
|
|
31
32
|
record = {
|
|
32
33
|
'id' => identity,
|
|
33
34
|
'url' => url_for("/tickets/#{identity}.json"),
|
|
34
|
-
'created_at' =>
|
|
35
|
-
'updated_at' =>
|
|
35
|
+
'created_at' => timestamp,
|
|
36
|
+
'updated_at' => timestamp,
|
|
36
37
|
'priority' => nil,
|
|
37
|
-
'collaborator_ids' => [],
|
|
38
38
|
'custom_fields' => custom_fields,
|
|
39
39
|
}.merge(create_params)
|
|
40
40
|
|
|
@@ -64,11 +64,7 @@ class Zendesk2::CreateTicket
|
|
|
64
64
|
],
|
|
65
65
|
})
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
user_id = (known_user && known_user.identity) || cistern.create_user('user' => requester).body['user']['id']
|
|
70
|
-
|
|
71
|
-
create_params['requester_id'] = user_id.to_i
|
|
67
|
+
create_params['requester_id'] = find_or_create_user(requester)
|
|
72
68
|
end
|
|
73
69
|
|
|
74
70
|
def get_custom_fields(requested_custom_fields)
|
|
@@ -87,4 +83,35 @@ class Zendesk2::CreateTicket
|
|
|
87
83
|
|
|
88
84
|
custom_fields
|
|
89
85
|
end
|
|
86
|
+
|
|
87
|
+
# rubocop:disable Style/AccessorMethodName
|
|
88
|
+
def set_collaborators(create_params)
|
|
89
|
+
ids = create_params.delete('collaborator_ids') || []
|
|
90
|
+
collaborator_specs = create_params.delete('collaborators') || []
|
|
91
|
+
|
|
92
|
+
ids += collaborator_specs.map do |spec|
|
|
93
|
+
case spec
|
|
94
|
+
when Hash
|
|
95
|
+
find_or_create_user(spec)
|
|
96
|
+
when Integer, String
|
|
97
|
+
cistern.users.get!(spec).identity
|
|
98
|
+
else
|
|
99
|
+
raise ArgumentError, "Unprocessable collaborator: #{spec}"
|
|
100
|
+
end
|
|
101
|
+
end.compact
|
|
102
|
+
|
|
103
|
+
create_params.merge!('collaborator_ids' => ids)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def find_or_create_user(user)
|
|
107
|
+
return nil unless user['email']
|
|
108
|
+
user['name'] ||= user['email'].split('@').first.capitalize
|
|
109
|
+
|
|
110
|
+
known_user = cistern.users.search(email: user['email']).first
|
|
111
|
+
|
|
112
|
+
user_id = (known_user && known_user.identity) ||
|
|
113
|
+
cistern.create_user('user' => user).body['user']['id']
|
|
114
|
+
|
|
115
|
+
user_id.to_i
|
|
116
|
+
end
|
|
90
117
|
end
|
|
@@ -21,7 +21,7 @@ class Zendesk2::CreateTicketField
|
|
|
21
21
|
record = {
|
|
22
22
|
'active' => true,
|
|
23
23
|
'collapsed_for_agents' => false,
|
|
24
|
-
'created_at' =>
|
|
24
|
+
'created_at' => timestamp,
|
|
25
25
|
'description' => params['title'],
|
|
26
26
|
'editable_in_portal' => false,
|
|
27
27
|
'id' => identity,
|
|
@@ -32,7 +32,7 @@ class Zendesk2::CreateTicketField
|
|
|
32
32
|
'required_in_portal' => false,
|
|
33
33
|
'tag' => '',
|
|
34
34
|
'title_in_portal' => params['title'],
|
|
35
|
-
'updated_at' =>
|
|
35
|
+
'updated_at' => timestamp,
|
|
36
36
|
'url' => url_for("/ticket_fields/#{identity}.json"),
|
|
37
37
|
'visible_in_portal' => false,
|
|
38
38
|
}.merge(ticket_field_params)
|
|
@@ -20,8 +20,8 @@ class Zendesk2::CreateTopic
|
|
|
20
20
|
record = {
|
|
21
21
|
'id' => identity,
|
|
22
22
|
'url' => url_for("/topics/#{identity}.json"),
|
|
23
|
-
'created_at' =>
|
|
24
|
-
'updated_at' =>
|
|
23
|
+
'created_at' => timestamp,
|
|
24
|
+
'updated_at' => timestamp,
|
|
25
25
|
}.merge(topic_params)
|
|
26
26
|
|
|
27
27
|
data[:topics][identity] = record
|
|
@@ -24,8 +24,8 @@ class Zendesk2::CreateTopicComment
|
|
|
24
24
|
record = {
|
|
25
25
|
'id' => identity,
|
|
26
26
|
'url' => url_for("/topics/#{topic_id}/comments/#{identity}.json"),
|
|
27
|
-
'created_at' =>
|
|
28
|
-
'updated_at' =>
|
|
27
|
+
'created_at' => timestamp,
|
|
28
|
+
'updated_at' => timestamp,
|
|
29
29
|
'topic_id' => topic_id,
|
|
30
30
|
}.merge(topic_comment_params)
|
|
31
31
|
|
data/lib/zendesk2/create_user.rb
CHANGED
|
@@ -25,8 +25,8 @@ class Zendesk2::CreateUser
|
|
|
25
25
|
record = {
|
|
26
26
|
'id' => user_id,
|
|
27
27
|
'url' => url_for("/users/#{user_id}.json"),
|
|
28
|
-
'created_at' =>
|
|
29
|
-
'updated_at' =>
|
|
28
|
+
'created_at' => timestamp,
|
|
29
|
+
'updated_at' => timestamp,
|
|
30
30
|
'role' => 'end-user',
|
|
31
31
|
'active' => true,
|
|
32
32
|
}.merge(user_params)
|
|
@@ -58,8 +58,8 @@ class Zendesk2::CreateUser
|
|
|
58
58
|
user_identity = {
|
|
59
59
|
'id' => user_identity_id,
|
|
60
60
|
'url' => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
|
|
61
|
-
'created_at' =>
|
|
62
|
-
'updated_at' =>
|
|
61
|
+
'created_at' => timestamp,
|
|
62
|
+
'updated_at' => timestamp,
|
|
63
63
|
'type' => 'email',
|
|
64
64
|
'value' => record['email'],
|
|
65
65
|
'verified' => false,
|
|
@@ -20,7 +20,7 @@ class Zendesk2::CreateUserField
|
|
|
20
20
|
record = {
|
|
21
21
|
'active' => true,
|
|
22
22
|
'collapsed_for_agents' => false,
|
|
23
|
-
'created_at' =>
|
|
23
|
+
'created_at' => timestamp,
|
|
24
24
|
'description' => params['title'],
|
|
25
25
|
'editable_in_portal' => false,
|
|
26
26
|
'id' => identity,
|
|
@@ -31,7 +31,7 @@ class Zendesk2::CreateUserField
|
|
|
31
31
|
'required_in_portal' => false,
|
|
32
32
|
'tag' => '',
|
|
33
33
|
'title_in_portal' => params['title'],
|
|
34
|
-
'updated_at' =>
|
|
34
|
+
'updated_at' => timestamp,
|
|
35
35
|
'url' => url_for("/user_fields/#{identity}.json"),
|
|
36
36
|
'visible_in_portal' => false,
|
|
37
37
|
}.merge(user_field_params)
|
|
@@ -24,8 +24,8 @@ class Zendesk2::CreateUserIdentity
|
|
|
24
24
|
record = {
|
|
25
25
|
'id' => identity,
|
|
26
26
|
'url' => url_for("/user/#{user_id}/identities/#{identity}.json"),
|
|
27
|
-
'created_at' =>
|
|
28
|
-
'updated_at' =>
|
|
27
|
+
'created_at' => timestamp,
|
|
28
|
+
'updated_at' => timestamp,
|
|
29
29
|
'verified' => false,
|
|
30
30
|
'primary' => false,
|
|
31
31
|
'user_id' => user_id,
|
data/lib/zendesk2/create_view.rb
CHANGED
|
@@ -63,8 +63,8 @@ class Zendesk2::CreateView
|
|
|
63
63
|
record = {
|
|
64
64
|
'id' => identity,
|
|
65
65
|
'url' => url_for("/views/#{identity}.json"),
|
|
66
|
-
'created_at' =>
|
|
67
|
-
'updated_at' =>
|
|
66
|
+
'created_at' => timestamp,
|
|
67
|
+
'updated_at' => timestamp,
|
|
68
68
|
'active' => true,
|
|
69
69
|
'execution' => {
|
|
70
70
|
'columns' => columns,
|
|
@@ -15,7 +15,7 @@ class Zendesk2::GetViewTickets
|
|
|
15
15
|
view = find!(:views, view_id)
|
|
16
16
|
|
|
17
17
|
operators = Array(view['conditions']['all']).map do |c|
|
|
18
|
-
operator =
|
|
18
|
+
operator = 'is' == c.fetch('operator') ? :eql? : :!=
|
|
19
19
|
key = c.fetch('field')
|
|
20
20
|
value = c.fetch('value').to_s
|
|
21
21
|
|
|
@@ -27,7 +27,7 @@ class Zendesk2::GetViewTickets
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
any_operators = Array(view['conditions']['any']).map do |c|
|
|
30
|
-
operator =
|
|
30
|
+
operator = 'is' == c.fetch('operator') ? :eql? : :!=
|
|
31
31
|
key = c.fetch('field')
|
|
32
32
|
value = c.fetch('value').to_s
|
|
33
33
|
|
|
@@ -44,8 +44,8 @@ class Zendesk2::CreateHelpCenterArticle
|
|
|
44
44
|
'vote_sum' => 0,
|
|
45
45
|
'vote_count' => 0,
|
|
46
46
|
'section_id' => section_id,
|
|
47
|
-
'created_at' =>
|
|
48
|
-
'updated_at' =>
|
|
47
|
+
'created_at' => timestamp,
|
|
48
|
+
'updated_at' => timestamp,
|
|
49
49
|
'title' => '',
|
|
50
50
|
'body' => '',
|
|
51
51
|
'source_locale' => locale,
|
|
@@ -26,8 +26,8 @@ class Zendesk2::CreateHelpCenterCategory
|
|
|
26
26
|
'html_url' => html_url_for("/hc/#{locale}/categories/#{identity}.json"),
|
|
27
27
|
'author_id' => cistern.current_user['id'],
|
|
28
28
|
'position' => position,
|
|
29
|
-
'created_at' =>
|
|
30
|
-
'updated_at' =>
|
|
29
|
+
'created_at' => timestamp,
|
|
30
|
+
'updated_at' => timestamp,
|
|
31
31
|
'description' => '',
|
|
32
32
|
}.merge(category_params)
|
|
33
33
|
|
|
@@ -21,8 +21,8 @@ class Zendesk2::CreateHelpCenterPost
|
|
|
21
21
|
'id' => identity,
|
|
22
22
|
'url' => url_for("/community/posts/#{identity}.json"),
|
|
23
23
|
'html_url' => html_url_for("/hc/posts/#{identity}.json"),
|
|
24
|
-
'created_at' =>
|
|
25
|
-
'updated_at' =>
|
|
24
|
+
'created_at' => timestamp,
|
|
25
|
+
'updated_at' => timestamp,
|
|
26
26
|
'vote_count' => 0,
|
|
27
27
|
'vote_sum' => 0,
|
|
28
28
|
'comment_count' => 0,
|
|
@@ -37,8 +37,8 @@ class Zendesk2::CreateHelpCenterSection
|
|
|
37
37
|
'vote_sum' => 0,
|
|
38
38
|
'vote_count' => 0,
|
|
39
39
|
'category_id' => category_id,
|
|
40
|
-
'created_at' =>
|
|
41
|
-
'updated_at' =>
|
|
40
|
+
'created_at' => timestamp,
|
|
41
|
+
'updated_at' => timestamp,
|
|
42
42
|
'name' => '',
|
|
43
43
|
'body' => '',
|
|
44
44
|
'source_locale' => locale,
|
|
@@ -28,12 +28,11 @@ class Zendesk2::CreateHelpCenterSubscription
|
|
|
28
28
|
mock_response('Required parameter missing: subscription', status: 400)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
|
|
32
31
|
record = subscription_params.merge(
|
|
33
32
|
'id' => identity,
|
|
34
33
|
'url' => url,
|
|
35
|
-
'created_at' =>
|
|
36
|
-
'updated_at' =>
|
|
34
|
+
'created_at' => timestamp, # @todo create #timestamp helper
|
|
35
|
+
'updated_at' => timestamp,
|
|
37
36
|
'content_id' => content_id,
|
|
38
37
|
'content_type' => content_type,
|
|
39
38
|
)
|
|
@@ -24,8 +24,8 @@ class Zendesk2::CreateHelpCenterTopic
|
|
|
24
24
|
'url' => url_for("/communit/topics/#{identity}.json"),
|
|
25
25
|
'html_url' => html_url_for("/hc/topics/#{identity}.json"),
|
|
26
26
|
'position' => position,
|
|
27
|
-
'created_at' =>
|
|
28
|
-
'updated_at' =>
|
|
27
|
+
'created_at' => timestamp,
|
|
28
|
+
'updated_at' => timestamp,
|
|
29
29
|
'description' => '',
|
|
30
30
|
}.merge(topic_params)
|
|
31
31
|
|
|
@@ -22,8 +22,8 @@ class Zendesk2::CreateHelpCenterTranslation
|
|
|
22
22
|
'id' => identity,
|
|
23
23
|
'url' => url_for("/help_center/#{source_type_url}/#{source_id}/translation/#{locale}.json"),
|
|
24
24
|
'html_url' => html_url_for("/hc/#{locale}/#{source_type_url}/#{source_id}"),
|
|
25
|
-
'created_at' =>
|
|
26
|
-
'updated_at' =>
|
|
25
|
+
'created_at' => timestamp,
|
|
26
|
+
'updated_at' => timestamp,
|
|
27
27
|
'title' => params.fetch('translation').fetch('title'),
|
|
28
28
|
'body' => (params.fetch('translation')['body'] || ''),
|
|
29
29
|
'outdated' => false,
|
|
@@ -6,16 +6,9 @@ class Zendesk2::SearchHelpCenterArticles
|
|
|
6
6
|
|
|
7
7
|
attr_reader :query
|
|
8
8
|
|
|
9
|
-
def
|
|
9
|
+
def call(query, params)
|
|
10
10
|
@query = query
|
|
11
|
-
|
|
12
|
-
mock
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def _real(query, params = {})
|
|
16
|
-
@query = query
|
|
17
|
-
setup(params)
|
|
18
|
-
real
|
|
11
|
+
super(params)
|
|
19
12
|
end
|
|
20
13
|
|
|
21
14
|
def mock
|
|
@@ -25,7 +25,7 @@ class Zendesk2::UpdateHelpCenterSubscription
|
|
|
25
25
|
|
|
26
26
|
updated = subscription_params
|
|
27
27
|
updated['locale'] = updated.delete('source_locale') if updated['source_locale']
|
|
28
|
-
updated['updated_at'] =
|
|
28
|
+
updated['updated_at'] = timestamp
|
|
29
29
|
|
|
30
30
|
subscription.merge!(updated)
|
|
31
31
|
|
data/lib/zendesk2/mock.rb
CHANGED
|
@@ -15,11 +15,12 @@ class Zendesk2::Organizations
|
|
|
15
15
|
def find_by_external_id(external_id)
|
|
16
16
|
body = cistern.get_organization_by_external_id('external_id' => external_id).body
|
|
17
17
|
data = body.delete('organizations')
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
|
|
19
|
+
return unless data
|
|
20
|
+
|
|
21
|
+
collection = clone.load(data)
|
|
22
|
+
collection.merge_attributes(Cistern::Hash.slice(body, 'count', 'next_page', 'previous_page'))
|
|
23
|
+
collection
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
self.collection_method = :get_organizations
|
|
@@ -58,19 +58,19 @@ module Zendesk2::PagedCollection
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def next_page
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
return nil unless next_page_link
|
|
62
|
+
|
|
63
|
+
options = { 'url' => next_page_link }
|
|
64
|
+
options['filtered'] = filtered if respond_to?(:filtered) # searchable
|
|
65
|
+
new_page.all(options)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def previous_page
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
return nil unless previous_page_link
|
|
70
|
+
|
|
71
|
+
options = { 'url' => previous_page_link }
|
|
72
|
+
options['filtered'] = filtered if respond_to?(:filtered) # searchable
|
|
73
|
+
new_page.all(options)
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
# Attempt creation of resource and explode if unsuccessful
|
data/lib/zendesk2/request.rb
CHANGED
|
@@ -52,18 +52,11 @@ module Zendesk2::Request
|
|
|
52
52
|
|
|
53
53
|
attr_reader :params
|
|
54
54
|
|
|
55
|
-
def
|
|
55
|
+
def call(*args)
|
|
56
|
+
params = args.last.is_a?(Hash) ? args.pop : {}
|
|
56
57
|
@params = Cistern::Hash.stringify_keys(params)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def _mock(params = {})
|
|
60
|
-
setup(params)
|
|
61
|
-
mock
|
|
62
|
-
end
|
|
63
58
|
|
|
64
|
-
|
|
65
|
-
setup(params)
|
|
66
|
-
real
|
|
59
|
+
dispatch
|
|
67
60
|
end
|
|
68
61
|
|
|
69
62
|
def page_params!(options)
|
|
@@ -147,6 +140,10 @@ module Zendesk2::Request
|
|
|
147
140
|
}.merge(cistern.hash.slice(params, :method, :path, :body, :headers),),)
|
|
148
141
|
end
|
|
149
142
|
|
|
143
|
+
def timestamp
|
|
144
|
+
Time.now.iso8601
|
|
145
|
+
end
|
|
146
|
+
|
|
150
147
|
def mock_response(body, options = {})
|
|
151
148
|
response(
|
|
152
149
|
method: self.class.request_method,
|
data/lib/zendesk2/search.rb
CHANGED
|
@@ -10,16 +10,9 @@ class Zendesk2::Search
|
|
|
10
10
|
|
|
11
11
|
attr_reader :query
|
|
12
12
|
|
|
13
|
-
def
|
|
13
|
+
def call(query, params)
|
|
14
14
|
@query = query
|
|
15
|
-
|
|
16
|
-
mock
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def _real(query, params = {})
|
|
20
|
-
@query = query
|
|
21
|
-
setup(params)
|
|
22
|
-
real
|
|
15
|
+
super(params)
|
|
23
16
|
end
|
|
24
17
|
|
|
25
18
|
def mock
|
|
@@ -10,16 +10,9 @@ class Zendesk2::SearchOrganization
|
|
|
10
10
|
|
|
11
11
|
page_params!
|
|
12
12
|
|
|
13
|
-
def
|
|
13
|
+
def call(query, params = {})
|
|
14
14
|
@query = query
|
|
15
|
-
|
|
16
|
-
mock
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def _real(query, params = {})
|
|
20
|
-
@query = query
|
|
21
|
-
setup(params)
|
|
22
|
-
real
|
|
15
|
+
super(params)
|
|
23
16
|
end
|
|
24
17
|
|
|
25
18
|
def mock
|
data/lib/zendesk2/search_user.rb
CHANGED
|
@@ -10,16 +10,9 @@ class Zendesk2::SearchUser
|
|
|
10
10
|
|
|
11
11
|
page_params!
|
|
12
12
|
|
|
13
|
-
def
|
|
13
|
+
def call(query, params)
|
|
14
14
|
@query = query
|
|
15
|
-
|
|
16
|
-
mock
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def _real(query, params = {})
|
|
20
|
-
@query = query
|
|
21
|
-
setup(params)
|
|
22
|
-
real
|
|
15
|
+
super(params)
|
|
23
16
|
end
|
|
24
17
|
|
|
25
18
|
def mock
|
data/lib/zendesk2/searchable.rb
CHANGED
|
@@ -21,15 +21,15 @@ module Zendesk2::Searchable
|
|
|
21
21
|
# @see http://developer.zendesk.com/documentation/rest_api/search.html
|
|
22
22
|
def search(terms, params = {})
|
|
23
23
|
query = (terms.is_a?(Hash) ? search_by_hash(terms) : search_by_string(terms))
|
|
24
|
-
|
|
25
24
|
body = cistern.send(self.class.search_request, query, params).body
|
|
26
25
|
data = body.delete('results')
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
return nil unless data
|
|
28
|
+
|
|
29
|
+
load(data)
|
|
30
|
+
|
|
31
|
+
merge_attributes(Cistern::Hash.slice(body, 'count', 'next_page', 'previous_page').merge('filtered' => true))
|
|
32
|
+
self
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
private
|
data/lib/zendesk2/ticket.rb
CHANGED
|
@@ -115,17 +115,6 @@ class Zendesk2::Ticket
|
|
|
115
115
|
)
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
-
# @return [Array<Zendesk2::User>] All users CCD on this ticket
|
|
119
|
-
def collaborators
|
|
120
|
-
collaborator_ids.map { |cid| cistern.users.get(cid) }
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# Update list of users to be CCD on this ticket
|
|
124
|
-
# @param [Array<Zendesk2::User>] collaborators list of users
|
|
125
|
-
def collaborators=(collaborators)
|
|
126
|
-
self.collaborator_ids = collaborators.map(&:identity)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
118
|
# @return [Zendesk2::TicketAudits] all audits for this ticket
|
|
130
119
|
def audits
|
|
131
120
|
cistern.ticket_audits(ticket_id: identity).all
|
|
@@ -140,4 +129,24 @@ class Zendesk2::Ticket
|
|
|
140
129
|
def comments
|
|
141
130
|
cistern.ticket_comments(ticket_id: identity).all
|
|
142
131
|
end
|
|
132
|
+
|
|
133
|
+
# @return [Array<Zendesk2::User>] All users CCD on this ticket
|
|
134
|
+
def collaborators
|
|
135
|
+
(collaborator_ids || []).map { |id| cistern.users.get(id) }
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def collaborators=(collaborators)
|
|
139
|
+
collaborators = [collaborators] unless collaborators.is_a?(Array)
|
|
140
|
+
|
|
141
|
+
value = collaborators.map do |collaborator|
|
|
142
|
+
case collaborator
|
|
143
|
+
when Zendesk2::User
|
|
144
|
+
collaborator.identity
|
|
145
|
+
else
|
|
146
|
+
collaborator
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
attributes[:collaborators] = value
|
|
151
|
+
end
|
|
143
152
|
end
|
data/lib/zendesk2/update_user.rb
CHANGED
|
@@ -54,8 +54,8 @@ class Zendesk2::UpdateUser
|
|
|
54
54
|
user_identity = {
|
|
55
55
|
'id' => user_identity_id,
|
|
56
56
|
'url' => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
|
|
57
|
-
'created_at' =>
|
|
58
|
-
'updated_at' =>
|
|
57
|
+
'created_at' => timestamp,
|
|
58
|
+
'updated_at' => timestamp,
|
|
59
59
|
'type' => 'email',
|
|
60
60
|
'value' => email,
|
|
61
61
|
'verified' => false,
|
data/lib/zendesk2/update_view.rb
CHANGED
data/lib/zendesk2/version.rb
CHANGED
data/spec/tickets_spec.rb
CHANGED
|
@@ -39,6 +39,47 @@ describe 'Zendesk2' do
|
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
it 'should create collaborators' do
|
|
43
|
+
name = 'Josh Lane'
|
|
44
|
+
email = mock_email
|
|
45
|
+
collaborating_user = client.users.create!(email: mock_email, name: mock_uuid)
|
|
46
|
+
collaborating_user_id = client.users.create!(email: mock_email, name: mock_uuid).identity
|
|
47
|
+
|
|
48
|
+
ticket = client.tickets.create!(
|
|
49
|
+
subject: mock_uuid,
|
|
50
|
+
description: mock_uuid,
|
|
51
|
+
collaborators: [{ name: name, email: email }, collaborating_user_id, collaborating_user],
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
collaborators = [collaborating_user]
|
|
55
|
+
collaborators << client.users.get(collaborating_user_id)
|
|
56
|
+
collaborators << client.users.search(email: email).first if Zendesk2.mocking?
|
|
57
|
+
|
|
58
|
+
expect(ticket.collaborators).to include(*collaborators)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'fails to create collaborators with missing collaborators[email]' do
|
|
62
|
+
ticket = client.tickets.create!(
|
|
63
|
+
subject: mock_uuid,
|
|
64
|
+
description: mock_uuid,
|
|
65
|
+
collaborators: { name: 'josh', email: nil },
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
expect(ticket.collaborators).to be_empty
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'fails to create collaborators with missing collaborators[name]' do
|
|
72
|
+
email = mock_email
|
|
73
|
+
|
|
74
|
+
ticket = client.tickets.create!(
|
|
75
|
+
subject: mock_uuid,
|
|
76
|
+
description: mock_uuid,
|
|
77
|
+
collaborators: { name: nil, email: email },
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
expect(ticket.collaborators.map(&:email)).to contain_exactly(email)
|
|
81
|
+
end
|
|
82
|
+
|
|
42
83
|
context 'valid requester exists' do
|
|
43
84
|
it 'sets organization id' do
|
|
44
85
|
ticket = client.tickets.create!(subject: mock_uuid, description: mock_uuid, requester_id: 11_111_111_111_199)
|
data/zendesk2.gemspec
CHANGED
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.12.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: 2016-
|
|
11
|
+
date: 2016-10-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: cistern
|
|
@@ -66,6 +66,26 @@ dependencies:
|
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '1.0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: json
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '1.7'
|
|
76
|
+
- - "<"
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '3.0'
|
|
79
|
+
type: :runtime
|
|
80
|
+
prerelease: false
|
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
82
|
+
requirements:
|
|
83
|
+
- - ">"
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: '1.7'
|
|
86
|
+
- - "<"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '3.0'
|
|
69
89
|
description: Zendesk V2 API client
|
|
70
90
|
email:
|
|
71
91
|
- me@joshualane.com
|