api-resource 0.3.8 → 0.3.9

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.
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