spree_api 4.3.0 → 4.5.1

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 +4 -4
  2. data/app/controllers/concerns/spree/api/v2/caching.rb +7 -3
  3. data/app/controllers/concerns/spree/api/v2/coupon_codes_helper.rb +29 -0
  4. data/app/controllers/concerns/spree/api/v2/number_resource.rb +11 -0
  5. data/app/controllers/concerns/spree/api/v2/platform/nested_set_reposition_concern.rb +37 -0
  6. data/app/controllers/concerns/spree/api/v2/platform/promotion_calculator_params.rb +17 -0
  7. data/app/controllers/concerns/spree/api/v2/platform/promotion_rule_params.rb +16 -0
  8. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +10 -8
  9. data/app/controllers/concerns/spree/api/v2/storefront/metadata_controller_concern.rb +18 -0
  10. data/app/controllers/spree/api/v2/base_controller.rb +7 -5
  11. data/app/controllers/spree/api/v2/platform/adjustments_controller.rb +19 -0
  12. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +1 -22
  13. data/app/controllers/spree/api/v2/platform/cms_pages_controller.rb +4 -0
  14. data/app/controllers/spree/api/v2/platform/cms_sections_controller.rb +13 -18
  15. data/app/controllers/spree/api/v2/platform/digital_links_controller.rb +25 -0
  16. data/app/controllers/spree/api/v2/platform/digitals_controller.rb +19 -0
  17. data/app/controllers/spree/api/v2/platform/line_items_controller.rb +59 -0
  18. data/app/controllers/spree/api/v2/platform/menu_items_controller.rb +5 -19
  19. data/app/controllers/spree/api/v2/platform/menus_controller.rb +0 -4
  20. data/app/controllers/spree/api/v2/platform/orders_controller.rb +163 -0
  21. data/app/controllers/spree/api/v2/platform/payment_methods_controller.rb +27 -0
  22. data/app/controllers/spree/api/v2/platform/payments_controller.rb +17 -0
  23. data/app/controllers/spree/api/v2/platform/products_controller.rb +5 -1
  24. data/app/controllers/spree/api/v2/platform/promotion_actions_controller.rb +30 -0
  25. data/app/controllers/spree/api/v2/platform/promotion_categories_controller.rb +19 -0
  26. data/app/controllers/spree/api/v2/platform/promotion_rules_controller.rb +25 -0
  27. data/app/controllers/spree/api/v2/platform/promotions_controller.rb +31 -0
  28. data/app/controllers/spree/api/v2/platform/resource_controller.rb +47 -16
  29. data/app/controllers/spree/api/v2/platform/roles_controller.rb +15 -0
  30. data/app/controllers/spree/api/v2/platform/shipments_controller.rb +143 -0
  31. data/app/controllers/spree/api/v2/platform/shipping_categories_controller.rb +15 -0
  32. data/app/controllers/spree/api/v2/platform/shipping_methods_controller.rb +24 -0
  33. data/app/controllers/spree/api/v2/platform/states_controller.rb +19 -0
  34. data/app/controllers/spree/api/v2/platform/stock_items_controller.rb +19 -0
  35. data/app/controllers/spree/api/v2/platform/stock_locations_controller.rb +19 -0
  36. data/app/controllers/spree/api/v2/platform/store_credit_categories_controller.rb +15 -0
  37. data/app/controllers/spree/api/v2/platform/store_credit_types_controller.rb +15 -0
  38. data/app/controllers/spree/api/v2/platform/store_credits_controller.rb +19 -0
  39. data/app/controllers/spree/api/v2/platform/tax_categories_controller.rb +19 -0
  40. data/app/controllers/spree/api/v2/platform/tax_rates_controller.rb +23 -0
  41. data/app/controllers/spree/api/v2/platform/taxonomies_controller.rb +19 -0
  42. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +25 -0
  43. data/app/controllers/spree/api/v2/platform/users_controller.rb +4 -0
  44. data/app/controllers/spree/api/v2/platform/variants_controller.rb +19 -0
  45. data/app/controllers/spree/api/v2/platform/webhooks/events_controller.rb +21 -0
  46. data/app/controllers/spree/api/v2/platform/webhooks/subscribers_controller.rb +21 -0
  47. data/app/controllers/spree/api/v2/platform/wished_items_controller.rb +19 -0
  48. data/app/controllers/spree/api/v2/platform/wishlists_controller.rb +19 -0
  49. data/app/controllers/spree/api/v2/platform/zones_controller.rb +19 -0
  50. data/app/controllers/spree/api/v2/resource_controller.rb +3 -3
  51. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +2 -2
  52. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +4 -1
  53. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +18 -28
  54. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +25 -1
  55. data/app/controllers/spree/api/v2/storefront/digitals_controller.rb +58 -0
  56. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +4 -0
  57. data/app/controllers/spree/api/v2/storefront/wishlists_controller.rb +171 -0
  58. data/app/helpers/spree/api/v2/collection_options_helpers.rb +1 -1
  59. data/app/helpers/spree/api/v2/store_media_serializer_images_concern.rb +35 -0
  60. data/app/jobs/spree/webhooks/subscribers/make_request_job.rb +17 -0
  61. data/app/models/concerns/spree/webhooks/has_webhooks.rb +84 -0
  62. data/app/models/spree/api/webhooks/order_decorator.rb +43 -0
  63. data/app/models/spree/api/webhooks/payment_decorator.rb +26 -0
  64. data/app/models/spree/api/webhooks/product_decorator.rb +46 -0
  65. data/app/models/spree/api/webhooks/shipment_decorator.rb +21 -0
  66. data/app/models/spree/api/webhooks/stock_item_decorator.rb +43 -0
  67. data/app/models/spree/api/webhooks/stock_movement_decorator.rb +52 -0
  68. data/app/models/spree/api/webhooks/variant_decorator.rb +26 -0
  69. data/app/models/spree/oauth_access_grant.rb +7 -0
  70. data/app/models/spree/oauth_access_token.rb +7 -0
  71. data/app/models/spree/oauth_application.rb +15 -0
  72. data/app/models/spree/webhooks/base.rb +11 -0
  73. data/app/models/spree/webhooks/event.rb +12 -0
  74. data/app/models/spree/webhooks/subscriber.rb +61 -0
  75. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +19 -1
  76. data/app/serializers/spree/api/v2/base_serializer.rb +11 -4
  77. data/app/serializers/spree/api/v2/platform/address_serializer.rb +1 -1
  78. data/app/serializers/spree/api/v2/platform/adjustment_serializer.rb +20 -0
  79. data/app/serializers/spree/api/v2/platform/asset_serializer.rb +13 -0
  80. data/app/serializers/spree/api/v2/platform/calculator_serializer.rb +17 -0
  81. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +1 -1
  82. data/app/serializers/spree/api/v2/platform/cms_page_serializer.rb +1 -1
  83. data/app/serializers/spree/api/v2/platform/cms_section_image_one_serializer.rb +9 -0
  84. data/app/serializers/spree/api/v2/platform/cms_section_image_three_serializer.rb +9 -0
  85. data/app/serializers/spree/api/v2/platform/cms_section_image_two_serializer.rb +9 -0
  86. data/app/serializers/spree/api/v2/platform/cms_section_serializer.rb +8 -1
  87. data/app/serializers/spree/api/v2/platform/country_serializer.rb +1 -1
  88. data/app/serializers/spree/api/v2/platform/credit_card_serializer.rb +14 -0
  89. data/app/serializers/spree/api/v2/platform/customer_return_serializer.rb +17 -0
  90. data/app/serializers/spree/api/v2/platform/digital_link_serializer.rb +16 -0
  91. data/app/serializers/spree/api/v2/platform/digital_serializer.rb +30 -0
  92. data/app/serializers/spree/api/v2/platform/feature_page_serializer.rb +11 -0
  93. data/app/serializers/spree/api/v2/platform/hero_image_serializer.rb +10 -0
  94. data/app/serializers/spree/api/v2/platform/homepage_serializer.rb +11 -0
  95. data/app/serializers/spree/api/v2/platform/image_gallery_serializer.rb +10 -0
  96. data/app/serializers/spree/api/v2/platform/inventory_unit_serializer.rb +19 -0
  97. data/app/serializers/spree/api/v2/platform/line_item_serializer.rb +19 -0
  98. data/app/serializers/spree/api/v2/platform/log_entry_serializer.rb +13 -0
  99. data/app/serializers/spree/api/v2/platform/menu_item_serializer.rb +1 -1
  100. data/app/serializers/spree/api/v2/platform/menu_serializer.rb +1 -1
  101. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +1 -1
  102. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +1 -1
  103. data/app/serializers/spree/api/v2/platform/order_promotion_serializer.rb +14 -0
  104. data/app/serializers/spree/api/v2/platform/order_serializer.rb +31 -0
  105. data/app/serializers/spree/api/v2/platform/payment_capture_event_serializer.rb +13 -0
  106. data/app/serializers/spree/api/v2/platform/payment_method_serializer.rb +18 -0
  107. data/app/serializers/spree/api/v2/platform/payment_serializer.rb +21 -0
  108. data/app/serializers/spree/api/v2/platform/price_serializer.rb +19 -0
  109. data/app/serializers/spree/api/v2/platform/product_property_serializer.rb +1 -1
  110. data/app/serializers/spree/api/v2/platform/product_serializer.rb +7 -3
  111. data/app/serializers/spree/api/v2/platform/promotion_action_line_item_serializer.rb +14 -0
  112. data/app/serializers/spree/api/v2/platform/promotion_action_serializer.rb +19 -0
  113. data/app/serializers/spree/api/v2/platform/promotion_category_serializer.rb +13 -0
  114. data/app/serializers/spree/api/v2/platform/promotion_rule_serializer.rb +21 -0
  115. data/app/serializers/spree/api/v2/platform/promotion_serializer.rb +17 -0
  116. data/app/serializers/spree/api/v2/platform/property_serializer.rb +11 -0
  117. data/app/serializers/spree/api/v2/platform/prototype_serializer.rb +15 -0
  118. data/app/serializers/spree/api/v2/platform/refund_reason_serializer.rb +11 -0
  119. data/app/serializers/spree/api/v2/platform/refund_serializer.rb +16 -0
  120. data/app/serializers/spree/api/v2/platform/reimbursement_credit_serializer.rb +10 -0
  121. data/app/serializers/spree/api/v2/platform/reimbursement_serializer.rb +18 -0
  122. data/app/serializers/spree/api/v2/platform/reimbursement_type_serializer.rb +11 -0
  123. data/app/serializers/spree/api/v2/platform/return_authorization_reason_serializer.rb +11 -0
  124. data/app/serializers/spree/api/v2/platform/return_authorization_serializer.rb +17 -0
  125. data/app/serializers/spree/api/v2/platform/return_item_serializer.rb +16 -0
  126. data/app/serializers/spree/api/v2/platform/role_serializer.rb +11 -0
  127. data/app/serializers/spree/api/v2/platform/shipment_serializer.rb +22 -0
  128. data/app/serializers/spree/api/v2/platform/shipping_category_serializer.rb +11 -0
  129. data/app/serializers/spree/api/v2/platform/shipping_method_serializer.rb +16 -0
  130. data/app/serializers/spree/api/v2/platform/shipping_rate_serializer.rb +15 -0
  131. data/app/serializers/spree/api/v2/platform/side_by_side_image_serializer.rb +10 -0
  132. data/app/serializers/spree/api/v2/platform/standard_page_serializer.rb +11 -0
  133. data/app/serializers/spree/api/v2/platform/state_change_serializer.rb +13 -0
  134. data/app/serializers/spree/api/v2/platform/state_serializer.rb +1 -1
  135. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +1 -3
  136. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +2 -4
  137. data/app/serializers/spree/api/v2/platform/stock_movement_serializer.rb +11 -0
  138. data/app/serializers/spree/api/v2/platform/stock_transfer_serializer.rb +15 -0
  139. data/app/serializers/spree/api/v2/platform/store_credit_category_serializer.rb +12 -0
  140. data/app/serializers/spree/api/v2/platform/store_credit_event_serializer.rb +14 -0
  141. data/app/serializers/spree/api/v2/platform/store_credit_serializer.rb +18 -0
  142. data/app/serializers/spree/api/v2/platform/store_credit_type_serializer.rb +12 -0
  143. data/app/serializers/spree/api/v2/platform/store_serializer.rb +2 -1
  144. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +2 -2
  145. data/app/serializers/spree/api/v2/platform/tax_rate_serializer.rb +14 -0
  146. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +1 -1
  147. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +1 -1
  148. data/app/serializers/spree/api/v2/platform/user_serializer.rb +1 -1
  149. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +3 -2
  150. data/app/serializers/spree/api/v2/platform/webhooks/event_serializer.rb +15 -0
  151. data/app/serializers/spree/api/v2/platform/webhooks/subscriber_serializer.rb +13 -0
  152. data/app/serializers/spree/api/v2/platform/wished_item_serializer.rb +29 -0
  153. data/app/serializers/spree/api/v2/platform/wishlist_serializer.rb +19 -0
  154. data/app/serializers/spree/api/v2/platform/zone_member_serializer.rb +13 -0
  155. data/app/serializers/spree/api/v2/platform/zone_serializer.rb +13 -0
  156. data/app/serializers/spree/v2/storefront/address_serializer.rb +1 -1
  157. data/app/serializers/spree/v2/storefront/cart_serializer.rb +1 -1
  158. data/app/serializers/spree/v2/storefront/cms_section_serializer.rb +8 -4
  159. data/app/serializers/spree/v2/storefront/credit_card_serializer.rb +1 -1
  160. data/app/serializers/spree/v2/storefront/digital_link_serializer.rb +11 -0
  161. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +2 -2
  162. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +2 -1
  163. data/app/serializers/spree/v2/storefront/option_type_serializer.rb +1 -1
  164. data/app/serializers/spree/v2/storefront/option_value_serializer.rb +1 -1
  165. data/app/serializers/spree/v2/storefront/order_serializer.rb +9 -0
  166. data/app/serializers/spree/v2/storefront/payment_method_serializer.rb +1 -1
  167. data/app/serializers/spree/v2/storefront/payment_serializer.rb +1 -1
  168. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +1 -1
  169. data/app/serializers/spree/v2/storefront/product_serializer.rb +2 -2
  170. data/app/serializers/spree/v2/storefront/promotion_serializer.rb +1 -1
  171. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +5 -1
  172. data/app/serializers/spree/v2/storefront/store_credit_serializer.rb +1 -1
  173. data/app/serializers/spree/v2/storefront/store_serializer.rb +5 -10
  174. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +1 -1
  175. data/app/serializers/spree/v2/storefront/taxonomy_serializer.rb +1 -1
  176. data/app/serializers/spree/v2/storefront/user_serializer.rb +1 -1
  177. data/app/serializers/spree/v2/storefront/variant_serializer.rb +1 -1
  178. data/app/serializers/spree/v2/storefront/wished_item_serializer.rb +29 -0
  179. data/app/serializers/spree/v2/storefront/wishlist_serializer.rb +17 -0
  180. data/app/services/spree/webhooks/subscribers/handle_request.rb +73 -0
  181. data/app/services/spree/webhooks/subscribers/make_request.rb +82 -0
  182. data/app/services/spree/webhooks/subscribers/queue_requests.rb +23 -0
  183. data/app/services/spree/webhooks.rb +13 -0
  184. data/config/i18n-tasks.yml +40 -0
  185. data/config/initializers/doorkeeper.rb +12 -12
  186. data/config/locales/en.yml +29 -27
  187. data/config/routes.rb +84 -179
  188. data/db/migrate/20210902162826_create_spree_webhooks_tables.rb +16 -0
  189. data/db/migrate/20210919183228_enable_polymorphic_resource_owner.rb +21 -0
  190. data/db/migrate/20211025162826_create_spree_webhooks_events.rb +14 -0
  191. data/docs/oauth/index.yml +126 -33
  192. data/docs/v2/platform/index.yaml +19696 -1734
  193. data/docs/v2/storefront/index.yaml +15050 -14553
  194. data/lib/spree/api/configuration.rb +11 -0
  195. data/lib/spree/api/dependencies.rb +165 -0
  196. data/lib/spree/api/engine.rb +10 -5
  197. data/lib/spree/api/testing_support/factories/oauth_application_factory.rb +6 -0
  198. data/lib/spree/api/testing_support/factories/webhook_event_factory.rb +27 -0
  199. data/lib/spree/api/testing_support/factories/webhook_subscriber_factory.rb +13 -0
  200. data/lib/spree/api/testing_support/factories.rb +3 -0
  201. data/lib/spree/api/testing_support/jobs.rb +18 -0
  202. data/lib/spree/api/testing_support/matchers/webhooks.rb +67 -0
  203. data/lib/spree/api/testing_support/serializers.rb +25 -0
  204. data/lib/spree/api/testing_support/spree_webhooks.rb +9 -0
  205. data/lib/spree/api/testing_support/v2/base.rb +1 -1
  206. data/lib/spree/api/testing_support/v2/current_order.rb +34 -1
  207. data/lib/spree/api/testing_support/v2/platform_contexts.rb +100 -52
  208. data/lib/spree/api/testing_support/v2/serializers_params.rb +3 -1
  209. data/lib/spree/api.rb +0 -3
  210. data/lib/spree_api.rb +0 -1
  211. data/spec/fixtures/files/icon_256x256.jpg +0 -0
  212. data/spree_api.gemspec +15 -16
  213. metadata +163 -177
  214. data/app/controllers/spree/api/base_controller.rb +0 -171
  215. data/app/controllers/spree/api/errors_controller.rb +0 -9
  216. data/app/controllers/spree/api/v1/addresses_controller.rb +0 -46
  217. data/app/controllers/spree/api/v1/checkouts_controller.rb +0 -106
  218. data/app/controllers/spree/api/v1/classifications_controller.rb +0 -21
  219. data/app/controllers/spree/api/v1/countries_controller.rb +0 -22
  220. data/app/controllers/spree/api/v1/credit_cards_controller.rb +0 -26
  221. data/app/controllers/spree/api/v1/customer_returns_controller.rb +0 -25
  222. data/app/controllers/spree/api/v1/images_controller.rb +0 -58
  223. data/app/controllers/spree/api/v1/inventory_units_controller.rb +0 -54
  224. data/app/controllers/spree/api/v1/line_items_controller.rb +0 -70
  225. data/app/controllers/spree/api/v1/option_types_controller.rb +0 -60
  226. data/app/controllers/spree/api/v1/option_values_controller.rb +0 -62
  227. data/app/controllers/spree/api/v1/orders_controller.rb +0 -160
  228. data/app/controllers/spree/api/v1/payments_controller.rb +0 -82
  229. data/app/controllers/spree/api/v1/product_properties_controller.rb +0 -73
  230. data/app/controllers/spree/api/v1/products_controller.rb +0 -131
  231. data/app/controllers/spree/api/v1/promotions_controller.rb +0 -30
  232. data/app/controllers/spree/api/v1/properties_controller.rb +0 -70
  233. data/app/controllers/spree/api/v1/reimbursements_controller.rb +0 -25
  234. data/app/controllers/spree/api/v1/return_authorizations_controller.rb +0 -70
  235. data/app/controllers/spree/api/v1/shipments_controller.rb +0 -196
  236. data/app/controllers/spree/api/v1/states_controller.rb +0 -36
  237. data/app/controllers/spree/api/v1/stock_items_controller.rb +0 -82
  238. data/app/controllers/spree/api/v1/stock_locations_controller.rb +0 -53
  239. data/app/controllers/spree/api/v1/stock_movements_controller.rb +0 -45
  240. data/app/controllers/spree/api/v1/stores_controller.rb +0 -56
  241. data/app/controllers/spree/api/v1/taxonomies_controller.rb +0 -67
  242. data/app/controllers/spree/api/v1/taxons_controller.rb +0 -100
  243. data/app/controllers/spree/api/v1/users_controller.rb +0 -97
  244. data/app/controllers/spree/api/v1/variants_controller.rb +0 -81
  245. data/app/controllers/spree/api/v1/zones_controller.rb +0 -55
  246. data/app/helpers/spree/api/api_helpers.rb +0 -190
  247. data/app/models/spree/api_configuration.rb +0 -10
  248. data/app/models/spree/api_dependencies.rb +0 -111
  249. data/app/views/spree/api/errors/gateway_error.rabl +0 -2
  250. data/app/views/spree/api/errors/invalid_api_key.rabl +0 -2
  251. data/app/views/spree/api/errors/invalid_resource.rabl +0 -3
  252. data/app/views/spree/api/errors/must_specify_api_key.rabl +0 -2
  253. data/app/views/spree/api/errors/not_found.rabl +0 -2
  254. data/app/views/spree/api/errors/unauthorized.rabl +0 -2
  255. data/app/views/spree/api/v1/addresses/show.rabl +0 -10
  256. data/app/views/spree/api/v1/adjustments/show.rabl +0 -4
  257. data/app/views/spree/api/v1/countries/index.rabl +0 -7
  258. data/app/views/spree/api/v1/countries/show.rabl +0 -5
  259. data/app/views/spree/api/v1/credit_cards/index.rabl +0 -7
  260. data/app/views/spree/api/v1/credit_cards/show.rabl +0 -3
  261. data/app/views/spree/api/v1/customer_returns/index.rabl +0 -7
  262. data/app/views/spree/api/v1/images/index.rabl +0 -4
  263. data/app/views/spree/api/v1/images/new.rabl +0 -3
  264. data/app/views/spree/api/v1/images/show.rabl +0 -6
  265. data/app/views/spree/api/v1/inventory_units/show.rabl +0 -2
  266. data/app/views/spree/api/v1/line_items/new.rabl +0 -3
  267. data/app/views/spree/api/v1/line_items/show.rabl +0 -14
  268. data/app/views/spree/api/v1/option_types/index.rabl +0 -3
  269. data/app/views/spree/api/v1/option_types/new.rabl +0 -3
  270. data/app/views/spree/api/v1/option_types/show.rabl +0 -5
  271. data/app/views/spree/api/v1/option_values/index.rabl +0 -3
  272. data/app/views/spree/api/v1/option_values/new.rabl +0 -3
  273. data/app/views/spree/api/v1/option_values/show.rabl +0 -2
  274. data/app/views/spree/api/v1/orders/address.rabl +0 -0
  275. data/app/views/spree/api/v1/orders/canceled.rabl +0 -0
  276. data/app/views/spree/api/v1/orders/cart.rabl +0 -0
  277. data/app/views/spree/api/v1/orders/complete.rabl +0 -0
  278. data/app/views/spree/api/v1/orders/could_not_apply_coupon.rabl +0 -2
  279. data/app/views/spree/api/v1/orders/could_not_transition.rabl +0 -3
  280. data/app/views/spree/api/v1/orders/index.rabl +0 -7
  281. data/app/views/spree/api/v1/orders/insufficient_quantity.rabl +0 -2
  282. data/app/views/spree/api/v1/orders/invalid_shipping_method.rabl +0 -2
  283. data/app/views/spree/api/v1/orders/mine.rabl +0 -9
  284. data/app/views/spree/api/v1/orders/order.rabl +0 -10
  285. data/app/views/spree/api/v1/orders/payment.rabl +0 -3
  286. data/app/views/spree/api/v1/orders/show.rabl +0 -51
  287. data/app/views/spree/api/v1/payments/credit_over_limit.rabl +0 -2
  288. data/app/views/spree/api/v1/payments/index.rabl +0 -7
  289. data/app/views/spree/api/v1/payments/new.rabl +0 -5
  290. data/app/views/spree/api/v1/payments/show.rabl +0 -2
  291. data/app/views/spree/api/v1/payments/update_forbidden.rabl +0 -2
  292. data/app/views/spree/api/v1/product_properties/index.rabl +0 -7
  293. data/app/views/spree/api/v1/product_properties/new.rabl +0 -2
  294. data/app/views/spree/api/v1/product_properties/show.rabl +0 -2
  295. data/app/views/spree/api/v1/products/index.rabl +0 -9
  296. data/app/views/spree/api/v1/products/new.rabl +0 -3
  297. data/app/views/spree/api/v1/products/product.rabl +0 -1
  298. data/app/views/spree/api/v1/products/show.rabl +0 -36
  299. data/app/views/spree/api/v1/promotions/handler.rabl +0 -5
  300. data/app/views/spree/api/v1/promotions/show.rabl +0 -2
  301. data/app/views/spree/api/v1/properties/index.rabl +0 -7
  302. data/app/views/spree/api/v1/properties/new.rabl +0 -2
  303. data/app/views/spree/api/v1/properties/show.rabl +0 -2
  304. data/app/views/spree/api/v1/reimbursements/index.rabl +0 -7
  305. data/app/views/spree/api/v1/return_authorizations/index.rabl +0 -7
  306. data/app/views/spree/api/v1/return_authorizations/new.rabl +0 -3
  307. data/app/views/spree/api/v1/return_authorizations/show.rabl +0 -2
  308. data/app/views/spree/api/v1/shared/stock_location_required.rabl +0 -2
  309. data/app/views/spree/api/v1/shipments/big.rabl +0 -48
  310. data/app/views/spree/api/v1/shipments/cannot_ready_shipment.rabl +0 -2
  311. data/app/views/spree/api/v1/shipments/mine.rabl +0 -9
  312. data/app/views/spree/api/v1/shipments/show.rabl +0 -32
  313. data/app/views/spree/api/v1/shipments/small.rabl +0 -37
  314. data/app/views/spree/api/v1/shipping_rates/show.rabl +0 -2
  315. data/app/views/spree/api/v1/states/index.rabl +0 -12
  316. data/app/views/spree/api/v1/states/show.rabl +0 -2
  317. data/app/views/spree/api/v1/stock_items/index.rabl +0 -7
  318. data/app/views/spree/api/v1/stock_items/show.rabl +0 -5
  319. data/app/views/spree/api/v1/stock_locations/index.rabl +0 -7
  320. data/app/views/spree/api/v1/stock_locations/show.rabl +0 -8
  321. data/app/views/spree/api/v1/stock_movements/index.rabl +0 -7
  322. data/app/views/spree/api/v1/stock_movements/show.rabl +0 -5
  323. data/app/views/spree/api/v1/stores/index.rabl +0 -4
  324. data/app/views/spree/api/v1/stores/show.rabl +0 -2
  325. data/app/views/spree/api/v1/tags/index.rabl +0 -9
  326. data/app/views/spree/api/v1/taxonomies/index.rabl +0 -7
  327. data/app/views/spree/api/v1/taxonomies/jstree.rabl +0 -7
  328. data/app/views/spree/api/v1/taxonomies/nested.rabl +0 -11
  329. data/app/views/spree/api/v1/taxonomies/new.rabl +0 -3
  330. data/app/views/spree/api/v1/taxonomies/show.rabl +0 -15
  331. data/app/views/spree/api/v1/taxons/index.rabl +0 -10
  332. data/app/views/spree/api/v1/taxons/jstree.rabl +0 -7
  333. data/app/views/spree/api/v1/taxons/new.rabl +0 -3
  334. data/app/views/spree/api/v1/taxons/show.rabl +0 -6
  335. data/app/views/spree/api/v1/taxons/taxons.rabl +0 -5
  336. data/app/views/spree/api/v1/users/index.rabl +0 -7
  337. data/app/views/spree/api/v1/users/new.rabl +0 -3
  338. data/app/views/spree/api/v1/users/show.rabl +0 -11
  339. data/app/views/spree/api/v1/variants/big.rabl +0 -14
  340. data/app/views/spree/api/v1/variants/index.rabl +0 -9
  341. data/app/views/spree/api/v1/variants/new.rabl +0 -2
  342. data/app/views/spree/api/v1/variants/show.rabl +0 -3
  343. data/app/views/spree/api/v1/variants/small.rabl +0 -18
  344. data/app/views/spree/api/v1/zones/index.rabl +0 -7
  345. data/app/views/spree/api/v1/zones/show.rabl +0 -6
  346. data/config/initializers/rabl.rb +0 -9
  347. data/lib/spree/api/controller_setup.rb +0 -19
  348. data/lib/spree/api/responders/rabl_template.rb +0 -28
  349. data/lib/spree/api/responders.rb +0 -11
  350. data/lib/spree/api/testing_support/helpers.rb +0 -44
  351. data/lib/spree/api/testing_support/setup.rb +0 -16
@@ -2,23 +2,18 @@ module Spree
2
2
  module V2
3
3
  module Storefront
4
4
  class StoreSerializer < BaseSerializer
5
+ include Spree::Api::V2::StoreMediaSerializerImagesConcern
6
+
5
7
  set_type :store
6
8
 
7
- attributes :name, :url, :meta_description, :meta_keywords, :seo_title, :default_currency, :default, :supported_currencies, :facebook,
8
- :twitter, :instagram, :default_locale, :customer_support_email, :default_country_id, :description,
9
- :address, :contact_phone, :supported_locales
9
+ attributes :name, :url, :meta_description, :meta_keywords, :seo_title, :default_currency,
10
+ :default, :supported_currencies, :facebook, :twitter, :instagram, :default_locale,
11
+ :customer_support_email, :description, :address, :contact_phone, :supported_locales
10
12
 
11
13
  has_many :menus
12
14
  has_many :cms_pages
13
15
 
14
16
  has_one :default_country, serializer: :country, record_type: :country, id_method_name: :default_country_id
15
-
16
- attribute :favicon_path do |store|
17
- if store.favicon_image.attached?
18
- url_helpers = Rails.application.routes.url_helpers
19
- url_helpers.rails_representation_path(store.favicon, only_path: true)
20
- end
21
- end
22
17
  end
23
18
  end
24
19
  end
@@ -5,7 +5,7 @@ module Spree
5
5
  set_type :taxon
6
6
 
7
7
  attributes :name, :pretty_name, :permalink, :seo_title, :description, :meta_title, :meta_description,
8
- :meta_keywords, :left, :right, :position, :depth, :updated_at
8
+ :meta_keywords, :left, :right, :position, :depth, :updated_at, :public_metadata
9
9
 
10
10
  attribute :is_root do |taxon|
11
11
  taxon.root?
@@ -4,7 +4,7 @@ module Spree
4
4
  class TaxonomySerializer < BaseSerializer
5
5
  set_type :taxonomy
6
6
 
7
- attributes :name, :position
7
+ attributes :name, :position, :public_metadata
8
8
  end
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  class UserSerializer < BaseSerializer
5
5
  set_type :user
6
6
 
7
- attributes :email
7
+ attributes :email, :first_name, :last_name, :public_metadata
8
8
 
9
9
  attribute :store_credits do |user|
10
10
  user.total_available_store_credit
@@ -6,7 +6,7 @@ module Spree
6
6
 
7
7
  set_type :variant
8
8
 
9
- attributes :sku, :weight, :height, :width, :depth, :is_master, :options_text
9
+ attributes :sku, :barcode, :weight, :height, :width, :depth, :is_master, :options_text, :public_metadata
10
10
 
11
11
  attribute :purchasable do |variant|
12
12
  variant.purchasable?
@@ -0,0 +1,29 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class WishedItemSerializer < BaseSerializer
5
+ set_type :wished_item
6
+
7
+ attributes :quantity
8
+
9
+ attribute :price do |wished_item, params|
10
+ wished_item.price(currency: params[:currency])
11
+ end
12
+
13
+ attribute :total do |wished_item, params|
14
+ wished_item.total(currency: params[:currency])
15
+ end
16
+
17
+ attribute :display_price do |wished_item, params|
18
+ wished_item.display_price(currency: params[:currency]).to_s
19
+ end
20
+
21
+ attribute :display_total do |wished_item, params|
22
+ wished_item.display_total(currency: params[:currency]).to_s
23
+ end
24
+
25
+ belongs_to :variant
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class WishlistSerializer < BaseSerializer
5
+ set_type :wishlist
6
+
7
+ attributes :token, :name, :is_private, :is_default
8
+
9
+ attribute :variant_included do |wishlist, params|
10
+ wishlist.include?(params[:is_variant_included])
11
+ end
12
+
13
+ has_many :wished_items
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Webhooks
5
+ module Subscribers
6
+ class HandleRequest
7
+ def initialize(event_name:, subscriber:, webhook_payload_body:)
8
+ @event_name = event_name
9
+ @subscriber = subscriber
10
+ @webhook_payload_body = JSON.parse(webhook_payload_body)
11
+ end
12
+
13
+ def call
14
+ Rails.logger.debug(msg("sending to '#{url}'"))
15
+ Rails.logger.debug(msg("webhook_payload_body: #{body_with_event_metadata}"))
16
+
17
+ if request.unprocessable_uri?
18
+ return process(:warn, msg("can not make a request to '#{url}'"))
19
+ end
20
+ return process(:warn, msg("failed for '#{url}'")) if request.failed_request?
21
+
22
+ process(:debug, msg("success for URL '#{url}'"))
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :webhook_payload_body, :event_name, :subscriber
28
+
29
+ delegate :execution_time, :failed_request?, :response_code, :success?, :unprocessable_uri?, to: :request
30
+ delegate :id, :url, to: :subscriber
31
+ delegate :created_at, :id, to: :event, prefix: true
32
+
33
+ def process(log_level, msg)
34
+ Rails.logger.public_send(log_level, msg)
35
+ make_request
36
+ update_event(msg)
37
+ nil
38
+ end
39
+
40
+ def request
41
+ @request ||=
42
+ Spree::Webhooks::Subscribers::MakeRequest.new(webhook_payload_body: body_with_event_metadata, url: url)
43
+ end
44
+ alias make_request request
45
+
46
+ def body_with_event_metadata
47
+ webhook_payload_body.
48
+ merge(event_created_at: event_created_at, event_id: event_id, event_type: event.name).
49
+ to_json
50
+ end
51
+
52
+ def event
53
+ @event ||= Spree::Webhooks::Event.create!(
54
+ name: event_name, subscriber_id: subscriber.id, url: url
55
+ )
56
+ end
57
+
58
+ def update_event(msg)
59
+ event.update(
60
+ execution_time: execution_time,
61
+ request_errors: msg,
62
+ response_code: response_code,
63
+ success: success?
64
+ )
65
+ end
66
+
67
+ def msg(msg)
68
+ "[SPREE WEBHOOKS] '#{event_name}' #{msg}"
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Webhooks
5
+ module Subscribers
6
+ class MakeRequest
7
+ def initialize(url:, webhook_payload_body:)
8
+ @execution_time_in_milliseconds = 0
9
+ @url = url
10
+ @webhook_payload_body = webhook_payload_body
11
+ @webhooks_timeout = ENV['SPREE_WEBHOOKS_TIMEOUT']
12
+ end
13
+
14
+ def execution_time
15
+ request
16
+ @execution_time_in_milliseconds
17
+ end
18
+
19
+ def failed_request?
20
+ (200...300).exclude?(response_code)
21
+ end
22
+
23
+ def response_code
24
+ request.code.to_i
25
+ end
26
+
27
+ def success?
28
+ !unprocessable_uri? && !failed_request?
29
+ end
30
+
31
+ def unprocessable_uri?
32
+ uri_path == '' && uri_host.nil? && uri_port.nil?
33
+ end
34
+
35
+ private
36
+
37
+ attr_reader :execution_time_in_milliseconds, :url, :webhook_payload_body, :webhooks_timeout
38
+
39
+ HEADERS = { 'Content-Type' => 'application/json' }.freeze
40
+ private_constant :HEADERS
41
+
42
+ delegate :host, :path, :port, to: :uri, prefix: true
43
+
44
+ def http
45
+ http = Net::HTTP.new(uri_host, uri_port)
46
+ http.read_timeout = webhooks_timeout.to_i if custom_read_timeout?
47
+ http.use_ssl = true if use_ssl?
48
+ http
49
+ end
50
+
51
+ def request
52
+ req = Net::HTTP::Post.new(uri_path, HEADERS)
53
+ req.body = webhook_payload_body
54
+ @request ||= begin
55
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
56
+ request_result = http.request(req)
57
+ @execution_time_in_milliseconds = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time).in_milliseconds
58
+ request_result
59
+ end
60
+ rescue Errno::ECONNREFUSED, Net::ReadTimeout, SocketError
61
+ Class.new do
62
+ def self.code
63
+ '0'
64
+ end
65
+ end
66
+ end
67
+
68
+ def custom_read_timeout?
69
+ webhooks_timeout.present?
70
+ end
71
+
72
+ def use_ssl?
73
+ !(Rails.env.development? || Rails.env.test?)
74
+ end
75
+
76
+ def uri
77
+ URI(url)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Webhooks
3
+ module Subscribers
4
+ class QueueRequests
5
+ prepend Spree::ServiceModule::Base
6
+
7
+ def call(event_name:, webhook_payload_body:, **options)
8
+ filtered_subscribers(event_name, webhook_payload_body, options).each do |subscriber|
9
+ Spree::Webhooks::Subscribers::MakeRequestJob.perform_later(
10
+ webhook_payload_body, event_name, subscriber
11
+ )
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def filtered_subscribers(event_name, _, _)
18
+ Spree::Webhooks::Subscriber.active.with_urls_for(event_name)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module Webhooks
3
+ def self.disable_webhooks
4
+ webhooks_disabled_previously = ENV['DISABLE_SPREE_WEBHOOKS']
5
+ begin
6
+ ENV['DISABLE_SPREE_WEBHOOKS'] = 'true'
7
+ yield
8
+ ensure
9
+ ENV['DISABLE_SPREE_WEBHOOKS'] = webhooks_disabled_previously
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,40 @@
1
+ base_locale: en
2
+ data:
3
+ yaml:
4
+ write:
5
+ # do not wrap lines at 80 characters
6
+ line_width: -1
7
+
8
+ # Find translate calls
9
+ search:
10
+ paths:
11
+ - '../api/app'
12
+ - '../api/lib'
13
+
14
+ #### For API v1 only, START ####
15
+ exclude:
16
+ - '../api/app/controllers/spree/api/v1/*'
17
+ - '../api/app/views/*'
18
+
19
+ ignore_unused:
20
+ - 'spree.api.gateway_error'
21
+ - 'spree.api.invalid_api_key'
22
+ - 'spree.api.invalid_resource'
23
+ - 'spree.api.invalid_taxonomy_id'
24
+ - 'spree.api.must_specify_api_key'
25
+ - 'spree.api.negative_quantity'
26
+ - 'spree.api.order.could_not_transition'
27
+ - 'spree.api.order.insufficient_quantity'
28
+ - 'spree.api.order.invalid_shipping_method'
29
+ - 'spree.api.payment.credit_over_limit'
30
+ - 'spree.api.payment.update_forbidden'
31
+ - 'spree.api.shipment.cannot_ready'
32
+ - 'spree.api.shipment_transfer_errors_occurred'
33
+ - 'spree.api.shipment_transfer_success'
34
+ - 'spree.api.stock_location_required'
35
+ - 'spree.api.unauthorized'
36
+ - 'spree.api.wrong_shipment_target'
37
+ #### For API v1 only, END ####
38
+
39
+ # The PatternMapper for Spree.t
40
+ <% I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper', patterns: [['\bSpree\.t[( ]\s*%{key}', 'spree.%{key}']] %>
@@ -2,11 +2,15 @@ Doorkeeper.configure do
2
2
  orm :active_record
3
3
  use_refresh_token
4
4
  api_only
5
- base_controller 'ActionController::API'
5
+ base_controller 'Spree::Api::V2::BaseController'
6
+ base_metal_controller 'Spree::Api::V2::BaseController'
6
7
 
8
+ # FIXME: we should only skip this for Storefront API until v5
9
+ # we should not skip this for Platform API
7
10
  skip_client_authentication_for_password_grant { true } if defined?(skip_client_authentication_for_password_grant)
8
11
 
9
12
  resource_owner_authenticator { current_spree_user }
13
+ use_polymorphic_resource_owner
10
14
 
11
15
  resource_owner_from_credentials do
12
16
  user = Spree.user_class.find_for_database_authentication(email: params[:username])
@@ -21,7 +25,7 @@ Doorkeeper.configure do
21
25
  end
22
26
 
23
27
  admin_authenticator do |routes|
24
- current_spree_user&.has_spree_role?('admin') || redirect_to(routes.root_url)
28
+ current_spree_user&.spree_admin? || redirect_to(routes.root_url)
25
29
  end
26
30
 
27
31
  grant_flows %w[password client_credentials]
@@ -33,16 +37,12 @@ Doorkeeper.configure do
33
37
  access_token_methods :from_bearer_authorization, :from_access_token_param
34
38
 
35
39
  optional_scopes :admin, :write, :read
36
- end
37
-
38
- Doorkeeper::AccessGrant.class_eval do
39
- self.table_name = 'spree_oauth_access_grants'
40
- end
41
40
 
42
- Doorkeeper::AccessToken.class_eval do
43
- self.table_name = 'spree_oauth_access_tokens'
44
- end
41
+ access_token_class 'Spree::OauthAccessToken'
42
+ access_grant_class 'Spree::OauthAccessGrant'
43
+ application_class 'Spree::OauthApplication'
45
44
 
46
- Doorkeeper::Application.class_eval do
47
- self.table_name = 'spree_oauth_applications'
45
+ # using Bcrupt for token secrets is currently not supported by Doorkeeper
46
+ hash_token_secrets fallback: :plain
47
+ hash_application_secrets fallback: :plain, using: '::Doorkeeper::SecretStoring::BCrypt'
48
48
  end
@@ -1,36 +1,38 @@
1
+ ---
1
2
  en:
2
3
  spree:
3
4
  api:
4
- must_specify_api_key: "You must specify an API key."
5
- invalid_api_key: "Invalid API key (%{key}) specified."
6
- unauthorized: "You are not authorized to perform that action."
7
- invalid_resource: "Invalid resource. Please fix errors and try again."
8
- resource_not_found: "The resource you were looking for could not be found."
9
- gateway_error: "There was a problem with the payment gateway: %{text}"
10
- access: "API Access"
11
- key: "Key"
12
- clear_key: "Clear key"
13
- regenerate_key: "Regenerate Key"
14
- no_key: "No key"
15
- generate_key: "Generate API key"
16
- key_generated: "Key generated"
17
- key_cleared: "Key cleared"
5
+ gateway_error: 'There was a problem with the payment gateway: %{text}'
6
+ invalid_api_key: Invalid API key (%{key}) specified.
7
+ invalid_resource: Invalid resource. Please fix errors and try again.
8
+ invalid_taxonomy_id: Invalid taxonomy id.
9
+ must_specify_api_key: You must specify an API key.
10
+ negative_quantity: quantity is negative
18
11
  order:
19
- could_not_transition: "The order could not be transitioned. Please fix the errors and try again."
20
- invalid_shipping_method: "Invalid shipping method specified."
12
+ could_not_transition: The order could not be transitioned. Please fix the errors and try again.
21
13
  insufficient_quantity: An item in your cart has become unavailable.
14
+ invalid_shipping_method: Invalid shipping method specified.
22
15
  payment:
23
- credit_over_limit: "This payment can only be credited up to %{limit}. Please specify an amount less than or equal to this number."
24
- update_forbidden: "This payment cannot be updated because it is %{state}."
16
+ credit_over_limit: This payment can only be credited up to %{limit}. Please specify an amount less than or equal to this number.
17
+ update_forbidden: This payment cannot be updated because it is %{state}.
18
+ resource_not_found: The resource you were looking for could not be found.
25
19
  shipment:
26
- cannot_ready: "Cannot ready shipment."
27
- stock_location_required: "A stock_location_id parameter must be provided in order to retrieve stock movements."
28
- invalid_taxonomy_id: "Invalid taxonomy id."
29
- shipment_transfer_errors_occurred: "Following errors occurred while attempting this action:"
30
- negative_quantity: "quantity is negative"
31
- wrong_shipment_target: "target shipment is the same as original shipment"
32
-
20
+ cannot_ready: Cannot ready shipment.
21
+ shipment_transfer_errors_occurred: 'Following errors occurred while attempting this action:'
22
+ shipment_transfer_success: Variants successfully transferred
23
+ stock_location_required: A stock_location_id parameter must be provided in order to retrieve stock movements.
24
+ unauthorized: You are not authorized to perform that action.
33
25
  v2:
34
26
  cart:
35
- wrong_quantity: "Quantity has to be greater than 0"
36
- no_coupon_code: "No coupon code provided and the Order doesn't have any coupon code promotions applied"
27
+ no_coupon_code: No coupon code provided and the Order doesn't have any coupon code promotions applied
28
+ wrong_quantity: Quantity has to be greater than 0
29
+ digitals:
30
+ missing_file: 'Missing Digital Item: attachment'
31
+ unauthorized: Error, you are not authorized to access this asset
32
+ metadata:
33
+ invalid_params: Public and private metadata parameters should be objects
34
+ wishlist:
35
+ errors:
36
+ the_wishlist_could_not_be_destroyed: The wishlist could not be destroyed.
37
+ wrong_quantity: Quantity has to be greater than 0
38
+ wrong_shipment_target: target shipment is the same as original shipment