zendesk2 1.5.6 → 1.5.7
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/lib/zendesk2/client/collections/tickets.rb +19 -1
- data/lib/zendesk2/client/models/user.rb +7 -8
- data/lib/zendesk2/client/requests/get_ccd_tickets.rb +4 -4
- data/lib/zendesk2/client/requests/get_requested_tickets.rb +4 -4
- data/lib/zendesk2/paged_collection.rb +40 -12
- data/lib/zendesk2/version.rb +1 -1
- data/spec/users_spec.rb +6 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75b7edcb167743af22e5cc652acb0a0f38b4aa5a
|
4
|
+
data.tar.gz: 68e451d5857884091f5144e0b26f2b9ae38eb59f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce3d74e5cd45d2220f095ed2075835c803a8f6440aaf807e3aeffa0f8f734ba2a3e29b99960ec026ba6bfdffa6de3912961118e5a051e359421a53d187bb0209
|
7
|
+
data.tar.gz: 52927456134f282b29c4beaeaca81541030df75a4b7354781d43e3ce5a7edf2e170e67e88903352cf0ff5a8cd917727f32b948756247c432b992d8c2300a9b17
|
@@ -4,9 +4,27 @@ class Zendesk2::Client::Tickets < Zendesk2::Client::Collection
|
|
4
4
|
|
5
5
|
model Zendesk2::Client::Ticket
|
6
6
|
|
7
|
-
|
7
|
+
attribute :requester_id
|
8
|
+
attribute :collaborator_id
|
9
|
+
|
8
10
|
self.collection_root = "tickets"
|
9
11
|
self.model_method = :get_ticket
|
10
12
|
self.model_root = "ticket"
|
11
13
|
self.search_type = "ticket"
|
14
|
+
|
15
|
+
def collection_page(params={})
|
16
|
+
collection_method = if requester_id
|
17
|
+
:get_requested_tickets
|
18
|
+
elsif collaborator_id
|
19
|
+
:get_ccd_tickets
|
20
|
+
else
|
21
|
+
:get_tickets
|
22
|
+
end
|
23
|
+
|
24
|
+
body = service.send(collection_method, Cistern::Hash.stringify_keys(self.attributes.merge(params))).body
|
25
|
+
|
26
|
+
self.load(body[collection_root]) # 'results' is the key for paged seraches
|
27
|
+
self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
|
28
|
+
self
|
29
|
+
end
|
12
30
|
end
|
@@ -78,7 +78,10 @@ class Zendesk2::Client::User < Zendesk2::Client::Model
|
|
78
78
|
|
79
79
|
def destroy!
|
80
80
|
requires :identity
|
81
|
-
|
81
|
+
|
82
|
+
if self.email == service.username
|
83
|
+
raise "don't nuke yourself"
|
84
|
+
end
|
82
85
|
|
83
86
|
merge_attributes(
|
84
87
|
service.destroy_user("user" => {"id" => self.identity}).body["user"]
|
@@ -160,19 +163,15 @@ class Zendesk2::Client::User < Zendesk2::Client::Model
|
|
160
163
|
def tickets
|
161
164
|
requires :identity
|
162
165
|
|
163
|
-
service.tickets.
|
164
|
-
service.get_requested_tickets("user_id" => self.identity).body["tickets"]
|
165
|
-
)
|
166
|
+
service.tickets(requester_id: self.identity)
|
166
167
|
end
|
167
168
|
alias requested_tickets tickets
|
168
169
|
|
169
|
-
# @return [Zendesk2::Client::Tickets] tickets this user is CC'
|
170
|
+
# @return [Zendesk2::Client::Tickets] tickets this user is CC'd
|
170
171
|
def ccd_tickets
|
171
172
|
requires :identity
|
172
173
|
|
173
|
-
service.tickets.
|
174
|
-
service.get_ccd_tickets("user_id" => self.identity).body["tickets"]
|
175
|
-
)
|
174
|
+
service.tickets(collaborator_id: self.identity)
|
176
175
|
end
|
177
176
|
|
178
177
|
# @return [Zendesk2::Client::UserIdentities] the identities of this user
|
@@ -1,14 +1,14 @@
|
|
1
1
|
class Zendesk2::Client::GetCcdTickets < Zendesk2::Client::Request
|
2
|
-
request_path { |r| "/users/#{r.
|
2
|
+
request_path { |r| "/users/#{r.collaborator_id}/tickets/ccd.json" }
|
3
3
|
|
4
4
|
page_params!
|
5
5
|
|
6
|
-
def
|
7
|
-
params.fetch("
|
6
|
+
def collaborator_id
|
7
|
+
params.fetch("collaborator_id").to_i
|
8
8
|
end
|
9
9
|
|
10
10
|
def mock
|
11
|
-
tickets = service.data[:tickets].values.select { |u| u["collaborator_ids"].include?(
|
11
|
+
tickets = service.data[:tickets].values.select { |u| u["collaborator_ids"].include?(collaborator_id) }
|
12
12
|
|
13
13
|
page(tickets, root: "tickets")
|
14
14
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
class Zendesk2::Client::GetRequestedTickets < Zendesk2::Client::Request
|
2
2
|
request_method :get
|
3
|
-
request_path { |r| "/users/#{r.
|
3
|
+
request_path { |r| "/users/#{r.requester_id}/tickets/requested.json" }
|
4
4
|
|
5
5
|
page_params!
|
6
6
|
|
7
|
-
def
|
8
|
-
params.fetch("
|
7
|
+
def requester_id
|
8
|
+
params.fetch("requester_id").to_i
|
9
9
|
end
|
10
10
|
|
11
11
|
def mock(params={})
|
12
|
-
tickets = self.data[:tickets].values.select { |u| u["requester_id"] ==
|
12
|
+
tickets = self.data[:tickets].values.select { |u| u["requester_id"] == requester_id }
|
13
13
|
|
14
14
|
page(tickets, root: "tickets")
|
15
15
|
end
|
@@ -45,37 +45,42 @@ module Zendesk2::PagedCollection
|
|
45
45
|
end
|
46
46
|
|
47
47
|
# Attempt creation of resource and explode if unsuccessful
|
48
|
+
#
|
48
49
|
# @raise [Zendesk2::Error] if creation was unsuccessful
|
49
|
-
# @return [
|
50
|
+
# @return [Zendesk::Client::Model]
|
50
51
|
def create!(attributes={})
|
51
52
|
model = self.new(attributes.merge(Zendesk2.stringify_keys(self.attributes)))
|
52
53
|
model.save!
|
53
54
|
end
|
54
55
|
|
55
56
|
# Quietly attempt creation of resource. Check {#new_record?} and {#errors} for success
|
57
|
+
#
|
56
58
|
# @see {#create!} to raise an exception on failure
|
57
|
-
# @return [
|
59
|
+
# @return [Zendesk::Client::Model, FalseClass]
|
58
60
|
def create(attributes={})
|
59
61
|
model = self.new(attributes.merge(Zendesk2.stringify_keys(self.attributes)))
|
60
62
|
model.save
|
61
63
|
end
|
62
64
|
|
65
|
+
# Iterate over all pages and collect every entry
|
66
|
+
#
|
67
|
+
# @return [Array<Zendesk2::Client::Model>] all entries in all pages
|
68
|
+
def all_entries
|
69
|
+
each_entry.to_a
|
70
|
+
end
|
71
|
+
|
63
72
|
# Fetch a collection of resources
|
64
73
|
def all(params={})
|
65
|
-
if
|
66
|
-
|
67
|
-
search(query.delete("query"), query)
|
74
|
+
if search_query?(params)
|
75
|
+
search_page(params)
|
68
76
|
else
|
69
|
-
|
70
|
-
body = service.send(collection_method, scoped_attributes).body
|
71
|
-
|
72
|
-
self.load(body[collection_root]) # 'results' is the key for paged seraches
|
73
|
-
self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
|
77
|
+
collection_page(params)
|
74
78
|
end
|
75
79
|
self
|
76
80
|
end
|
77
81
|
|
78
82
|
# Fetch a single of resource
|
83
|
+
#
|
79
84
|
# @overload get!(identity)
|
80
85
|
# fetch a un-namespaced specific record or a namespaced record under the current {#scopes}
|
81
86
|
# @param [Integer] identity identity of the record
|
@@ -91,12 +96,14 @@ module Zendesk2::PagedCollection
|
|
91
96
|
# @return [Zendesk2::Model] fetched resource corresponding to value of {Zendesk2::Collection#model}
|
92
97
|
def get!(identity_or_hash)
|
93
98
|
scoped_attributes = self.class.scopes.inject({}){|r,k| r.merge(k.to_s => send(k))}
|
99
|
+
|
94
100
|
if identity_or_hash.is_a?(Hash)
|
95
101
|
scoped_attributes.merge!(identity_or_hash)
|
96
|
-
else
|
102
|
+
else
|
103
|
+
scoped_attributes.merge!("id" => identity_or_hash)
|
97
104
|
end
|
98
105
|
|
99
|
-
scoped_attributes = {model_root => scoped_attributes}
|
106
|
+
scoped_attributes = { model_root => scoped_attributes }
|
100
107
|
|
101
108
|
if data = self.service.send(model_method, scoped_attributes).body[self.model_root]
|
102
109
|
new(data)
|
@@ -104,6 +111,7 @@ module Zendesk2::PagedCollection
|
|
104
111
|
end
|
105
112
|
|
106
113
|
# Quiet version of {#get!}
|
114
|
+
#
|
107
115
|
# @see #get!
|
108
116
|
# @return [Zendesk2::Model] Fetched model when successful
|
109
117
|
# @return [NilClass] return nothing if record cannot be found
|
@@ -120,4 +128,24 @@ module Zendesk2::PagedCollection
|
|
120
128
|
@scopes ||= []
|
121
129
|
end
|
122
130
|
end
|
131
|
+
|
132
|
+
protected
|
133
|
+
|
134
|
+
def search_query?(params)
|
135
|
+
!!params["filtered"] && !!params["url"]
|
136
|
+
end
|
137
|
+
|
138
|
+
def search_page(params)
|
139
|
+
query = Faraday::NestedParamsEncoder.decode(URI.parse(params.fetch("url")).query)
|
140
|
+
|
141
|
+
search(query.delete("query"), query)
|
142
|
+
end
|
143
|
+
|
144
|
+
def collection_page(params)
|
145
|
+
scoped_attributes = self.class.scopes.inject({}) { |r, k| r.merge(k.to_s => send(k)) }.merge(params)
|
146
|
+
body = service.send(collection_method, scoped_attributes).body
|
147
|
+
|
148
|
+
self.load(body[collection_root]) # 'results' is the key for paged seraches
|
149
|
+
self.merge_attributes(Cistern::Hash.slice(body, "count", "next_page", "previous_page"))
|
150
|
+
end
|
123
151
|
end
|
data/lib/zendesk2/version.rb
CHANGED
data/spec/users_spec.rb
CHANGED
@@ -73,15 +73,18 @@ describe "users" do
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it "should get requested tickets" do
|
76
|
-
|
76
|
+
another_user = client.users.create!(email: mock_email, name: mock_uuid)
|
77
77
|
|
78
|
-
|
78
|
+
another_user.tickets.create!(collaborators: [user], subject: mock_uuid, description: mock_uuid)
|
79
|
+
ticket = user.tickets.create!(requester: user, subject: mock_uuid, description: mock_uuid)
|
80
|
+
|
81
|
+
expect(user.requested_tickets).to contain_exactly(ticket)
|
79
82
|
end
|
80
83
|
|
81
84
|
it "should get ccd tickets", mock_only: true do
|
82
85
|
ticket = client.tickets.create!(collaborators: [user], subject: mock_uuid, description: mock_uuid)
|
83
86
|
|
84
|
-
expect(user.ccd_tickets).to
|
87
|
+
expect(user.ccd_tickets).to contain_exactly(ticket)
|
85
88
|
end
|
86
89
|
|
87
90
|
it "cannot destroy a user with a 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.5.
|
4
|
+
version: 1.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cistern
|