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 +4 -4
- data/lib/api-resource/resource.rb +14 -0
- data/lib/api-resource/version.rb +1 -1
- data/spec/resource_spec.rb +24 -5
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91739dff4e4b5a22caa8b28e4f293e8a61997f2c
|
4
|
+
data.tar.gz: 70682abac9db8189786bf7597d5629b2fa679b90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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]))
|
data/lib/api-resource/version.rb
CHANGED
data/spec/resource_spec.rb
CHANGED
@@ -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 '
|
61
|
+
context '::find' do
|
42
62
|
def check_found_resource(expected_value)
|
43
|
-
|
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 '
|
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 '
|
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)
|