shopify_api 9.0.2 → 9.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +36 -0
  3. data/.github/workflows/build.yml +41 -0
  4. data/.gitignore +2 -1
  5. data/.rubocop.yml +23 -3
  6. data/.rubocop_todo.yml +75 -0
  7. data/CHANGELOG.md +43 -0
  8. data/CONTRIBUTING.md +1 -1
  9. data/Gemfile +5 -0
  10. data/Gemfile.lock +151 -0
  11. data/Gemfile_ar51 +1 -1
  12. data/README.md +47 -31
  13. data/RELEASING +10 -6
  14. data/Rakefile +16 -5
  15. data/SECURITY.md +59 -0
  16. data/docs/_config.yml +1 -0
  17. data/docs/_includes/footer.html +28 -0
  18. data/docs/_includes/head.html +28 -0
  19. data/docs/_layouts/index.html +57 -0
  20. data/docs/graphql.md +47 -2
  21. data/docs/index.md +639 -0
  22. data/lib/active_resource/connection_ext.rb +1 -0
  23. data/lib/active_resource/detailed_log_subscriber.rb +6 -7
  24. data/lib/active_resource/json_errors.rb +8 -2
  25. data/lib/shopify_api.rb +8 -1
  26. data/lib/shopify_api/api_access.rb +57 -0
  27. data/lib/shopify_api/api_version.rb +6 -5
  28. data/lib/shopify_api/connection.rb +1 -0
  29. data/lib/shopify_api/countable.rb +3 -2
  30. data/lib/shopify_api/disable_prefix_check.rb +2 -2
  31. data/lib/shopify_api/events.rb +2 -1
  32. data/lib/shopify_api/graphql.rb +28 -8
  33. data/lib/shopify_api/limits.rb +3 -2
  34. data/lib/shopify_api/message_enricher.rb +11 -9
  35. data/lib/shopify_api/meta.rb +0 -1
  36. data/lib/shopify_api/metafields.rb +5 -4
  37. data/lib/shopify_api/pagination_link_headers.rb +5 -4
  38. data/lib/shopify_api/resources.rb +1 -0
  39. data/lib/shopify_api/resources/access_scope.rb +1 -1
  40. data/lib/shopify_api/resources/access_token.rb +1 -0
  41. data/lib/shopify_api/resources/address.rb +1 -0
  42. data/lib/shopify_api/resources/announcement.rb +2 -1
  43. data/lib/shopify_api/resources/application_charge.rb +1 -0
  44. data/lib/shopify_api/resources/application_credit.rb +1 -0
  45. data/lib/shopify_api/resources/article.rb +3 -2
  46. data/lib/shopify_api/resources/asset.rb +6 -5
  47. data/lib/shopify_api/resources/assigned_fulfillment_order.rb +1 -1
  48. data/lib/shopify_api/resources/base.rb +12 -8
  49. data/lib/shopify_api/resources/billing_address.rb +1 -0
  50. data/lib/shopify_api/resources/blog.rb +2 -1
  51. data/lib/shopify_api/resources/carrier_service.rb +1 -0
  52. data/lib/shopify_api/resources/cart.rb +2 -1
  53. data/lib/shopify_api/resources/collect.rb +1 -0
  54. data/lib/shopify_api/resources/collection_listing.rb +1 -0
  55. data/lib/shopify_api/resources/comment.rb +20 -5
  56. data/lib/shopify_api/resources/country.rb +1 -0
  57. data/lib/shopify_api/resources/custom_collection.rb +4 -3
  58. data/lib/shopify_api/resources/customer.rb +2 -1
  59. data/lib/shopify_api/resources/customer_group.rb +1 -0
  60. data/lib/shopify_api/resources/customer_invite.rb +1 -0
  61. data/lib/shopify_api/resources/customer_saved_search.rb +2 -1
  62. data/lib/shopify_api/resources/discount_code.rb +1 -0
  63. data/lib/shopify_api/resources/discount_code_batch.rb +34 -0
  64. data/lib/shopify_api/resources/draft_order.rb +1 -0
  65. data/lib/shopify_api/resources/draft_order_invoice.rb +1 -0
  66. data/lib/shopify_api/resources/event.rb +1 -0
  67. data/lib/shopify_api/resources/fulfillment.rb +12 -3
  68. data/lib/shopify_api/resources/fulfillment_event.rb +1 -0
  69. data/lib/shopify_api/resources/fulfillment_order.rb +30 -16
  70. data/lib/shopify_api/resources/fulfillment_order_locations_for_move.rb +1 -0
  71. data/lib/shopify_api/resources/fulfillment_request.rb +1 -0
  72. data/lib/shopify_api/resources/fulfillment_service.rb +1 -0
  73. data/lib/shopify_api/resources/fulfillment_v2.rb +3 -2
  74. data/lib/shopify_api/resources/gift_card.rb +1 -0
  75. data/lib/shopify_api/resources/image.rb +2 -1
  76. data/lib/shopify_api/resources/inventory_level.rb +3 -4
  77. data/lib/shopify_api/resources/line_item.rb +4 -3
  78. data/lib/shopify_api/resources/location.rb +1 -1
  79. data/lib/shopify_api/resources/marketing_event.rb +1 -0
  80. data/lib/shopify_api/resources/metafield.rb +1 -0
  81. data/lib/shopify_api/resources/note_attribute.rb +1 -0
  82. data/lib/shopify_api/resources/option.rb +1 -0
  83. data/lib/shopify_api/resources/order.rb +2 -1
  84. data/lib/shopify_api/resources/order_risk.rb +1 -0
  85. data/lib/shopify_api/resources/page.rb +1 -0
  86. data/lib/shopify_api/resources/payment_details.rb +1 -0
  87. data/lib/shopify_api/resources/policy.rb +1 -0
  88. data/lib/shopify_api/resources/price_rule.rb +1 -1
  89. data/lib/shopify_api/resources/product.rb +27 -3
  90. data/lib/shopify_api/resources/product_listing.rb +1 -0
  91. data/lib/shopify_api/resources/province.rb +1 -0
  92. data/lib/shopify_api/resources/receipt.rb +1 -0
  93. data/lib/shopify_api/resources/recurring_application_charge.rb +4 -1
  94. data/lib/shopify_api/resources/redirect.rb +1 -0
  95. data/lib/shopify_api/resources/refund.rb +2 -1
  96. data/lib/shopify_api/resources/report.rb +1 -0
  97. data/lib/shopify_api/resources/resource_feedback.rb +1 -1
  98. data/lib/shopify_api/resources/rule.rb +1 -0
  99. data/lib/shopify_api/resources/script_tag.rb +1 -0
  100. data/lib/shopify_api/resources/shipping_address.rb +1 -0
  101. data/lib/shopify_api/resources/shipping_line.rb +1 -0
  102. data/lib/shopify_api/resources/shipping_zone.rb +1 -0
  103. data/lib/shopify_api/resources/shop.rb +2 -1
  104. data/lib/shopify_api/resources/smart_collection.rb +4 -8
  105. data/lib/shopify_api/resources/storefront_access_token.rb +1 -0
  106. data/lib/shopify_api/resources/tax_line.rb +1 -0
  107. data/lib/shopify_api/resources/tax_service.rb +1 -0
  108. data/lib/shopify_api/resources/theme.rb +1 -0
  109. data/lib/shopify_api/resources/transaction.rb +1 -0
  110. data/lib/shopify_api/resources/usage_charge.rb +1 -0
  111. data/lib/shopify_api/resources/user.rb +1 -0
  112. data/lib/shopify_api/resources/variant.rb +35 -0
  113. data/lib/shopify_api/resources/webhook.rb +1 -0
  114. data/lib/shopify_api/session.rb +43 -14
  115. data/lib/shopify_api/version.rb +2 -1
  116. data/lib/verify_docs.rb +8 -0
  117. data/service.yml +1 -1
  118. data/shopify_api.gemspec +13 -6
  119. data/test/access_token_test.rb +6 -5
  120. data/test/active_resource/json_errors_test.rb +6 -6
  121. data/test/api_access_test.rb +153 -0
  122. data/test/api_version_test.rb +3 -3
  123. data/test/application_charge_test.rb +30 -27
  124. data/test/application_credit_test.rb +10 -9
  125. data/test/article_test.rb +34 -35
  126. data/test/asset_test.rb +14 -6
  127. data/test/assigned_fulfillment_order_test.rb +5 -4
  128. data/test/base_test.rb +64 -49
  129. data/test/blog_test.rb +4 -3
  130. data/test/carrier_service_test.rb +7 -6
  131. data/test/cart_test.rb +2 -1
  132. data/test/collect_test.rb +4 -3
  133. data/test/collection_listing_test.rb +21 -16
  134. data/test/collection_publication_test.rb +8 -8
  135. data/test/collection_test.rb +20 -19
  136. data/test/countable_test.rb +3 -2
  137. data/test/currency_test.rb +5 -5
  138. data/test/custom_collection_test.rb +4 -3
  139. data/test/customer_saved_search_test.rb +18 -8
  140. data/test/customer_test.rb +22 -14
  141. data/test/detailed_log_subscriber_test.rb +15 -11
  142. data/test/discount_code_batch_test.rb +41 -0
  143. data/test/discount_code_test.rb +21 -15
  144. data/test/draft_order_test.rb +68 -52
  145. data/test/fixtures/assigned_fulfillment_orders.json +2 -0
  146. data/test/fixtures/discount_code_batch.json +14 -0
  147. data/test/fixtures/discount_code_batch_discount_codes.json +21 -0
  148. data/test/fixtures/fulfillment_order.json +1 -0
  149. data/test/fixtures/fulfillment_orders.json +2 -0
  150. data/test/fulfillment_event_test.rb +31 -26
  151. data/test/fulfillment_order_test.rb +215 -147
  152. data/test/fulfillment_order_test_helper.rb +1 -0
  153. data/test/fulfillment_request_test.rb +10 -8
  154. data/test/fulfillment_service_test.rb +13 -12
  155. data/test/fulfillment_test.rb +81 -66
  156. data/test/fulfillment_v2_test.rb +16 -12
  157. data/test/gift_card_test.rb +6 -4
  158. data/test/graphql_test.rb +55 -23
  159. data/test/image_test.rb +19 -17
  160. data/test/inventory_level_test.rb +24 -15
  161. data/test/lib/webmock_extensions/last_request.rb +1 -1
  162. data/test/limits_test.rb +2 -1
  163. data/test/location_test.rb +2 -1
  164. data/test/marketing_event_test.rb +20 -20
  165. data/test/message_enricher_test.rb +6 -6
  166. data/test/meta_test.rb +7 -9
  167. data/test/metafield_test.rb +30 -20
  168. data/test/order_risk_test.rb +17 -16
  169. data/test/order_test.rb +43 -28
  170. data/test/pagination_test.rb +89 -56
  171. data/test/policy_test.rb +6 -5
  172. data/test/price_rule_test.rb +20 -15
  173. data/test/product_listing_test.rb +20 -20
  174. data/test/product_publication_test.rb +8 -8
  175. data/test/product_test.rb +71 -20
  176. data/test/publication_test.rb +3 -3
  177. data/test/recurring_application_charge_test.rb +104 -42
  178. data/test/redirect_test.rb +4 -3
  179. data/test/refund_test.rb +22 -17
  180. data/test/report_test.rb +12 -10
  181. data/test/resource_feedback_test.rb +14 -13
  182. data/test/script_tag_test.rb +10 -9
  183. data/test/session_test.rb +234 -43
  184. data/test/shipping_zone_test.rb +4 -3
  185. data/test/shop_test.rb +47 -33
  186. data/test/smart_collection_test.rb +5 -29
  187. data/test/storefront_access_token_test.rb +13 -15
  188. data/test/tax_service_test.rb +7 -4
  189. data/test/tender_transaction_test.rb +3 -3
  190. data/test/test_helper.rb +14 -12
  191. data/test/transaction_test.rb +4 -3
  192. data/test/usage_charge_test.rb +12 -8
  193. data/test/user_test.rb +4 -3
  194. data/test/variant_test.rb +50 -23
  195. data/test/webhook_test.rb +10 -7
  196. metadata +30 -15
  197. data/.rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml +0 -1027
  198. data/.travis.yml +0 -23
  199. data/bin/shopify +0 -3
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class FulfillmentOrderLocationsForMove < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class FulfillmentRequest < Base
3
4
  init_prefix :order
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class FulfillmentService < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class FulfillmentV2 < Base
3
4
  self.element_name = 'fulfillment'
@@ -11,8 +12,8 @@ module ShopifyAPI
11
12
  body = {
12
13
  fulfillment: {
13
14
  tracking_info: tracking_info,
14
- notify_customer: notify_customer
15
- }
15
+ notify_customer: notify_customer,
16
+ },
16
17
  }
17
18
  load_attributes_from_response(post(:update_tracking, {}, body.to_json))
18
19
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class GiftCard < Base
3
4
  def disable
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Image < Base
3
4
  init_prefix :product
@@ -5,7 +6,7 @@ module ShopifyAPI
5
6
  # generate a method for each possible image variant
6
7
  [:pico, :icon, :thumb, :small, :compact, :medium, :large, :grande, :original].each do |m|
7
8
  reg_exp_match = "/\\1_#{m}.\\2"
8
- define_method(m) { src.gsub(/\/(.*)\.(\w{2,4})/, reg_exp_match) }
9
+ define_method(m) { src.gsub(%r/\/(.*)\.(\w{2,4})/, reg_exp_match) }
9
10
  end
10
11
 
11
12
  def attach_image(data, filename = nil)
@@ -2,10 +2,9 @@
2
2
 
3
3
  module ShopifyAPI
4
4
  class InventoryLevel < Base
5
-
6
5
  # The default path structure in ActiveResource for delete would result in:
7
6
  # /admin/api/<version>/inventory_levels/#{ inventory_level.id }.json?#{ params }, but since
8
- # InventroyLevels are a second class resource made up of a Where and a What
7
+ # InventoryLevels are a second class resource made up of a Where and a What
9
8
  # (Location and InventoryItem), it does not have a resource ID. Here we
10
9
  # redefine element_path to remove the id so HTTP DELETE requests go to
11
10
  # /admin/api/<version>/inventory_levels.json?#{ params } instead.
@@ -33,7 +32,7 @@ module ShopifyAPI
33
32
  body = {
34
33
  location_id: location_id,
35
34
  inventory_item_id: inventory_item_id,
36
- available: new_available
35
+ available: new_available,
37
36
  }
38
37
  body[:disconnect_if_necessary] = disconnect_if_necessary unless disconnect_if_necessary.nil?
39
38
  load_attributes_from_response(
@@ -45,7 +44,7 @@ module ShopifyAPI
45
44
  body = {
46
45
  location_id: location_id,
47
46
  inventory_item_id: inventory_item_id,
48
- available_adjustment: available_adjustment
47
+ available_adjustment: available_adjustment,
49
48
  }
50
49
  load_attributes_from_response(
51
50
  self.class.post(:adjust, {}, body.to_json)
@@ -1,12 +1,13 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class LineItem < Base
3
4
  class Property < Base
4
5
  def initialize(*args)
5
- attributes = args[0] || {}
6
- persisted = args[1] || false
6
+ self.attributes = args[0] || {}
7
+ self.persisted = args[1] || false
7
8
  super
8
9
  rescue NameError
9
- attributes = attributes.to_hash
10
+ self.attributes = attributes.to_hash
10
11
  self
11
12
  end
12
13
  end
@@ -1,6 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Location < Base
3
-
4
4
  def inventory_levels
5
5
  ShopifyAPI::InventoryLevel.find(:all, from: "#{self.class.prefix}locations/#{id}/inventory_levels.json")
6
6
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class MarketingEvent < Base
3
4
  include Countable
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Metafield < Base
3
4
  include DisablePrefixCheck
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class NoteAttribute < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Option < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Order < Base
3
4
  include Events
@@ -16,7 +17,7 @@ module ShopifyAPI
16
17
  end
17
18
 
18
19
  def transactions
19
- Transaction.find(:all, :params => { :order_id => id })
20
+ Transaction.find(:all, params: { order_id: id })
20
21
  end
21
22
 
22
23
  def capture(amount = "", currency: nil)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class OrderRisk < Base
3
4
  init_prefix :order
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Page < Base
3
4
  include Events
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class PaymentDetails < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Policy < Base
3
4
  def self.all
@@ -1,6 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class PriceRule < Base
3
-
4
4
  def discount_codes
5
5
  DiscountCode.find(:all, params: { price_rule_id: id })
6
6
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Product < Base
3
4
  include Events
@@ -5,10 +6,15 @@ module ShopifyAPI
5
6
 
6
7
  early_july_pagination_release!
7
8
 
9
+ def initialize(*)
10
+ super
11
+ self.attributes.except!('total_inventory') unless allow_inventory_params?
12
+ end
13
+
8
14
  # compute the price range
9
15
  def price_range
10
16
  prices = variants.collect(&:price).collect(&:to_f)
11
- format = "%0.2f"
17
+ format = "%0.2f"
12
18
  if prices.min != prices.max
13
19
  "#{format % prices.min} - #{format % prices.max}"
14
20
  else
@@ -16,12 +22,17 @@ module ShopifyAPI
16
22
  end
17
23
  end
18
24
 
25
+ def total_inventory=(new_value)
26
+ raise_deprecated_inventory_call('total_inventory') unless allow_inventory_params?
27
+ super
28
+ end
29
+
19
30
  def collections
20
- CustomCollection.find(:all, :params => {:product_id => self.id})
31
+ CustomCollection.find(:all, params: { product_id: self.id })
21
32
  end
22
33
 
23
34
  def smart_collections
24
- SmartCollection.find(:all, :params => {:product_id => self.id})
35
+ SmartCollection.find(:all, params: { product_id: self.id })
25
36
  end
26
37
 
27
38
  def add_to_collection(collection)
@@ -31,5 +42,18 @@ module ShopifyAPI
31
42
  def remove_from_collection(collection)
32
43
  collection.remove_product(self)
33
44
  end
45
+
46
+ private
47
+
48
+ def raise_deprecated_inventory_call(parameter)
49
+ raise(
50
+ ShopifyAPI::ValidationException,
51
+ "'#{parameter}' is deprecated - see https://help.shopify.com/en/api/guides/inventory-migration-guide",
52
+ )
53
+ end
54
+
55
+ def allow_inventory_params?
56
+ Base.api_version < ApiVersion.find_version('2019-10')
57
+ end
34
58
  end
35
59
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class ProductListing < Base
3
4
  self.primary_key = :product_id
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Province < Base
3
4
  init_prefix :country
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Receipt < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class RecurringApplicationCharge < Base
3
4
  undef_method :test
@@ -25,7 +26,9 @@ module ShopifyAPI
25
26
  end
26
27
 
27
28
  def customize(customize_recurring_app_charge_params = {})
28
- load_attributes_from_response(put(:customize, recurring_application_charge: customize_recurring_app_charge_params ))
29
+ load_attributes_from_response(
30
+ put(:customize, recurring_application_charge: customize_recurring_app_charge_params)
31
+ )
29
32
  end
30
33
  end
31
34
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Redirect < Base
3
4
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Refund < Base
3
4
  init_prefix :order
4
5
 
5
6
  def self.calculate(*args)
6
- options = { :refund => args[0] }
7
+ options = { refund: args[0] }
7
8
  params = {}
8
9
  params = args[1][:params] if args[1] && args[1][:params]
9
10
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Report < Base
3
4
  end
@@ -13,7 +13,7 @@ module ShopifyAPI
13
13
 
14
14
  def save
15
15
  return super unless persisted?
16
- raise ExistingFeedbackSaved.new(EXISTING_FEEDBACK_SAVED_ERROR_MESSAGE)
16
+ raise ExistingFeedbackSaved, EXISTING_FEEDBACK_SAVED_ERROR_MESSAGE
17
17
  end
18
18
  end
19
19
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Rule < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class ScriptTag < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class ShippingAddress < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class ShippingLine < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class ShippingZone < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  # Shop object. Use Shop.current to receive
3
4
  # the shop.
@@ -9,7 +10,7 @@ module ShopifyAPI
9
10
  end
10
11
 
11
12
  def metafields(**options)
12
- Metafield.find :all, params: options
13
+ Metafield.find(:all, params: options)
13
14
  end
14
15
 
15
16
  def add_metafield(metafield)
@@ -1,19 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class SmartCollection < Base
3
4
  include Events
4
5
  include Metafields
5
6
 
6
- def products(options = {})
7
- if options.present?
8
- Product.find(:all, from: "#{self.class.prefix}smart_collections/#{id}/products.json", params: options)
9
- else
10
- Product.find(:all, params: { collection_id: id })
11
- end
7
+ def products
8
+ Product.find(:all, params: { collection_id: id })
12
9
  end
13
10
 
14
- def order(options={})
11
+ def order(options = {})
15
12
  load_attributes_from_response(put(:order, options, only_id))
16
13
  end
17
-
18
14
  end
19
15
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class StorefrontAccessToken < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class TaxLine < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class TaxService < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Theme < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Transaction < Base
3
4
  init_prefix :order
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class UsageCharge < Base
3
4
  init_prefix :recurring_application_charge
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class User < Base
3
4
  end
@@ -1,8 +1,43 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Variant < Base
3
4
  include Metafields
4
5
  include DisablePrefixCheck
5
6
 
6
7
  conditional_prefix :product
8
+
9
+ def initialize(*)
10
+ super
11
+ attributes.except!('old_inventory_quantity')
12
+ end
13
+
14
+ def inventory_quantity_adjustment=(new_value)
15
+ raise_deprecated_inventory_call('inventory_quantity_adjustment')
16
+ super
17
+ end
18
+
19
+ def inventory_quantity=(new_value)
20
+ raise_deprecated_inventory_call('inventory_quantity')
21
+ super
22
+ end
23
+
24
+ def old_inventory_quantity=(new_value)
25
+ raise_deprecated_inventory_call('old_inventory_quantity')
26
+ super
27
+ end
28
+
29
+ def save
30
+ attributes.except!('inventory_quantity')
31
+ super
32
+ end
33
+
34
+ private
35
+
36
+ def raise_deprecated_inventory_call(parameter)
37
+ raise(
38
+ ShopifyAPI::ValidationException,
39
+ "'#{parameter}' is deprecated - see https://help.shopify.com/en/api/guides/inventory-migration-guide",
40
+ )
41
+ end
7
42
  end
8
43
  end