shopify-api-limits 0.0.4 → 0.0.5
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/README.rdoc
CHANGED
@@ -50,4 +50,29 @@ Now it's possible to access the HTTPResponse instance directly from ActiveResour
|
|
50
50
|
foo = ActiveResource::Base.connection.response['http-header-param-foo']
|
51
51
|
|
52
52
|
|
53
|
-
== Installation
|
53
|
+
== Installation
|
54
|
+
gem "shopify_api"
|
55
|
+
gem "shopify-api-limits"
|
56
|
+
|
57
|
+
== Usage
|
58
|
+
count_shop = ShopifyAPI.call_count :shop
|
59
|
+
limit_shop = ShopifyAPI.call_limit :shop
|
60
|
+
|
61
|
+
count_global = ShopifyAPI.call_count :global
|
62
|
+
limit_global = ShopifyAPI.call_limit :global
|
63
|
+
|
64
|
+
Generally, you shouldn't need to use the methods above directly -- rather they're used under-the-hood by the following helpful methods which don't require a scope (:shop/:global): If the <b>:global</b> scope has fewer calls available than the <b>:local</b> scope, the methods will operate upon the <b>:global</b> scope; otherwise, values will be returned based upon the <b>:shop</b> scope.
|
65
|
+
|
66
|
+
unless ShopifyAPI.maxed?
|
67
|
+
#make some ShopifyAPI calls
|
68
|
+
end
|
69
|
+
|
70
|
+
until ShopifyAPI.maxed?
|
71
|
+
# make some ShopifyAPI calls
|
72
|
+
end
|
73
|
+
|
74
|
+
while ShopifyAPI.available_calls
|
75
|
+
# make some ShopifyAPI calls
|
76
|
+
end
|
77
|
+
|
78
|
+
|
data/lib/shopify-api-limits.rb
CHANGED
@@ -2,21 +2,15 @@ require 'active_resource'
|
|
2
2
|
|
3
3
|
module ActiveResource
|
4
4
|
class Connection
|
5
|
-
# HACK
|
5
|
+
# HACK: Add an attr_reader for response
|
6
6
|
attr_reader :response
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
@response = handle_response(result)
|
16
|
-
rescue Timeout::Error => e
|
17
|
-
raise TimeoutError.new(e.message)
|
18
|
-
rescue OpenSSL::SSL::SSLError => e
|
19
|
-
raise SSLError.new(e.message)
|
20
|
-
end
|
7
|
+
|
8
|
+
# capture the original #handle_response as unbound method instead of using alias
|
9
|
+
handle_response = self.instance_method(:handle_response)
|
10
|
+
|
11
|
+
# re-implement #handle_response to capture the returned HTTPResponse to an instance var.
|
12
|
+
define_method(:handle_response) do |response|
|
13
|
+
@response = handle_response.bind(self).call(response)
|
14
|
+
end
|
21
15
|
end
|
22
16
|
end
|
@@ -1,16 +1,22 @@
|
|
1
1
|
module ShopifyAPI
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
}
|
2
|
+
module Limits
|
3
|
+
def self.included(klass)
|
4
|
+
klass.send(:extend, ClassMethods)
|
5
|
+
end
|
6
|
+
end
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
module ClassMethods
|
9
|
+
|
10
|
+
# Takes form num_requests_executed/max_requests
|
11
|
+
# Eg: 101/3000
|
12
|
+
CALL_LIMIT_HEADER_PARAM = {
|
13
|
+
:global => 'http_x_shopify_api_call_limit',
|
14
|
+
:shop => 'http_x_shopify_shop_api_call_limit'
|
15
|
+
}
|
16
|
+
|
17
|
+
##
|
11
18
|
# How many more API calls can I make?
|
12
|
-
#
|
13
|
-
# SHOP: 250/300 60/300
|
19
|
+
# @return {Integer}
|
14
20
|
#
|
15
21
|
def available_calls
|
16
22
|
shop = call_limit(:shop) - call_count(:shop)
|
@@ -20,6 +26,7 @@ module ShopifyAPI
|
|
20
26
|
|
21
27
|
##
|
22
28
|
# Have I reached my API call limit?
|
29
|
+
# @return {Boolean}
|
23
30
|
#
|
24
31
|
def maxed?
|
25
32
|
available_calls == 0
|
@@ -28,7 +35,8 @@ module ShopifyAPI
|
|
28
35
|
##
|
29
36
|
# How many total API calls can I make?
|
30
37
|
# NOTE: subtracting 1 from call_limit because I think ShopifyAPI cuts off at 299/2999 or shop/global limits.
|
31
|
-
# @
|
38
|
+
# @param {Symbol} scope [:shop|:global]
|
39
|
+
# @return {Integer}
|
32
40
|
#
|
33
41
|
def call_limit(scope=:shop)
|
34
42
|
@api_call_limit ||= {}
|
@@ -37,20 +45,28 @@ module ShopifyAPI
|
|
37
45
|
|
38
46
|
##
|
39
47
|
# How many API calls have I made?
|
40
|
-
# @
|
48
|
+
# @param {Symbol} scope [:shop|:global]
|
49
|
+
# @return {Integer}
|
50
|
+
#
|
41
51
|
def call_count(scope=:shop)
|
42
52
|
api_call_limit_param(scope).shift.to_i
|
43
53
|
end
|
44
|
-
|
54
|
+
|
55
|
+
##
|
56
|
+
# @return {HTTPResonse}
|
57
|
+
#
|
45
58
|
def response
|
46
59
|
Shop.current unless ActiveResource::Base.connection.response
|
47
60
|
ActiveResource::Base.connection.response
|
48
61
|
end
|
49
|
-
|
62
|
+
|
50
63
|
private
|
51
|
-
|
64
|
+
|
65
|
+
##
|
66
|
+
# @return {Array}
|
67
|
+
#
|
52
68
|
def api_call_limit_param(scope)
|
53
69
|
response[CALL_LIMIT_HEADER_PARAM[scope]].split('/')
|
54
70
|
end
|
55
|
-
end
|
71
|
+
end
|
56
72
|
end
|
@@ -1 +1 @@
|
|
1
|
-
site:
|
1
|
+
site: <insert your ActiveResource::Base.site url here>
|
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.5
|
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-16 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|