api-resource 0.3.13 → 0.4.0

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: 12a2916af9f6d3f12a73892c74dbcd5be02b39f3
4
- data.tar.gz: 5c01f287f09b35fc7f8241978299c5c94b6c3a97
3
+ metadata.gz: 3e364dd3af6ba5324fbc0815f624e7ebc9854be1
4
+ data.tar.gz: 691d9b2272b51d7a4e360b63c88f082480e4de9a
5
5
  SHA512:
6
- metadata.gz: d567f5c08141e89c2f000fadf6571b9b180d1bf2a44d94f442cbbb1df94455f0825fecd09f602fb4307807ce6eed1fce520b127d7ae9f619a39aeda56ff565b3
7
- data.tar.gz: e96bdcfc40605cd76e3ef6706497b57dc7e8428d1479c2f65fc4f219a57fb2b35620d871f932c0853af46520af5816e11202675b83b88d3ed3a02ab3de6f0598
6
+ metadata.gz: cc8f81f3b3ffe088c9a8245aa600fe31c94114bc0e725f80ef26ea6de27b35cac59f90003f04cc7a4de3ede18187b9c26a35ff6a4c950050595aacb233f4fd8f
7
+ data.tar.gz: 5560d6dddef680a52344dd4b79554fdf2920dcd022c6f32f9cd85fcba125cb0e50067d35454f77344a3c7723719998f0355181b1552a53c01f48f6e4b3825f3e
@@ -44,15 +44,15 @@ module ApiResource
44
44
  end
45
45
 
46
46
  def self.all_pages(options={})
47
- options = { page: 1, per_page: 500 }.merge(options)
47
+ options = { page: 1, per_page: 500 }.merge(options)
48
48
  per_page = options[:per_page].to_i
49
- page = options[:page].to_i
49
+ page = options[:page].to_i
50
50
  begin
51
51
  options[:page] = page
52
- result = self.where(options)
53
- total_count = result.try :total_count
54
- arr = result.to_a
55
- count = arr.length
52
+ result = self.where(options)
53
+ total_count = result.try :total_count
54
+ arr = result.to_a
55
+ count = arr.length
56
56
  break if yield(arr, page, per_page, total_count) || (page - 1) * per_page + count >= total_count
57
57
  page += 1
58
58
  end while true
@@ -63,6 +63,20 @@ module ApiResource
63
63
  create_resource_collection(result)
64
64
  end
65
65
 
66
+ def save!
67
+ if self.id
68
+ self.class.client(:put, attributes, self.class.resource_name)
69
+ else
70
+ result = self.class.client(:post, attributes, self.class.resource_name)
71
+ json = JSON.parse(result)
72
+ self.attributes = json['data'] || json
73
+ end
74
+ end
75
+
76
+ def destroy!
77
+ self.class.client(:delete, id, self.class.resource_name) if self.id
78
+ end
79
+
66
80
  def attributes
67
81
  instance_values.with_indifferent_access
68
82
  end
@@ -1,3 +1,3 @@
1
1
  module ApiResource
2
- VERSION = '0.3.13'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -27,10 +27,16 @@ RSpec.describe ApiResource::Resource do
27
27
  expect(actual.attributes).to match((expected[:data] || expected).except(*except))
28
28
  end
29
29
 
30
- def req(verb, path, resource)
30
+ def req(verb, path, resource, status=200)
31
31
  stub_request(verb, "#{BlogResource.base_url}#{path}").
32
32
  with(headers: { 'Accept' => 'application/json' }).
33
- to_return(status: 200, body: resource.to_json)
33
+ to_return(status: status, body: resource === String ? resource : resource.to_json)
34
+ end
35
+
36
+ before do
37
+ @expected_resources = { data: [{ id: 1257, title: 'Hello' },
38
+ { id: 33, title: 'World' },
39
+ { id: 38, title: 'Bonjour!' }] }
34
40
  end
35
41
 
36
42
  context '::all_pages' do
@@ -53,11 +59,6 @@ RSpec.describe ApiResource::Resource do
53
59
  end
54
60
  end
55
61
 
56
- before do
57
- @expected_resources = { data: [{ id: 1257, title: 'Hello' },
58
- { id: 33, title: 'World' },
59
- { id: 38, title: 'Bonjour!' }] }
60
- end
61
62
  context '::find' do
62
63
  def check_found_resource(expected_value)
63
64
  resource_id = 3
@@ -175,10 +176,49 @@ RSpec.describe ApiResource::Resource do
175
176
  end
176
177
  end
177
178
  end
179
+
178
180
  context 'empty base_url' do
179
181
  it 'throws on requests' do
180
- class Foo < ApiResource::Resource; end
182
+ class Foo < ApiResource::Resource;
183
+ end
181
184
  expect(-> { Foo.all }).to raise_exception(StandardError)
182
185
  end
183
186
  end
187
+
188
+ context '#save!' do
189
+ it 'POSTs data when id is nil' do
190
+ blog = Blog.new(title: 'hello')
191
+ expect(blog.id).to be_nil
192
+ expected_value = { data: { id: 325, title: 'hello' } }
193
+
194
+ stub = req(:post, '/blogs', expected_value, 201)
195
+ blog.save!
196
+ check_returned_object(Blog, expected_value, blog)
197
+ expect(stub).to have_been_requested
198
+ end
199
+ it 'PUTs data when id is not nil' do
200
+ blog_id = 525
201
+ blog = Blog.new(id: blog_id, title: 'hello')
202
+
203
+ stub = req(:put, '/blogs', '', 204)
204
+ blog.save!
205
+ expect(blog.id).to eq(blog_id)
206
+ expect(stub).to have_been_requested
207
+ end
208
+ end
209
+
210
+ context '#destroy!' do
211
+ it 'DELETEs data when id is not nil' do
212
+ blog = Blog.new(id: 323, title: 'hello')
213
+ stub = req(:delete, '/blogs', '', 204)
214
+ blog.destroy!
215
+ expect(stub).to have_been_requested
216
+ end
217
+ it 'not DELETE data when id is nil' do
218
+ blog = Blog.new(id: nil, title: 'hello')
219
+ stub = req(:delete, '/blogs', '', 204)
220
+ blog.destroy!
221
+ expect(stub).to_not have_been_requested
222
+ end
223
+ end
184
224
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api-resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.13
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chaker Nakhli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-03 00:00:00.000000000 Z
11
+ date: 2015-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple-hmac