shopify-api-limits 0.0.3 → 0.0.4
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/.gitignore +1 -0
- data/lib/shopify-api-limits.rb +17 -3
- data/lib/shopify-api-limits/active_resource/connection.rb +3 -1
- data/lib/shopify-api-limits/shopify_api/shopify_api.rb +25 -15
- data/lib/shopify-api-limits/version.rb +1 -1
- data/shopify-api-limits.gemspec +2 -0
- data/spec/boot.rb +7 -0
- data/spec/limits.rb +32 -0
- data/spec/shopify_api.yml.example +1 -0
- metadata +30 -3
data/.gitignore
CHANGED
data/lib/shopify-api-limits.rb
CHANGED
@@ -1,10 +1,24 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
2
|
|
3
|
-
require 'shopify-api-limits/active_resource/connection'
|
4
|
-
require 'shopify-api-limits/shopify_api/shopify_api'
|
5
|
-
|
6
3
|
module ShopifyAPI
|
7
4
|
module Limits
|
5
|
+
# Connection hack
|
6
|
+
require 'shopify-api-limits/active_resource/connection'
|
7
|
+
|
8
|
+
require 'shopify-api-limits/shopify_api/shopify_api'
|
8
9
|
|
10
|
+
class Error < StandardError
|
11
|
+
def self.status_code(code = nil)
|
12
|
+
return @code unless code
|
13
|
+
@code = code
|
14
|
+
end
|
15
|
+
|
16
|
+
def status_code
|
17
|
+
self.class.status_code
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class GlobalError < Error; status_code(1) ; end
|
22
|
+
class ShopError < Error; status_code(2) ; end
|
9
23
|
end
|
10
24
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'active_resource'
|
2
|
+
|
1
3
|
module ActiveResource
|
2
4
|
class Connection
|
3
5
|
# HACK 1: Add an attr_reader for response
|
4
6
|
attr_reader :response
|
5
7
|
|
6
|
-
def request(method, path, *arguments)
|
8
|
+
def request(method, path, *arguments)
|
7
9
|
result = ActiveSupport::Notifications.instrument("request.active_resource") do |payload|
|
8
10
|
payload[:method] = method
|
9
11
|
payload[:request_uri] = "#{site.scheme}://#{site.host}:#{site.port}#{path}"
|
@@ -1,46 +1,56 @@
|
|
1
1
|
module ShopifyAPI
|
2
2
|
# Takes form num_requests_executed/max_requests
|
3
3
|
# Eg: 101/3000
|
4
|
-
|
5
|
-
|
4
|
+
CALL_LIMIT_HEADER_PARAM = {
|
5
|
+
:global => 'http_x_shopify_api_call_limit',
|
6
|
+
:shop => 'http_x_shopify_shop_api_call_limit'
|
7
|
+
}
|
6
8
|
|
7
9
|
class << self
|
8
10
|
##
|
9
11
|
# How many more API calls can I make?
|
12
|
+
# GLOBAL: 10/3000 2999/3000
|
13
|
+
# SHOP: 250/300 60/300
|
10
14
|
#
|
11
|
-
def available_calls
|
12
|
-
call_limit - call_count
|
15
|
+
def available_calls
|
16
|
+
shop = call_limit(:shop) - call_count(:shop)
|
17
|
+
global = call_limit(:global) - call_count(:global)
|
18
|
+
shop < global ? shop : global
|
13
19
|
end
|
14
20
|
|
15
21
|
##
|
16
22
|
# Have I reached my API call limit?
|
17
23
|
#
|
18
|
-
def
|
19
|
-
|
24
|
+
def maxed?
|
25
|
+
available_calls == 0
|
20
26
|
end
|
21
27
|
|
22
28
|
##
|
23
29
|
# How many total API calls can I make?
|
30
|
+
# NOTE: subtracting 1 from call_limit because I think ShopifyAPI cuts off at 299/2999 or shop/global limits.
|
24
31
|
# @return Integer
|
25
32
|
#
|
26
|
-
def call_limit
|
27
|
-
@api_call_limit ||=
|
33
|
+
def call_limit(scope=:shop)
|
34
|
+
@api_call_limit ||= {}
|
35
|
+
@api_call_limit[scope] ||= api_call_limit_param(scope).pop.to_i - 1
|
28
36
|
end
|
29
37
|
|
30
38
|
##
|
31
39
|
# How many API calls have I made?
|
32
40
|
# @return Integer
|
33
|
-
def call_count
|
34
|
-
api_call_limit_param.shift.to_i
|
41
|
+
def call_count(scope=:shop)
|
42
|
+
api_call_limit_param(scope).shift.to_i
|
35
43
|
end
|
36
|
-
|
37
|
-
def api_call_limit_param
|
38
|
-
response[CALL_LIMIT_HEADER_GLOBAL].split('/')
|
39
|
-
end
|
40
|
-
|
44
|
+
|
41
45
|
def response
|
42
46
|
Shop.current unless ActiveResource::Base.connection.response
|
43
47
|
ActiveResource::Base.connection.response
|
44
48
|
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def api_call_limit_param(scope)
|
53
|
+
response[CALL_LIMIT_HEADER_PARAM[scope]].split('/')
|
54
|
+
end
|
45
55
|
end
|
46
56
|
end
|
data/shopify-api-limits.gemspec
CHANGED
@@ -15,6 +15,8 @@ Gem::Specification.new do |s|
|
|
15
15
|
#s.rubyforge_project = "shopify-api-limits"
|
16
16
|
|
17
17
|
s.add_dependency "shopify_api", ">= 1.2.2"
|
18
|
+
s.add_development_dependency "rspec", ">=2.6.0"
|
19
|
+
s.add_development_dependency "shopify_api", ">= 1.2.2"
|
18
20
|
|
19
21
|
s.files = `git ls-files`.split("\n")
|
20
22
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/spec/boot.rb
ADDED
data/spec/limits.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
require './spec/boot'
|
3
|
+
|
4
|
+
describe "Limits" do
|
5
|
+
it "Can fetch local limits" do
|
6
|
+
count = ShopifyAPI.call_count :shop
|
7
|
+
limit = ShopifyAPI.call_limit :shop
|
8
|
+
|
9
|
+
(count < 300 && count > 0).should be_true
|
10
|
+
(count < limit).should be_true
|
11
|
+
ShopifyAPI.maxed?.should be_false
|
12
|
+
(ShopifyAPI.available_calls > 0).should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "Can fetch global limits" do
|
16
|
+
count = ShopifyAPI.call_count :global
|
17
|
+
limit = ShopifyAPI.call_limit :global
|
18
|
+
|
19
|
+
(count < 3000 && count > 0).should be_true
|
20
|
+
(count < limit).should be_true
|
21
|
+
ShopifyAPI.maxed?.should be_false
|
22
|
+
(ShopifyAPI.available_calls > 0).should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "Can execute up to local max" do
|
26
|
+
until ShopifyAPI.maxed?
|
27
|
+
ShopifyAPI::Shop.current
|
28
|
+
puts "avail: #{ShopifyAPI.available_calls}, maxed: #{ShopifyAPI.maxed?}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1 @@
|
|
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.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Chris Scott
|
@@ -24,6 +24,28 @@ dependencies:
|
|
24
24
|
version: 1.2.2
|
25
25
|
type: :runtime
|
26
26
|
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 2.6.0
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: shopify_api
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.2.2
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
27
49
|
description: This gem adds the ability to read shopify API call limits to the ShopifyAPI gem
|
28
50
|
email:
|
29
51
|
- christocracy@gmail.com
|
@@ -43,6 +65,9 @@ files:
|
|
43
65
|
- lib/shopify-api-limits/shopify_api/shopify_api.rb
|
44
66
|
- lib/shopify-api-limits/version.rb
|
45
67
|
- shopify-api-limits.gemspec
|
68
|
+
- spec/boot.rb
|
69
|
+
- spec/limits.rb
|
70
|
+
- spec/shopify_api.yml.example
|
46
71
|
has_rdoc: true
|
47
72
|
homepage: ""
|
48
73
|
licenses: []
|
@@ -71,5 +96,7 @@ rubygems_version: 1.5.0
|
|
71
96
|
signing_key:
|
72
97
|
specification_version: 3
|
73
98
|
summary: This gem adds the ability to read shopify API call limits to the ShopifyAPI gem
|
74
|
-
test_files:
|
75
|
-
|
99
|
+
test_files:
|
100
|
+
- spec/boot.rb
|
101
|
+
- spec/limits.rb
|
102
|
+
- spec/shopify_api.yml.example
|