Kaynağa Gözat

Add resource_prefix concept to allow prefix to own the start of the url.

Alex Aitken 6 yıl önce
ebeveyn
işleme
65b4545e81

+ 4 - 4
lib/shopify_api/disable_prefix_check.rb

@@ -12,12 +12,12 @@ module ShopifyAPI
         resource_id = "#{resource}_id".to_sym
         resource_type = flexible ? ":#{resource}" : resource.to_s.pluralize
 
-        init_prefix_explicit resource_type, resource_id
+        init_prefix_explicit(resource_type, resource_id)
 
-        define_singleton_method :prefix do |options = {}|
-          resource_type =  options[resource] if flexible
+        define_singleton_method :resource_prefix do |options = {}|
+          resource_type = options[resource] if flexible
 
-          options[resource_id].nil? ? api_prefix : "#{api_prefix}#{resource_type}/#{options[resource_id]}/"
+          options[resource_id].nil? ? '' : "#{resource_type}/#{options[resource_id]}/"
         end
 
         define_singleton_method :instantiate_record do |record, prefix_options = {}|

+ 1 - 1
lib/shopify_api/resources/access_scope.rb

@@ -1,5 +1,5 @@
 module ShopifyAPI
   class AccessScope < Base
-    self.prefix = "#{api_prefix}oauth/"
+    self.resource_prefix = "oauth/"
   end
 end

+ 5 - 1
lib/shopify_api/resources/asset.rb

@@ -52,7 +52,11 @@ module ShopifyAPI
         params = { asset: { key: args[0] } }
         params = params.merge(args[1][:params]) if args[1] && args[1][:params]
         path_prefix = params[:theme_id] ? "themes/#{params[:theme_id]}/" : ""
-        resource = find(:one, from: "#{api_prefix}#{path_prefix}assets.#{format.extension}", params: params)
+        resource = find(
+          :one,
+          from: "#{api_prefix}#{path_prefix}assets.#{format.extension}",
+          params: params
+        )
         resource.prefix_options[:theme_id] = params[:theme_id] if resource && params[:theme_id]
         resource
       end

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

@@ -4,6 +4,7 @@ module ShopifyAPI
   class Base < ActiveResource::Base
     class InvalidSessionError < StandardError; end
     extend Countable
+
     self.timeout = 90
     self.include_root_in_json = false
     self.headers['User-Agent'] = ["ShopifyAPI/#{ShopifyAPI::VERSION}",
@@ -70,16 +71,45 @@ module ShopifyAPI
       end
 
       def prefix(options = {})
-        self.prefix = api_prefix
-        prefix(options)
+        "#{api_prefix}#{resource_prefix(options)}"
+      end
+
+      def prefix_source
+        ''
       end
 
+      def resource_prefix(_options = {})
+        ''
+      end
+
+      # Sets the \prefix for a resource's nested URL (e.g., <tt>prefix/collectionname/1.json</tt>).
+      # Default value is <tt>site.path</tt>.
+      def resource_prefix=(value)
+        @prefix_parameters = nil
+
+        resource_prefix_call = value.gsub(/:\w+/) { |key| "\#{URI.parser.escape options[#{key}].to_s}" }
+
+        silence_warnings do
+          # Redefine the new methods.
+          instance_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
+            def prefix_source() "#{value}" end
+            def resource_prefix(options={}) "#{resource_prefix_call}" end
+          RUBY_EVAL
+        end
+      rescue => e
+        logger&.error("Couldn't set prefix: #{e}\n  #{code}")
+        raise
+      end
+
+      alias_method :set_prefix, :resource_prefix=
+      alias_method :prefix=, :resource_prefix=
+
       def init_prefix(resource)
         init_prefix_explicit(resource.to_s.pluralize, "#{resource}_id")
       end
 
       def init_prefix_explicit(resource_type, resource_id)
-        self.prefix = "#{api_prefix}#{resource_type}/:#{resource_id}/"
+        self.prefix = "#{resource_type}/:#{resource_id}/"
 
         define_method resource_id.to_sym do
           @prefix_options[resource_id]

+ 1 - 1
lib/shopify_api/resources/fulfillment_event.rb

@@ -1,6 +1,6 @@
 module ShopifyAPI
   class FulfillmentEvent < Base
-    self.prefix = "#{api_prefix}orders/:order_id/fulfillments/:fulfillment_id/"
+    self.resource_prefix = "orders/:order_id/fulfillments/:fulfillment_id/"
     self.collection_name = 'events'
     self.element_name = 'event'
 

+ 1 - 1
lib/shopify_api/resources/payment.rb

@@ -2,6 +2,6 @@
 
 module ShopifyAPI
   class Payment < Base
-    self.prefix = "#{api_prefix}checkouts/:checkout_id/"
+    self.resource_prefix = "checkouts/:checkout_id/"
   end
 end

+ 1 - 1
lib/shopify_api/resources/ping/conversation.rb

@@ -3,7 +3,7 @@
 module ShopifyAPI
   module Ping
     class Conversation < Base
-      self.prefix = "#{api_prefix}api/ping-api/v1/"
+      self.resource_prefix = "api/ping-api/v1/"
 
       def send_message(message_attrs)
         message = ShopifyAPI::Ping::Message.new(

+ 1 - 1
lib/shopify_api/resources/ping/delivery_confirmation_details.rb

@@ -3,7 +3,7 @@
 module ShopifyAPI
   module Ping
     class DeliveryConfirmationDetails < Base
-      self.prefix = "#{api_prefix}api/ping-api/v1/conversations/:conversation_id/messages/:message_id/"
+      self.resource_prefix = "api/ping-api/v1/conversations/:conversation_id/messages/:message_id/"
       self.collection_name = "delivery_confirmation"
     end
   end

+ 1 - 1
lib/shopify_api/resources/ping/message.rb

@@ -2,7 +2,7 @@
 module ShopifyAPI
   module Ping
     class Message < Base
-      self.prefix = "#{api_prefix}api/ping-api/v1/conversations/:conversation_id/"
+      self.resource_prefix = "api/ping-api/v1/conversations/:conversation_id/"
     end
   end
 end

+ 1 - 1
lib/shopify_api/resources/shipping_rate.rb

@@ -2,6 +2,6 @@
 
 module ShopifyAPI
   class ShippingRate < Base
-    self.prefix = "#{api_prefix}checkouts/:checkout_id/"
+    self.resource_prefix = "checkouts/:checkout_id/"
   end
 end

+ 1 - 0
shopify_api.gemspec

@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
   s.add_development_dependency("minitest", ">= 4.0")
   s.add_development_dependency("rake")
   s.add_development_dependency("timecop")
+  s.add_development_dependency("rubocop")
   s.add_development_dependency("pry")
   s.add_development_dependency("pry-byebug")
 end