zendesk_api 1.4.3 → 1.4.4

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: 558412300c43c0e2ce45a0c149261bd0a6d60568
4
- data.tar.gz: e64f115c5aa31ada40ff8084bbf2059ac6d53d2b
3
+ metadata.gz: 04ffe4c8d58e8f4e587f813afee1b867cc8e15a6
4
+ data.tar.gz: 12bee85ee43c5d1af6fda0a4f069c6f2cfe57334
5
5
  SHA512:
6
- metadata.gz: f4476bfb5fd72707b5e14a62114d60b30f70e585b59cbc9b695512a666834c55ed3f60367067a0ab39cac12153c88053e53cea913b54a79804279ed9bee3c664
7
- data.tar.gz: 7af9a7e1816ad64d83d525e29a5893cc2b0551bb588fb48953412ab41d461af1a3ed648841317d6a767d0d5c8b4bf7948d79e44d2b6f515de7c0571f5ff9bc16
6
+ metadata.gz: 03cea5cefaecc99504fdf12040b4dc1fc7b1bb12465d2804aec05f794da7c12b0148b196affcdedc3a77b07d97034e24983a0e4d958a716d07673132e78295dd
7
+ data.tar.gz: 0fd99e6c20b86d84b5703282fdb2d9d09a5d4a41d62fbda52b7ccb5b43d038d59b3eefdec02ae7a1d6e14a1fd48940cb135578479f0d15c1c0a0d9965de73203
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zendesk_api (1.4.3)
4
+ zendesk_api (1.4.4)
5
5
  faraday (~> 0.9)
6
6
  hashie (>= 1.2, < 4.0)
7
7
  inflection
@@ -43,7 +43,7 @@ GEM
43
43
  erubis (2.7.0)
44
44
  faraday (0.9.0)
45
45
  multipart-post (>= 1.2, < 3)
46
- hashie (3.2.0)
46
+ hashie (3.3.1)
47
47
  hike (1.2.3)
48
48
  i18n (0.6.11)
49
49
  inflection (1.0.0)
@@ -40,6 +40,7 @@ module ZendeskAPI
40
40
  cached
41
41
  else
42
42
  @resource_cache[method][:class] ||= method_as_class(method)
43
+ raise "Resource for #{method} does not exist" unless @resource_cache[method][:class]
43
44
  @resource_cache[method][:cache].write(options.hash, ZendeskAPI::Collection.new(self, @resource_cache[method][:class], options))
44
45
  end
45
46
  end
@@ -19,6 +19,9 @@ module ZendeskAPI
19
19
  # @return [Hash] query options
20
20
  attr_reader :options
21
21
 
22
+ # @return [ZendeskAPI::ClientError] The last response error
23
+ attr_reader :error
24
+
22
25
  # Creates a new Collection instance. Does not fetch resources.
23
26
  # Additional options are: verb (default: GET), path (default: resource param), page, per_page.
24
27
  # @param [Client] client The {Client} to use.
@@ -176,6 +179,8 @@ module ZendeskAPI
176
179
  def fetch(*args)
177
180
  fetch!(*args)
178
181
  rescue Faraday::Error::ClientError => e
182
+ @error = e
183
+
179
184
  []
180
185
  end
181
186
 
@@ -373,6 +378,7 @@ module ZendeskAPI
373
378
  ## Fetch
374
379
 
375
380
  def get_response(path)
381
+ @error = nil
376
382
  @response = @client.connection.send(@verb || "get", path) do |req|
377
383
  opts = @options.delete_if {|_, v| v.nil?}
378
384
 
@@ -394,6 +400,10 @@ module ZendeskAPI
394
400
  body = response_body.dup
395
401
  results = body.delete(@resource_class.model_key) || body.delete("results")
396
402
 
403
+ unless results
404
+ raise ZendeskAPI::Error::ClientError, "Expected #{@resource_class.model_key} or 'results' in response keys: #{body.keys.inspect}"
405
+ end
406
+
397
407
  @resources = results.map do |res|
398
408
  wrap_resource(res)
399
409
  end
@@ -1,7 +1,6 @@
1
1
  module ZendeskAPI
2
2
  # @internal The following are redefined later, but needed by some circular resources (e.g. Ticket -> User, User -> Ticket)
3
3
 
4
-
5
4
  class Ticket < Resource; end
6
5
  class Forum < Resource; end
7
6
  class User < Resource; end
@@ -103,9 +102,21 @@ module ZendeskAPI
103
102
  end
104
103
  end
105
104
 
106
- class MobileDevice < Resource
107
- # Clears this devices' badge
108
- put :clear_badge
105
+ # @internal This isn't a real resource, it is used by ticket and request comments
106
+ module CommentMixin
107
+ include Save
108
+
109
+ def self.included(klass)
110
+ klass.has_many :uploads, :class => Attachment, :inline => true
111
+ klass.has :author, :class => User
112
+ end
113
+
114
+ def save
115
+ save_associations
116
+ true
117
+ end
118
+
119
+ alias :save! :save
109
120
  end
110
121
 
111
122
  class Organization < Resource
@@ -290,11 +301,11 @@ module ZendeskAPI
290
301
  end
291
302
 
292
303
  class Request < Resource
293
- class Comment < ReadResource
294
- has_many Attachment, :inline => true
295
- has :author, :class => User
304
+ class Comment < DataResource
305
+ include CommentMixin
296
306
  end
297
307
 
308
+ has Comment, :inline => true
298
309
  has_many Comment
299
310
 
300
311
  has Organization
@@ -302,6 +313,14 @@ module ZendeskAPI
302
313
  has :requester, :class => User
303
314
  end
304
315
 
316
+ class AnonymousRequest < CreateResource
317
+ def self.singular_resource_name
318
+ 'request'
319
+ end
320
+
321
+ namespace 'portal'
322
+ end
323
+
305
324
  class TicketField < Resource; end
306
325
 
307
326
  class TicketMetric < DataResource
@@ -325,17 +344,7 @@ module ZendeskAPI
325
344
  end
326
345
 
327
346
  class Comment < DataResource
328
- include Save
329
-
330
- has_many :uploads, :class => Attachment, :inline => true
331
- has :author, :class => User
332
-
333
- def save
334
- save_associations
335
- true
336
- end
337
-
338
- alias :save! :save
347
+ include CommentMixin
339
348
  end
340
349
 
341
350
  put :mark_as_spam
@@ -605,6 +614,7 @@ module ZendeskAPI
605
614
 
606
615
  module Voice
607
616
  include DataNamespace
617
+
608
618
  class PhoneNumber < Resource
609
619
  namespace "channels/voice"
610
620
  end
@@ -1,3 +1,3 @@
1
1
  module ZendeskAPI
2
- VERSION = "1.4.3"
2
+ VERSION = "1.4.4"
3
3
  end
@@ -249,6 +249,10 @@ describe ZendeskAPI::Client do
249
249
  it "looks in the appropriate namespaces" do
250
250
  expect(subject.greetings.association.options['class']).to eq(ZendeskAPI::Voice::Greeting)
251
251
  end
252
+
253
+ it 'raises if the resource does not exist' do
254
+ expect { subject.random_resource }.to raise_error(RuntimeError)
255
+ end
252
256
  end
253
257
 
254
258
  it "can be subclassed" do
@@ -374,6 +374,19 @@ describe ZendeskAPI::Collection do
374
374
  end
375
375
  end
376
376
 
377
+ context "with an invalid model key expectation" do
378
+ before(:each) do
379
+ stub_json_request(:get, %r{test_resources}, json(
380
+ :test_resource_stuff => [{:id => 2}],
381
+ :next_page => "/test_resources?page=2"
382
+ ))
383
+ end
384
+
385
+ it "should properly be handled" do
386
+ expect(subject.fetch(true)).to be_empty
387
+ end
388
+ end
389
+
377
390
  context "with nil body" do
378
391
  before(:each) do
379
392
  stub_request(:get, %r{test_resources}).to_return(:status => 200)
@@ -67,6 +67,14 @@ module ZendeskAPI
67
67
  def suspended_ticket
68
68
  VCR.use_cassette('valid_suspended_ticket') do
69
69
  @suspended_ticket ||= client.suspended_tickets.first
70
+ @suspended_ticket ||= begin
71
+ client.anonymous_requests.create(
72
+ :subject => "Test Ticket",
73
+ :comment => { :value => "Help! I need somebody." },
74
+ :requester => { :email => "zendesk-api-client-ruby-anonymous-#{client.config.username}", :name => 'Anonymous User' }
75
+ )
76
+ client.suspended_tickets(:reload => true).first
77
+ end
70
78
  end
71
79
  end
72
80
 
@@ -12,4 +12,27 @@ describe ZendeskAPI::Request do
12
12
  it_should_be_updatable :subject
13
13
  it_should_be_readable :requests
14
14
  it_should_be_readable user, :requests
15
+
16
+ it "can upload while creating" do
17
+ VCR.use_cassette("request_inline_uploads") do
18
+ request = ZendeskAPI::Request.new(client, valid_attributes)
19
+ request.comment.uploads << "spec/fixtures/Argentina.gif"
20
+ request.comment.uploads << File.new("spec/fixtures/Argentina.gif")
21
+
22
+ request.save!
23
+ expect(request.changes).to eq({}) # uploads were set before save
24
+ expect(request.comment.attributes[:uploads].map(&:class)).to eq([String, String]) # upload was sent as tokens
25
+ end
26
+ end
27
+
28
+ it "can comment while creating" do
29
+ VCR.use_cassette("request_inline_comments") do
30
+ request = ZendeskAPI::Request.new(client, valid_attributes)
31
+ request.comment = ZendeskAPI::Request::Comment.new(client, :value => "My comment")
32
+ request.save!
33
+
34
+ expect(request.changes).to eq({}) # comment was set before save
35
+ expect(request.attributes[:comment]).to eq({"value" => "My comment"})
36
+ end
37
+ end
15
38
  end
@@ -1,8 +1,6 @@
1
1
  require 'core/spec_helper'
2
2
 
3
3
  describe ZendeskAPI::Tag, :vcr, :not_findable do
4
- it_should_be_readable :tags
5
-
6
4
  [organization, topic, ticket].each do |object|
7
5
  under object do
8
6
  before(:each) do
@@ -67,7 +67,7 @@ describe ZendeskAPI::Ticket do
67
67
  it "can import" do
68
68
  VCR.use_cassette("ticket_import_can_import") do
69
69
  old = Time.now - 5*365*24*60*60
70
- ticket = ZendeskAPI::Ticket.import(client, valid_attributes.merge(:created_at => old))
70
+ ticket = ZendeskAPI::Ticket.import(client, valid_attributes.merge(:created_at => old.iso8601))
71
71
  expect(ZendeskAPI::Ticket.find(client, ticket).created_at.year).to eq(old.year)
72
72
  end
73
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zendesk_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Davidovitz
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-05 00:00:00.000000000 Z
12
+ date: 2014-10-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bump