Skip to content

Commit 66e9427

Browse files
committed
method renames and minior refactor
1 parent 269c560 commit 66e9427

9 files changed

+59
-46
lines changed

README.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ ShopifyAPI::Session.temp(domain: domain, token: token, api_version: api_version)
3838
end
3939
```
4040

41-
The `api_version` attribute can take the string or symbol name of any known version and correctly coerce it to a `ShopifyAPI::ApiVersion`.
42-
By default any string or symbol will naïvely coerce into an ApiVersion. To ensure only known and active versions can be set, call
41+
The `api_version` attribute takes a version handle (ie `'2019-07'` or `:unstable`) sets an instance of `ShopifyAPI::ApiVersion` matching the handle.
42+
By default, any handle will naïvely create a new `ApiVersion` if the version is not in the known versions returned by `ShopifyAPI::ApiVersion.versions`. To ensure only known and active versions can be set, call
4343

4444
```ruby
45-
ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
45+
ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
4646
ShopifyAPI::ApiVersion.fetch_known_versions
4747
```
48-
Known versions are fetched and cached from https://app.shopify.com/services/apis.json. Trying to use a version outside this set will raise an error. To switch back to naïve coercion, call `ShopifyAPI::ApiVersion.coercion_mode = :define_on_unknown` (the default mode).
48+
49+
Known versions are fetched and cached from https://app.shopify.com/services/apis.json. Trying to use a version outside this set will raise an error. To switch back to naïve lookup and create a version if its not found, call `ShopifyAPI::ApiVersion.version_lookup_mode = :define_on_unknown` (this is the default mode).
4950

5051
For example if you want to use the `2019-04` version you would create a session like this:
5152
```ruby

lib/shopify_api/api_version.rb

+29-17
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,42 @@ class InvalidVersion < StandardError; end
99
UNSTABLE_HANDLE = 'unstable'
1010
UNSTABLE_AS_DATE = Time.utc(3000, 1, 1)
1111
API_PREFIX = '/admin/api/'
12-
COERSION_MODES = [:predefined_only, :define_on_unknown].freeze
12+
LOOKUP_MODES = [:raise_on_unknown, :define_on_unknown].freeze
1313

1414
class << self
1515
attr_reader :versions
1616

17-
def coercion_mode
18-
@coercion_mode ||= :define_on_unknown
17+
def version_lookup_mode
18+
@version_lookup_mode ||= :define_on_unknown
1919
end
2020

21-
def coercion_mode=(mode)
22-
raise ArgumentError, "Mode must be one of #{COERSION_MODES}" unless COERSION_MODES.include?(mode)
23-
sanitize_known_versions if mode == :predefined_only
24-
@coercion_mode = mode
21+
def version_lookup_mode=(mode)
22+
raise ArgumentError, "Mode must be one of #{LOOKUP_MODES}" unless LOOKUP_MODES.include?(mode)
23+
sanitize_known_versions if mode == :raise_on_unknown
24+
@version_lookup_mode = mode
2525
end
2626

27-
def coerce_to_version(version_or_handle)
27+
def find_version(version_or_handle)
2828
return version_or_handle if version_or_handle.is_a?(ApiVersion)
2929
handle = version_or_handle.to_s
30-
3130
@versions ||= {}
3231
@versions.fetch(handle) do
33-
if @coercion_mode == :predefined_only
34-
error_msg = if @versions.empty?
35-
"No versions defined. You must call `ApiVersion.fetch_known_versions` first."
36-
else
37-
"`#{handle}` is not in the defined version set. Available versions: #{@versions.keys}"
38-
end
39-
raise UnknownVersion, "ApiVersion.coercion_mode is set to `:predefined_only`. #{error_msg}"
32+
if @version_lookup_mode == :raise_on_unknown
33+
raise UnknownVersion, unknown_version_error_message(handle)
4034
else
41-
@versions[handle] = ApiVersion.new(handle: handle)
35+
add_to_known_versions(ApiVersion.new(handle: handle))
4236
end
4337
end
4438
end
4539

40+
def coerce_to_version(version_or_handle)
41+
warn(
42+
'[DEPRECATED] ShopifyAPI::ApiVersion.coerce_to_version be removed in a future version. ' \
43+
'Use `find_version` instead.'
44+
)
45+
find_version(version_or_handle)
46+
end
47+
4648
def fetch_known_versions
4749
@versions = Meta.admin_versions.map do |version|
4850
[version.handle, ApiVersion.new(version.attributes.merge(verified: version.persisted?))]
@@ -57,6 +59,10 @@ def define_known_versions
5759
fetch_known_versions
5860
end
5961

62+
def add_to_known_versions(version)
63+
@versions[version.handle] = version
64+
end
65+
6066
def clear_known_versions
6167
@versions = {}
6268
end
@@ -86,6 +92,12 @@ def sanitize_known_versions
8692
[handle, @versions[handle]]
8793
end.compact.to_h
8894
end
95+
96+
def unknown_version_error_message(handle)
97+
msg = "ApiVersion.version_lookup_mode is set to `:raise_on_unknown`. \n"
98+
return msg + "No versions defined. You must call `ApiVersion.fetch_known_versions` first." if @versions.empty?
99+
msg + "`#{handle}` is not in the defined version set. Available versions: #{@versions.keys}"
100+
end
89101
end
90102

91103
attr_reader :handle, :display_name, :supported, :latest_supported, :verified

lib/shopify_api/resources/base.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def api_version
6666
end
6767

6868
def api_version=(version)
69-
self._api_version = version.nil? ? nil : ApiVersion.coerce_to_version(version)
69+
self._api_version = version.nil? ? nil : ApiVersion.find_version(version)
7070
end
7171

7272
def prefix(options = {})

lib/shopify_api/session.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def site
127127
end
128128

129129
def api_version=(version)
130-
@api_version = version.nil? ? nil : ApiVersion.coerce_to_version(version)
130+
@api_version = version.nil? ? nil : ApiVersion.find_version(version)
131131
end
132132

133133
def valid?

test/api_version_test.rb

+16-16
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,51 @@
22
require 'test_helper'
33

44
class ApiVersionTest < Test::Unit::TestCase
5-
test "coerce_to_version returns any version object given" do
5+
test "find_version returns any version object given" do
66
version = ShopifyAPI::ApiVersion.new(handle: :unstable)
7-
assert_same(version, ShopifyAPI::ApiVersion.coerce_to_version(version))
7+
assert_same(version, ShopifyAPI::ApiVersion.find_version(version))
88
end
99

10-
test "coerce_to_version converts a known version into a version object" do
10+
test "find_version converts a known version into a version object" do
1111
versions = [
1212
ShopifyAPI::ApiVersion.new(handle: :unstable),
1313
ShopifyAPI::ApiVersion.new(handle: '2019-01'),
1414
]
1515

1616
assert_equal(versions, [
17-
ShopifyAPI::ApiVersion.coerce_to_version('unstable'),
18-
ShopifyAPI::ApiVersion.coerce_to_version('2019-01'),
17+
ShopifyAPI::ApiVersion.find_version('unstable'),
18+
ShopifyAPI::ApiVersion.find_version('2019-01'),
1919
])
2020
end
2121

22-
test "coerce_to_version removes unverified versions from version set if mode is set to :predefined_only" do
23-
ShopifyAPI::ApiVersion.coercion_mode = :define_on_unknown
22+
test "find_version removes unverified versions from version set if mode is set to :raise_on_unknown" do
23+
ShopifyAPI::ApiVersion.version_lookup_mode = :define_on_unknown
2424
assert ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
2525
assert_equal 5, ShopifyAPI::ApiVersion.versions.size
2626

27-
ShopifyAPI::ApiVersion.coerce_to_version('2019-30')
27+
ShopifyAPI::ApiVersion.find_version('2019-30')
2828
refute ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
2929
assert_equal 6, ShopifyAPI::ApiVersion.versions.size
30-
ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
30+
ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
3131

3232
assert ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
3333
assert_equal 5, ShopifyAPI::ApiVersion.versions.size
3434
end
3535

36-
test "coerce_to_version does not raise when coercing a string if no versions are defined when coercion_mode is :define_on_unknown" do
36+
test "find_version does not raise when coercing a string if no versions are defined when version_lookup_mode is :define_on_unknown" do
3737
ShopifyAPI::ApiVersion.clear_known_versions
38-
ShopifyAPI::ApiVersion.coercion_mode = :define_on_unknown
39-
assert_equal :define_on_unknown, ShopifyAPI::ApiVersion.coercion_mode
38+
ShopifyAPI::ApiVersion.version_lookup_mode = :define_on_unknown
39+
assert_equal :define_on_unknown, ShopifyAPI::ApiVersion.version_lookup_mode
4040
assert_nothing_raised do
41-
ShopifyAPI::ApiVersion.coerce_to_version('made up version')
41+
ShopifyAPI::ApiVersion.find_version('made up version')
4242
end
4343
end
4444

45-
test "coerce_to_version does raise when coercing a string if no versions are defined when coercion_mode is :predefined_only" do
45+
test "find_version does raise when coercing a string if no versions are defined when version_lookup_mode is :raise_on_unknown" do
4646
refute ShopifyAPI::ApiVersion.versions['made up version']
47-
ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
47+
ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
4848
assert_raises ShopifyAPI::ApiVersion::UnknownVersion do
49-
ShopifyAPI::ApiVersion.coerce_to_version('made up version')
49+
ShopifyAPI::ApiVersion.find_version('made up version')
5050
end
5151
end
5252

test/detailed_log_subscriber_test.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def setup
3737
def teardown
3838
super
3939
ShopifyAPI::ApiVersion.clear_known_versions
40-
ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
40+
ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
4141
end
4242

4343
def set_logger(logger)

test/pagination_test.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class PaginationTest < Test::Unit::TestCase
44
def setup
55
super
66

7-
@version = ShopifyAPI::ApiVersion.coerce_to_version('2019-10')
7+
@version = ShopifyAPI::ApiVersion.find_version('2019-10')
88
ShopifyAPI::Base.api_version = @version.to_s
99
@next_page_info = "eyJkaXJlY3Rpb24iOiJuZXh0IiwibGFzdF9pZCI6NDQwMDg5NDIzLCJsYXN0X3ZhbHVlIjoiNDQwMDg5NDIzIn0%3D"
1010
@previous_page_info = "eyJsYXN0X2lkIjoxMDg4MjgzMDksImxhc3RfdmFsdWUiOiIxMDg4MjgzMDkiLCJkaXJlY3Rpb24iOiJuZXh0In0%3D"
@@ -131,7 +131,7 @@ def setup
131131
end
132132

133133
test "raises on an invalid API version" do
134-
version = ShopifyAPI::ApiVersion.coerce_to_version('2019-04')
134+
version = ShopifyAPI::ApiVersion.find_version('2019-04')
135135
ShopifyAPI::Base.api_version = version.to_s
136136

137137
fake 'orders', :method => :get, :status => 200, api_version: version, :body => load_fixture('orders')
@@ -143,7 +143,7 @@ def setup
143143
end
144144

145145
test "does not raise on the unstable version" do
146-
version = ShopifyAPI::ApiVersion.coerce_to_version('unstable')
146+
version = ShopifyAPI::ApiVersion.find_version('unstable')
147147
ShopifyAPI::Base.api_version = version.to_s
148148
@next_link_header = "<https://this-is-my-test-shop.myshopify.com/admin/api/unstable/orders.json?page_info=#{@next_page_info}>; rel=\"next\""
149149

test/session_test.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,6 @@ def generate_signature(params)
345345

346346
def any_api_version
347347
version_name = ['2019-01', :unstable].sample(1).first
348-
ShopifyAPI::ApiVersion.coerce_to_version(version_name)
348+
ShopifyAPI::ApiVersion.find_version(version_name)
349349
end
350350
end

test/test_helper.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def teardown
6363
ShopifyAPI::Base.user = nil
6464

6565
ShopifyAPI::ApiVersion.clear_known_versions
66-
ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
66+
ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
6767
end
6868

6969
# Custom Assertions
@@ -95,7 +95,7 @@ def fake(endpoint, options={})
9595
body = options.has_key?(:body) ? options.delete(:body) : load_fixture(endpoint)
9696
format = options.delete(:format) || :json
9797
method = options.delete(:method) || :get
98-
api_version = options.delete(:api_version) || ShopifyAPI::ApiVersion.coerce_to_version('2019-01')
98+
api_version = options.delete(:api_version) || ShopifyAPI::ApiVersion.find_version('2019-01')
9999
extension = ".#{options.delete(:extension)||'json'}" unless options[:extension]==false
100100
status = options.delete(:status) || 200
101101
url = if options.has_key?(:url)

0 commit comments

Comments
 (0)