zendesk2 1.5.6 → 1.5.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae7794df49e6001b5afe94bf42032f484e7064a5
4
- data.tar.gz: 1d8cc12a0ddd74b1a247e7844a116523a34f31d2
3
+ metadata.gz: 75b7edcb167743af22e5cc652acb0a0f38b4aa5a
4
+ data.tar.gz: 68e451d5857884091f5144e0b26f2b9ae38eb59f
5
5
  SHA512:
6
- metadata.gz: f9d325750f39bee7408bd0c39a56a732285d325e0bb90320f07cd0ca2e918492fa8b2dd50e87000cf2622a58524996c586adff07ac54dd53435c31d9318c23eb
7
- data.tar.gz: 95be3f9e5c3c53e072ee82a9b752d25e402afc0765f0b34774ebf624044e7b4515d78de9abdffeb272c595aa5481b6a1b9c2bd68db8375208634670233940c06
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
- self.collection_method = :get_tickets
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
- raise "don't nuke yourself" if self.email == service.username
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.load(
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'eD
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.load(
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.user_id}/tickets/ccd.json" }
2
+ request_path { |r| "/users/#{r.collaborator_id}/tickets/ccd.json" }
3
3
 
4
4
  page_params!
5
5
 
6
- def user_id
7
- params.fetch("user_id").to_i
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?(user_id) }
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.user_id}/tickets/requested.json" }
3
+ request_path { |r| "/users/#{r.requester_id}/tickets/requested.json" }
4
4
 
5
5
  page_params!
6
6
 
7
- def user_id
8
- params.fetch("user_id").to_i
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"] == user_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 [Cistern::Model]
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 [Cistern::Model, FalseClass]
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 params["filtered"] && (url = params["url"])
66
- query = Faraday::NestedParamsEncoder.decode(URI.parse(url).query)
67
- search(query.delete("query"), query)
74
+ if search_query?(params)
75
+ search_page(params)
68
76
  else
69
- scoped_attributes = self.class.scopes.inject({}){|r,k| r.merge(k.to_s => send(k))}.merge(params)
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 scoped_attributes.merge!("id" => identity_or_hash)
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
@@ -1,3 +1,3 @@
1
1
  module Zendesk2
2
- VERSION = "1.5.6"
2
+ VERSION = "1.5.7"
3
3
  end
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
- ticket = client.tickets.create!(requester: user, subject: mock_uuid, description: mock_uuid)
76
+ another_user = client.users.create!(email: mock_email, name: mock_uuid)
77
77
 
78
- expect(user.requested_tickets).to include ticket
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 include ticket
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.6
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-26 00:00:00.000000000 Z
11
+ date: 2015-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cistern