zendesk_api 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -7,7 +7,7 @@ GIT
7
7
  PATH
8
8
  remote: .
9
9
  specs:
10
- zendesk_api (1.1.2)
10
+ zendesk_api (1.1.3)
11
11
  faraday (>= 0.8.0)
12
12
  faraday_middleware (>= 0.8.7)
13
13
  hashie (>= 1.2)
@@ -273,6 +273,8 @@ module ZendeskAPI
273
273
  extend Read
274
274
  end
275
275
 
276
+ class TicketRelated < DataResource; end
277
+
276
278
  class Ticket < Resource
277
279
  class Audit < DataResource
278
280
  class Event < Data
@@ -299,6 +301,8 @@ module ZendeskAPI
299
301
  alias :save! :save
300
302
  end
301
303
 
304
+ put :mark_as_spam
305
+
302
306
  has :requester, :class => User, :inline => :create
303
307
  has :submitter, :class => User
304
308
  has :assignee, :class => User
@@ -308,6 +312,7 @@ module ZendeskAPI
308
312
  has Group
309
313
  has :forum_topic, :class => Topic
310
314
  has Organization
315
+ has :related, :class => TicketRelated
311
316
 
312
317
  has :comment, :class => Comment, :inline => true
313
318
  has :last_comment, :class => Comment, :inline => true
@@ -449,6 +454,28 @@ module ZendeskAPI
449
454
  self.role_id = role.name if key?(:role)
450
455
  end
451
456
 
457
+ any :password
458
+
459
+ # Set a user's password
460
+ def set_password(opts = {})
461
+ password(opts.merge(:verb => :post))
462
+ end
463
+
464
+ # Change a user's password
465
+ def change_password(opts = {})
466
+ password(opts.merge(:verb => :put))
467
+ end
468
+
469
+ # Set a user's password
470
+ def set_password!(opts = {})
471
+ password!(opts.merge(:verb => :post))
472
+ end
473
+
474
+ # Change a user's password
475
+ def change_password!(opts = {})
476
+ password!(opts.merge(:verb => :put))
477
+ end
478
+
452
479
  has Organization
453
480
 
454
481
  has CustomRole, :inline => true, :include => :roles
@@ -10,24 +10,46 @@ module ZendeskAPI
10
10
  # Reloads the resource's attributes if any are in the response body.
11
11
  #
12
12
  # Created method takes an optional options hash. Valid options to be passed in to the created method: reload (for caching, default: false)
13
- def create_verb(verb)
14
- define_method verb do |method|
15
- define_method method do |*method_args|
13
+ def create_verb(method_verb)
14
+ define_method method_verb do |method|
15
+ define_method "#{method}!" do |*method_args|
16
16
  opts = method_args.last.is_a?(Hash) ? method_args.pop : {}
17
- return instance_variable_get("@_#{verb}_#{method}") if instance_variable_defined?("@_#{verb}_#{method}") && !opts[:reload]
18
17
 
19
- response = @client.connection.send(verb, "#{path}/#{method}") do |req|
20
- req.body = opts
18
+ if method_verb == :any
19
+ verb = opts.delete(:verb)
20
+ raise(ArgumentError, ":verb required for method defined as :any") unless verb
21
+ else
22
+ verb = method_verb
21
23
  end
22
24
 
23
- if (resources = response.body[self.class.resource_name]) &&
24
- (res = resources.find {|res| res["id"] == id})
25
- @attributes = ZendeskAPI::Trackie.new(res)
26
- @attributes.clear_changes
25
+ @response = @client.connection.send(verb, "#{path}/#{method}") do |req|
26
+ req.body = opts
27
27
  end
28
28
 
29
+ return false unless @response.success?
30
+ return false unless @response.body
31
+
32
+ resource = @response.body[self.class.singular_resource_name] ||
33
+ @response.body.fetch(self.class.resource_name, []).detect {|res| res["id"] == id} ||
34
+ {}
35
+
36
+ @attributes.replace @attributes.deep_merge(resource)
37
+ @attributes.clear_changes
38
+ clear_associations
39
+
29
40
  true
30
41
  end
42
+
43
+ define_method method do |*method_args|
44
+ begin
45
+ send("#{method}!", *method_args)
46
+ rescue ZendeskAPI::Error::RecordInvalid => e
47
+ @errors = e.errors
48
+ false
49
+ rescue ZendeskAPI::Error::ClientError
50
+ false
51
+ end
52
+ end
31
53
  end
32
54
  end
33
55
  end
@@ -35,5 +57,6 @@ module ZendeskAPI
35
57
  create_verb :put
36
58
  create_verb :post
37
59
  create_verb :delete
60
+ create_verb :any
38
61
  end
39
62
  end
@@ -1,3 +1,3 @@
1
1
  module ZendeskAPI
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  end
@@ -305,6 +305,74 @@ describe ZendeskAPI::Resource do
305
305
  end
306
306
  end
307
307
 
308
+ context "on any" do
309
+ let(:method) { "test_any_method" }
310
+
311
+ before(:each) do
312
+ ZendeskAPI::TestResource.any method
313
+ end
314
+
315
+ context "class method" do
316
+ subject { ZendeskAPI::TestResource }
317
+
318
+ it "should create a method of the same name" do
319
+ subject.instance_methods.map(&:to_s).should include(method)
320
+ end
321
+ end
322
+
323
+ context "instance method" do
324
+ subject { ZendeskAPI::TestResource.new(client, :id => 1) }
325
+
326
+ it "throws an argumenterror without a :verb" do
327
+ expect { subject.send(method) }.to raise_error(ArgumentError)
328
+ end
329
+
330
+ context "with an array response" do
331
+ before(:each) do
332
+ stub_json_request(:put, %r{test_resources/1/#{method}}, json(:test_resources => [{ :id => 1, :method => method }]))
333
+ end
334
+
335
+ it "should return true" do
336
+ subject.send(method, :verb => :put).should be_true
337
+ end
338
+
339
+ it "should update the attributes if they exist" do
340
+ subject.send(method, :verb => :put)
341
+ subject[:method].should == method
342
+ end
343
+ end
344
+
345
+ context "with a resource response" do
346
+ before(:each) do
347
+ stub_json_request(:put, %r{test_resources/1/#{method}}, json(:test_resource => { :id => 1, :method => method }))
348
+ end
349
+
350
+ it "should return true" do
351
+ subject.send(method, :verb => :put).should be_true
352
+ end
353
+
354
+ it "should update the attributes if they exist" do
355
+ subject.send(method, :verb => :put)
356
+ subject[:method].should == method
357
+ end
358
+ end
359
+
360
+ context "with client error" do
361
+ before(:each) do
362
+ stub_request(:put, %r{test_resources/1/#{method}}).to_return(:status => 500)
363
+ end
364
+
365
+ it "doesn't raise without bang" do
366
+ silence_logger { subject.send("#{method}", :verb => :put).should be_false }
367
+ end
368
+
369
+ it "raises with bang" do
370
+ expect { silence_logger{ subject.send("#{method}!", :verb => :put) } }.to raise_error(ZendeskAPI::Error::ClientError)
371
+ end
372
+ end
373
+ end
374
+ end
375
+
308
376
  %w{put post delete}.each do |verb|
309
377
  context "on #{verb}" do
310
378
  let(:method) { "test_#{verb}_method" }
@@ -323,17 +391,34 @@ describe ZendeskAPI::Resource do
323
391
  context "instance method" do
324
392
  subject { ZendeskAPI::TestResource.new(client, :id => 1) }
325
393
 
326
- before(:each) do
327
- stub_json_request(verb.to_sym, %r{test_resources/1/#{method}}, json(:test_resources => [{ :id => 1, :method => method }]))
328
- end
394
+ context "with an array response" do
395
+ before(:each) do
396
+ stub_json_request(verb.to_sym, %r{test_resources/1/#{method}}, json(:test_resources => [{ :id => 1, :method => method }]))
397
+ end
329
398
 
330
- it "should return true" do
331
- subject.send(method).should be_true
399
+ it "should return true" do
400
+ subject.send(method).should be_true
401
+ end
402
+
403
+ it "should update the attributes if they exist" do
404
+ subject.send(method)
405
+ subject[:method].should == method
406
+ end
332
407
  end
333
408
 
334
- it "should update the attributes if they exist" do
335
- subject.send(method)
336
- subject[:method].should == method
409
+ context "with a resource response" do
410
+ before(:each) do
411
+ stub_json_request(verb.to_sym, %r{test_resources/1/#{method}}, json(:test_resource => { :id => 1, :method => method }))
412
+ end
413
+
414
+ it "should return true" do
415
+ subject.send(method).should be_true
416
+ end
417
+
418
+ it "should update the attributes if they exist" do
419
+ subject.send(method)
420
+ subject[:method].should == method
421
+ end
337
422
  end
338
423
 
339
424
  context "with client error" do
@@ -341,8 +426,12 @@ describe ZendeskAPI::Resource do
341
426
  stub_request(verb.to_sym, %r{test_resources/1/#{method}}).to_return(:status => 500)
342
427
  end
343
428
 
344
- it "should raise" do
345
- expect { silence_logger{ subject.send(method) } }.to raise_error(ZendeskAPI::Error::ClientError)
429
+ it "doesn't raise without bang" do
430
+ silence_logger { subject.send("#{method}").should be_false }
431
+ end
432
+
433
+ it "raises with bang" do
434
+ expect { silence_logger{ subject.send("#{method}!") } }.to raise_error(ZendeskAPI::Error::ClientError)
346
435
  end
347
436
  end
348
437
  end
@@ -17,6 +17,16 @@ describe ZendeskAPI::User, :delete_after do
17
17
  end
18
18
  end
19
19
 
20
+ context "passwords", :vcr do
21
+ it "sets the password" do
22
+ agent.set_password!(:password => client.config.password)
23
+ end
24
+
25
+ it "changes the password" do
26
+ current_user.change_password!(:previous_password => client.config.password, :password => client.config.password)
27
+ end
28
+ end
29
+
20
30
  context "side-loading" do
21
31
  context "no permission set" do
22
32
  subject do
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.1.2
4
+ version: 1.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-10-29 00:00:00.000000000 Z
13
+ date: 2013-11-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bump