zendesk2 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -0
- data/lib/zendesk2/client/models/categories.rb +1 -1
- data/lib/zendesk2/client/models/forums.rb +1 -1
- data/lib/zendesk2/client/models/groups.rb +1 -1
- data/lib/zendesk2/client/models/membership.rb +1 -1
- data/lib/zendesk2/client/models/organization.rb +2 -0
- data/lib/zendesk2/client/models/organizations.rb +1 -1
- data/lib/zendesk2/client/models/ticket_audits.rb +1 -1
- data/lib/zendesk2/client/models/ticket_comments.rb +1 -1
- data/lib/zendesk2/client/models/ticket_metrics.rb +1 -1
- data/lib/zendesk2/client/models/tickets.rb +1 -1
- data/lib/zendesk2/client/models/topic_comments.rb +1 -1
- data/lib/zendesk2/client/models/topics.rb +1 -1
- data/lib/zendesk2/client/models/user_field.rb +59 -0
- data/lib/zendesk2/client/models/user_fields.rb +11 -0
- data/lib/zendesk2/client/models/user_identity.rb +1 -1
- data/lib/zendesk2/client/models/users.rb +1 -1
- data/lib/zendesk2/client/requests/create_membership.rb +10 -0
- data/lib/zendesk2/client/requests/create_user.rb +2 -12
- data/lib/zendesk2/client/requests/create_user_field.rb +44 -0
- data/lib/zendesk2/client/requests/destroy_user.rb +1 -0
- data/lib/zendesk2/client/requests/destroy_user_field.rb +27 -0
- data/lib/zendesk2/client/requests/get_category.rb +7 -14
- data/lib/zendesk2/client/requests/get_group.rb +6 -14
- data/lib/zendesk2/client/requests/get_membership.rb +6 -14
- data/lib/zendesk2/client/requests/get_organization.rb +7 -14
- data/lib/zendesk2/client/requests/get_organization_memberships.rb +1 -1
- data/lib/zendesk2/client/requests/get_ticket.rb +6 -14
- data/lib/zendesk2/client/requests/get_ticket_audit.rb +7 -18
- data/lib/zendesk2/client/requests/get_ticket_field.rb +6 -15
- data/lib/zendesk2/client/requests/get_ticket_fields.rb +1 -1
- data/lib/zendesk2/client/requests/get_ticket_metric.rb +6 -17
- data/lib/zendesk2/client/requests/get_topic_comment.rb +3 -6
- data/lib/zendesk2/client/requests/get_topic_comments.rb +1 -1
- data/lib/zendesk2/client/requests/get_user.rb +9 -13
- data/lib/zendesk2/client/requests/get_user_field.rb +25 -0
- data/lib/zendesk2/client/requests/get_user_fields.rb +18 -0
- data/lib/zendesk2/client/requests/get_user_identity.rb +6 -15
- data/lib/zendesk2/client/requests/get_user_memberships.rb +1 -1
- data/lib/zendesk2/client/requests/mark_membership_default.rb +2 -6
- data/lib/zendesk2/client/requests/mark_user_identity_primary.rb +3 -6
- data/lib/zendesk2/client/requests/update_group.rb +8 -14
- data/lib/zendesk2/client/requests/update_topic_comment.rb +2 -2
- data/lib/zendesk2/client/requests/update_user_field.rb +28 -0
- data/lib/zendesk2/client.rb +79 -15
- data/lib/zendesk2/collection.rb +1 -18
- data/lib/zendesk2/paged_collection.rb +100 -0
- data/lib/zendesk2/version.rb +1 -1
- data/lib/zendesk2.rb +9 -7
- data/spec/categories_spec.rb +6 -4
- data/spec/forums_spec.rb +7 -4
- data/spec/groups_spec.rb +6 -3
- data/spec/memberships_spec.rb +31 -5
- data/spec/organizations_spec.rb +6 -3
- data/spec/shared/zendesk_resource.rb +66 -48
- data/spec/ticket_fields_spec.rb +6 -3
- data/spec/tickets_spec.rb +6 -3
- data/spec/topic_comments_spec.rb +6 -5
- data/spec/topics_spec.rb +7 -5
- data/spec/user_fields_spec.rb +12 -0
- data/spec/user_identities_spec.rb +7 -7
- data/spec/users_spec.rb +7 -4
- metadata +12 -6
- data/spec/config_spec.rb +0 -17
- data/spec/shared/resource.rb +0 -66
@@ -12,21 +12,14 @@ class Zendesk2::Client
|
|
12
12
|
|
13
13
|
class Mock
|
14
14
|
def get_organization(params={})
|
15
|
-
id
|
16
|
-
if body = self.data[:organizations][id]
|
15
|
+
id = params["id"]
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
else
|
25
|
-
response(
|
26
|
-
:path => "/organizations/#{id}.json",
|
27
|
-
:status => 404
|
28
|
-
)
|
29
|
-
end
|
17
|
+
response(
|
18
|
+
:path => "/organizations/#{id}.json",
|
19
|
+
:body => {
|
20
|
+
"organization" => find!(:organizations, id)
|
21
|
+
},
|
22
|
+
)
|
30
23
|
end
|
31
24
|
end # Mock
|
32
25
|
end
|
@@ -14,7 +14,7 @@ class Zendesk2::Client
|
|
14
14
|
def get_organization_memberships(params={})
|
15
15
|
organization_id = params["organization_id"]
|
16
16
|
|
17
|
-
|
17
|
+
resources(:memberships, "/organizations/#{organization_id}/memberships.json", "organization_memberships", filter: lambda { |c| c.select { |m| m["organization_id"] == organization_id } })
|
18
18
|
end
|
19
19
|
end # Mock
|
20
20
|
end
|
@@ -15,20 +15,12 @@ class Zendesk2::Client
|
|
15
15
|
id = params["id"]
|
16
16
|
path = "/tickets/#{id}.json"
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
)
|
25
|
-
else
|
26
|
-
response(
|
27
|
-
:path => path,
|
28
|
-
:status => 404,
|
29
|
-
:body => {"error" => "RecordNotFound", "description" => "Not found"},
|
30
|
-
)
|
31
|
-
end
|
18
|
+
response(
|
19
|
+
:path => path,
|
20
|
+
:body => {
|
21
|
+
"ticket" => self.find!(:tickets, id)
|
22
|
+
},
|
23
|
+
)
|
32
24
|
end
|
33
25
|
end # Mock
|
34
26
|
end
|
@@ -13,25 +13,14 @@ class Zendesk2::Client
|
|
13
13
|
|
14
14
|
class Mock
|
15
15
|
def get_ticket_audit(params={})
|
16
|
-
id
|
17
|
-
ticket_id = params["ticket_id"]
|
16
|
+
id = params["id"]
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
"ticket_audit" => body
|
26
|
-
},
|
27
|
-
)
|
28
|
-
else
|
29
|
-
response(
|
30
|
-
:path => path,
|
31
|
-
:status => 404,
|
32
|
-
:body => {"error" => "RecordNotFound", "description" => "Not found"},
|
33
|
-
)
|
34
|
-
end
|
18
|
+
response(
|
19
|
+
:path => "/ticket_audits/#{id}.json",
|
20
|
+
:body => {
|
21
|
+
"ticket_audit" => find!(:ticket_audits, id)
|
22
|
+
},
|
23
|
+
)
|
35
24
|
end
|
36
25
|
end # Mock
|
37
26
|
end
|
@@ -13,22 +13,13 @@ class Zendesk2::Client
|
|
13
13
|
class Mock
|
14
14
|
def get_ticket_field(params={})
|
15
15
|
id = params["id"]
|
16
|
-
path = "/ticket_fields/#{id}.json"
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
)
|
25
|
-
else
|
26
|
-
response(
|
27
|
-
:path => path,
|
28
|
-
:status => 404,
|
29
|
-
:body => {"error" => "RecordNotFound", "description" => "Not found"},
|
30
|
-
)
|
31
|
-
end
|
17
|
+
response(
|
18
|
+
:path => "/ticket_fields/#{id}.json",
|
19
|
+
:body => {
|
20
|
+
"ticket_field" => find!(:ticket_fields, id)
|
21
|
+
},
|
22
|
+
)
|
32
23
|
end
|
33
24
|
end # Mock
|
34
25
|
end
|
@@ -20,24 +20,13 @@ class Zendesk2::Client
|
|
20
20
|
class Mock
|
21
21
|
def get_ticket_metric(params={})
|
22
22
|
id = params["id"]
|
23
|
-
ticket_id = params["ticket_id"]
|
24
|
-
|
25
|
-
path = "/tickets_metrics/#{id}.json"
|
26
23
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
)
|
34
|
-
else
|
35
|
-
response(
|
36
|
-
:path => path,
|
37
|
-
:status => 404,
|
38
|
-
:body => {"error" => "RecordNotFound", "description" => "Not found"},
|
39
|
-
)
|
40
|
-
end
|
24
|
+
response(
|
25
|
+
:path => "/tickets_metrics/#{id}.json",
|
26
|
+
:body => {
|
27
|
+
"ticket_metric" => find!(:ticket_metrics, id)
|
28
|
+
},
|
29
|
+
)
|
41
30
|
end
|
42
31
|
end # Mock
|
43
32
|
end
|
@@ -16,15 +16,12 @@ class Zendesk2::Client
|
|
16
16
|
def get_topic_comment(params={})
|
17
17
|
id = params["id"]
|
18
18
|
topic_id = params["topic_id"]
|
19
|
-
path = "/topics/#{topic_id}/comments/#{id}.json"
|
20
|
-
|
21
|
-
body = self.data[:topic_comments][id]
|
22
19
|
|
23
|
-
unless (topic_comment = self.
|
24
|
-
|
20
|
+
unless (topic_comment = self.find!(:topic_comments, id)) && topic_comment["topic_id"] == topic_id
|
21
|
+
error!(:not_found)
|
25
22
|
else
|
26
23
|
response(
|
27
|
-
:path => "/
|
24
|
+
:path => "/topics/#{topic_id}/comments/#{id}.json",
|
28
25
|
:body => {
|
29
26
|
"topic_comment" => topic_comment,
|
30
27
|
},
|
@@ -13,7 +13,7 @@ class Zendesk2::Client
|
|
13
13
|
class Mock
|
14
14
|
def get_topic_comments(params={})
|
15
15
|
topic_id = params["topic_id"]
|
16
|
-
|
16
|
+
self.find!(:topics, topic_id)
|
17
17
|
filter = lambda { |comments| comments.select { |c| c["topic_id"] == topic_id } }
|
18
18
|
|
19
19
|
page(params, :topic_comments, "/topics/#{topic_id}/comments.json", "topic_comments", filter: filter).tap do
|
@@ -13,22 +13,18 @@ class Zendesk2::Client
|
|
13
13
|
class Mock
|
14
14
|
def get_user(params={})
|
15
15
|
id = params["id"]
|
16
|
-
if body = self.data[:users][id]
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
identities = self.data[:identities].values.select{|i| i["user_id"] == id}
|
18
|
+
identity = identities.find { |i| i["type"] == "email" && i["primary"] } || identities.find { |i| i["type"] == "email" }
|
20
19
|
|
21
|
-
|
20
|
+
# @todo what happens if no identity?
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
else
|
30
|
-
response(status: 404)
|
31
|
-
end
|
22
|
+
response(
|
23
|
+
:path => "/users/#{id}.json",
|
24
|
+
:body => {
|
25
|
+
"user" => find!(:users, id).merge("email" => identity["value"]),
|
26
|
+
},
|
27
|
+
)
|
32
28
|
end
|
33
29
|
end # Mock
|
34
30
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_user_field(params={})
|
4
|
+
id = params["id"]
|
5
|
+
|
6
|
+
request(
|
7
|
+
:method => :get,
|
8
|
+
:path => "/user_fields/#{id}.json"
|
9
|
+
)
|
10
|
+
end
|
11
|
+
end # Real
|
12
|
+
|
13
|
+
class Mock
|
14
|
+
def get_user_field(params={})
|
15
|
+
id = params["id"]
|
16
|
+
|
17
|
+
response(
|
18
|
+
:path => "/user_fields/#{id}.json",
|
19
|
+
:body => {
|
20
|
+
"user_field" => find!(:user_fields, id)
|
21
|
+
},
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end # Mock
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def get_user_fields(params={})
|
4
|
+
page_params = Zendesk2.paging_parameters(params)
|
5
|
+
|
6
|
+
request(
|
7
|
+
:params => page_params,
|
8
|
+
:method => :get,
|
9
|
+
:path => "/user_fields.json",
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
class Mock
|
14
|
+
def get_user_fields(params={})
|
15
|
+
collection(:user_fields, "/user_fields.json", "user_fields")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -13,22 +13,13 @@ class Zendesk2::Client
|
|
13
13
|
def get_user_identity(params={})
|
14
14
|
id = params["id"]
|
15
15
|
user_id = params["user_id"]
|
16
|
-
path = "/users/#{user_id}/identities/#{id}.json"
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
)
|
25
|
-
else
|
26
|
-
response(
|
27
|
-
:path => path,
|
28
|
-
:status => 404,
|
29
|
-
:body => {"error" => "RecordNotFound", "description" => "Not found"},
|
30
|
-
)
|
31
|
-
end
|
17
|
+
response(
|
18
|
+
:path => "/users/#{user_id}/identities/#{id}.json",
|
19
|
+
:body => {
|
20
|
+
"identity" => find!(:identities, id)
|
21
|
+
},
|
22
|
+
)
|
32
23
|
end
|
33
24
|
end # Mock
|
34
25
|
end
|
@@ -16,7 +16,7 @@ class Zendesk2::Client
|
|
16
16
|
def get_user_memberships(params={})
|
17
17
|
user_id = params["user_id"]
|
18
18
|
|
19
|
-
|
19
|
+
resources(:memberships, "/users/#{user_id}/organization_memberships.json", "organization_memberships", filter: lambda{|c| c.select { |a| a["user_id"] == user_id }})
|
20
20
|
end
|
21
21
|
end # Mock
|
22
22
|
end
|
@@ -19,7 +19,7 @@ class Zendesk2::Client
|
|
19
19
|
|
20
20
|
path = "/users/#{user_id}/organization_memberships/#{id}/make_default.json"
|
21
21
|
|
22
|
-
if (membership = self.
|
22
|
+
if (membership = self.find!(:memberships, id)) && membership["user_id"] == user_id
|
23
23
|
# only one user can be default
|
24
24
|
other_user_memberships = self.data[:memberships].values.select { |m| m["user_id"] == user_id }
|
25
25
|
other_user_memberships.each { |i| i["default"] = false }
|
@@ -29,11 +29,7 @@ class Zendesk2::Client
|
|
29
29
|
:method => :put,
|
30
30
|
:path => path
|
31
31
|
)
|
32
|
-
else
|
33
|
-
response(
|
34
|
-
:path => path,
|
35
|
-
:status => 404
|
36
|
-
)
|
32
|
+
else error!(:not_found)
|
37
33
|
end
|
38
34
|
end
|
39
35
|
end
|
@@ -17,7 +17,7 @@ class Zendesk2::Client
|
|
17
17
|
user_id = params.delete("user_id")
|
18
18
|
path = "/users/#{user_id}/identities/#{id}/make_primary.json"
|
19
19
|
|
20
|
-
user_identity = self.
|
20
|
+
user_identity = self.find!(:identities, id)
|
21
21
|
|
22
22
|
if user_identity && user_identity["user_id"] == user_id
|
23
23
|
# only one user can be primary
|
@@ -29,11 +29,8 @@ class Zendesk2::Client
|
|
29
29
|
:method => :put,
|
30
30
|
:path => path
|
31
31
|
)
|
32
|
-
else
|
33
|
-
|
34
|
-
:path => path,
|
35
|
-
:status => 404
|
36
|
-
)
|
32
|
+
else
|
33
|
+
error!(:not_found)
|
37
34
|
end
|
38
35
|
end
|
39
36
|
end
|
@@ -15,21 +15,15 @@ class Zendesk2::Client
|
|
15
15
|
end
|
16
16
|
class Mock
|
17
17
|
def update_group(params={})
|
18
|
-
id
|
19
|
-
path = "/groups/#{id}.json"
|
20
|
-
|
21
|
-
if group = self.data[:groups][id]
|
22
|
-
group.merge!(params)
|
23
|
-
response(
|
24
|
-
:method => :put,
|
25
|
-
:path => "/groups/#{id}.json",
|
26
|
-
:body => {
|
27
|
-
"group" => group
|
28
|
-
},
|
29
|
-
)
|
30
|
-
else response(status: 404)
|
31
|
-
end
|
18
|
+
id = params.delete("id")
|
32
19
|
|
20
|
+
response(
|
21
|
+
:method => :put,
|
22
|
+
:path => "/groups/#{id}.json",
|
23
|
+
:body => {
|
24
|
+
"group" => find!(:groups, id).merge!(params)
|
25
|
+
},
|
26
|
+
)
|
33
27
|
end
|
34
28
|
end
|
35
29
|
end
|
@@ -20,8 +20,8 @@ class Zendesk2::Client
|
|
20
20
|
topic_id = params.delete("topic_id")
|
21
21
|
path = "/topics/#{topic_id}/comments/#{id}.json"
|
22
22
|
|
23
|
-
unless (topic_comment = self.
|
24
|
-
|
23
|
+
unless (topic_comment = self.find!(:topic_comments, id)) && topic_comment["topic_id"] == topic_id
|
24
|
+
error!(:not_found)
|
25
25
|
else
|
26
26
|
body = topic_comment.merge!(params)
|
27
27
|
response(
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Zendesk2::Client
|
2
|
+
class Real
|
3
|
+
def update_user_field(params={})
|
4
|
+
id = params.delete("id")
|
5
|
+
|
6
|
+
request(
|
7
|
+
:method => :put,
|
8
|
+
:path => "/user_fields/#{id}.json",
|
9
|
+
:body => {
|
10
|
+
"user_field" => params
|
11
|
+
},
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
class Mock
|
16
|
+
def update_user_field(params={})
|
17
|
+
user_field_id = params.delete("id")
|
18
|
+
|
19
|
+
response(
|
20
|
+
:method => :put,
|
21
|
+
:path => "/user_fields/#{user_field_id}.json",
|
22
|
+
:body => {
|
23
|
+
"user_field" => find!(:user_fields, user_field_id).merge!(params),
|
24
|
+
},
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/zendesk2/client.rb
CHANGED
@@ -18,8 +18,9 @@ class Zendesk2::Client < Cistern::Service
|
|
18
18
|
collection :ticket_comments
|
19
19
|
collection :topic_comments
|
20
20
|
collection :topics
|
21
|
-
collection :
|
21
|
+
collection :user_fields
|
22
22
|
collection :user_identities
|
23
|
+
collection :users
|
23
24
|
model :category
|
24
25
|
model :forum
|
25
26
|
model :group
|
@@ -38,9 +39,9 @@ class Zendesk2::Client < Cistern::Service
|
|
38
39
|
model :topic
|
39
40
|
model :topic_comment
|
40
41
|
model :user
|
42
|
+
model :user_field
|
41
43
|
model :user_identity
|
42
44
|
|
43
|
-
request :get_assignable_groups
|
44
45
|
request :create_category
|
45
46
|
request :create_forum
|
46
47
|
request :create_group
|
@@ -51,6 +52,7 @@ class Zendesk2::Client < Cistern::Service
|
|
51
52
|
request :create_topic
|
52
53
|
request :create_topic_comment
|
53
54
|
request :create_user
|
55
|
+
request :create_user_field
|
54
56
|
request :create_user_identity
|
55
57
|
request :destroy_category
|
56
58
|
request :destroy_forum
|
@@ -62,7 +64,9 @@ class Zendesk2::Client < Cistern::Service
|
|
62
64
|
request :destroy_topic
|
63
65
|
request :destroy_topic_comment
|
64
66
|
request :destroy_user
|
67
|
+
request :destroy_user_field
|
65
68
|
request :destroy_user_identity
|
69
|
+
request :get_assignable_groups
|
66
70
|
request :get_audits
|
67
71
|
request :get_categories
|
68
72
|
request :get_category
|
@@ -73,10 +77,9 @@ class Zendesk2::Client < Cistern::Service
|
|
73
77
|
request :get_group
|
74
78
|
request :get_groups
|
75
79
|
request :get_membership
|
76
|
-
request :get_user_memberships
|
77
|
-
request :get_organization_memberships
|
78
80
|
request :get_organization
|
79
81
|
request :get_organization_by_external_id
|
82
|
+
request :get_organization_memberships
|
80
83
|
request :get_organization_tickets
|
81
84
|
request :get_organization_users
|
82
85
|
request :get_organizations
|
@@ -95,8 +98,11 @@ class Zendesk2::Client < Cistern::Service
|
|
95
98
|
request :get_topic_comments
|
96
99
|
request :get_topics
|
97
100
|
request :get_user
|
101
|
+
request :get_user_field
|
102
|
+
request :get_user_fields
|
98
103
|
request :get_user_identities
|
99
104
|
request :get_user_identity
|
105
|
+
request :get_user_memberships
|
100
106
|
request :get_users
|
101
107
|
request :mark_membership_default
|
102
108
|
request :mark_user_identity_primary
|
@@ -112,24 +118,34 @@ class Zendesk2::Client < Cistern::Service
|
|
112
118
|
request :update_topic
|
113
119
|
request :update_topic_comment
|
114
120
|
request :update_user
|
121
|
+
request :update_user_field
|
115
122
|
request :update_user_identity
|
116
123
|
|
117
124
|
recognizes :url, :subdomain, :host, :port, :path, :scheme, :logger, :adapter, :username, :password, :token, :jwt_token
|
118
125
|
|
126
|
+
module Shared
|
127
|
+
def require_parameters(params, *requirements)
|
128
|
+
if (missing = requirements - params.keys).any?
|
129
|
+
raise ArgumentError, "missing parameters: #{missing.join(", ")}"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
119
134
|
class Real
|
135
|
+
include Shared
|
120
136
|
|
121
137
|
attr_accessor :username, :url, :token, :logger, :jwt_token
|
122
138
|
|
123
139
|
def initialize(options={})
|
124
140
|
url = options[:url] || Zendesk2.defaults[:url] || begin
|
125
|
-
|
126
|
-
|
141
|
+
host = options[:host]
|
142
|
+
subdomain = options[:subdomain] || Zendesk2.defaults[:subdomain]
|
127
143
|
|
128
|
-
|
129
|
-
|
130
|
-
|
144
|
+
host ||= "#{subdomain}.zendesk.com"
|
145
|
+
scheme = options[:scheme] || "https"
|
146
|
+
port = options[:port] || (scheme == "https" ? 443 : 80)
|
131
147
|
|
132
|
-
|
148
|
+
"#{scheme}://#{host}:#{port}"
|
133
149
|
end
|
134
150
|
|
135
151
|
@url = URI.parse(url).to_s
|
@@ -181,6 +197,7 @@ class Zendesk2::Client < Cistern::Service
|
|
181
197
|
end
|
182
198
|
|
183
199
|
class Mock
|
200
|
+
include Shared
|
184
201
|
|
185
202
|
attr_reader :username, :url, :token, :jwt_token
|
186
203
|
|
@@ -199,6 +216,7 @@ class Zendesk2::Client < Cistern::Service
|
|
199
216
|
:tickets => {},
|
200
217
|
:topic_comments => {},
|
201
218
|
:topics => {},
|
219
|
+
:user_fields => {},
|
202
220
|
:users => {},
|
203
221
|
}
|
204
222
|
end
|
@@ -218,12 +236,12 @@ class Zendesk2::Client < Cistern::Service
|
|
218
236
|
|
219
237
|
def initialize(options={})
|
220
238
|
url = options[:url] || begin
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
239
|
+
host = options[:host]
|
240
|
+
host ||= "#{options[:subdomain] || "mock"}.zendesk.com"
|
241
|
+
scheme = options[:scheme] || "https"
|
242
|
+
port = options[:port] || (scheme == "https" ? 443 : 80)
|
225
243
|
|
226
|
-
|
244
|
+
"#{scheme}://#{host}:#{port}"
|
227
245
|
end
|
228
246
|
|
229
247
|
@url = url
|
@@ -249,6 +267,21 @@ class Zendesk2::Client < Cistern::Service
|
|
249
267
|
File.join(@url, "/api/v2", path.to_s)
|
250
268
|
end
|
251
269
|
|
270
|
+
def resources(collection, path, collection_root, options={})
|
271
|
+
filter = options[:filter]
|
272
|
+
resources = self.data[collection].values
|
273
|
+
resources = filter.call(resources) if filter
|
274
|
+
count = resources.size
|
275
|
+
|
276
|
+
response(
|
277
|
+
:body => {
|
278
|
+
collection_root => resources,
|
279
|
+
"count" => count,
|
280
|
+
},
|
281
|
+
:path => path
|
282
|
+
)
|
283
|
+
end
|
284
|
+
|
252
285
|
def page(params, collection, path, collection_root, options={})
|
253
286
|
page_params = Zendesk2.paging_parameters(params)
|
254
287
|
page_size = (page_params["per_page"] || 50).to_i
|
@@ -288,6 +321,37 @@ class Zendesk2::Client < Cistern::Service
|
|
288
321
|
pluralized
|
289
322
|
end
|
290
323
|
|
324
|
+
def self.error_map
|
325
|
+
@@error_map ||= {
|
326
|
+
:invalid => [422, {
|
327
|
+
"error" => "RecordInvalid",
|
328
|
+
"description" => "Record validation errors",
|
329
|
+
}],
|
330
|
+
:not_found => [404, {
|
331
|
+
"error" => "RecordNotFound",
|
332
|
+
"description" => "Not found",
|
333
|
+
}],
|
334
|
+
}
|
335
|
+
end
|
336
|
+
|
337
|
+
def find!(collection, identity, options={})
|
338
|
+
if resource = self.data[collection][identity]
|
339
|
+
resource
|
340
|
+
else
|
341
|
+
error!(options[:error] || :not_found)
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
def error!(type, options={})
|
346
|
+
status, body = self.class.error_map[type]
|
347
|
+
body.merge!("details" => options[:details]) if options[:details]
|
348
|
+
|
349
|
+
response(
|
350
|
+
:status => status,
|
351
|
+
:body => body,
|
352
|
+
)
|
353
|
+
end
|
354
|
+
|
291
355
|
def response(options={})
|
292
356
|
method = options[:method] || :get
|
293
357
|
status = options[:status] || 200
|