shopify-api-limits 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
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
|