api-resource 0.3.8 → 0.3.9

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: b1da01a90139e2274224eb7a27a0d3e1322506e2
4
- data.tar.gz: 41c7f53985af68690369e6511185d2588542cd50
3
+ metadata.gz: 91739dff4e4b5a22caa8b28e4f293e8a61997f2c
4
+ data.tar.gz: 70682abac9db8189786bf7597d5629b2fa679b90
5
5
  SHA512:
6
- metadata.gz: 8f1acf9d07571d513b26d1b0bfe104b957b7589d0962afdcde1a83d593e7ccdf4137a72a87013ce66d40c27040bf60dce325130d8cb42b59c6dba2b10556d981
7
- data.tar.gz: 9f4fc46e020e99ceee3cc111fc8c9eae897715dcda6b7c8ee85c69993a4656eead7ebf8a1bfda510e4e9a3ebf24742c12a4e48d4ab50dd89c9a358d1682a8c51
6
+ metadata.gz: 0135b77b12c1caff85771812cd7d3c2804d37c6ad275babcb3c9ca096df62127bdc3035eefbe2b3c65ccb3c43a90717d8922ba48c5e0b903cbd03470c2614f28
7
+ data.tar.gz: f084b237826eef6efee741718bfbffbd80602cfeb86c03affd5f79d599aa2343e58bc4de6bc452b2ec4d23b9ed12a09c9b912d4f503ecbcc7bd4119ffe2a775d
@@ -43,6 +43,20 @@ module ApiResource
43
43
  create_resource_collection(result)
44
44
  end
45
45
 
46
+ def self.all_pages(options={})
47
+ options = { page: 1, per_page: 500 }.merge(options)
48
+ per_page = options[:per_page].to_i
49
+ page = options[:page].to_i
50
+ begin
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
56
+ break if yield(arr, page, per_page, total_count) || (page - 1) * per_page + count >= total_count
57
+ page += 1
58
+ end while true
59
+ end
46
60
 
47
61
  def self.where(options, verb=:get)
48
62
  result = client(verb, *(verb==:get ? [{}, "#{resource_name}?#{options.to_param}"] : [options, resource_name]))
@@ -1,3 +1,3 @@
1
1
  module ApiResource
2
- VERSION = '0.3.8'
2
+ VERSION = '0.3.9'
3
3
  end
@@ -33,15 +33,34 @@ RSpec.describe ApiResource::Resource do
33
33
  to_return(status: 200, body: resource.to_json)
34
34
  end
35
35
 
36
+ context '::all_pages' do
37
+ it 'retreive all pages' do
38
+ expected_values = (1..223).map { |i| { id: i, title: "Hello #{i}" } }.each_slice(100).to_a
39
+ expected_values.each_with_index do |objs, i|
40
+ req(:get, "/blogs?page=#{i+1}&per_page=100", { data: objs, meta: { total_count: 223 } })
41
+ end
42
+
43
+ i = 1
44
+ Blog.all_pages(per_page: 100) do |elts, page, per_page, total_count|
45
+ expect(total_count).to eq(223)
46
+ expect(page).to eq(i)
47
+ expect(per_page).to eq(100)
48
+ check_returned_array(Blog, expected_values[i-1], elts)
49
+ i += 1
50
+ false
51
+ end
52
+ expect(i).to eq(4)
53
+ end
54
+ end
55
+
36
56
  before do
37
57
  @expected_resources = { data: [{ id: 1257, title: 'Hello' },
38
58
  { id: 33, title: 'World' },
39
59
  { id: 38, title: 'Bonjour!' }] }
40
60
  end
41
- context '#find' do
61
+ context '::find' do
42
62
  def check_found_resource(expected_value)
43
- expected_value = { id: 1257, title: 'Hello' }
44
- resource_id = 3
63
+ resource_id = 3
45
64
  req(:get, "/blogs/#{resource_id}", expected_value)
46
65
  result = Blog.find(resource_id)
47
66
  check_returned_object(Blog, expected_value, result)
@@ -55,7 +74,7 @@ RSpec.describe ApiResource::Resource do
55
74
  end
56
75
  end
57
76
 
58
- context '#all' do
77
+ context '::all' do
59
78
 
60
79
  it 'fetches all resources' do
61
80
  req(:get, '/blogs', @expected_resources)
@@ -64,7 +83,7 @@ RSpec.describe ApiResource::Resource do
64
83
  end
65
84
  end
66
85
 
67
- context '#where' do
86
+ context '::where' do
68
87
 
69
88
  it 'fetches resourced filtered by query string with GET' do
70
89
  req(:get, '/blogs?title=hello+world&tags%5B%5D=hello&tags%5B%5D=first&tags%5B%5D=greeting', @expected_resources)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api-resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chaker Nakhli