shopify_api 9.2.0 → 9.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) 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 +0 -1
  5. data/.rubocop.yml +23 -3
  6. data/.rubocop_todo.yml +75 -0
  7. data/CHANGELOG.md +15 -0
  8. data/Gemfile +1 -0
  9. data/Gemfile.lock +151 -0
  10. data/Gemfile_ar51 +1 -1
  11. data/README.md +40 -30
  12. data/RELEASING +10 -6
  13. data/Rakefile +10 -6
  14. data/docs/graphql.md +1 -1
  15. data/docs/index.md +1 -1
  16. data/lib/active_resource/connection_ext.rb +1 -0
  17. data/lib/active_resource/detailed_log_subscriber.rb +6 -7
  18. data/lib/active_resource/json_errors.rb +8 -2
  19. data/lib/shopify_api.rb +8 -1
  20. data/lib/shopify_api/api_access.rb +57 -0
  21. data/lib/shopify_api/api_version.rb +6 -5
  22. data/lib/shopify_api/connection.rb +1 -0
  23. data/lib/shopify_api/countable.rb +3 -2
  24. data/lib/shopify_api/disable_prefix_check.rb +2 -2
  25. data/lib/shopify_api/events.rb +2 -1
  26. data/lib/shopify_api/graphql.rb +8 -6
  27. data/lib/shopify_api/limits.rb +3 -2
  28. data/lib/shopify_api/message_enricher.rb +11 -9
  29. data/lib/shopify_api/meta.rb +0 -1
  30. data/lib/shopify_api/metafields.rb +5 -4
  31. data/lib/shopify_api/pagination_link_headers.rb +4 -3
  32. data/lib/shopify_api/resources.rb +1 -0
  33. data/lib/shopify_api/resources/access_scope.rb +1 -1
  34. data/lib/shopify_api/resources/access_token.rb +1 -0
  35. data/lib/shopify_api/resources/address.rb +1 -0
  36. data/lib/shopify_api/resources/announcement.rb +2 -1
  37. data/lib/shopify_api/resources/application_charge.rb +1 -0
  38. data/lib/shopify_api/resources/application_credit.rb +1 -0
  39. data/lib/shopify_api/resources/article.rb +3 -2
  40. data/lib/shopify_api/resources/asset.rb +6 -5
  41. data/lib/shopify_api/resources/assigned_fulfillment_order.rb +1 -1
  42. data/lib/shopify_api/resources/base.rb +11 -6
  43. data/lib/shopify_api/resources/billing_address.rb +1 -0
  44. data/lib/shopify_api/resources/blog.rb +2 -1
  45. data/lib/shopify_api/resources/carrier_service.rb +1 -0
  46. data/lib/shopify_api/resources/cart.rb +2 -1
  47. data/lib/shopify_api/resources/collect.rb +1 -0
  48. data/lib/shopify_api/resources/collection_listing.rb +1 -0
  49. data/lib/shopify_api/resources/comment.rb +20 -5
  50. data/lib/shopify_api/resources/country.rb +1 -0
  51. data/lib/shopify_api/resources/custom_collection.rb +4 -3
  52. data/lib/shopify_api/resources/customer.rb +2 -1
  53. data/lib/shopify_api/resources/customer_group.rb +1 -0
  54. data/lib/shopify_api/resources/customer_invite.rb +1 -0
  55. data/lib/shopify_api/resources/customer_saved_search.rb +2 -1
  56. data/lib/shopify_api/resources/discount_code.rb +1 -0
  57. data/lib/shopify_api/resources/discount_code_batch.rb +4 -2
  58. data/lib/shopify_api/resources/draft_order.rb +1 -0
  59. data/lib/shopify_api/resources/draft_order_invoice.rb +1 -0
  60. data/lib/shopify_api/resources/event.rb +1 -0
  61. data/lib/shopify_api/resources/fulfillment.rb +12 -3
  62. data/lib/shopify_api/resources/fulfillment_event.rb +1 -0
  63. data/lib/shopify_api/resources/fulfillment_order.rb +30 -16
  64. data/lib/shopify_api/resources/fulfillment_order_locations_for_move.rb +1 -0
  65. data/lib/shopify_api/resources/fulfillment_request.rb +1 -0
  66. data/lib/shopify_api/resources/fulfillment_service.rb +1 -0
  67. data/lib/shopify_api/resources/fulfillment_v2.rb +3 -2
  68. data/lib/shopify_api/resources/gift_card.rb +1 -0
  69. data/lib/shopify_api/resources/image.rb +2 -1
  70. data/lib/shopify_api/resources/inventory_level.rb +2 -3
  71. data/lib/shopify_api/resources/line_item.rb +4 -3
  72. data/lib/shopify_api/resources/location.rb +1 -1
  73. data/lib/shopify_api/resources/marketing_event.rb +1 -0
  74. data/lib/shopify_api/resources/metafield.rb +1 -0
  75. data/lib/shopify_api/resources/note_attribute.rb +1 -0
  76. data/lib/shopify_api/resources/option.rb +1 -0
  77. data/lib/shopify_api/resources/order.rb +2 -1
  78. data/lib/shopify_api/resources/order_risk.rb +1 -0
  79. data/lib/shopify_api/resources/page.rb +1 -0
  80. data/lib/shopify_api/resources/payment_details.rb +1 -0
  81. data/lib/shopify_api/resources/policy.rb +1 -0
  82. data/lib/shopify_api/resources/price_rule.rb +1 -1
  83. data/lib/shopify_api/resources/product.rb +14 -11
  84. data/lib/shopify_api/resources/product_listing.rb +1 -0
  85. data/lib/shopify_api/resources/province.rb +1 -0
  86. data/lib/shopify_api/resources/receipt.rb +1 -0
  87. data/lib/shopify_api/resources/recurring_application_charge.rb +4 -1
  88. data/lib/shopify_api/resources/redirect.rb +1 -0
  89. data/lib/shopify_api/resources/refund.rb +2 -1
  90. data/lib/shopify_api/resources/report.rb +1 -0
  91. data/lib/shopify_api/resources/resource_feedback.rb +1 -1
  92. data/lib/shopify_api/resources/rule.rb +1 -0
  93. data/lib/shopify_api/resources/script_tag.rb +1 -0
  94. data/lib/shopify_api/resources/shipping_address.rb +1 -0
  95. data/lib/shopify_api/resources/shipping_line.rb +1 -0
  96. data/lib/shopify_api/resources/shipping_zone.rb +1 -0
  97. data/lib/shopify_api/resources/shop.rb +2 -1
  98. data/lib/shopify_api/resources/smart_collection.rb +2 -2
  99. data/lib/shopify_api/resources/storefront_access_token.rb +1 -0
  100. data/lib/shopify_api/resources/tax_line.rb +1 -0
  101. data/lib/shopify_api/resources/tax_service.rb +1 -0
  102. data/lib/shopify_api/resources/theme.rb +1 -0
  103. data/lib/shopify_api/resources/transaction.rb +1 -0
  104. data/lib/shopify_api/resources/usage_charge.rb +1 -0
  105. data/lib/shopify_api/resources/user.rb +1 -0
  106. data/lib/shopify_api/resources/variant.rb +16 -18
  107. data/lib/shopify_api/resources/webhook.rb +1 -0
  108. data/lib/shopify_api/session.rb +20 -12
  109. data/lib/shopify_api/version.rb +2 -1
  110. data/lib/verify_docs.rb +1 -0
  111. data/service.yml +1 -1
  112. data/shopify_api.gemspec +10 -4
  113. data/test/access_token_test.rb +6 -5
  114. data/test/active_resource/json_errors_test.rb +6 -6
  115. data/test/api_access_test.rb +153 -0
  116. data/test/api_version_test.rb +3 -3
  117. data/test/application_charge_test.rb +30 -27
  118. data/test/application_credit_test.rb +10 -9
  119. data/test/article_test.rb +34 -35
  120. data/test/asset_test.rb +14 -6
  121. data/test/assigned_fulfillment_order_test.rb +5 -4
  122. data/test/base_test.rb +55 -56
  123. data/test/blog_test.rb +4 -3
  124. data/test/carrier_service_test.rb +7 -6
  125. data/test/cart_test.rb +2 -1
  126. data/test/collect_test.rb +4 -3
  127. data/test/collection_listing_test.rb +21 -16
  128. data/test/collection_publication_test.rb +8 -8
  129. data/test/collection_test.rb +20 -19
  130. data/test/countable_test.rb +3 -2
  131. data/test/currency_test.rb +5 -5
  132. data/test/custom_collection_test.rb +4 -3
  133. data/test/customer_saved_search_test.rb +18 -8
  134. data/test/customer_test.rb +22 -14
  135. data/test/detailed_log_subscriber_test.rb +15 -11
  136. data/test/discount_code_batch_test.rb +11 -10
  137. data/test/discount_code_test.rb +21 -15
  138. data/test/draft_order_test.rb +68 -52
  139. data/test/fixtures/assigned_fulfillment_orders.json +2 -0
  140. data/test/fixtures/fulfillment_order.json +1 -0
  141. data/test/fixtures/fulfillment_orders.json +2 -0
  142. data/test/fulfillment_event_test.rb +31 -26
  143. data/test/fulfillment_order_test.rb +215 -147
  144. data/test/fulfillment_order_test_helper.rb +1 -0
  145. data/test/fulfillment_request_test.rb +10 -8
  146. data/test/fulfillment_service_test.rb +13 -12
  147. data/test/fulfillment_test.rb +81 -66
  148. data/test/fulfillment_v2_test.rb +16 -12
  149. data/test/gift_card_test.rb +6 -4
  150. data/test/graphql_test.rb +27 -27
  151. data/test/image_test.rb +19 -17
  152. data/test/inventory_level_test.rb +24 -15
  153. data/test/lib/webmock_extensions/last_request.rb +1 -1
  154. data/test/limits_test.rb +2 -1
  155. data/test/location_test.rb +2 -1
  156. data/test/marketing_event_test.rb +20 -20
  157. data/test/message_enricher_test.rb +6 -6
  158. data/test/meta_test.rb +7 -9
  159. data/test/metafield_test.rb +30 -20
  160. data/test/order_risk_test.rb +17 -16
  161. data/test/order_test.rb +43 -28
  162. data/test/pagination_test.rb +89 -56
  163. data/test/policy_test.rb +6 -5
  164. data/test/price_rule_test.rb +20 -15
  165. data/test/product_listing_test.rb +20 -20
  166. data/test/product_publication_test.rb +8 -8
  167. data/test/product_test.rb +44 -32
  168. data/test/publication_test.rb +3 -3
  169. data/test/recurring_application_charge_test.rb +104 -42
  170. data/test/redirect_test.rb +4 -3
  171. data/test/refund_test.rb +22 -17
  172. data/test/report_test.rb +12 -10
  173. data/test/resource_feedback_test.rb +14 -13
  174. data/test/script_tag_test.rb +10 -9
  175. data/test/session_test.rb +74 -46
  176. data/test/shipping_zone_test.rb +4 -3
  177. data/test/shop_test.rb +47 -33
  178. data/test/smart_collection_test.rb +5 -4
  179. data/test/storefront_access_token_test.rb +13 -15
  180. data/test/tax_service_test.rb +7 -4
  181. data/test/tender_transaction_test.rb +3 -3
  182. data/test/test_helper.rb +13 -11
  183. data/test/transaction_test.rb +4 -3
  184. data/test/usage_charge_test.rb +12 -8
  185. data/test/user_test.rb +4 -3
  186. data/test/variant_test.rb +23 -54
  187. data/test/webhook_test.rb +10 -7
  188. metadata +14 -9
  189. data/.rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml +0 -1027
  190. data/.travis.yml +0 -28
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'shopify_api/resources/base'
2
3
  require 'shopify_api/resources/array_base'
3
4
  Dir.glob("#{File.dirname(__FILE__)}/resources/*").each { |file| require(file) }
@@ -2,7 +2,7 @@
2
2
  module ShopifyAPI
3
3
  class AccessScope < Base
4
4
  class << self
5
- def prefix(_options={})
5
+ def prefix(_options = {})
6
6
  '/admin/oauth/'
7
7
  end
8
8
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class AccessToken < Base
3
4
  def self.delegate(access_scope, expires_in = nil)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Address < Base
3
4
  end
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Announcement < Base
3
4
  end
4
- end
5
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class ApplicationCharge < Base
3
4
  undef_method :test
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class ApplicationCredit < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Article < Base
3
4
  include Events
@@ -7,14 +8,14 @@ module ShopifyAPI
7
8
  conditional_prefix :blog
8
9
 
9
10
  def comments
10
- Comment.find(:all, :params => { :article_id => id })
11
+ Comment.find(:all, params: { article_id: id })
11
12
  end
12
13
 
13
14
  def self.authors(options = {})
14
15
  get(:authors, options)
15
16
  end
16
17
 
17
- def self.tags(options={})
18
+ def self.tags(options = {})
18
19
  get(:tags, options)
19
20
  end
20
21
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  # Assets represent the files that comprise your theme.
3
4
  # There are different buckets which hold different kinds
@@ -9,10 +10,10 @@ module ShopifyAPI
9
10
  # or assets/bg-body.gif.
10
11
  #
11
12
  # Initialize with a key:
12
- # asset = ShopifyAPI::Asset.new(:key => 'assets/special.css', :theme_id => 12345)
13
+ # asset = ShopifyAPI::Asset.new(key: 'assets/special.css', theme_id: 12345)
13
14
  #
14
15
  # Find by key:
15
- # asset = ShopifyAPI::Asset.find('assets/image.png', :params => {:theme_id => 12345})
16
+ # asset = ShopifyAPI::Asset.find('assets/image.png', params: {theme_id: 12345})
16
17
  #
17
18
  # Get the text or binary value:
18
19
  # asset.value # decodes from attachment attribute if necessary
@@ -38,13 +39,13 @@ module ShopifyAPI
38
39
 
39
40
  conditional_prefix :theme
40
41
 
41
- def self.element_path(id, prefix_options = {}, query_options = nil) #:nodoc:
42
+ def self.element_path(_id, prefix_options = {}, query_options = nil) #:nodoc:
42
43
  prefix_options, query_options = split_options(prefix_options) if query_options.nil?
43
44
  "#{prefix(prefix_options)}#{collection_name}.#{format.extension}#{query_string(query_options)}"
44
45
  end
45
46
 
46
47
  # find an asset by key:
47
- # ShopifyAPI::Asset.find('layout/theme.liquid', :params => { theme_id: 99 })
48
+ # ShopifyAPI::Asset.find('layout/theme.liquid', params: { theme_id: 99 })
48
49
  def self.find(*args)
49
50
  if args[0].is_a?(Symbol)
50
51
  super
@@ -75,7 +76,7 @@ module ShopifyAPI
75
76
  end
76
77
 
77
78
  def destroy
78
- connection.delete(element_path(prefix_options.merge(:asset => {:key => key})), self.class.headers)
79
+ connection.delete(element_path(prefix_options.merge(asset: { key: key })), self.class.headers)
79
80
  end
80
81
 
81
82
  def new?
@@ -1,6 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class AssignedFulfillmentOrder < Base
3
-
4
4
  def initialize(attributes = {}, persisted = false)
5
5
  ShopifyAPI::Base.version_validation!(FulfillmentOrder::MINIMUM_VERSION)
6
6
  super(attributes, persisted)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'shopify_api/version'
2
3
 
3
4
  module ShopifyAPI
@@ -15,7 +16,7 @@ module ShopifyAPI
15
16
 
16
17
  def encode(options = {})
17
18
  same = dup
18
- same.attributes = {self.class.element_name => same.attributes} if self.class.format.extension == 'json'
19
+ same.attributes = { self.class.element_name => same.attributes } if self.class.format.extension == 'json'
19
20
 
20
21
  same.send("to_#{self.class.format.extension}", options)
21
22
  end
@@ -43,7 +44,7 @@ module ShopifyAPI
43
44
  end
44
45
 
45
46
  def activate_session(session)
46
- raise InvalidSessionError.new("Session cannot be nil") if session.nil?
47
+ raise InvalidSessionError, "Session cannot be nil" if session.nil?
47
48
  self.site = session.site
48
49
  self.headers.merge!('X-Shopify-Access-Token' => session.token)
49
50
  self.api_version = session.api_version
@@ -67,7 +68,11 @@ module ShopifyAPI
67
68
  end
68
69
 
69
70
  def api_version=(version)
70
- self._api_version = ApiVersion::NullVersion.matches?(version) ? ApiVersion::NullVersion : ApiVersion.find_version(version)
71
+ self._api_version = if ApiVersion::NullVersion.matches?(version)
72
+ ApiVersion::NullVersion
73
+ else
74
+ ApiVersion.find_version(version)
75
+ end
71
76
  end
72
77
 
73
78
  def prefix(options = {})
@@ -91,7 +96,7 @@ module ShopifyAPI
91
96
 
92
97
  silence_warnings do
93
98
  # Redefine the new methods.
94
- instance_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
99
+ instance_eval(<<-RUBY_EVAL, __FILE__, __LINE__ + 1)
95
100
  def prefix_source() "#{value}" end
96
101
  def resource_prefix(options={}) "#{resource_prefix_call}" end
97
102
  RUBY_EVAL
@@ -122,7 +127,7 @@ module ShopifyAPI
122
127
  def init_prefix_explicit(resource_type, resource_id)
123
128
  self.resource_prefix = "#{resource_type}/:#{resource_id}/"
124
129
 
125
- define_method resource_id.to_sym do
130
+ define_method(resource_id.to_sym) do
126
131
  @prefix_options[resource_id]
127
132
  end
128
133
  end
@@ -155,7 +160,7 @@ module ShopifyAPI
155
160
  private
156
161
 
157
162
  def only_id
158
- encode(:only => :id, :include => [], :methods => [])
163
+ encode(only: :id, include: [], methods: [])
159
164
  end
160
165
  end
161
166
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class BillingAddress < Base
3
4
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Blog < Base
3
4
  include Events
4
5
  include Metafields
5
6
 
6
7
  def articles
7
- Article.find(:all, :params => { :blog_id => id })
8
+ Article.find(:all, params: { blog_id: id })
8
9
  end
9
10
  end
10
11
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class CarrierService < Base
3
4
  end
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Cart < Base
3
4
  end
4
- end
5
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  # For adding/removing products from custom collections
3
4
  class Collect < Base
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class CollectionListing < Base
3
4
  self.primary_key = :collection_id
@@ -1,9 +1,24 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Comment < Base
3
- def remove; load_attributes_from_response(post(:remove, {}, only_id)); end
4
- def spam; load_attributes_from_response(post(:spam, {}, only_id)); end
5
- def approve; load_attributes_from_response(post(:approve, {}, only_id)); end
6
- def restore; load_attributes_from_response(post(:restore, {}, only_id)); end
7
- def not_spam; load_attributes_from_response(post(:not_spam, {}, only_id)); end
4
+ def remove
5
+ load_attributes_from_response(post(:remove, {}, only_id))
6
+ end
7
+
8
+ def spam
9
+ load_attributes_from_response(post(:spam, {}, only_id))
10
+ end
11
+
12
+ def approve
13
+ load_attributes_from_response(post(:approve, {}, only_id))
14
+ end
15
+
16
+ def restore
17
+ load_attributes_from_response(post(:restore, {}, only_id))
18
+ end
19
+
20
+ def not_spam
21
+ load_attributes_from_response(post(:not_spam, {}, only_id))
22
+ end
8
23
  end
9
24
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Country < Base
3
4
  end
@@ -1,18 +1,19 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class CustomCollection < Base
3
4
  include Events
4
5
  include Metafields
5
6
 
6
7
  def products
7
- Product.find(:all, :params => {:collection_id => self.id})
8
+ Product.find(:all, params: { collection_id: self.id })
8
9
  end
9
10
 
10
11
  def add_product(product)
11
- Collect.create(:collection_id => self.id, :product_id => product.id)
12
+ Collect.create(collection_id: self.id, product_id: product.id)
12
13
  end
13
14
 
14
15
  def remove_product(product)
15
- collect = Collect.find(:first, :params => {:collection_id => self.id, :product_id => product.id})
16
+ collect = Collect.find(:first, params: { collection_id: self.id, product_id: product.id })
16
17
  collect.destroy if collect
17
18
  end
18
19
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Customer < Base
3
4
  include Metafields
4
5
 
5
6
  def orders
6
- Order.find(:all, params: {customer_id: self.id})
7
+ Order.find(:all, params: { customer_id: self.id })
7
8
  end
8
9
 
9
10
  def self.search(params)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'shopify_api/resources/customer_saved_search'
2
3
 
3
4
  module ShopifyAPI
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class CustomerInvite < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'shopify_api/resources/customer'
2
3
 
3
4
  module ShopifyAPI
@@ -5,7 +6,7 @@ module ShopifyAPI
5
6
  early_july_pagination_release!
6
7
 
7
8
  def customers(params = {})
8
- Customer.search(params.merge({:customer_saved_search_id => self.id}))
9
+ Customer.search(params.merge({ customer_saved_search_id: self.id }))
9
10
  end
10
11
  end
11
12
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class DiscountCode < Base
3
4
  init_prefix :price_rule
@@ -12,8 +12,10 @@ module ShopifyAPI
12
12
  def discount_code_job
13
13
  @discount_codes ||= begin
14
14
  if id
15
- path = self.class.api_version.construct_api_path("price_rules/#{price_rule_id}/batch/#{id}/discount_codes.json")
16
- discount_codes = ShopifyAPI::DiscountCode.find :all, from: path
15
+ path = self.class.api_version.construct_api_path(
16
+ "price_rules/#{price_rule_id}/batch/#{id}/discount_codes.json"
17
+ )
18
+ discount_codes = ShopifyAPI::DiscountCode.find(:all, from: path)
17
19
  discount_codes.each do |code|
18
20
  errors = code.attributes['errors']
19
21
  errors.attributes.each do |key, values|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class DraftOrder < Base
3
4
  include Metafields
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class DraftOrderInvoice < Base
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Event < Base
3
4
  include DisablePrefixCheck
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class Fulfillment < Base
3
4
  init_prefix :order
@@ -6,9 +7,17 @@ module ShopifyAPI
6
7
  @prefix_options[:order_id]
7
8
  end
8
9
 
9
- def cancel; load_attributes_from_response(post(:cancel, {}, only_id)); end
10
- def complete; load_attributes_from_response(post(:complete, {}, only_id)); end
11
- def open; load_attributes_from_response(post(:open, {}, only_id)); end
10
+ def cancel
11
+ load_attributes_from_response(post(:cancel, {}, only_id))
12
+ end
13
+
14
+ def complete
15
+ load_attributes_from_response(post(:complete, {}, only_id))
16
+ end
17
+
18
+ def open
19
+ load_attributes_from_response(post(:open, {}, only_id))
20
+ end
12
21
 
13
22
  def order_id=(order_id)
14
23
  prefix_options[:order_id] = order_id
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class FulfillmentEvent < Base
3
4
  self.resource_prefix = "orders/:order_id/fulfillments/:fulfillment_id/"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShopifyAPI
2
3
  class FulfillmentOrder < Base
3
4
  MINIMUM_VERSION = '2020-01'
@@ -37,8 +38,8 @@ module ShopifyAPI
37
38
  def move(new_location_id:)
38
39
  body = {
39
40
  fulfillment_order: {
40
- new_location_id: new_location_id
41
- }
41
+ new_location_id: new_location_id,
42
+ },
42
43
  }
43
44
  keyed_fulfillment_orders = keyed_fulfillment_orders_from_response(post(:move, {}, body.to_json))
44
45
  load_keyed_fulfillment_order(keyed_fulfillment_orders, 'original_fulfillment_order')
@@ -51,11 +52,24 @@ module ShopifyAPI
51
52
  keyed_fulfillment_orders
52
53
  end
53
54
 
55
+ def open
56
+ load_attributes_from_response(post(:open, {}, only_id))
57
+ end
58
+
59
+ def reschedule(new_fulfill_at:)
60
+ body = {
61
+ fulfillment_order: {
62
+ new_fulfill_at: new_fulfill_at,
63
+ },
64
+ }
65
+ load_attributes_from_response(post(:reschedule, {}, body.to_json))
66
+ end
67
+
54
68
  def close(message: nil)
55
69
  body = {
56
70
  fulfillment_order: {
57
- message: message
58
- }
71
+ message: message,
72
+ },
59
73
  }
60
74
  load_attributes_from_response(post(:close, {}, body.to_json))
61
75
  end
@@ -64,8 +78,8 @@ module ShopifyAPI
64
78
  body = {
65
79
  fulfillment_request: {
66
80
  fulfillment_order_line_items: fulfillment_order_line_items,
67
- message: message
68
- }
81
+ message: message,
82
+ },
69
83
  }
70
84
  keyed_fulfillment_orders = keyed_fulfillment_orders_from_response(post(:fulfillment_request, {}, body.to_json))
71
85
  load_keyed_fulfillment_order(keyed_fulfillment_orders, 'original_fulfillment_order')
@@ -75,8 +89,8 @@ module ShopifyAPI
75
89
  def accept_fulfillment_request(message: nil)
76
90
  body = {
77
91
  fulfillment_request: {
78
- message: message
79
- }
92
+ message: message,
93
+ },
80
94
  }
81
95
  load_attributes_from_response(post('fulfillment_request/accept', {}, body.to_json))
82
96
  end
@@ -84,8 +98,8 @@ module ShopifyAPI
84
98
  def reject_fulfillment_request(message: nil)
85
99
  body = {
86
100
  fulfillment_request: {
87
- message: message
88
- }
101
+ message: message,
102
+ },
89
103
  }
90
104
  load_attributes_from_response(post('fulfillment_request/reject', {}, body.to_json))
91
105
  end
@@ -93,8 +107,8 @@ module ShopifyAPI
93
107
  def request_cancellation(message: nil)
94
108
  body = {
95
109
  cancellation_request: {
96
- message: message
97
- }
110
+ message: message,
111
+ },
98
112
  }
99
113
  load_attributes_from_response(post(:cancellation_request, {}, body.to_json))
100
114
  end
@@ -102,8 +116,8 @@ module ShopifyAPI
102
116
  def accept_cancellation_request(message: nil)
103
117
  body = {
104
118
  cancellation_request: {
105
- message: message
106
- }
119
+ message: message,
120
+ },
107
121
  }
108
122
  load_attributes_from_response(post('cancellation_request/accept', {}, body.to_json))
109
123
  end
@@ -111,8 +125,8 @@ module ShopifyAPI
111
125
  def reject_cancellation_request(message: nil)
112
126
  body = {
113
127
  cancellation_request: {
114
- message: message
115
- }
128
+ message: message,
129
+ },
116
130
  }
117
131
  load_attributes_from_response(post('cancellation_request/reject', {}, body.to_json))
118
132
  end