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 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