shopify_api 9.0.0 → 9.0.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +85 -80
- data/README.md +398 -214
- data/lib/active_resource/detailed_log_subscriber.rb +13 -3
- data/lib/shopify_api/message_enricher.rb +7 -1
- data/lib/shopify_api/version.rb +1 -1
- data/test/detailed_log_subscriber_test.rb +22 -0
- data/test/message_enricher_test.rb +13 -1
- metadata +2 -2
@@ -1,8 +1,10 @@
|
|
1
1
|
module ActiveResource
|
2
2
|
class DetailedLogSubscriber < ActiveSupport::LogSubscriber
|
3
|
+
VERSION_EOL_WARNING_HEADER = 'x-shopify-api-version-warning'
|
4
|
+
VERSION_DEPRECATION_HEADER = 'x-shopify-api-deprecated-reason'
|
3
5
|
def request(event)
|
4
6
|
log_request_response_details(event)
|
5
|
-
|
7
|
+
warn_on_deprecated_header_or_version_eol_header(event)
|
6
8
|
end
|
7
9
|
|
8
10
|
def logger
|
@@ -21,17 +23,25 @@ module ActiveResource
|
|
21
23
|
info "Response:\n#{event.payload[:response].body}"
|
22
24
|
end
|
23
25
|
|
24
|
-
def
|
26
|
+
def warn_on_deprecated_header_or_version_eol_header(event)
|
25
27
|
payload = event.payload
|
26
28
|
|
27
29
|
payload[:response].each do |header_name, header_value|
|
28
30
|
case header_name.downcase
|
29
|
-
when
|
31
|
+
when VERSION_DEPRECATION_HEADER
|
30
32
|
warning_message = <<-MSG
|
31
33
|
[DEPRECATED] ShopifyAPI made a call to #{payload[:method].upcase} #{payload[:path]}, and this call made
|
32
34
|
use of a deprecated endpoint, behaviour, or parameter. See #{header_value} for more details.
|
33
35
|
MSG
|
34
36
|
|
37
|
+
warn warning_message
|
38
|
+
|
39
|
+
when VERSION_EOL_WARNING_HEADER
|
40
|
+
warning_message = <<-MSG
|
41
|
+
[API Version Warning] ShopifyAPI made a call to #{payload[:method].upcase} #{payload[:path]}, and this call used
|
42
|
+
an API version that is unsupported or will become unsupported within 30 days. See #{header_value} for more details.
|
43
|
+
MSG
|
44
|
+
|
35
45
|
warn warning_message
|
36
46
|
end
|
37
47
|
end
|
@@ -5,7 +5,13 @@ module ShopifyAPI
|
|
5
5
|
|
6
6
|
@_cached_message ||= begin
|
7
7
|
detailed_error = begin
|
8
|
-
JSON.parse(body)
|
8
|
+
parsed_body = JSON.parse(body)
|
9
|
+
|
10
|
+
if parsed_body['error']
|
11
|
+
parsed_body['error'].to_s
|
12
|
+
elsif parsed_body['errors']
|
13
|
+
Array(parsed_body['errors']).join('; ')
|
14
|
+
end
|
9
15
|
rescue JSON::ParserError
|
10
16
|
nil
|
11
17
|
end
|
data/lib/shopify_api/version.rb
CHANGED
@@ -114,4 +114,26 @@ class LogSubscriberTest < Test::Unit::TestCase
|
|
114
114
|
@logger.logged(:warn).first
|
115
115
|
)
|
116
116
|
end
|
117
|
+
|
118
|
+
test "warns when the server responds with a x-shopify-api-version-warning header" do
|
119
|
+
fake(
|
120
|
+
"pages/1",
|
121
|
+
method: :get,
|
122
|
+
body: @page,
|
123
|
+
x_shopify_api_version_warning: 'https://shopify.dev/concepts/about-apis/versioning'
|
124
|
+
)
|
125
|
+
|
126
|
+
ShopifyAPI::Page.find(1)
|
127
|
+
|
128
|
+
assert_equal 1, @logger.logged(:warn).size
|
129
|
+
|
130
|
+
assert_match(
|
131
|
+
%r{\[API Version Warning\] ShopifyAPI made a call to GET /admin/api/2019-01/pages/1.json},
|
132
|
+
@logger.logged(:warn).first
|
133
|
+
)
|
134
|
+
assert_match(
|
135
|
+
%r{See https:\/\/shopify.dev\/concepts\/about-apis\/versioning for more details.},
|
136
|
+
@logger.logged(:warn).first
|
137
|
+
)
|
138
|
+
end
|
117
139
|
end
|
@@ -2,12 +2,24 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class MessageEnricherTest < Test::Unit::TestCase
|
4
4
|
|
5
|
-
def
|
5
|
+
def test_enriches_initial_message_when_body_contains_error
|
6
6
|
response = enriched_response(422, 'InitialMessage', { error: 'My Error' })
|
7
7
|
|
8
8
|
assert_equal 'InitialMessage (My Error)', response.message
|
9
9
|
end
|
10
10
|
|
11
|
+
def test_enriches_initial_message_when_body_contains_errors_array
|
12
|
+
response = enriched_response(422, 'InitialMessage', { errors: ['My Error1', 'My Error2'] })
|
13
|
+
|
14
|
+
assert_equal 'InitialMessage (My Error1; My Error2)', response.message
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_enriches_initial_message_when_body_contains_errors_single_value
|
18
|
+
response = enriched_response(422, 'InitialMessage', { errors: 'My Error1' })
|
19
|
+
|
20
|
+
assert_equal 'InitialMessage (My Error1)', response.message
|
21
|
+
end
|
22
|
+
|
11
23
|
def test_returns_initial_message_when_code_is_200
|
12
24
|
response = enriched_response(200, 'InitialMessage', { result: 'Success' })
|
13
25
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.0.
|
4
|
+
version: 9.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activeresource
|