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