浏览代码

make ApiVersion a PORO

minor renames
Jon G 5 年之前
父节点
当前提交
62f7a03a09
共有 6 个文件被更改,包括 57 次插入28 次删除
  1. 46 15
      lib/shopify_api/api_version.rb
  2. 0 2
      lib/shopify_api/meta.rb
  3. 5 5
      test/api_version_test.rb
  4. 2 2
      test/detailed_log_subscriber_test.rb
  5. 2 2
      test/meta_test.rb
  6. 2 2
      test/test_helper.rb

+ 46 - 15
lib/shopify_api/api_version.rb

@@ -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

+ 0 - 2
lib/shopify_api/meta.rb

@@ -6,8 +6,6 @@ module ShopifyAPI
     self.element_name = 'api'
     self.primary_key = :handle
 
-    has_many :versions, class_name: "ShopifyAPI::ApiVersion"
-
     def self.admin_versions
       all.find { |api| api.handle = :admin }.versions
     end

+ 5 - 5
test/api_version_test.rb

@@ -19,22 +19,22 @@ class ApiVersionTest < Test::Unit::TestCase
     ])
   end
 
-  test "coerce_to_version removes unpersisted versions from version set if mode is set to :predefined_only" do
+  test "coerce_to_version removes unverified versions from version set if mode is set to :predefined_only" do
     ShopifyAPI::ApiVersion.coercion_mode = :define_on_unknown
-    assert ShopifyAPI::ApiVersion.versions.values.all?(&:persisted?)
+    assert ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
     assert_equal 5, ShopifyAPI::ApiVersion.versions.size
 
     ShopifyAPI::ApiVersion.coerce_to_version('2019-30')
-    refute ShopifyAPI::ApiVersion.versions.values.all?(&:persisted?)
+    refute ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
     assert_equal 6, ShopifyAPI::ApiVersion.versions.size
     ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
 
-    assert ShopifyAPI::ApiVersion.versions.values.all?(&:persisted?)
+    assert ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
     assert_equal 5, ShopifyAPI::ApiVersion.versions.size
   end
 
   test "coerce_to_version does not raise when coercing a string if no versions are defined when coercion_mode is :define_on_unknown" do
-    ShopifyAPI::ApiVersion.clear_defined_versions
+    ShopifyAPI::ApiVersion.clear_known_versions
     ShopifyAPI::ApiVersion.coercion_mode = :define_on_unknown
     assert_equal :define_on_unknown, ShopifyAPI::ApiVersion.coercion_mode
     assert_nothing_raised do

+ 2 - 2
test/detailed_log_subscriber_test.rb

@@ -21,7 +21,7 @@ class LogSubscriberTest < Test::Unit::TestCase
       status: 200,
       api_version: :stub,
       body: load_fixture('apis'))
-    ShopifyAPI::ApiVersion.define_known_versions
+    ShopifyAPI::ApiVersion.fetch_known_versions
     session = ShopifyAPI::Session.new(
       domain: "https://this-is-my-test-shop.myshopify.com",
       token: "access_token",
@@ -36,7 +36,7 @@ class LogSubscriberTest < Test::Unit::TestCase
 
   def teardown
     super
-    ShopifyAPI::ApiVersion.clear_defined_versions
+    ShopifyAPI::ApiVersion.clear_known_versions
     ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
   end
 

+ 2 - 2
test/meta_test.rb

@@ -34,10 +34,10 @@ class ApiVersionTest < Test::Unit::TestCase
         "display_name": "unstable",
         "supported": false,
       },
-    ].map { |hash| ShopifyAPI::ApiVersion.new(hash) }
+    ].to_json
 
 
-    assert_equal versions, ShopifyAPI::Meta.admin_versions
+    assert_equal versions, ShopifyAPI::Meta.admin_versions.to_json
 
   end
 end

+ 2 - 2
test/test_helper.rb

@@ -46,7 +46,7 @@ module Test
               api_version: :stub,
               body: load_fixture('apis'))
 
-        ShopifyAPI::ApiVersion.define_known_versions
+        ShopifyAPI::ApiVersion.fetch_known_versions
         session = ShopifyAPI::Session.new(
           domain: "https://this-is-my-test-shop.myshopify.com",
           token: "token_test_helper",
@@ -62,7 +62,7 @@ module Test
         ShopifyAPI::Base.password = nil
         ShopifyAPI::Base.user = nil
 
-        ShopifyAPI::ApiVersion.clear_defined_versions
+        ShopifyAPI::ApiVersion.clear_known_versions
         ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
       end