shopify_api 3.1.2 → 3.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/Gemfile.lock +1 -1
- data/lib/shopify_api/limits.rb +12 -8
- data/lib/shopify_api/resources/fulfillment.rb +1 -0
- data/lib/shopify_api/version.rb +1 -1
- data/test/fixtures/fulfillment.json +49 -0
- data/test/fulfillment_test.rb +38 -0
- data/test/limits_test.rb +12 -4
- metadata +25 -5
- checksums.yaml +0 -15
data/CHANGELOG
CHANGED
data/Gemfile.lock
CHANGED
data/lib/shopify_api/limits.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
module ShopifyAPI
|
2
2
|
module Limits
|
3
|
+
class LimitUnavailable < StandardError; end
|
4
|
+
|
3
5
|
def self.included(klass)
|
4
6
|
klass.send(:extend, ClassMethods)
|
5
7
|
end
|
6
|
-
|
8
|
+
|
7
9
|
module ClassMethods
|
8
10
|
|
9
11
|
# Takes form num_requests_executed/max_requests
|
@@ -20,7 +22,7 @@ module ShopifyAPI
|
|
20
22
|
credit_limit(:shop) - credit_used(:shop)
|
21
23
|
end
|
22
24
|
alias_method :available_calls, :credit_left
|
23
|
-
|
25
|
+
|
24
26
|
##
|
25
27
|
# Have I reached my API call limit?
|
26
28
|
# @return {Boolean}
|
@@ -29,7 +31,7 @@ module ShopifyAPI
|
|
29
31
|
credit_left <= 0
|
30
32
|
end
|
31
33
|
alias_method :maxed?, :credit_maxed?
|
32
|
-
|
34
|
+
|
33
35
|
##
|
34
36
|
# How many total API calls can I make?
|
35
37
|
# NOTE: subtracting 1 from credit_limit because I think ShopifyAPI cuts off at 299 or shop limits.
|
@@ -38,7 +40,7 @@ module ShopifyAPI
|
|
38
40
|
#
|
39
41
|
def credit_limit(scope=:shop)
|
40
42
|
@api_credit_limit ||= {}
|
41
|
-
@api_credit_limit[scope] ||= api_credit_limit_param(scope).pop.to_i - 1
|
43
|
+
@api_credit_limit[scope] ||= api_credit_limit_param(scope).pop.to_i - 1
|
42
44
|
end
|
43
45
|
alias_method :call_limit, :credit_limit
|
44
46
|
|
@@ -51,7 +53,7 @@ module ShopifyAPI
|
|
51
53
|
api_credit_limit_param(scope).shift.to_i
|
52
54
|
end
|
53
55
|
alias_method :call_count, :credit_used
|
54
|
-
|
56
|
+
|
55
57
|
##
|
56
58
|
# @return {HTTPResonse}
|
57
59
|
#
|
@@ -65,9 +67,11 @@ module ShopifyAPI
|
|
65
67
|
##
|
66
68
|
# @return {Array}
|
67
69
|
#
|
68
|
-
def api_credit_limit_param(scope)
|
69
|
-
response[CREDIT_LIMIT_HEADER_PARAM[scope]]
|
70
|
-
|
70
|
+
def api_credit_limit_param(scope)
|
71
|
+
header = response[CREDIT_LIMIT_HEADER_PARAM[scope]]
|
72
|
+
raise LimitUnavailable unless header
|
73
|
+
header.split('/')
|
74
|
+
end
|
71
75
|
end
|
72
76
|
end
|
73
77
|
end
|
data/lib/shopify_api/version.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
{
|
2
|
+
"fulfillment": {
|
3
|
+
"created_at": "2013-11-01T16:06:08-04:00",
|
4
|
+
"id": 255858046,
|
5
|
+
"order_id": 450789469,
|
6
|
+
"service": "manual",
|
7
|
+
"status": "pending",
|
8
|
+
"tracking_company": null,
|
9
|
+
"updated_at": "2013-11-01T16:06:08-04:00",
|
10
|
+
"tracking_number": "1Z2345",
|
11
|
+
"tracking_numbers": [
|
12
|
+
"1Z2345"
|
13
|
+
],
|
14
|
+
"tracking_url": "http://www.google.com/search?q=1Z2345",
|
15
|
+
"tracking_urls": [
|
16
|
+
"http://www.google.com/search?q=1Z2345"
|
17
|
+
],
|
18
|
+
"receipt": {
|
19
|
+
"testcase": true,
|
20
|
+
"authorization": "123456"
|
21
|
+
},
|
22
|
+
"line_items": [
|
23
|
+
{
|
24
|
+
"fulfillment_service": "manual",
|
25
|
+
"fulfillment_status": null,
|
26
|
+
"grams": 200,
|
27
|
+
"id": 466157049,
|
28
|
+
"price": "199.00",
|
29
|
+
"product_id": 632910392,
|
30
|
+
"quantity": 1,
|
31
|
+
"requires_shipping": true,
|
32
|
+
"sku": "IPOD2008GREEN",
|
33
|
+
"title": "IPod Nano - 8gb",
|
34
|
+
"variant_id": 39072856,
|
35
|
+
"variant_title": "green",
|
36
|
+
"vendor": null,
|
37
|
+
"name": "IPod Nano - 8gb - green",
|
38
|
+
"variant_inventory_management": "shopify",
|
39
|
+
"properties": [
|
40
|
+
{
|
41
|
+
"name": "Custom Engraving",
|
42
|
+
"value": "Happy Birthday"
|
43
|
+
}
|
44
|
+
],
|
45
|
+
"product_exists": true
|
46
|
+
}
|
47
|
+
]
|
48
|
+
}
|
49
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class FulFillmentTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
fake "orders/450789469/fulfillments/255858046", :method => :get, :body => load_fixture('fulfillment')
|
6
|
+
end
|
7
|
+
|
8
|
+
context "Fulfillment" do
|
9
|
+
context "#complete" do
|
10
|
+
should "be able to complete fulfillment" do
|
11
|
+
fulfillment = ShopifyAPI::Fulfillment.find(255858046, :params => {:order_id => 450789469})
|
12
|
+
|
13
|
+
success = ActiveSupport::JSON.decode(load_fixture('fulfillment'))
|
14
|
+
success['fulfillment']['status'] = 'success'
|
15
|
+
fake "orders/450789469/fulfillments/255858046/complete", :method => :post, :body => ActiveSupport::JSON.encode(success)
|
16
|
+
|
17
|
+
assert_equal 'pending', fulfillment.status
|
18
|
+
assert fulfillment.complete
|
19
|
+
assert_equal 'success', fulfillment.status
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "#cancel" do
|
24
|
+
should "be able to cancel fulfillment" do
|
25
|
+
fulfillment = ShopifyAPI::Fulfillment.find(255858046, :params => {:order_id => 450789469})
|
26
|
+
|
27
|
+
cancelled = ActiveSupport::JSON.decode(load_fixture('fulfillment'))
|
28
|
+
cancelled['fulfillment']['status'] = 'cancelled'
|
29
|
+
fake "orders/450789469/fulfillments/255858046/cancel", :method => :post, :body => ActiveSupport::JSON.encode(cancelled)
|
30
|
+
|
31
|
+
assert_equal 'pending', fulfillment.status
|
32
|
+
assert fulfillment.cancel
|
33
|
+
assert_equal 'cancelled', fulfillment.status
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/test/limits_test.rb
CHANGED
@@ -7,25 +7,33 @@ class LimitsTest < Test::Unit::TestCase
|
|
7
7
|
@header_hash = {'http_x_shopify_shop_api_call_limit' => '100/300'}
|
8
8
|
ShopifyAPI::Base.connection.expects(:response).at_least(0).returns(@header_hash)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
context "Limits" do
|
12
12
|
should "fetch limit total" do
|
13
13
|
assert_equal(299, ShopifyAPI.credit_limit(:shop))
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
should "fetch used calls" do
|
17
17
|
assert_equal(100, ShopifyAPI.credit_used(:shop))
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
should "calculate remaining calls" do
|
21
21
|
assert_equal(199, ShopifyAPI.credit_left)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
should "flag maxed out credits" do
|
25
25
|
assert !ShopifyAPI.maxed?
|
26
26
|
@header_hash = {'http_x_shopify_shop_api_call_limit' => '299/300'}
|
27
27
|
ShopifyAPI::Base.connection.expects(:response).at_least(1).returns(@header_hash)
|
28
28
|
assert ShopifyAPI.maxed?
|
29
29
|
end
|
30
|
+
|
31
|
+
should "raise error when header doesn't exist" do
|
32
|
+
@header_hash = {}
|
33
|
+
ShopifyAPI::Base.connection.expects(:response).at_least(1).returns(@header_hash)
|
34
|
+
assert_raise ShopifyAPI::Limits::LimitUnavailable do
|
35
|
+
ShopifyAPI.credit_left
|
36
|
+
end
|
37
|
+
end
|
30
38
|
end
|
31
39
|
end
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.3
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Shopify
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
+
date: 2013-11-07 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activeresource
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: thor
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: mocha
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: fakeweb
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -69,6 +78,7 @@ dependencies:
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: rake
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -181,12 +192,14 @@ files:
|
|
181
192
|
- test/fixtures/customer_saved_search.json
|
182
193
|
- test/fixtures/customer_saved_search_customers.json
|
183
194
|
- test/fixtures/events.json
|
195
|
+
- test/fixtures/fulfillment.json
|
184
196
|
- test/fixtures/metafield.json
|
185
197
|
- test/fixtures/metafields.json
|
186
198
|
- test/fixtures/product.json
|
187
199
|
- test/fixtures/shop.json
|
188
200
|
- test/fixtures/variant.json
|
189
201
|
- test/fixtures/variants.json
|
202
|
+
- test/fulfillment_test.rb
|
190
203
|
- test/limits_test.rb
|
191
204
|
- test/order_test.rb
|
192
205
|
- test/product_test.rb
|
@@ -197,27 +210,34 @@ files:
|
|
197
210
|
homepage: http://www.shopify.com/partners/apps
|
198
211
|
licenses:
|
199
212
|
- MIT
|
200
|
-
metadata: {}
|
201
213
|
post_install_message:
|
202
214
|
rdoc_options:
|
203
215
|
- --charset=UTF-8
|
204
216
|
require_paths:
|
205
217
|
- lib
|
206
218
|
required_ruby_version: !ruby/object:Gem::Requirement
|
219
|
+
none: false
|
207
220
|
requirements:
|
208
221
|
- - ! '>='
|
209
222
|
- !ruby/object:Gem::Version
|
210
223
|
version: '0'
|
224
|
+
segments:
|
225
|
+
- 0
|
226
|
+
hash: -273779937676150409
|
211
227
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
228
|
+
none: false
|
212
229
|
requirements:
|
213
230
|
- - ! '>='
|
214
231
|
- !ruby/object:Gem::Version
|
215
232
|
version: '0'
|
233
|
+
segments:
|
234
|
+
- 0
|
235
|
+
hash: -273779937676150409
|
216
236
|
requirements: []
|
217
237
|
rubyforge_project:
|
218
|
-
rubygems_version:
|
238
|
+
rubygems_version: 1.8.23
|
219
239
|
signing_key:
|
220
|
-
specification_version:
|
240
|
+
specification_version: 3
|
221
241
|
summary: ShopifyAPI is a lightweight gem for accessing the Shopify admin REST web
|
222
242
|
services
|
223
243
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
Yjk3NThmNmE5YjE3NjgyNTBkNjQ0MmY0MDQ4MmJkN2YwZGMyZWU3MQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NDlhZjI5MGZmNTM0ZTlmOGE4ODY4YTFmYjQ5OTAyMGYxY2Y2NTBiOQ==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NjIzNTA3MmZkZTllOWJiMGZhYWI3NWYwZDliNWJiYTNlM2NhYTI0MDQ1MzQ5
|
10
|
-
MWYzZTRjNjM4NzJjNzliOWEzMGYzNTA1NmFkNGM0YjY2NDhhYjNiYzZkODNl
|
11
|
-
NDkzNzVjNjcxY2E2YmY1NzM3YjQxZmI0YzcwNmNlOWExNTRmZjg=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjlkODc5YjJjNDg3Nzk0NzkyZWJmYzBiZDg1N2RhOTgwYzYzOTk0NDEwOGU3
|
14
|
-
ZTI5YjBkMDNkZjk5MjE3NjNhN2ZhNGE2ZGJmM2YxMGE2YzRiOTA0N2JlYmZk
|
15
|
-
YzAzZWZkM2E2ZTYwYzQ2ZjVlYWNmMDdhMDRhNzk5ZDBlZWM0ZDY=
|