Skip to content

Commit 02b828a

Browse files
committed
method renames and minior refactor
1 parent 269c560 commit 02b828a

9 files changed

+56
-44
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ The `api_version` attribute can take the string or symbol name of any known vers
4242
By default any string or symbol will naïvely coerce into an ApiVersion. 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+
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.version_lookup_mode = :define_on_unknown` (the default mode).
4949

5050
For example if you want to use the `2019-04` version you would create a session like this:
5151
```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)