ruby_shopify_api 1.0.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 (351) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.github/CODEOWNERS +1 -0
  4. data/.github/ISSUE_TEMPLATE.md +36 -0
  5. data/.github/probots.yml +2 -0
  6. data/.github/workflows/build.yml +43 -0
  7. data/.gitignore +15 -0
  8. data/.rubocop.yml +28 -0
  9. data/.rubocop_todo.yml +75 -0
  10. data/CHANGELOG-OLD.md +501 -0
  11. data/CHANGELOG.md +5 -0
  12. data/CONTRIBUTING.md +8 -0
  13. data/CONTRIBUTORS +3 -0
  14. data/Gemfile +10 -0
  15. data/Gemfile.lock +151 -0
  16. data/Gemfile_ar41 +5 -0
  17. data/Gemfile_ar50 +5 -0
  18. data/Gemfile_ar51 +5 -0
  19. data/Gemfile_ar60 +5 -0
  20. data/Gemfile_ar_main +5 -0
  21. data/LICENSE +20 -0
  22. data/README.md +649 -0
  23. data/RELEASING +17 -0
  24. data/Rakefile +55 -0
  25. data/SECURITY.md +59 -0
  26. data/dev.yml +11 -0
  27. data/docker-compose.yml +13 -0
  28. data/docs/_config.yml +1 -0
  29. data/docs/_includes/footer.html +28 -0
  30. data/docs/_includes/head.html +28 -0
  31. data/docs/_layouts/index.html +57 -0
  32. data/docs/graphql.md +241 -0
  33. data/docs/index.md +639 -0
  34. data/lib/active_resource/connection_ext.rb +11 -0
  35. data/lib/active_resource/detailed_log_subscriber.rb +55 -0
  36. data/lib/active_resource/json_errors.rb +37 -0
  37. data/lib/shopify_api/api_access.rb +57 -0
  38. data/lib/shopify_api/api_version.rb +206 -0
  39. data/lib/shopify_api/connection.rb +36 -0
  40. data/lib/shopify_api/countable.rb +15 -0
  41. data/lib/shopify_api/disable_prefix_check.rb +31 -0
  42. data/lib/shopify_api/events.rb +8 -0
  43. data/lib/shopify_api/graphql/http_client.rb +22 -0
  44. data/lib/shopify_api/graphql/railtie.rb +17 -0
  45. data/lib/shopify_api/graphql/task.rake +100 -0
  46. data/lib/shopify_api/graphql.rb +103 -0
  47. data/lib/shopify_api/hmac_params.rb +33 -0
  48. data/lib/shopify_api/limits.rb +77 -0
  49. data/lib/shopify_api/message_enricher.rb +25 -0
  50. data/lib/shopify_api/meta.rb +14 -0
  51. data/lib/shopify_api/metafields.rb +21 -0
  52. data/lib/shopify_api/paginated_collection.rb +69 -0
  53. data/lib/shopify_api/pagination_link_headers.rb +34 -0
  54. data/lib/shopify_api/resources/abandoned_checkout.rb +7 -0
  55. data/lib/shopify_api/resources/access_scope.rb +10 -0
  56. data/lib/shopify_api/resources/access_token.rb +9 -0
  57. data/lib/shopify_api/resources/address.rb +5 -0
  58. data/lib/shopify_api/resources/announcement.rb +5 -0
  59. data/lib/shopify_api/resources/api_permission.rb +9 -0
  60. data/lib/shopify_api/resources/application_charge.rb +16 -0
  61. data/lib/shopify_api/resources/application_credit.rb +5 -0
  62. data/lib/shopify_api/resources/array_base.rb +13 -0
  63. data/lib/shopify_api/resources/article.rb +22 -0
  64. data/lib/shopify_api/resources/asset.rb +101 -0
  65. data/lib/shopify_api/resources/assigned_fulfillment_order.rb +16 -0
  66. data/lib/shopify_api/resources/base.rb +166 -0
  67. data/lib/shopify_api/resources/billing_address.rb +5 -0
  68. data/lib/shopify_api/resources/blog.rb +11 -0
  69. data/lib/shopify_api/resources/carrier_service.rb +5 -0
  70. data/lib/shopify_api/resources/cart.rb +5 -0
  71. data/lib/shopify_api/resources/checkout.rb +30 -0
  72. data/lib/shopify_api/resources/collect.rb +7 -0
  73. data/lib/shopify_api/resources/collection.rb +14 -0
  74. data/lib/shopify_api/resources/collection_listing.rb +19 -0
  75. data/lib/shopify_api/resources/collection_publication.rb +10 -0
  76. data/lib/shopify_api/resources/comment.rb +24 -0
  77. data/lib/shopify_api/resources/country.rb +5 -0
  78. data/lib/shopify_api/resources/currency.rb +6 -0
  79. data/lib/shopify_api/resources/custom_collection.rb +20 -0
  80. data/lib/shopify_api/resources/customer.rb +30 -0
  81. data/lib/shopify_api/resources/customer_group.rb +6 -0
  82. data/lib/shopify_api/resources/customer_invite.rb +5 -0
  83. data/lib/shopify_api/resources/customer_saved_search.rb +12 -0
  84. data/lib/shopify_api/resources/discount_code.rb +10 -0
  85. data/lib/shopify_api/resources/discount_code_batch.rb +34 -0
  86. data/lib/shopify_api/resources/draft_order.rb +15 -0
  87. data/lib/shopify_api/resources/draft_order_invoice.rb +5 -0
  88. data/lib/shopify_api/resources/event.rb +9 -0
  89. data/lib/shopify_api/resources/fulfillment.rb +56 -0
  90. data/lib/shopify_api/resources/fulfillment_event.rb +16 -0
  91. data/lib/shopify_api/resources/fulfillment_order.rb +151 -0
  92. data/lib/shopify_api/resources/fulfillment_order_locations_for_move.rb +5 -0
  93. data/lib/shopify_api/resources/fulfillment_request.rb +16 -0
  94. data/lib/shopify_api/resources/fulfillment_service.rb +5 -0
  95. data/lib/shopify_api/resources/fulfillment_v2.rb +21 -0
  96. data/lib/shopify_api/resources/gift_card.rb +8 -0
  97. data/lib/shopify_api/resources/image.rb +17 -0
  98. data/lib/shopify_api/resources/inventory_item.rb +6 -0
  99. data/lib/shopify_api/resources/inventory_level.rb +54 -0
  100. data/lib/shopify_api/resources/line_item.rb +15 -0
  101. data/lib/shopify_api/resources/location.rb +8 -0
  102. data/lib/shopify_api/resources/marketing_event.rb +11 -0
  103. data/lib/shopify_api/resources/metafield.rb +14 -0
  104. data/lib/shopify_api/resources/note_attribute.rb +5 -0
  105. data/lib/shopify_api/resources/option.rb +5 -0
  106. data/lib/shopify_api/resources/order.rb +44 -0
  107. data/lib/shopify_api/resources/order_risk.rb +9 -0
  108. data/lib/shopify_api/resources/page.rb +7 -0
  109. data/lib/shopify_api/resources/payment.rb +7 -0
  110. data/lib/shopify_api/resources/payment_details.rb +5 -0
  111. data/lib/shopify_api/resources/ping.rb +3 -0
  112. data/lib/shopify_api/resources/policy.rb +8 -0
  113. data/lib/shopify_api/resources/price_rule.rb +8 -0
  114. data/lib/shopify_api/resources/product.rb +59 -0
  115. data/lib/shopify_api/resources/product_listing.rb +17 -0
  116. data/lib/shopify_api/resources/product_publication.rb +10 -0
  117. data/lib/shopify_api/resources/province.rb +6 -0
  118. data/lib/shopify_api/resources/publication.rb +5 -0
  119. data/lib/shopify_api/resources/receipt.rb +5 -0
  120. data/lib/shopify_api/resources/recurring_application_charge.rb +34 -0
  121. data/lib/shopify_api/resources/redirect.rb +5 -0
  122. data/lib/shopify_api/resources/refund.rb +15 -0
  123. data/lib/shopify_api/resources/report.rb +5 -0
  124. data/lib/shopify_api/resources/resource_feedback.rb +19 -0
  125. data/lib/shopify_api/resources/rule.rb +5 -0
  126. data/lib/shopify_api/resources/script_tag.rb +5 -0
  127. data/lib/shopify_api/resources/shipping_address.rb +5 -0
  128. data/lib/shopify_api/resources/shipping_line.rb +5 -0
  129. data/lib/shopify_api/resources/shipping_rate.rb +7 -0
  130. data/lib/shopify_api/resources/shipping_zone.rb +5 -0
  131. data/lib/shopify_api/resources/shop.rb +26 -0
  132. data/lib/shopify_api/resources/smart_collection.rb +15 -0
  133. data/lib/shopify_api/resources/storefront_access_token.rb +5 -0
  134. data/lib/shopify_api/resources/tax_line.rb +5 -0
  135. data/lib/shopify_api/resources/tax_service.rb +5 -0
  136. data/lib/shopify_api/resources/tender_transaction.rb +6 -0
  137. data/lib/shopify_api/resources/theme.rb +5 -0
  138. data/lib/shopify_api/resources/transaction.rb +6 -0
  139. data/lib/shopify_api/resources/usage_charge.rb +6 -0
  140. data/lib/shopify_api/resources/user.rb +5 -0
  141. data/lib/shopify_api/resources/variant.rb +43 -0
  142. data/lib/shopify_api/resources/webhook.rb +5 -0
  143. data/lib/shopify_api/resources.rb +4 -0
  144. data/lib/shopify_api/session.rb +203 -0
  145. data/lib/shopify_api/version.rb +4 -0
  146. data/lib/shopify_api.rb +45 -0
  147. data/lib/verify_docs.rb +8 -0
  148. data/service.yml +2 -0
  149. data/shipit.rubygems.yml +1 -0
  150. data/shopify_api.gemspec +47 -0
  151. data/test/abandoned_checkouts_test.rb +29 -0
  152. data/test/access_scope_test.rb +23 -0
  153. data/test/access_token_test.rb +20 -0
  154. data/test/active_resource/json_errors_test.rb +19 -0
  155. data/test/api_access_test.rb +153 -0
  156. data/test/api_permission_test.rb +9 -0
  157. data/test/api_version_test.rb +157 -0
  158. data/test/application_charge_test.rb +82 -0
  159. data/test/application_credit_test.rb +36 -0
  160. data/test/article_test.rb +72 -0
  161. data/test/asset_test.rb +26 -0
  162. data/test/assigned_fulfillment_order_test.rb +78 -0
  163. data/test/base_test.rb +213 -0
  164. data/test/blog_test.rb +9 -0
  165. data/test/carrier_service_test.rb +18 -0
  166. data/test/cart_test.rb +14 -0
  167. data/test/checkouts_test.rb +77 -0
  168. data/test/collect_test.rb +10 -0
  169. data/test/collection_listing_test.rb +84 -0
  170. data/test/collection_publication_test.rb +40 -0
  171. data/test/collection_test.rb +50 -0
  172. data/test/countable_test.rb +14 -0
  173. data/test/currency_test.rb +21 -0
  174. data/test/custom_collection_test.rb +10 -0
  175. data/test/customer_saved_search_test.rb +37 -0
  176. data/test/customer_test.rb +58 -0
  177. data/test/detailed_log_subscriber_test.rb +143 -0
  178. data/test/discount_code_batch_test.rb +41 -0
  179. data/test/discount_code_test.rb +59 -0
  180. data/test/draft_order_test.rb +167 -0
  181. data/test/fixtures/abandoned_checkout.json +184 -0
  182. data/test/fixtures/abandoned_checkouts.json +186 -0
  183. data/test/fixtures/access_scopes.json +10 -0
  184. data/test/fixtures/access_token_delegate.json +4 -0
  185. data/test/fixtures/api_versions.json +38 -0
  186. data/test/fixtures/apis.json +42 -0
  187. data/test/fixtures/application_charge.json +16 -0
  188. data/test/fixtures/application_charges.json +57 -0
  189. data/test/fixtures/application_credit.json +12 -0
  190. data/test/fixtures/application_credits.json +24 -0
  191. data/test/fixtures/article.json +15 -0
  192. data/test/fixtures/articles.json +39 -0
  193. data/test/fixtures/asset.json +9 -0
  194. data/test/fixtures/assets.json +136 -0
  195. data/test/fixtures/assigned_fulfillment_orders.json +80 -0
  196. data/test/fixtures/authors.json +1 -0
  197. data/test/fixtures/blog.json +13 -0
  198. data/test/fixtures/blogs.json +13 -0
  199. data/test/fixtures/carrier_service.json +9 -0
  200. data/test/fixtures/carts.json +43 -0
  201. data/test/fixtures/checkout.json +160 -0
  202. data/test/fixtures/checkouts.json +162 -0
  203. data/test/fixtures/collect.json +12 -0
  204. data/test/fixtures/collection.json +17 -0
  205. data/test/fixtures/collection_listing.json +11 -0
  206. data/test/fixtures/collection_listing_product_ids.json +1 -0
  207. data/test/fixtures/collection_listing_product_ids2.json +1 -0
  208. data/test/fixtures/collection_listings.json +13 -0
  209. data/test/fixtures/collection_products.json +47 -0
  210. data/test/fixtures/collection_publication.json +11 -0
  211. data/test/fixtures/collection_publications.json +13 -0
  212. data/test/fixtures/currencies.json +25 -0
  213. data/test/fixtures/custom_collection.json +17 -0
  214. data/test/fixtures/customer_invite.json +9 -0
  215. data/test/fixtures/customer_saved_search.json +9 -0
  216. data/test/fixtures/customer_saved_search_customers.json +60 -0
  217. data/test/fixtures/customers.json +59 -0
  218. data/test/fixtures/customers_account_activation_url.json +3 -0
  219. data/test/fixtures/customers_search.json +60 -0
  220. data/test/fixtures/discount_code.json +10 -0
  221. data/test/fixtures/discount_code_batch.json +14 -0
  222. data/test/fixtures/discount_code_batch_discount_codes.json +21 -0
  223. data/test/fixtures/discount_codes.json +12 -0
  224. data/test/fixtures/draft_order.json +159 -0
  225. data/test/fixtures/draft_order_completed.json +159 -0
  226. data/test/fixtures/draft_order_invoice.json +9 -0
  227. data/test/fixtures/draft_orders.json +161 -0
  228. data/test/fixtures/engagement.json +15 -0
  229. data/test/fixtures/events.json +31 -0
  230. data/test/fixtures/fulfillment.json +49 -0
  231. data/test/fixtures/fulfillment_event.json +12 -0
  232. data/test/fixtures/fulfillment_order.json +39 -0
  233. data/test/fixtures/fulfillment_order_locations_for_move.json +18 -0
  234. data/test/fixtures/fulfillment_orders.json +80 -0
  235. data/test/fixtures/fulfillment_request.json +28 -0
  236. data/test/fixtures/fulfillment_service.json +10 -0
  237. data/test/fixtures/fulfillments.json +53 -0
  238. data/test/fixtures/gift_card.json +20 -0
  239. data/test/fixtures/gift_card_disabled.json +20 -0
  240. data/test/fixtures/graphql/2019-10.json +1083 -0
  241. data/test/fixtures/graphql/dummy_schema.rb +16 -0
  242. data/test/fixtures/graphql/unstable.json +1083 -0
  243. data/test/fixtures/image.json +10 -0
  244. data/test/fixtures/images.json +20 -0
  245. data/test/fixtures/inventory_level.json +7 -0
  246. data/test/fixtures/inventory_levels.json +24 -0
  247. data/test/fixtures/marketing_event.json +28 -0
  248. data/test/fixtures/marketing_events.json +54 -0
  249. data/test/fixtures/metafield.json +12 -0
  250. data/test/fixtures/metafields.json +34 -0
  251. data/test/fixtures/order.json +297 -0
  252. data/test/fixtures/order_risk.json +14 -0
  253. data/test/fixtures/order_risks.json +28 -0
  254. data/test/fixtures/order_with_properties.json +373 -0
  255. data/test/fixtures/orders.json +299 -0
  256. data/test/fixtures/payment.json +7 -0
  257. data/test/fixtures/payments.json +9 -0
  258. data/test/fixtures/ping/conversation.json +1 -0
  259. data/test/fixtures/ping/failed_delivery_confirmation.json +1 -0
  260. data/test/fixtures/ping/message.json +1 -0
  261. data/test/fixtures/ping/successful_delivery_confirmation.json +1 -0
  262. data/test/fixtures/policies.json +8 -0
  263. data/test/fixtures/price_rule.json +27 -0
  264. data/test/fixtures/price_rules.json +28 -0
  265. data/test/fixtures/product.json +116 -0
  266. data/test/fixtures/product_listing.json +86 -0
  267. data/test/fixtures/product_listing_product_ids.json +1 -0
  268. data/test/fixtures/product_listing_product_ids2.json +1 -0
  269. data/test/fixtures/product_listings.json +174 -0
  270. data/test/fixtures/product_publication.json +11 -0
  271. data/test/fixtures/product_publications.json +13 -0
  272. data/test/fixtures/publications.json +9 -0
  273. data/test/fixtures/recurring_application_charge.json +22 -0
  274. data/test/fixtures/recurring_application_charge_adjustment.json +5 -0
  275. data/test/fixtures/recurring_application_charges.json +106 -0
  276. data/test/fixtures/redirect.json +7 -0
  277. data/test/fixtures/refund.json +112 -0
  278. data/test/fixtures/report.json +9 -0
  279. data/test/fixtures/reports.json +11 -0
  280. data/test/fixtures/script_tag.json +10 -0
  281. data/test/fixtures/script_tags.json +18 -0
  282. data/test/fixtures/shipping_rates.json +12 -0
  283. data/test/fixtures/shipping_zones.json +315 -0
  284. data/test/fixtures/shop.json +26 -0
  285. data/test/fixtures/smart_collection.json +21 -0
  286. data/test/fixtures/smart_collection_products.json +155 -0
  287. data/test/fixtures/storefront_access_token.json +9 -0
  288. data/test/fixtures/storefront_access_tokens.json +18 -0
  289. data/test/fixtures/tags.json +1 -0
  290. data/test/fixtures/tax_service.json +9 -0
  291. data/test/fixtures/tender_transactions.json +52 -0
  292. data/test/fixtures/transaction.json +29 -0
  293. data/test/fixtures/usage_charge.json +11 -0
  294. data/test/fixtures/usage_charges.json +23 -0
  295. data/test/fixtures/user.json +21 -0
  296. data/test/fixtures/users.json +42 -0
  297. data/test/fixtures/variant.json +23 -0
  298. data/test/fixtures/variants.json +88 -0
  299. data/test/fixtures/webhook.json +10 -0
  300. data/test/fixtures/webhooks.json +18 -0
  301. data/test/fulfillment_event_test.rb +74 -0
  302. data/test/fulfillment_order_test.rb +530 -0
  303. data/test/fulfillment_order_test_helper.rb +8 -0
  304. data/test/fulfillment_request_test.rb +35 -0
  305. data/test/fulfillment_service_test.rb +18 -0
  306. data/test/fulfillment_test.rb +239 -0
  307. data/test/fulfillment_v2_test.rb +66 -0
  308. data/test/gift_card_test.rb +24 -0
  309. data/test/graphql/http_client_test.rb +26 -0
  310. data/test/graphql_test.rb +190 -0
  311. data/test/hmac_params_test.rb +25 -0
  312. data/test/image_test.rb +41 -0
  313. data/test/inventory_level_test.rb +68 -0
  314. data/test/lib/webmock_extensions/last_request.rb +16 -0
  315. data/test/limits_test.rb +39 -0
  316. data/test/location_test.rb +15 -0
  317. data/test/marketing_event_test.rb +68 -0
  318. data/test/message_enricher_test.rb +45 -0
  319. data/test/meta_test.rb +47 -0
  320. data/test/metafield_test.rb +56 -0
  321. data/test/order_risk_test.rb +47 -0
  322. data/test/order_test.rb +140 -0
  323. data/test/pagination_test.rb +290 -0
  324. data/test/payment_test.rb +19 -0
  325. data/test/policy_test.rb +20 -0
  326. data/test/price_rule_test.rb +70 -0
  327. data/test/product_listing_test.rb +97 -0
  328. data/test/product_publication_test.rb +40 -0
  329. data/test/product_test.rb +111 -0
  330. data/test/publication_test.rb +12 -0
  331. data/test/recurring_application_charge_test.rb +204 -0
  332. data/test/redirect_test.rb +10 -0
  333. data/test/refund_test.rb +37 -0
  334. data/test/report_test.rb +37 -0
  335. data/test/resource_feedback_test.rb +43 -0
  336. data/test/script_tag_test.rb +31 -0
  337. data/test/session_test.rb +640 -0
  338. data/test/shipping_rate_test.rb +17 -0
  339. data/test/shipping_zone_test.rb +11 -0
  340. data/test/shop_test.rb +82 -0
  341. data/test/smart_collection_test.rb +11 -0
  342. data/test/storefront_access_token_test.rb +30 -0
  343. data/test/tax_service_test.rb +12 -0
  344. data/test/tender_transaction_test.rb +18 -0
  345. data/test/test_helper.rb +126 -0
  346. data/test/transaction_test.rb +18 -0
  347. data/test/usage_charge_test.rb +25 -0
  348. data/test/user_test.rb +18 -0
  349. data/test/variant_test.rb +73 -0
  350. data/test/webhook_test.rb +24 -0
  351. metadata +555 -0
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShopifyAPI
4
+ class InventoryLevel < Base
5
+ # The default path structure in ActiveResource for delete would result in:
6
+ # /admin/api/<version>/inventory_levels/#{ inventory_level.id }.json?#{ params }, but since
7
+ # InventoryLevels are a second class resource made up of a Where and a What
8
+ # (Location and InventoryItem), it does not have a resource ID. Here we
9
+ # redefine element_path to remove the id so HTTP DELETE requests go to
10
+ # /admin/api/<version>/inventory_levels.json?#{ params } instead.
11
+ #
12
+ def self.element_path(prefix_options = {}, query_options = nil)
13
+ prefix_options, query_options = split_options(prefix_options) if query_options.nil?
14
+ "#{prefix(prefix_options)}#{collection_name}.#{format.extension}#{query_string(query_options)}"
15
+ end
16
+
17
+ def destroy
18
+ load_attributes_from_response(
19
+ self.class.delete('/', location_id: location_id, inventory_item_id: inventory_item_id)
20
+ )
21
+ end
22
+
23
+ def connect(relocate_if_necessary: nil)
24
+ body = { location_id: location_id, inventory_item_id: inventory_item_id }
25
+ body[:relocate_if_necessary] = relocate_if_necessary unless relocate_if_necessary.nil?
26
+ load_attributes_from_response(
27
+ self.class.post(:connect, {}, body.to_json)
28
+ )
29
+ end
30
+
31
+ def set(new_available, disconnect_if_necessary: nil)
32
+ body = {
33
+ location_id: location_id,
34
+ inventory_item_id: inventory_item_id,
35
+ available: new_available,
36
+ }
37
+ body[:disconnect_if_necessary] = disconnect_if_necessary unless disconnect_if_necessary.nil?
38
+ load_attributes_from_response(
39
+ self.class.post(:set, {}, body.to_json)
40
+ )
41
+ end
42
+
43
+ def adjust(available_adjustment)
44
+ body = {
45
+ location_id: location_id,
46
+ inventory_item_id: inventory_item_id,
47
+ available_adjustment: available_adjustment,
48
+ }
49
+ load_attributes_from_response(
50
+ self.class.post(:adjust, {}, body.to_json)
51
+ )
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class LineItem < Base
4
+ class Property < Base
5
+ def initialize(*args)
6
+ self.attributes = args[0] || {}
7
+ self.persisted = args[1] || false
8
+ super
9
+ rescue NameError
10
+ self.attributes = attributes.to_hash
11
+ self
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Location < Base
4
+ def inventory_levels
5
+ ShopifyAPI::InventoryLevel.find(:all, from: "#{self.class.prefix}locations/#{id}/inventory_levels.json")
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class MarketingEvent < Base
4
+ include Countable
5
+
6
+ def add_engagements(engagements)
7
+ engagements = { engagements: Array.wrap(engagements) }
8
+ post(:engagements, {}, engagements.to_json)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Metafield < Base
4
+ include DisablePrefixCheck
5
+
6
+ conditional_prefix :resource, true
7
+ early_july_pagination_release!
8
+
9
+ def value
10
+ return if attributes["value"].nil?
11
+ attributes["value_type"] == "integer" ? attributes["value"].to_i : attributes["value"]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class NoteAttribute < Base
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Option < Base
4
+ end
5
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Order < Base
4
+ include Events
5
+ include Metafields
6
+
7
+ def close
8
+ load_attributes_from_response(post(:close, {}, only_id))
9
+ end
10
+
11
+ def open
12
+ load_attributes_from_response(post(:open, {}, only_id))
13
+ end
14
+
15
+ def cancel(options = {})
16
+ load_attributes_from_response(post(:cancel, {}, options.to_json))
17
+ end
18
+
19
+ def transactions
20
+ Transaction.find(:all, params: { order_id: id })
21
+ end
22
+
23
+ def capture(amount = "", currency: nil)
24
+ capture_transaction = {
25
+ amount: amount,
26
+ kind: "capture",
27
+ order_id: id,
28
+ }
29
+ capture_transaction[:currency] = currency if currency
30
+
31
+ Transaction.create(capture_transaction)
32
+ end
33
+
34
+ def fulfillment_orders(options = {})
35
+ ShopifyAPI::Base.version_validation!(FulfillmentOrder::MINIMUM_VERSION)
36
+
37
+ fulfillment_order_hashes = get(:fulfillment_orders, options)
38
+ fulfillment_order_hashes.map { |fulfillment_order_hash| FulfillmentOrder.new(fulfillment_order_hash) }
39
+ end
40
+
41
+ class ClientDetails < Base
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class OrderRisk < Base
4
+ init_prefix :order
5
+
6
+ self.collection_name = "risks"
7
+ self.element_name = "risk"
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Page < Base
4
+ include Events
5
+ include Metafields
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShopifyAPI
4
+ class Payment < Base
5
+ self.resource_prefix = "checkouts/:checkout_id/"
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class PaymentDetails < Base
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dir.glob("#{File.dirname(__FILE__)}/ping/*").each { |file| require file }
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Policy < Base
4
+ def self.all
5
+ find(:all)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class PriceRule < Base
4
+ def discount_codes
5
+ DiscountCode.find(:all, params: { price_rule_id: id })
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Product < Base
4
+ include Events
5
+ include Metafields
6
+
7
+ early_july_pagination_release!
8
+
9
+ def initialize(*)
10
+ super
11
+ self.attributes.except!('total_inventory') unless allow_inventory_params?
12
+ end
13
+
14
+ # compute the price range
15
+ def price_range
16
+ prices = variants.collect(&:price).collect(&:to_f)
17
+ format = "%0.2f"
18
+ if prices.min != prices.max
19
+ "#{format % prices.min} - #{format % prices.max}"
20
+ else
21
+ format % prices.min
22
+ end
23
+ end
24
+
25
+ def total_inventory=(new_value)
26
+ raise_deprecated_inventory_call('total_inventory') unless allow_inventory_params?
27
+ super
28
+ end
29
+
30
+ def collections
31
+ CustomCollection.find(:all, params: { product_id: self.id })
32
+ end
33
+
34
+ def smart_collections
35
+ SmartCollection.find(:all, params: { product_id: self.id })
36
+ end
37
+
38
+ def add_to_collection(collection)
39
+ collection.add_product(self)
40
+ end
41
+
42
+ def remove_from_collection(collection)
43
+ collection.remove_product(self)
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
58
+ end
59
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class ProductListing < Base
4
+ self.primary_key = :product_id
5
+
6
+ early_july_pagination_release!
7
+
8
+ def self.product_ids
9
+ ProductId.all
10
+ end
11
+
12
+ class ProductId < ArrayBase
13
+ self.resource_prefix = 'product_listings/'
14
+ end
15
+ private_constant :ProductId
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class ProductPublication < Base
4
+ init_prefix :publication
5
+
6
+ def publication_id
7
+ @prefix_options[:publication_id]
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Province < Base
4
+ init_prefix :country
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Publication < Base
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Receipt < Base
4
+ end
5
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class RecurringApplicationCharge < Base
4
+ undef_method :test
5
+
6
+ class << self
7
+ def current
8
+ (all || []).find { |c| c.status == 'active' }
9
+ end
10
+
11
+ [:pending, :cancelled, :accepted, :declined].each do |status|
12
+ define_method(status) { (all || []).select { |c| c.status == status.to_s } }
13
+ end
14
+ end
15
+
16
+ def usage_charges
17
+ UsageCharge.find(:all, params: { recurring_application_charge_id: id })
18
+ end
19
+
20
+ def cancel
21
+ load_attributes_from_response(self.destroy)
22
+ end
23
+
24
+ def activate
25
+ load_attributes_from_response(post(:activate))
26
+ end
27
+
28
+ def customize(customize_recurring_app_charge_params = {})
29
+ load_attributes_from_response(
30
+ put(:customize, recurring_application_charge: customize_recurring_app_charge_params)
31
+ )
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Redirect < Base
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Refund < Base
4
+ init_prefix :order
5
+
6
+ def self.calculate(*args)
7
+ options = { refund: args[0] }
8
+ params = {}
9
+ params = args[1][:params] if args[1] && args[1][:params]
10
+
11
+ resource = post(:calculate, params, options.to_json)
12
+ instantiate_record(format.decode(resource.body), {})
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Report < Base
4
+ end
5
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShopifyAPI
4
+ class ResourceFeedback < Base
5
+ class ExistingFeedbackSaved < StandardError; end
6
+ include DisablePrefixCheck
7
+
8
+ self.collection_name = 'resource_feedback'
9
+ conditional_prefix :product, false
10
+
11
+ EXISTING_FEEDBACK_SAVED_ERROR_MESSAGE = 'WARNING: Attempted call to ShopifyAPI::ResourceFeedback#save' \
12
+ 'after it was already persisted. Updating an existing ShopifyAPI::ResourceFeedback is not supported.'
13
+
14
+ def save
15
+ return super unless persisted?
16
+ raise ExistingFeedbackSaved, EXISTING_FEEDBACK_SAVED_ERROR_MESSAGE
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Rule < Base
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class ScriptTag < Base
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class ShippingAddress < Base
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class ShippingLine < Base
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShopifyAPI
4
+ class ShippingRate < Base
5
+ self.resource_prefix = "checkouts/:checkout_id/"
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class ShippingZone < Base
4
+ end
5
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ # Shop object. Use Shop.current to receive
4
+ # the shop.
5
+ class Shop < Base
6
+ include ActiveResource::Singleton
7
+
8
+ def self.current(options = {})
9
+ find(options)
10
+ end
11
+
12
+ def metafields(**options)
13
+ Metafield.find(:all, params: options)
14
+ end
15
+
16
+ def add_metafield(metafield)
17
+ raise ArgumentError, "You can only add metafields to resource that has been saved" if new?
18
+ metafield.save
19
+ metafield
20
+ end
21
+
22
+ def events
23
+ Event.find(:all)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class SmartCollection < Base
4
+ include Events
5
+ include Metafields
6
+
7
+ def products
8
+ Product.find(:all, params: { collection_id: id })
9
+ end
10
+
11
+ def order(options = {})
12
+ load_attributes_from_response(put(:order, options, only_id))
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class StorefrontAccessToken < Base
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class TaxLine < Base
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class TaxService < Base
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShopifyAPI
4
+ class TenderTransaction < Base
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Theme < Base
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Transaction < Base
4
+ init_prefix :order
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class UsageCharge < Base
4
+ init_prefix :recurring_application_charge
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class User < Base
4
+ end
5
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Variant < Base
4
+ include Metafields
5
+ include DisablePrefixCheck
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
42
+ end
43
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module ShopifyAPI
3
+ class Webhook < Base
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ require 'shopify_api/resources/base'
3
+ require 'shopify_api/resources/array_base'
4
+ Dir.glob("#{File.dirname(__FILE__)}/resources/*").each { |file| require(file) }