Bladeren bron

Merge pull request #605 from Shopify/raise-error-on-nil-version

raise ApiVersionNotSetError if Base.api_version is nil
Jon G 5 jaren geleden
bovenliggende
commit
7014e43ee2
4 gewijzigde bestanden met toevoegingen van 40 en 2 verwijderingen
  1. 17 0
      lib/shopify_api/api_version.rb
  2. 3 1
      lib/shopify_api/resources/base.rb
  3. 14 0
      test/api_version_test.rb
  4. 6 1
      test/base_test.rb

+ 17 - 0
lib/shopify_api/api_version.rb

@@ -1,6 +1,7 @@
 # frozen_string_literal: true
 module ShopifyAPI
   class ApiVersion
+    class ApiVersionNotSetError < StandardError; end
     class UnknownVersion < StandardError; end
     class InvalidVersion < StandardError; end
 
@@ -109,5 +110,21 @@ module ShopifyAPI
         construct_api_path('graphql.json')
       end
     end
+
+    class NullVersion
+      class << self
+        def stable?
+          raise ApiVersionNotSetError, "You must set ShopifyAPI::Base.api_version before making a request."
+        end
+
+        def construct_api_path(*_path)
+          raise ApiVersionNotSetError, "You must set ShopifyAPI::Base.api_version before making a request."
+        end
+
+        def construct_graphql_path
+          raise ApiVersionNotSetError, "You must set ShopifyAPI::Base.api_version before making a request."
+        end
+      end
+    end
   end
 end

+ 3 - 1
lib/shopify_api/resources/base.rb

@@ -62,11 +62,13 @@ module ShopifyAPI
           _api_version
         elsif superclass != Object && superclass.site
           superclass.api_version.dup.freeze
+        else
+          ApiVersion::NullVersion
         end
       end
 
       def api_version=(version)
-        self._api_version = version.nil? ? nil : ApiVersion.coerce_to_version(version)
+        self._api_version = version.nil? ? ApiVersion::NullVersion : ApiVersion.coerce_to_version(version)
       end
 
       def prefix(options = {})

+ 14 - 0
test/api_version_test.rb

@@ -136,6 +136,20 @@ class ApiVersionTest < Test::Unit::TestCase
     )
   end
 
+  test "NullVersion raises ApiVersionNotSetError" do
+    assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
+      ShopifyAPI::ApiVersion::NullVersion.construct_api_path(:string)
+    end
+
+    assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
+      ShopifyAPI::ApiVersion::NullVersion.construct_graphql_path
+    end
+
+    assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
+      ShopifyAPI::ApiVersion::NullVersion.stable?
+    end
+  end
+
   class TestApiVersion < ShopifyAPI::ApiVersion
     def initialize(name)
       @version_name = name

+ 6 - 1
test/base_test.rb

@@ -158,11 +158,16 @@ class BaseTest < Test::Unit::TestCase
     assert_equal 2, ShopifyAPI::Shop.current.id
   end
 
-  test "#api_version should set ApiVersion" do
+  test "#api_version= should set ApiVersion" do
     ShopifyAPI::Base.api_version = '2019-04'
     assert_equal '2019-04', ShopifyAPI::Base.api_version.to_s
   end
 
+  test "#api_version= nil should set ApiVersion to ShopifyAPI::ApiVersion::NullVersion" do
+    ShopifyAPI::Base.api_version = nil
+    assert_equal ShopifyAPI::ApiVersion::NullVersion, ShopifyAPI::Base.api_version
+  end
+
   def clear_header(header)
     [ActiveResource::Base, ShopifyAPI::Base, ShopifyAPI::Product].each do |klass|
       klass.headers.delete(header)