|
@@ -1,14 +1,11 @@
|
|
|
# frozen_string_literal: true
|
|
|
module ShopifyAPI
|
|
|
- class ApiVersion < ActiveResource::Base
|
|
|
+ class ApiVersion
|
|
|
class UnknownVersion < StandardError; end
|
|
|
class InvalidVersion < StandardError; end
|
|
|
class ApiVersionNotSetError < StandardError; end
|
|
|
include Comparable
|
|
|
|
|
|
- self.site = "https://app.shopify.com/services/"
|
|
|
- self.primary_key = :handle
|
|
|
-
|
|
|
HANDLE_FORMAT = /^\d{4}-\d{2}$/.freeze
|
|
|
UNSTABLE_HANDLE = 'unstable'
|
|
|
UNSTABLE_AS_DATE = Time.utc(3000, 1, 1)
|
|
@@ -36,25 +33,44 @@ module ShopifyAPI
|
|
|
@versions.fetch(handle) do
|
|
|
if @coercion_mode == :predefined_only
|
|
|
error_msg = if @versions.empty?
|
|
|
- "No versions defined. You must call `ApiVersion.define_known_versions` first."
|
|
|
+ "No versions defined. You must call `ApiVersion.fetch_known_versions` first."
|
|
|
else
|
|
|
"`#{handle}` is not in the defined version set. Available versions: #{@versions.keys}"
|
|
|
end
|
|
|
raise UnknownVersion, "ApiVersion.coercion_mode is set to `:predefined_only`. #{error_msg}"
|
|
|
else
|
|
|
- @versions[handle] = ApiVersion.new(handle: version_or_handle)
|
|
|
+ @versions[handle] = ApiVersion.new(handle: handle)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
+ def fetch_known_versions
|
|
|
+ @versions = Meta.admin_versions.map do |version|
|
|
|
+ [version.handle, ApiVersion.new(version.attributes.merge(verified: version.persisted?))]
|
|
|
+ end.to_h
|
|
|
+ end
|
|
|
+
|
|
|
def define_known_versions
|
|
|
- @versions = Meta.admin_versions.map { |version| [version.handle, version] }.to_h
|
|
|
+ warn(
|
|
|
+ '[DEPRECATED] ShopifyAPI::ApiVersion.define_known_versions is deprecated and will be removed in a future version. ' \
|
|
|
+ 'Use `fetch_known_versions` instead.'
|
|
|
+ )
|
|
|
+ fetch_known_versions
|
|
|
end
|
|
|
|
|
|
- def clear_defined_versions
|
|
|
+ def clear_known_versions
|
|
|
@versions = {}
|
|
|
end
|
|
|
|
|
|
+ def clear_defined_versions
|
|
|
+ warn(
|
|
|
+ '[DEPRECATED] ShopifyAPI::ApiVersion.clear_defined_versions is deprecated and will be removed in a future version. ' \
|
|
|
+ 'Use `clear_known_versions` instead.'
|
|
|
+ )
|
|
|
+ clear_known_versions
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
def latest_stable_version
|
|
|
warn(
|
|
|
'[DEPRECATED] ShopifyAPI::ApiVersion.latest_stable_version is deprecated and will be removed in a future version.'
|
|
@@ -67,24 +83,39 @@ module ShopifyAPI
|
|
|
def sanitize_known_versions
|
|
|
return if @versions.nil?
|
|
|
@versions = @versions.keys.map do |handle|
|
|
|
- next unless @versions[handle].persisted?
|
|
|
+ next unless @versions[handle].verified?
|
|
|
[handle, @versions[handle]]
|
|
|
end.compact.to_h
|
|
|
end
|
|
|
end
|
|
|
|
|
|
- def initialize(attributes = {}, persisted = false)
|
|
|
- super
|
|
|
- @attributes['handle'] = @attributes['handle'].to_s
|
|
|
- @attributes['display_name'] = @attributes['handle'].to_s unless @attributes.key?('display_name')
|
|
|
- @attributes['supported'] = false unless @attributes.key?('supported')
|
|
|
- @attributes['latest_supported'] = false unless @attributes.key?('latest_supported')
|
|
|
+ attr_reader :handle, :display_name, :supported, :latest_supported, :verified
|
|
|
+
|
|
|
+ def initialize(attributes)
|
|
|
+ attributes = ActiveSupport::HashWithIndifferentAccess.new(attributes)
|
|
|
+ @handle = attributes[:handle].to_s
|
|
|
+ @display_name = attributes.fetch(:display_name, attributes[:handle].to_s)
|
|
|
+ @supported = attributes.fetch(:supported, false)
|
|
|
+ @latest_supported = attributes.fetch(:latest_supported, false)
|
|
|
+ @verified = attributes.fetch(:verified, false)
|
|
|
end
|
|
|
|
|
|
def to_s
|
|
|
handle
|
|
|
end
|
|
|
|
|
|
+ def latest_supported?
|
|
|
+ latest_supported
|
|
|
+ end
|
|
|
+
|
|
|
+ def supported?
|
|
|
+ supported
|
|
|
+ end
|
|
|
+
|
|
|
+ def verified?
|
|
|
+ verified
|
|
|
+ end
|
|
|
+
|
|
|
def <=>(other)
|
|
|
handle_as_date <=> other.handle_as_date
|
|
|
end
|