workarea-api-storefront 4.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/README.md +58 -0
  4. data/Rakefile +10 -0
  5. data/app/controllers/workarea/api/storefront/accounts_controller.rb +31 -0
  6. data/app/controllers/workarea/api/storefront/analytics_controller.rb +41 -0
  7. data/app/controllers/workarea/api/storefront/application_controller.rb +65 -0
  8. data/app/controllers/workarea/api/storefront/assets_controller.rb +11 -0
  9. data/app/controllers/workarea/api/storefront/authentication.rb +30 -0
  10. data/app/controllers/workarea/api/storefront/authentication_tokens_controller.rb +50 -0
  11. data/app/controllers/workarea/api/storefront/cart_items_controller.rb +100 -0
  12. data/app/controllers/workarea/api/storefront/carts_controller.rb +47 -0
  13. data/app/controllers/workarea/api/storefront/categories_controller.rb +25 -0
  14. data/app/controllers/workarea/api/storefront/checkouts_controller.rb +117 -0
  15. data/app/controllers/workarea/api/storefront/contacts_controller.rb +20 -0
  16. data/app/controllers/workarea/api/storefront/current_checkout.rb +60 -0
  17. data/app/controllers/workarea/api/storefront/email_signups_controller.rb +15 -0
  18. data/app/controllers/workarea/api/storefront/menus_controller.rb +19 -0
  19. data/app/controllers/workarea/api/storefront/orders_controller.rb +32 -0
  20. data/app/controllers/workarea/api/storefront/pages_controller.rb +14 -0
  21. data/app/controllers/workarea/api/storefront/password_resets_controller.rb +17 -0
  22. data/app/controllers/workarea/api/storefront/products_controller.rb +17 -0
  23. data/app/controllers/workarea/api/storefront/recent_views_controller.rb +46 -0
  24. data/app/controllers/workarea/api/storefront/recommendations_controller.rb +22 -0
  25. data/app/controllers/workarea/api/storefront/saved_addresses_controller.rb +38 -0
  26. data/app/controllers/workarea/api/storefront/saved_credit_cards_controller.rb +54 -0
  27. data/app/controllers/workarea/api/storefront/searches_controller.rb +29 -0
  28. data/app/controllers/workarea/api/storefront/system_content_controller.rb +16 -0
  29. data/app/controllers/workarea/api/storefront/taxons_controller.rb +20 -0
  30. data/app/controllers/workarea/api/storefront/user_activity.rb +36 -0
  31. data/app/controllers/workarea/storefront/application_controller.decorator +12 -0
  32. data/app/helpers/workarea/api/storefront/application_helper.rb +15 -0
  33. data/app/helpers/workarea/api/storefront/checkouts_helper.rb +11 -0
  34. data/app/helpers/workarea/api/storefront/content_blocks_helper.rb +38 -0
  35. data/app/models/workarea/catalog/category.decorator +7 -0
  36. data/app/models/workarea/user/authentication_token.rb +33 -0
  37. data/app/models/workarea/user.decorator +8 -0
  38. data/app/view_models/workarea/api/storefront/search_suggestion_view_model.rb +21 -0
  39. data/app/views/workarea/api/storefront/accounts/_account.json.jbuilder +7 -0
  40. data/app/views/workarea/api/storefront/accounts/create.json.jbuilder +7 -0
  41. data/app/views/workarea/api/storefront/accounts/show.json.jbuilder +1 -0
  42. data/app/views/workarea/api/storefront/assets/show.json.jbuilder +4 -0
  43. data/app/views/workarea/api/storefront/authentication_tokens/_authentication_token.json.jbuilder +2 -0
  44. data/app/views/workarea/api/storefront/authentication_tokens/create.json.jbuilder +1 -0
  45. data/app/views/workarea/api/storefront/authentication_tokens/update.json.jbuilder +1 -0
  46. data/app/views/workarea/api/storefront/cart_items/item.json.jbuilder +9 -0
  47. data/app/views/workarea/api/storefront/carts/index.json.jbuilder +4 -0
  48. data/app/views/workarea/api/storefront/carts/show.json.jbuilder +1 -0
  49. data/app/views/workarea/api/storefront/categories/_category.json.jbuilder +4 -0
  50. data/app/views/workarea/api/storefront/categories/index.json.jbuilder +3 -0
  51. data/app/views/workarea/api/storefront/categories/show.json.jbuilder +30 -0
  52. data/app/views/workarea/api/storefront/checkouts/_shipping_options.json.jbuilder +4 -0
  53. data/app/views/workarea/api/storefront/checkouts/show.json.jbuilder +17 -0
  54. data/app/views/workarea/api/storefront/checkouts/steps/_addresses.json.jbuilder +19 -0
  55. data/app/views/workarea/api/storefront/checkouts/steps/_payment.json.jbuilder +9 -0
  56. data/app/views/workarea/api/storefront/checkouts/steps/_shipping.json.jbuilder +9 -0
  57. data/app/views/workarea/api/storefront/content_blocks/_block.json.jbuilder +7 -0
  58. data/app/views/workarea/api/storefront/email_signups/create.json.jbuilder +2 -0
  59. data/app/views/workarea/api/storefront/email_signups/show.json.jbuilder +4 -0
  60. data/app/views/workarea/api/storefront/facets/_range.json.jbuilder +8 -0
  61. data/app/views/workarea/api/storefront/facets/_terms.json.jbuilder +8 -0
  62. data/app/views/workarea/api/storefront/fulfillments/_fulfillment.json.jbuilder +18 -0
  63. data/app/views/workarea/api/storefront/menus/_menu.json.jbuilder +11 -0
  64. data/app/views/workarea/api/storefront/menus/index.json.jbuilder +3 -0
  65. data/app/views/workarea/api/storefront/menus/show.json.jbuilder +1 -0
  66. data/app/views/workarea/api/storefront/orders/_item.json.jbuilder +26 -0
  67. data/app/views/workarea/api/storefront/orders/_order.json.jbuilder +42 -0
  68. data/app/views/workarea/api/storefront/orders/index.json.jbuilder +4 -0
  69. data/app/views/workarea/api/storefront/orders/show.json.jbuilder +7 -0
  70. data/app/views/workarea/api/storefront/orders/tenders/_credit_card.json.jbuilder +6 -0
  71. data/app/views/workarea/api/storefront/orders/tenders/_store_credit.json.jbuilder +2 -0
  72. data/app/views/workarea/api/storefront/pages/show.json.jbuilder +16 -0
  73. data/app/views/workarea/api/storefront/products/_image_urls.json.jbuilder +5 -0
  74. data/app/views/workarea/api/storefront/products/_product.json.jbuilder +41 -0
  75. data/app/views/workarea/api/storefront/products/show.json.jbuilder +9 -0
  76. data/app/views/workarea/api/storefront/recent_views/show.json.jbuilder +8 -0
  77. data/app/views/workarea/api/storefront/recommendations/show.json.jbuilder +3 -0
  78. data/app/views/workarea/api/storefront/saved_addresses/_saved_address.json.jbuilder +2 -0
  79. data/app/views/workarea/api/storefront/saved_addresses/index.json.jbuilder +4 -0
  80. data/app/views/workarea/api/storefront/saved_addresses/show.json.jbuilder +2 -0
  81. data/app/views/workarea/api/storefront/saved_credit_cards/_card.json.jbuilder +9 -0
  82. data/app/views/workarea/api/storefront/saved_credit_cards/index.json.jbuilder +4 -0
  83. data/app/views/workarea/api/storefront/saved_credit_cards/show.json.jbuilder +2 -0
  84. data/app/views/workarea/api/storefront/searches/index.json.jbuilder +1 -0
  85. data/app/views/workarea/api/storefront/searches/show.json.jbuilder +19 -0
  86. data/app/views/workarea/api/storefront/shared/_address.json.jbuilder +12 -0
  87. data/app/views/workarea/api/storefront/shared/_pagination.json.jbuilder +11 -0
  88. data/app/views/workarea/api/storefront/system_content/show.json.jbuilder +12 -0
  89. data/app/views/workarea/api/storefront/taxons/_taxon.json.jbuilder +10 -0
  90. data/app/views/workarea/api/storefront/taxons/show.json.jbuilder +7 -0
  91. data/app/workers/workarea/remove_authentication_tokens_on_password_changes.rb +19 -0
  92. data/bin/rails +18 -0
  93. data/config/initializers/config.rb +2 -0
  94. data/config/locales/en.yml +13 -0
  95. data/config/routes.rb +41 -0
  96. data/lib/workarea/api/storefront/engine.rb +10 -0
  97. data/lib/workarea/api/storefront.rb +15 -0
  98. data/test/documentation/workarea/api/storefront/accounts_documentation_test.rb +70 -0
  99. data/test/documentation/workarea/api/storefront/analytics_documentation_test.rb +51 -0
  100. data/test/documentation/workarea/api/storefront/assets_documentation_test.rb +32 -0
  101. data/test/documentation/workarea/api/storefront/authentication_documentation_test.rb +84 -0
  102. data/test/documentation/workarea/api/storefront/cart_items_documentation_test.rb +104 -0
  103. data/test/documentation/workarea/api/storefront/carts_documentation_test.rb +121 -0
  104. data/test/documentation/workarea/api/storefront/categories_documentation_test.rb +90 -0
  105. data/test/documentation/workarea/api/storefront/checkouts_documentation_test.rb +142 -0
  106. data/test/documentation/workarea/api/storefront/contacts_documentation_test.rb +39 -0
  107. data/test/documentation/workarea/api/storefront/email_signups_documentation_test.rb +53 -0
  108. data/test/documentation/workarea/api/storefront/menus_documentation_test.rb +67 -0
  109. data/test/documentation/workarea/api/storefront/orders_documentation_test.rb +127 -0
  110. data/test/documentation/workarea/api/storefront/pages_documentation_test.rb +66 -0
  111. data/test/documentation/workarea/api/storefront/password_resets_documentation_test.rb +30 -0
  112. data/test/documentation/workarea/api/storefront/products_documentation_test.rb +64 -0
  113. data/test/documentation/workarea/api/storefront/recent_views_documentation_test.rb +116 -0
  114. data/test/documentation/workarea/api/storefront/recommendations_documentation_test.rb +68 -0
  115. data/test/documentation/workarea/api/storefront/saved_addresses_documentation_test.rb +129 -0
  116. data/test/documentation/workarea/api/storefront/saved_credit_cards_documentation_test.rb +129 -0
  117. data/test/documentation/workarea/api/storefront/searches_documentation_test.rb +88 -0
  118. data/test/documentation/workarea/api/storefront/system_content_documentation_test.rb +66 -0
  119. data/test/documentation/workarea/api/storefront/taxons_documentation_test.rb +37 -0
  120. data/test/documentation/workarea/api/storefront/validation_documentation_test.rb +81 -0
  121. data/test/dummy/Rakefile +7 -0
  122. data/test/dummy/app/assets/config/manifest.js +4 -0
  123. data/test/dummy/app/assets/images/.keep +0 -0
  124. data/test/dummy/app/assets/javascripts/application.js +13 -0
  125. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  126. data/test/dummy/app/controllers/application_controller.rb +3 -0
  127. data/test/dummy/app/controllers/concerns/.keep +0 -0
  128. data/test/dummy/app/helpers/application_helper.rb +2 -0
  129. data/test/dummy/app/jobs/application_job.rb +2 -0
  130. data/test/dummy/app/mailers/.keep +0 -0
  131. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  132. data/test/dummy/app/models/.keep +0 -0
  133. data/test/dummy/app/models/concerns/.keep +0 -0
  134. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  135. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  136. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  137. data/test/dummy/bin/bundle +3 -0
  138. data/test/dummy/bin/rails +4 -0
  139. data/test/dummy/bin/rake +4 -0
  140. data/test/dummy/bin/setup +34 -0
  141. data/test/dummy/bin/update +29 -0
  142. data/test/dummy/config/application.rb +25 -0
  143. data/test/dummy/config/boot.rb +5 -0
  144. data/test/dummy/config/cable.yml +9 -0
  145. data/test/dummy/config/environment.rb +5 -0
  146. data/test/dummy/config/environments/development.rb +55 -0
  147. data/test/dummy/config/environments/production.rb +86 -0
  148. data/test/dummy/config/environments/test.rb +43 -0
  149. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  150. data/test/dummy/config/initializers/assets.rb +11 -0
  151. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  152. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  153. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  154. data/test/dummy/config/initializers/inflections.rb +16 -0
  155. data/test/dummy/config/initializers/mime_types.rb +4 -0
  156. data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
  157. data/test/dummy/config/initializers/session_store.rb +3 -0
  158. data/test/dummy/config/initializers/workarea.rb +8 -0
  159. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  160. data/test/dummy/config/locales/en.yml +23 -0
  161. data/test/dummy/config/puma.rb +47 -0
  162. data/test/dummy/config/routes.rb +6 -0
  163. data/test/dummy/config/secrets.yml +22 -0
  164. data/test/dummy/config/spring.rb +6 -0
  165. data/test/dummy/config.ru +4 -0
  166. data/test/dummy/db/seeds.rb +2 -0
  167. data/test/dummy/log/.keep +0 -0
  168. data/test/dummy/public/404.html +67 -0
  169. data/test/dummy/public/422.html +67 -0
  170. data/test/dummy/public/500.html +66 -0
  171. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  172. data/test/dummy/public/apple-touch-icon.png +0 -0
  173. data/test/dummy/public/favicon.ico +1 -0
  174. data/test/integration/workarea/api/storefront/accounts_integration_test.rb +49 -0
  175. data/test/integration/workarea/api/storefront/analytics_integration_test.rb +36 -0
  176. data/test/integration/workarea/api/storefront/assets_integration_test.rb +24 -0
  177. data/test/integration/workarea/api/storefront/authentication_integration_test.rb +50 -0
  178. data/test/integration/workarea/api/storefront/authentication_tokens_integration_test.rb +87 -0
  179. data/test/integration/workarea/api/storefront/cart_items_integration_test.rb +149 -0
  180. data/test/integration/workarea/api/storefront/carts_integration_test.rb +114 -0
  181. data/test/integration/workarea/api/storefront/categories_integration_test.rb +84 -0
  182. data/test/integration/workarea/api/storefront/checkouts_integration_test.rb +203 -0
  183. data/test/integration/workarea/api/storefront/contacts_integration_test.rb +28 -0
  184. data/test/integration/workarea/api/storefront/email_signups_integration_test.rb +35 -0
  185. data/test/integration/workarea/api/storefront/menus_integration_test.rb +53 -0
  186. data/test/integration/workarea/api/storefront/orders_integration_test.rb +115 -0
  187. data/test/integration/workarea/api/storefront/pages_integration_test.rb +57 -0
  188. data/test/integration/workarea/api/storefront/password_resets_integration_test.rb +20 -0
  189. data/test/integration/workarea/api/storefront/products_integration_test.rb +50 -0
  190. data/test/integration/workarea/api/storefront/recent_views_integration_test.rb +118 -0
  191. data/test/integration/workarea/api/storefront/recommendations_integration_test.rb +51 -0
  192. data/test/integration/workarea/api/storefront/saved_addresses_integration_test.rb +100 -0
  193. data/test/integration/workarea/api/storefront/saved_credit_cards_integration_test.rb +107 -0
  194. data/test/integration/workarea/api/storefront/searches_integration_test.rb +128 -0
  195. data/test/integration/workarea/api/storefront/system_content_integration_test.rb +35 -0
  196. data/test/integration/workarea/api/storefront/taxons_integration_test.rb +44 -0
  197. data/test/integration/workarea/api/storefront/user_carts_integration_test.rb +55 -0
  198. data/test/models/workarea/user/authentication_token_test.rb +30 -0
  199. data/test/support/authentication_test.rb +25 -0
  200. data/test/support/orders_test.rb +18 -0
  201. data/test/test_helper.rb +10 -0
  202. data/workarea-api-storefront.gemspec +18 -0
  203. metadata +277 -0
@@ -0,0 +1,19 @@
1
+ json.addresses do
2
+ json.complete step.complete?
3
+ json.email summary.email
4
+ json.problems summary.order.errors.full_messages
5
+
6
+ json.shipping_address do
7
+ if summary.shipping_address.present?
8
+ json.partial! 'workarea/api/storefront/shared/address', address: summary.shipping_address
9
+ json.problems summary.shipping_address.errors.full_messages
10
+ end
11
+ end
12
+
13
+ json.billing_address do
14
+ if summary.billing_address.present?
15
+ json.partial! 'workarea/api/storefront/shared/address', address: summary.billing_address
16
+ json.problems summary.billing_address.errors.full_messages
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ json.payment do
2
+ json.complete step.complete?
3
+ json.problems step.payment.errors.full_messages
4
+
5
+ json.tenders summary.payment.tenders do |tender|
6
+ json.partial! "workarea/api/storefront/orders/tenders/#{tender.slug}", tender: tender
7
+ json.problems tender.errors.full_messages
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ json.shipping do
2
+ json.complete summary.shipping_service.present? && step.complete?
3
+ json.problems summary.shipping.errors.full_messages
4
+
5
+ json.shipping_service summary.shipping_service
6
+ json.shipping_total cart.shipping_total
7
+
8
+ json.partial! 'workarea/api/storefront/checkouts/shipping_options', cart: cart
9
+ end
@@ -0,0 +1,7 @@
1
+ json.id block.id
2
+ json.type block.type_id
3
+ json.area block.area
4
+ json.data block_data_with_urls(block)
5
+ json.hidden_breakpoints block.hidden_breakpoints
6
+ json.position block.position
7
+ json.html render_block_to_string(block)
@@ -0,0 +1,2 @@
1
+ json.id @signup.id
2
+ json.email @signup.email
@@ -0,0 +1,4 @@
1
+ json.title @email_signup.title
2
+ json.content_blocks @email_signup.content.blocks do |block|
3
+ json.partial! 'workarea/api/storefront/content_blocks/block', block: block
4
+ end
@@ -0,0 +1,8 @@
1
+ json.type facet.type
2
+ json.name facet.name
3
+ json.display_name facet.display_name
4
+
5
+ json.results facet.results do |range, count|
6
+ json.range range
7
+ json.count count
8
+ end
@@ -0,0 +1,8 @@
1
+ json.type facet.type
2
+ json.name facet.name
3
+ json.display_name facet.display_name
4
+
5
+ json.results facet.results do |name, count|
6
+ json.name name
7
+ json.count count
8
+ end
@@ -0,0 +1,18 @@
1
+ json.status order.try(:fulfillment_status)
2
+
3
+ json.packages order.packages do |package|
4
+ json.tracking_number package.tracking_number
5
+ json.tracking_link package.tracking_link
6
+
7
+ json.items package.items do |item|
8
+ json.partial! 'workarea/api/storefront/orders/item', item: item
9
+ end
10
+ end
11
+
12
+ json.pending_items order.pending_items do |item|
13
+ json.partial! 'workarea/api/storefront/orders/item', item: item
14
+ end
15
+
16
+ json.canceled_items order.canceled_items do |item|
17
+ json.partial! 'workarea/api/storefront/orders/item', item: item
18
+ end
@@ -0,0 +1,11 @@
1
+ json.cache! menu.cache_key, expires_in: 1.hour do
2
+ json.id menu.id
3
+ json.name menu.name
4
+ json.position menu.position
5
+ json.url menu_path(menu)
6
+ json.taxon_url menu.taxon.url.presence || storefront_api_url_for(menu.taxon)
7
+
8
+ json.content_blocks menu.content.blocks do |block|
9
+ json.partial! 'workarea/api/storefront/content_blocks/block', block: block
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ json.menus @menus do |menu|
2
+ json.partial! 'workarea/api/storefront/menus/menu', menu: menu
3
+ end
@@ -0,0 +1 @@
1
+ json.partial! 'workarea/api/storefront/menus/menu', menu: @menu
@@ -0,0 +1,26 @@
1
+ json.id item.id
2
+ json.product_id item.product_id
3
+ json.sku item.sku
4
+ json.quantity item.quantity
5
+ json.product_url product_url(item.product, sku: item.sku)
6
+ json.options item.details
7
+ json.customizations item.customizations
8
+
9
+ json.product_image do
10
+ json.partial! 'workarea/api/storefront/products/image_urls', image: item.image
11
+ end
12
+
13
+ json.pricing do
14
+ json.price_adjustments item.price_adjustments do |adjustment|
15
+ json.description adjustment.description
16
+ json.discount adjustment.discount?
17
+ json.amount adjustment.amount
18
+ end
19
+
20
+ json.total_price item.total_price
21
+ json.on_sale item.on_sale?
22
+ json.original_unit_price item.original_unit_price
23
+ json.original_price item.original_price
24
+ json.customized item.customized?
25
+ json.customizations_unit_price item.customizations_unit_price
26
+ end
@@ -0,0 +1,42 @@
1
+ json.id order.id
2
+ json.url order_url(order)
3
+ json.user_id order.user_id
4
+ json.email order.email
5
+ json.placed_at order.placed_at
6
+ json.canceled_at order.canceled_at
7
+ json.promo_codes order.promo_codes
8
+ json.requires_shipping order.requires_shipping?
9
+
10
+ json.items order.items do |item|
11
+ json.partial! 'workarea/api/storefront/orders/item', item: item
12
+ end
13
+
14
+ json.pricing do
15
+ json.price_adjustments order.total_adjustments do |adjustment|
16
+ json.description adjustment.description.titleize
17
+ json.amount adjustment.amount
18
+ end
19
+
20
+ json.shipping_total order.shipping_total
21
+ json.tax_total order.tax_total
22
+ json.subtotal_price order.subtotal_price
23
+ json.total_price order.total_price
24
+ json.paid_amount order.try(:paid_amount) || 0
25
+ end
26
+
27
+ json.shipping_service order.shipping_service
28
+ json.shipping_address do
29
+ if order.shipping_address.present?
30
+ json.partial! 'workarea/api/storefront/shared/address', address: order.shipping_address
31
+ end
32
+ end
33
+
34
+ json.billing_address do
35
+ if order.billing_address.present?
36
+ json.partial! 'workarea/api/storefront/shared/address', address: order.billing_address
37
+ end
38
+ end
39
+
40
+ json.tenders order.tenders do |tender|
41
+ json.partial! "workarea/api/storefront/orders/tenders/#{tender.slug}", tender: tender
42
+ end
@@ -0,0 +1,4 @@
1
+ json.user_id current_user.id
2
+ json.orders @orders do |order|
3
+ json.partial! 'workarea/api/storefront/orders/order', order: order
4
+ end
@@ -0,0 +1,7 @@
1
+ json.order do
2
+ json.partial! 'workarea/api/storefront/orders/order', order: @order
3
+ end
4
+
5
+ json.fulfillment do
6
+ json.partial! 'workarea/api/storefront/fulfillments/fulfillment', order: @order
7
+ end
@@ -0,0 +1,6 @@
1
+ json.type 'credit_card'
2
+ json.amount tender.amount
3
+ json.issuer tender.issuer
4
+ json.display_number tender.display_number
5
+ json.month tender.month
6
+ json.year tender.year
@@ -0,0 +1,2 @@
1
+ json.type 'store_credit'
2
+ json.amount tender.amount
@@ -0,0 +1,16 @@
1
+ json.cache! @page.cache_key, expires_in: 1.hour do
2
+ json.id @page.id
3
+ json.name @page.name
4
+ json.url page_url(@page)
5
+
6
+ json.browser_title @page.browser_title
7
+ json.meta_description @page.meta_description
8
+
9
+ json.breadcrumbs @page.breadcrumbs do |taxon|
10
+ json.partial! 'workarea/api/storefront/taxons/taxon', taxon: taxon
11
+ end
12
+
13
+ json.content_blocks @page.content.blocks do |block|
14
+ json.partial! 'workarea/api/storefront/content_blocks/block', block: block
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ processors = Dragonfly.app(:workarea).processors.items
2
+ json.urls processors.except(*Workarea.config.api_product_image_jobs_blacklist) do |name, _value|
3
+ json.type name
4
+ json.url product_image_url(image, name)
5
+ end
@@ -0,0 +1,41 @@
1
+ json.cache! product.cache_key, expires_in: 1.hour do
2
+ json.id product.id
3
+
4
+ json.name product.name
5
+ json.description product.description
6
+ json.slug product.slug
7
+
8
+ json.browser_title product.browser_title
9
+ json.meta_description product.meta_description
10
+
11
+ json.template product.template
12
+ json.customizations product.customizations
13
+ json.details product.details
14
+ json.digital product.digital?
15
+ json.filters product.filters
16
+ json.purchasable product.purchasable?
17
+ json.inventory_status product.inventory_status
18
+
19
+ json.variants product.variants do |variant|
20
+ json.id variant.id
21
+ json.name variant.name
22
+ json.sku variant.sku
23
+ json.details variant.details
24
+ end
25
+
26
+ json.sell_min_price json.sell_min_price
27
+ json.sell_max_price product.sell_max_price
28
+ json.on_sale product.on_sale?
29
+ json.original_min_price product.original_min_price
30
+ json.original_max_price product.original_max_price
31
+
32
+ json.images product.images do |image|
33
+ json.id image.id
34
+ json.option image.option
35
+ json.position image.position
36
+ json.primary image == product.primary_image
37
+ json.partial! 'workarea/api/storefront/products/image_urls', image: image
38
+ end
39
+
40
+ json.append_partials('api.storefront.product_details', product: product)
41
+ end
@@ -0,0 +1,9 @@
1
+ json.cache! @product.cache_key, expires_in: 1.hour do
2
+ json.product do
3
+ json.partial! 'workarea/api/storefront/products/product', product: @product
4
+ end
5
+
6
+ json.recommendations @product.recommendations do |product|
7
+ json.partial! 'workarea/api/storefront/products/product', product: product
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ json.id @recent_views.id
2
+ json.categories @recent_views.categories do |category|
3
+ json.partial! 'workarea/api/storefront/categories/category', category: category
4
+ end
5
+ json.products @recent_views.products do |product|
6
+ json.partial! 'workarea/api/storefront/products/product', product: product
7
+ end
8
+ json.searches @recent_views.searches
@@ -0,0 +1,3 @@
1
+ json.products @recommendations.products do |product|
2
+ json.partial! 'workarea/api/storefront/products/product', product: product
3
+ end
@@ -0,0 +1,2 @@
1
+ json.url saved_address_url(address)
2
+ json.partial! 'workarea/api/storefront/shared/address', address: address
@@ -0,0 +1,4 @@
1
+ json.user_id current_user.id
2
+ json.addresses @addresses do |address|
3
+ json.partial! 'workarea/api/storefront/saved_addresses/saved_address', address: address
4
+ end
@@ -0,0 +1,2 @@
1
+ json.user_id current_user.id
2
+ json.partial! 'workarea/api/storefront/saved_addresses/saved_address', address: @address
@@ -0,0 +1,9 @@
1
+ json.id card.id
2
+ json.url saved_credit_card_url(card)
3
+ json.default card.default?
4
+ json.issuer card.issuer
5
+ json.display_number card.display_number
6
+ json.month card.month
7
+ json.year card.year
8
+ json.first_name card.first_name
9
+ json.last_name card.last_name
@@ -0,0 +1,4 @@
1
+ json.user_id current_user.id
2
+ json.credit_cards @credit_cards do |credit_card|
3
+ json.partial! 'workarea/api/storefront/saved_credit_cards/card', card: credit_card
4
+ end
@@ -0,0 +1,2 @@
1
+ json.user_id current_user.id
2
+ json.partial! 'workarea/api/storefront/saved_credit_cards/card', card: @credit_card
@@ -0,0 +1 @@
1
+ json.results @results
@@ -0,0 +1,19 @@
1
+ json.query_string @search.query_string
2
+ json.message @search.message
3
+ json.redirect @search.redirect
4
+ json.sorts @search.sorts
5
+ json.sort @search.sort
6
+
7
+ json.content_blocks @search.content.blocks do |block|
8
+ json.partial! 'workarea/api/storefront/content_blocks/block', block: block
9
+ end
10
+
11
+ json.partial! 'workarea/api/storefront/shared/pagination', model: @search
12
+
13
+ json.facets @search.facets do |facet|
14
+ json.partial! "workarea/api/storefront/facets/#{facet.type}", facet: facet
15
+ end
16
+
17
+ json.products @search.products do |product|
18
+ json.partial! 'workarea/api/storefront/products/product', product: product
19
+ end
@@ -0,0 +1,12 @@
1
+ json.id address.id
2
+ json.first_name address.first_name
3
+ json.last_name address.last_name
4
+ json.company address.company
5
+ json.street address.street
6
+ json.street_2 address.street_2
7
+ json.city address.city
8
+ json.country address.country.try(:alpha2)
9
+ json.region address.region
10
+ json.postal_code address.postal_code
11
+ json.phone_number address.phone_number
12
+ json.phone_extension address.phone_extension
@@ -0,0 +1,11 @@
1
+ json.first_page model.first_page?
2
+ json.second_page model.second_page?
3
+ json.last_page model.last_page?
4
+
5
+ json.page model.page
6
+ json.next_page model.next_page
7
+ json.prev_page model.prev_page
8
+ json.per_page model.per_page
9
+
10
+ json.total_results model.total
11
+ json.total_pages model.total_pages
@@ -0,0 +1,12 @@
1
+ json.cache! @content.cache_key, expires_in: 1.hour do
2
+ json.id @content.id
3
+ json.name @content.name
4
+ json.url system_content_url(@content.name)
5
+
6
+ json.browser_title @content.browser_title
7
+ json.meta_description @content.meta_description
8
+
9
+ json.content_blocks @content.content.blocks do |block|
10
+ json.partial! 'workarea/api/storefront/content_blocks/block', block: block
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ json.cache! taxon.cache_key, expires_in: 1.day do
2
+ json.id taxon.id
3
+ json.url taxon_path(taxon)
4
+ json.name taxon.name
5
+ json.depth taxon.depth
6
+ json.navigable_url taxon.url.presence || storefront_api_url_for(taxon)
7
+ json.parent_id taxon.parent_id
8
+ json.parent_ids taxon.parent_ids
9
+ json.position taxon.position
10
+ end
@@ -0,0 +1,7 @@
1
+ json.taxon do
2
+ json.partial! 'workarea/api/storefront/taxons/taxon', taxon: @taxon
3
+ end
4
+
5
+ json.children @taxon.children.select(&:active?) do |child|
6
+ json.partial! 'workarea/api/storefront/taxons/taxon', taxon: child
7
+ end
@@ -0,0 +1,19 @@
1
+ module Workarea
2
+ class RemoveAuthenticationTokensOnPasswordChanges
3
+ include Sidekiq::Worker
4
+ include Sidekiq::CallbacksWorker
5
+
6
+ sidekiq_options(
7
+ enqueue_on: {
8
+ User => [:save],
9
+ ignore_if: -> { new_record? || changes['password_digest'].blank? },
10
+ with: -> { [id] }
11
+ },
12
+ unique: :until_executing
13
+ )
14
+
15
+ def perform(id)
16
+ User.find(id).authentication_tokens.destroy_all
17
+ end
18
+ end
19
+ end
data/bin/rails ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails gems
3
+ # installed from the root of your application.
4
+
5
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
6
+ ENGINE_PATH = File.expand_path('../../lib/workarea/api/storefront/engine', __FILE__)
7
+
8
+ # Set up gems listed in the Gemfile.
9
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __FILE__)
10
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11
+
12
+ require 'action_controller/railtie'
13
+ require 'action_view/railtie'
14
+ require 'action_mailer/railtie'
15
+ require 'rails/test_unit/railtie'
16
+ require 'sprockets/railtie'
17
+
18
+ require 'rails/engine/commands'
@@ -0,0 +1,2 @@
1
+ Workarea.config.api_product_image_jobs_blacklist ||= %i[convert encode rotate optim avatar thumb]
2
+ Workarea.config.authentication_token_expiration ||= 1.week
@@ -0,0 +1,13 @@
1
+ en:
2
+ workarea:
3
+ api:
4
+ storefront:
5
+ authentication_tokens:
6
+ error: Could not find a matching email and password
7
+ login_locked: This account has been locked for too many login attempts
8
+ recent_views:
9
+ missing_id: Recent views endpoints require either authentication or passing in a session_id in the parameters.
10
+ passwords:
11
+ error: Could not find a matching email and password
12
+ recommendations:
13
+ missing_id: Recommendation endpoints require either authentication or passing in a session_id in the parameters.
data/config/routes.rb ADDED
@@ -0,0 +1,41 @@
1
+ Workarea::Api::Storefront::Engine.routes.draw do
2
+ resource :account, except: [:new, :edit, :destroy]
3
+
4
+ post 'analytics/category_view/:category_id', to: 'analytics#category_view', as: :analytics_category_view
5
+ post 'analytics/product_view/:product_id', to: 'analytics#product_view', as: :analytics_product_view
6
+ post 'analytics/search', to: 'analytics#search', as: :analytics_search
7
+ post 'analytics/search_abandonment', to: 'analytics#search_abandonment', as: :analytics_search_abandonment
8
+ post 'analytics/filters', to: 'analytics#filters', as: :analytics_filters
9
+
10
+ resource :authentication_tokens, only: [:create, :update]
11
+ resources :assets, only: :show
12
+ resources :categories, only: [:index, :show]
13
+ resources :contacts, only: :create
14
+ resources :orders, only: [:index, :show]
15
+ resources :pages, only: :show
16
+ resource :recent_views, only: [:show, :update]
17
+ resources :saved_addresses, except: [:new, :edit]
18
+ resources :saved_credit_cards, except: [:new, :edit]
19
+ resource :search, only: :show
20
+ resources :searches, only: :index
21
+ resources :system_content, only: :show
22
+ resources :menus, only: [:index, :show]
23
+ resource :email_signups, only: [:show, :create]
24
+ resources :password_resets, only: :create
25
+ resources :products, only: :show
26
+ resource :recommendations, only: :show
27
+ resources :taxons, only: :show
28
+
29
+ resources :carts, only: [:index, :show, :create] do
30
+ resources :items, only: [:create, :update, :destroy], controller: :cart_items
31
+ member { post 'add_promo_code', as: :add_promo_code_to }
32
+ end
33
+
34
+ resources :checkouts, only: [:show, :update] do
35
+ member do
36
+ get 'start'
37
+ get 'reset'
38
+ post 'complete'
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,10 @@
1
+ module Workarea
2
+ module Api
3
+ module Storefront
4
+ class Engine < ::Rails::Engine
5
+ include Workarea::Plugin
6
+ isolate_namespace Workarea::Api::Storefront
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ require 'responders'
2
+ require 'raddocs'
3
+
4
+ require 'workarea'
5
+ require 'workarea/storefront'
6
+
7
+ module Workarea
8
+ module Api
9
+ module Storefront
10
+ end
11
+ end
12
+ end
13
+
14
+ require 'workarea/api/version'
15
+ require 'workarea/api/storefront/engine'
@@ -0,0 +1,70 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Storefront
7
+ class AccountsDocumentationTest < DocumentationTest
8
+ include AuthenticationTest
9
+
10
+ resource 'Accounts'
11
+
12
+ def test_showing_an_account
13
+ description 'Getting account details'
14
+ route storefront_api.account_path
15
+
16
+ user = create_user
17
+ auth = user.authentication_tokens.create!
18
+
19
+ record_request do
20
+ get storefront_api.account_path,
21
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(auth.token) }
22
+
23
+ assert_equal(200, response.status)
24
+ end
25
+ end
26
+
27
+ def test_creating_an_account
28
+ description 'Creating an account'
29
+ route storefront_api.account_path
30
+ explanation <<-EOS
31
+ This endpoint does three things: it creates an account, it creates
32
+ an authentication token, and it sends an account creation email to
33
+ the customer.
34
+ EOS
35
+
36
+ record_request do
37
+ post storefront_api.account_path,
38
+ as: :json,
39
+ params: {
40
+ email: 'bob@workarea.com',
41
+ password: 'areallysecurepassword'
42
+ }
43
+
44
+ assert_equal(200, response.status)
45
+ end
46
+ end
47
+
48
+ def test_updating_an_account
49
+ description 'Updating an account'
50
+ route storefront_api.account_path
51
+
52
+ user = create_user
53
+ auth = user.authentication_tokens.create!
54
+
55
+ record_request do
56
+ get storefront_api.account_path,
57
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(auth.token) },
58
+ as: :json,
59
+ params: {
60
+ email: 'billy@workarea.com',
61
+ password: 'adifferentbutstillreallysecurepassword'
62
+ }
63
+
64
+ assert_equal(200, response.status)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end