shopify-api-limits 0.0.7 → 0.0.8
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/lib/shopify-api-limits.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
##
|
2
|
+
# Redefines #find_every to automatically compose resultsets from multiple ShopifyAPI queries due to API limit of 250 records / request.
|
3
|
+
# Seemlessly stitches all requests to #all, #find(:all), etc, as if there were no LIMIT.
|
4
|
+
# @see http://wiki.shopify.com/Retrieving_more_than_250_Products%2C_Orders_etc.
|
5
|
+
#
|
6
|
+
module ActiveResource
|
7
|
+
class Base
|
8
|
+
SHOPIFY_API_MAX_LIMIT = 250
|
9
|
+
|
10
|
+
class << self
|
11
|
+
# get reference to unbound class-method #find_every
|
12
|
+
find_every = self.instance_method(:find_every)
|
13
|
+
|
14
|
+
define_method(:find_every) do |options|
|
15
|
+
options[:params] ||= {}
|
16
|
+
|
17
|
+
# Determine number of ShopifyAPI requests to stitch together all records of this query.
|
18
|
+
limit = options[:params][:limit]
|
19
|
+
|
20
|
+
# Bail out to default functionality unless limit == false
|
21
|
+
return find_every.bind(self).call(options) unless limit == false
|
22
|
+
|
23
|
+
total = count(options).to_f
|
24
|
+
options[:params][:limit] = SHOPIFY_API_MAX_LIMIT
|
25
|
+
pages = (total/SHOPIFY_API_MAX_LIMIT).ceil
|
26
|
+
|
27
|
+
# raise Limits::Error if not enough credits to retrieve entire recordset
|
28
|
+
raise ShopifyAPI::Limits::Error.new unless ShopifyAPI.credit_left >= pages
|
29
|
+
|
30
|
+
# Iterate from 1 -> max-pages and call the original #find_every, capturing the responses into one list
|
31
|
+
rs = []
|
32
|
+
1.upto(pages) {|page|
|
33
|
+
rs.concat find_every.bind(self).call(options.update(:page => page))
|
34
|
+
}
|
35
|
+
rs
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
File without changes
|
data/spec/query_spec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require './spec/boot'
|
2
|
+
|
3
|
+
describe "Query" do
|
4
|
+
it "Can retrieve an all query with empty params" do
|
5
|
+
rs = ShopifyAPI::Product.all
|
6
|
+
(rs.length == ShopifyAPI::Product.count).should be_true
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
it "Can respect limit param when provided" do
|
11
|
+
rs = ShopifyAPI::Product.all(:params => {:limit => 1})
|
12
|
+
puts "limit rs: #{rs.length}"
|
13
|
+
(rs.length == 1).should be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "Can aggregate resultset by using :limit => false" do
|
17
|
+
rs = ShopifyAPI::Product.all(:params => {:limit => false})
|
18
|
+
puts "len: #{rs.length}"
|
19
|
+
(rs.length == ShopifyAPI::Product.count).should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: shopify-api-limits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Chris Scott
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-18 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -61,12 +61,14 @@ files:
|
|
61
61
|
- README.rdoc
|
62
62
|
- Rakefile
|
63
63
|
- lib/shopify-api-limits.rb
|
64
|
+
- lib/shopify-api-limits/active_resource/base.rb
|
64
65
|
- lib/shopify-api-limits/active_resource/connection.rb
|
65
66
|
- lib/shopify-api-limits/shopify_api/limits.rb
|
66
67
|
- lib/shopify-api-limits/version.rb
|
67
68
|
- shopify-api-limits.gemspec
|
68
69
|
- spec/boot.rb
|
69
|
-
- spec/
|
70
|
+
- spec/credits_spec.rb
|
71
|
+
- spec/query_spec.rb
|
70
72
|
- spec/shopify_api.yml.example
|
71
73
|
has_rdoc: true
|
72
74
|
homepage: ""
|
@@ -98,5 +100,6 @@ specification_version: 3
|
|
98
100
|
summary: This gem adds the ability to read shopify API call limits to the ShopifyAPI gem
|
99
101
|
test_files:
|
100
102
|
- spec/boot.rb
|
101
|
-
- spec/
|
103
|
+
- spec/credits_spec.rb
|
104
|
+
- spec/query_spec.rb
|
102
105
|
- spec/shopify_api.yml.example
|