zendesk_api 0.3.0 → 0.3.1

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.
data/Gemfile.lock CHANGED
@@ -13,7 +13,7 @@ GIT
13
13
  PATH
14
14
  remote: .
15
15
  specs:
16
- zendesk_api (0.3.0)
16
+ zendesk_api (0.3.1)
17
17
  faraday (>= 0.8.0)
18
18
  faraday_middleware (>= 0.8.7)
19
19
  hashie
@@ -54,7 +54,7 @@ GEM
54
54
  diff-lcs (1.1.3)
55
55
  eventmachine (1.0.0)
56
56
  eventmachine (1.0.0-java)
57
- faraday (0.8.5)
57
+ faraday (0.8.6)
58
58
  multipart-post (~> 1.1)
59
59
  faraday_middleware (0.9.0)
60
60
  faraday (>= 0.7.4, < 0.9)
@@ -75,7 +75,7 @@ GEM
75
75
  multi_json (1.5.0)
76
76
  newrelic_rpm (3.5.3.25)
77
77
  origin (1.0.11)
78
- rack (1.5.1)
78
+ rack (1.5.2)
79
79
  rack-protection (1.3.2)
80
80
  rack
81
81
  rack-ssl-enforcer (0.2.5)
@@ -61,7 +61,7 @@ module ZendeskAPI
61
61
  self.send("#{association_name}=", association) # set id/ids columns
62
62
  end
63
63
 
64
- if association_data[:inline] == true || inline_creation
64
+ if (association_data[:inline] == true || inline_creation) && association.changed?
65
65
  attributes[association_name] = (association.is_a?(Collection) ? association.map(&:to_param) : association.to_param)
66
66
  end
67
67
  end
@@ -111,7 +111,7 @@ module ZendeskAPI
111
111
  klass.find(@client, :id => resource_id, :association => instance_association)
112
112
  elsif found = method_missing(association[:name].to_sym)
113
113
  wrap_resource(found, association)
114
- elsif klass.superclass == DataResource
114
+ elsif klass.superclass == DataResource && !association[:inline]
115
115
  rescue_client_error do
116
116
  response = @client.connection.get(instance_association.generate_path(:with_parent => true))
117
117
  klass.new(@client, response.body[klass.singular_resource_name].merge(:association => instance_association))
@@ -169,8 +169,8 @@ module ZendeskAPI
169
169
 
170
170
  # Calls #each on every page with the passed in block
171
171
  # @param [Block] block Passed to #each
172
- def each_page(&block)
173
- page(nil)
172
+ def each_page(start_page = @options["page"], &block)
173
+ page(start_page)
174
174
  clear_cache
175
175
 
176
176
  while !empty?
@@ -48,6 +48,9 @@ module ZendeskAPI
48
48
 
49
49
  class Upload < Data
50
50
  include Create
51
+ include Destroy
52
+
53
+ def id; token; end
51
54
 
52
55
  only_send_unnested_params
53
56
 
@@ -328,16 +331,9 @@ module ZendeskAPI
328
331
  put :request_verification
329
332
  end
330
333
 
331
- def initialize(*)
332
- super
333
-
334
- # Needed for side-loading to work
335
- self.role_id = role.id if self.key?(:role)
336
- end
337
-
338
334
  has Organization
339
335
 
340
- has CustomRole, :include => :roles
336
+ has CustomRole, :inline => true, :include => :roles
341
337
  has Role, :inline => true, :include_key => :name
342
338
  has Ability, :inline => true
343
339
 
@@ -41,8 +41,12 @@ module ZendeskAPI
41
41
  end
42
42
 
43
43
  def regular_writer(key, value)
44
- changes[key] = value
45
- defined?(_store) ? _store(key, value) : super(key, value)
44
+ if self.has_key?(key) && self[key] == value
45
+ value
46
+ else
47
+ changes[key] = value
48
+ defined?(_store) ? _store(key, value) : super(key, value)
49
+ end
46
50
  end
47
51
 
48
52
  def delete(key)
@@ -5,5 +5,10 @@ module ZendeskAPI
5
5
  # @private
6
6
  class Trackie < Hashie::Mash
7
7
  include ZendeskAPI::TrackChanges
8
+
9
+ def size
10
+ self['size']
11
+ end
12
+
8
13
  end
9
14
  end
@@ -1,3 +1,3 @@
1
1
  module ZendeskAPI
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -166,49 +166,86 @@ describe ZendeskAPI::Collection do
166
166
  end
167
167
 
168
168
  context "each_page" do
169
- before(:each) do
170
- stub_json_request(:get, %r{test_resources$}, json(
171
- :test_resources => [{:id => 1}],
172
- :next_page => "/test_resources?page=2"
173
- ))
169
+ context "Faraday errors" do
170
+ before(:each) do
171
+ stub_json_request(:get, %r{test_resources$}, json(
172
+ :test_resources => [{:id => 1}], :next_page => "/test_resources?page=2"
173
+ ))
174
174
 
175
- stub_json_request(:get, %r{test_resources\?page=2}, json(
176
- :test_resources => [{:id => 2}],
177
- :next_page => "/test_resources?page=3"
178
- ))
175
+ stub_request(:get, %r{test_resources\?page=2}).to_return(:status => 500).then.to_return(
176
+ :headers => { :content_type => "application/json" }, :status => 200,
177
+ :body => json(:test_resources => [{:id => 2}], :next_page => "/test_resources?page=3"))
179
178
 
180
- stub_request(:get, %r{test_resources\?page=3}).to_return(:status => 404)
181
- end
179
+ stub_request(:get, %r{test_resources\?page=3}).to_return(:status => 404)
180
+ end
182
181
 
183
- it "should yield resource if arity == 1" do
184
- expect do |block|
185
- # Needed to make sure the arity == 1
186
- block.instance_eval do
187
- def to_proc
188
- @used = true
182
+ it "should retry from the same page" do
183
+ class SearchError < Exception; end
189
184
 
190
- probe = self
191
- Proc.new do |arg|
192
- probe.num_yields += 1
193
- probe.yielded_args << [arg]
185
+ expect do |b|
186
+ client.insert_callback do |env|
187
+ if env[:status] == 500 && env[:url].request_uri =~ /test_resources/
188
+ raise SearchError
194
189
  end
195
190
  end
196
- end
197
191
 
198
- silence_logger { subject.each_page(&block) }
199
- end.to yield_successive_args(
200
- ZendeskAPI::TestResource.new(client, :id => 1),
201
- ZendeskAPI::TestResource.new(client, :id => 2)
202
- )
192
+ begin
193
+ silence_logger { subject.each_page(&b) }
194
+ rescue SearchError
195
+ retry
196
+ end
197
+ end.to yield_successive_args(
198
+ [ZendeskAPI::TestResource.new(client, :id => 1), 1],
199
+ [ZendeskAPI::TestResource.new(client, :id => 2), 2]
200
+ )
201
+ end
203
202
  end
204
203
 
205
- it "should yield resource and page" do
206
- expect do |b|
207
- silence_logger { subject.each_page(&b) }
208
- end.to yield_successive_args(
209
- [ZendeskAPI::TestResource.new(client, :id => 1), 1],
210
- [ZendeskAPI::TestResource.new(client, :id => 2), 2]
211
- )
204
+ context "successful requests" do
205
+ before(:each) do
206
+ stub_json_request(:get, %r{test_resources$}, json(
207
+ :test_resources => [{:id => 1}],
208
+ :next_page => "/test_resources?page=2"
209
+ ))
210
+
211
+ stub_json_request(:get, %r{test_resources\?page=2}, json(
212
+ :test_resources => [{:id => 2}],
213
+ :next_page => "/test_resources?page=3"
214
+ ))
215
+
216
+ stub_request(:get, %r{test_resources\?page=3}).to_return(:status => 404)
217
+ end
218
+
219
+ it "should yield resource if arity == 1" do
220
+ expect do |block|
221
+ # Needed to make sure the arity == 1
222
+ block.instance_eval do
223
+ def to_proc
224
+ @used = true
225
+
226
+ probe = self
227
+ Proc.new do |arg|
228
+ probe.num_yields += 1
229
+ probe.yielded_args << [arg]
230
+ end
231
+ end
232
+ end
233
+
234
+ silence_logger { subject.each_page(&block) }
235
+ end.to yield_successive_args(
236
+ ZendeskAPI::TestResource.new(client, :id => 1),
237
+ ZendeskAPI::TestResource.new(client, :id => 2)
238
+ )
239
+ end
240
+
241
+ it "should yield resource and page" do
242
+ expect do |b|
243
+ silence_logger { subject.each_page(&b) }
244
+ end.to yield_successive_args(
245
+ [ZendeskAPI::TestResource.new(client, :id => 1), 1],
246
+ [ZendeskAPI::TestResource.new(client, :id => 2), 2]
247
+ )
248
+ end
212
249
  end
213
250
  end
214
251
 
@@ -12,6 +12,29 @@ describe ZendeskAPI::DataResource do
12
12
  ZendeskAPI::Category.resource_name.should == "categories"
13
13
  end
14
14
 
15
+ context "association" do
16
+ subject { ZendeskAPI::TestResource.new(client, :id => 1) }
17
+ let(:options) {{}}
18
+
19
+ before(:each) do
20
+ ZendeskAPI::TestResource.has :nil, options.merge(:class => ZendeskAPI::NilDataResource)
21
+ end
22
+
23
+ it "should try and find non-existant object" do
24
+ stub_json_request(:get, %r{test_resources/1/nil}, json(:nil_data_resource => {}))
25
+
26
+ subject.nil.should be_instance_of(ZendeskAPI::NilDataResource)
27
+ end
28
+
29
+ context "inline => true" do
30
+ let(:options) {{ :inline => true }}
31
+
32
+ it "should not try and find non-existant object" do
33
+ subject.nil
34
+ end
35
+ end
36
+ end
37
+
15
38
  context "user" do
16
39
  context "with first order attributes" do
17
40
  subject { ZendeskAPI::TestResource.new(client) }
@@ -239,12 +239,20 @@ describe ZendeskAPI::Resource do
239
239
  ZendeskAPI::TestResource.has :nil, :class => ZendeskAPI::NilResource, :inline => true
240
240
 
241
241
  subject.nil = { :abc => :def }
242
- subject.save_associations
243
242
  end
244
243
 
245
244
  it "should save param data" do
245
+ subject.save_associations
246
+
246
247
  subject.attributes[:nil].should == "TESTDATA"
247
248
  end
249
+
250
+ it "should not save param data when unchanged" do
251
+ subject.nil.clear_changes
252
+ subject.save_associations
253
+
254
+ subject.attributes[:nil].should be_nil
255
+ end
248
256
  end
249
257
 
250
258
  context "create" do
@@ -9,7 +9,7 @@ describe ZendeskAPI::Trackie do
9
9
  end
10
10
 
11
11
  context "adding keys" do
12
- before(:each) { subject[:key] = true }
12
+ before(:each) { subject[:key] = true }
13
13
 
14
14
  it "should include key in changes" do
15
15
  subject.changes[:key].should be_true
@@ -21,6 +21,24 @@ describe ZendeskAPI::Trackie do
21
21
  end
22
22
  end
23
23
 
24
+ context "adding identical keys" do
25
+ before(:each) do
26
+ subject[:key] = "foo"
27
+ subject.clear_changes
28
+
29
+ subject[:key] = "foo"
30
+ end
31
+
32
+ it "should not include key in changes" do
33
+ subject.changes[:key].should be_false
34
+ end
35
+
36
+ specify "key should not be changed" do
37
+ subject.changed?(:key).should be_false
38
+ subject.changed?.should be_false
39
+ end
40
+ end
41
+
24
42
  context "nested hashes" do
25
43
  before(:each) do
26
44
  subject[:key] = ZendeskAPI::Trackie.new
@@ -36,4 +54,14 @@ describe ZendeskAPI::Trackie do
36
54
  subject.changed?.should be_true
37
55
  end
38
56
  end
57
+
58
+ describe "#size" do
59
+ before do
60
+ subject[:size] = 42
61
+ end
62
+
63
+ it "returns the value corresponding to the :size key" do
64
+ subject.size.should == 42
65
+ end
66
+ end
39
67
  end
@@ -8,5 +8,5 @@ class ZendeskAPI::TestResource < ZendeskAPI::Resource
8
8
  end
9
9
 
10
10
  class ZendeskAPI::NilResource < ZendeskAPI::Data; end
11
-
11
+ class ZendeskAPI::NilDataResource < ZendeskAPI::DataResource; end
12
12
  class ZendeskAPI::SingularTestResource < ZendeskAPI::SingularResource; end
@@ -5,5 +5,6 @@ describe ZendeskAPI::Upload, :not_findable do
5
5
  { :file => "spec/fixtures/Argentina.gif" }
6
6
  end
7
7
 
8
- it_should_be_creatable :id => :token
8
+ it_should_be_creatable
9
+ it_should_be_deletable
9
10
  end
@@ -18,7 +18,7 @@ module ResourceMacros
18
18
 
19
19
  it "should have an id" do
20
20
  @object.should_not be_nil
21
- @object.send(options[:id] || :id).should_not be_nil
21
+ @object.send(:id).should_not be_nil
22
22
  end
23
23
 
24
24
  it "should be findable", :unless => metadata[:not_findable] 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: 0.3.0
4
+ version: 0.3.1
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-02-19 00:00:00.000000000 Z
13
+ date: 2013-03-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bump
@@ -527,7 +527,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
527
527
  version: 1.3.6
528
528
  requirements: []
529
529
  rubyforge_project:
530
- rubygems_version: 1.8.24
530
+ rubygems_version: 1.8.25
531
531
  signing_key:
532
532
  specification_version: 3
533
533
  summary: Zendesk REST API Client