workarea-core 3.4.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1428) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +52 -0
  3. data/README.md +19 -0
  4. data/Rakefile +23 -0
  5. data/app/assets/images/workarea/core/favicon_placeholder.png +0 -0
  6. data/app/assets/images/workarea/core/icon.svg +4 -0
  7. data/app/assets/images/workarea/core/open_graph_placeholder.png +0 -0
  8. data/app/assets/images/workarea/core/placeholder.png +0 -0
  9. data/app/assets/images/workarea/core/product_placeholder.jpg +0 -0
  10. data/app/assets/javascripts/workarea/core/config.js +59 -0
  11. data/app/assets/javascripts/workarea/core/modules/cookie.js +64 -0
  12. data/app/assets/javascripts/workarea/core/modules/date.js +111 -0
  13. data/app/assets/javascripts/workarea/core/modules/deletion_forms.js +45 -0
  14. data/app/assets/javascripts/workarea/core/modules/duplicate_id.js +78 -0
  15. data/app/assets/javascripts/workarea/core/modules/environment.js +23 -0
  16. data/app/assets/javascripts/workarea/core/modules/form_submitting_controls.js +52 -0
  17. data/app/assets/javascripts/workarea/core/modules/forms.js +14 -0
  18. data/app/assets/javascripts/workarea/core/modules/image.js +43 -0
  19. data/app/assets/javascripts/workarea/core/modules/jquery.js +34 -0
  20. data/app/assets/javascripts/workarea/core/modules/local_time.js +16 -0
  21. data/app/assets/javascripts/workarea/core/modules/reveal_password.js +47 -0
  22. data/app/assets/javascripts/workarea/core/modules/string.js +62 -0
  23. data/app/assets/javascripts/workarea/core/modules/style_guide_accordions.js +21 -0
  24. data/app/assets/javascripts/workarea/core/modules/style_guide_autocomplete_fields.js +42 -0
  25. data/app/assets/javascripts/workarea/core/modules/style_guide_empty_links.js +23 -0
  26. data/app/assets/javascripts/workarea/core/modules/transition_events.js +71 -0
  27. data/app/assets/javascripts/workarea/core/modules/url.js +123 -0
  28. data/app/assets/javascripts/workarea/core/routes.js +9 -0
  29. data/app/assets/javascripts/workarea/core/templates/hidden_input.jst.ejs +1 -0
  30. data/app/assets/javascripts/workarea/core/templates/lorem_ipsum_view.jst.ejs +6 -0
  31. data/app/assets/javascripts/workarea/core/templates/reveal_password_button.jst.ejs +4 -0
  32. data/app/assets/javascripts/workarea/core/templates/ui_menu_item.jst.ejs +10 -0
  33. data/app/assets/javascripts/workarea/core/workarea.js +63 -0
  34. data/app/controllers/workarea/admin_guest_browsing.rb +54 -0
  35. data/app/controllers/workarea/application_controller.rb +42 -0
  36. data/app/controllers/workarea/authentication.rb +117 -0
  37. data/app/controllers/workarea/authorization.rb +46 -0
  38. data/app/controllers/workarea/current_referrer.rb +14 -0
  39. data/app/controllers/workarea/current_release.rb +56 -0
  40. data/app/controllers/workarea/impersonation.rb +92 -0
  41. data/app/controllers/workarea/style_guides.rb +17 -0
  42. data/app/helpers/workarea/addresses_helper.rb +48 -0
  43. data/app/helpers/workarea/application_helper.rb +70 -0
  44. data/app/helpers/workarea/content_assets_helper.rb +22 -0
  45. data/app/helpers/workarea/details_helper.rb +12 -0
  46. data/app/helpers/workarea/facets_helper.rb +53 -0
  47. data/app/helpers/workarea/i18n_helper.rb +19 -0
  48. data/app/helpers/workarea/plugins_helper.rb +23 -0
  49. data/app/helpers/workarea/style_guides_helper.rb +88 -0
  50. data/app/mailers/workarea/application_mailer.rb +13 -0
  51. data/app/middleware/workarea/audit_log_client_middleware.rb +8 -0
  52. data/app/middleware/workarea/audit_log_server_middleware.rb +14 -0
  53. data/app/middleware/workarea/enforce_host_middleware.rb +39 -0
  54. data/app/middleware/workarea/i18n_client_middleware.rb +8 -0
  55. data/app/middleware/workarea/i18n_server_middleware.rb +11 -0
  56. data/app/middleware/workarea/rack_cache_config_middleware.rb +19 -0
  57. data/app/middleware/workarea/release_server_middleware.rb +11 -0
  58. data/app/middleware/workarea/skip_rack_cache_middleware.rb +19 -0
  59. data/app/middleware/workarea/strip_http_caching_middleware.rb +23 -0
  60. data/app/models/workarea/address.rb +149 -0
  61. data/app/models/workarea/application_document.rb +75 -0
  62. data/app/models/workarea/bulk_action.rb +82 -0
  63. data/app/models/workarea/bulk_action/deletion.rb +11 -0
  64. data/app/models/workarea/bulk_action/product_edit.rb +83 -0
  65. data/app/models/workarea/bulk_action/sequential_product_edit.rb +21 -0
  66. data/app/models/workarea/calculate_percent_change.rb +8 -0
  67. data/app/models/workarea/catalog/category.rb +31 -0
  68. data/app/models/workarea/catalog/clean_details.rb +18 -0
  69. data/app/models/workarea/catalog/customizations.rb +81 -0
  70. data/app/models/workarea/catalog/details_queries.rb +57 -0
  71. data/app/models/workarea/catalog/product.rb +154 -0
  72. data/app/models/workarea/catalog/product_image.rb +59 -0
  73. data/app/models/workarea/catalog/product_placeholder_image.rb +57 -0
  74. data/app/models/workarea/catalog/product_positions.rb +40 -0
  75. data/app/models/workarea/catalog/variant.rb +26 -0
  76. data/app/models/workarea/checkout.rb +234 -0
  77. data/app/models/workarea/checkout/auto_complete.rb +74 -0
  78. data/app/models/workarea/checkout/collect_payment.rb +40 -0
  79. data/app/models/workarea/checkout/credit_card_params.rb +54 -0
  80. data/app/models/workarea/checkout/shipping_options.rb +99 -0
  81. data/app/models/workarea/checkout/steps/addresses.rb +102 -0
  82. data/app/models/workarea/checkout/steps/base.rb +35 -0
  83. data/app/models/workarea/checkout/steps/payment.rb +71 -0
  84. data/app/models/workarea/checkout/steps/shipping.rb +82 -0
  85. data/app/models/workarea/comment.rb +15 -0
  86. data/app/models/workarea/commentable.rb +35 -0
  87. data/app/models/workarea/content.rb +231 -0
  88. data/app/models/workarea/content/asset.rb +162 -0
  89. data/app/models/workarea/content/asset_lookup.rb +14 -0
  90. data/app/models/workarea/content/block.rb +157 -0
  91. data/app/models/workarea/content/block_draft.rb +36 -0
  92. data/app/models/workarea/content/block_name.rb +45 -0
  93. data/app/models/workarea/content/block_type.rb +195 -0
  94. data/app/models/workarea/content/block_type_definition.rb +16 -0
  95. data/app/models/workarea/content/email.rb +31 -0
  96. data/app/models/workarea/content/field.rb +49 -0
  97. data/app/models/workarea/content/fields/asset.rb +15 -0
  98. data/app/models/workarea/content/fields/boolean.rb +11 -0
  99. data/app/models/workarea/content/fields/breakpoints.rb +11 -0
  100. data/app/models/workarea/content/fields/category.rb +8 -0
  101. data/app/models/workarea/content/fields/color.rb +11 -0
  102. data/app/models/workarea/content/fields/integer.rb +11 -0
  103. data/app/models/workarea/content/fields/options.rb +11 -0
  104. data/app/models/workarea/content/fields/products.rb +11 -0
  105. data/app/models/workarea/content/fields/range.rb +23 -0
  106. data/app/models/workarea/content/fields/string.rb +11 -0
  107. data/app/models/workarea/content/fields/taxonomy.rb +8 -0
  108. data/app/models/workarea/content/fields/text.rb +8 -0
  109. data/app/models/workarea/content/fields/url.rb +8 -0
  110. data/app/models/workarea/content/fieldset.rb +31 -0
  111. data/app/models/workarea/content/page.rb +18 -0
  112. data/app/models/workarea/content/preset.rb +66 -0
  113. data/app/models/workarea/contentable.rb +9 -0
  114. data/app/models/workarea/data_file/csv.rb +161 -0
  115. data/app/models/workarea/data_file/csv_fields.rb +82 -0
  116. data/app/models/workarea/data_file/export.rb +38 -0
  117. data/app/models/workarea/data_file/format.rb +85 -0
  118. data/app/models/workarea/data_file/import.rb +82 -0
  119. data/app/models/workarea/data_file/json.rb +56 -0
  120. data/app/models/workarea/data_file/operation.rb +71 -0
  121. data/app/models/workarea/data_file/tax_import.rb +33 -0
  122. data/app/models/workarea/data_file/tax_rates.rb +58 -0
  123. data/app/models/workarea/data_file/unknown_format_error.rb +5 -0
  124. data/app/models/workarea/details.rb +111 -0
  125. data/app/models/workarea/discount_ids.rb +34 -0
  126. data/app/models/workarea/email.rb +21 -0
  127. data/app/models/workarea/email/signup.rb +18 -0
  128. data/app/models/workarea/featured_products.rb +39 -0
  129. data/app/models/workarea/fulfillment.rb +166 -0
  130. data/app/models/workarea/fulfillment/event.rb +14 -0
  131. data/app/models/workarea/fulfillment/item.rb +27 -0
  132. data/app/models/workarea/fulfillment/package.rb +46 -0
  133. data/app/models/workarea/fulfillment/status.rb +55 -0
  134. data/app/models/workarea/guard_negative_price.rb +6 -0
  135. data/app/models/workarea/help/article.rb +71 -0
  136. data/app/models/workarea/help/asset.rb +26 -0
  137. data/app/models/workarea/inquiry.rb +30 -0
  138. data/app/models/workarea/insights/base.rb +66 -0
  139. data/app/models/workarea/insights/best_customers.rb +30 -0
  140. data/app/models/workarea/insights/best_full_price_customers.rb +31 -0
  141. data/app/models/workarea/insights/cold_products.rb +49 -0
  142. data/app/models/workarea/insights/cold_searches.rb +49 -0
  143. data/app/models/workarea/insights/customer_acquisition.rb +62 -0
  144. data/app/models/workarea/insights/customers_at_risk.rb +26 -0
  145. data/app/models/workarea/insights/hot_products.rb +49 -0
  146. data/app/models/workarea/insights/hot_searches.rb +49 -0
  147. data/app/models/workarea/insights/low_aov_customers.rb +27 -0
  148. data/app/models/workarea/insights/most_discount_given.rb +52 -0
  149. data/app/models/workarea/insights/most_discounted_products.rb +25 -0
  150. data/app/models/workarea/insights/new_products.rb +33 -0
  151. data/app/models/workarea/insights/non_sellers.rb +25 -0
  152. data/app/models/workarea/insights/popular_searches.rb +29 -0
  153. data/app/models/workarea/insights/popular_searches_without_results.rb +30 -0
  154. data/app/models/workarea/insights/products_purchased_together.rb +30 -0
  155. data/app/models/workarea/insights/products_to_improve.rb +44 -0
  156. data/app/models/workarea/insights/promising_products.rb +47 -0
  157. data/app/models/workarea/insights/release_reminder.rb +20 -0
  158. data/app/models/workarea/insights/repeat_purchase_rate.rb +38 -0
  159. data/app/models/workarea/insights/sales_by_navigation.rb +50 -0
  160. data/app/models/workarea/insights/searches_to_improve.rb +44 -0
  161. data/app/models/workarea/insights/star_products.rb +30 -0
  162. data/app/models/workarea/insights/star_searches.rb +30 -0
  163. data/app/models/workarea/insights/top_categories.rb +51 -0
  164. data/app/models/workarea/insights/top_discounts.rb +51 -0
  165. data/app/models/workarea/insights/top_products.rb +51 -0
  166. data/app/models/workarea/insights/trending_products.rb +69 -0
  167. data/app/models/workarea/insights/trending_searches.rb +69 -0
  168. data/app/models/workarea/insights/upcoming_releases.rb +20 -0
  169. data/app/models/workarea/invalid_display.rb +3 -0
  170. data/app/models/workarea/inventory.rb +72 -0
  171. data/app/models/workarea/inventory/capture.rb +100 -0
  172. data/app/models/workarea/inventory/collection.rb +50 -0
  173. data/app/models/workarea/inventory/policies/allow_backorder.rb +38 -0
  174. data/app/models/workarea/inventory/policies/base.rb +44 -0
  175. data/app/models/workarea/inventory/policies/displayable_when_out_of_stock.rb +11 -0
  176. data/app/models/workarea/inventory/policies/ignore.rb +20 -0
  177. data/app/models/workarea/inventory/policies/standard.rb +23 -0
  178. data/app/models/workarea/inventory/sku.rb +158 -0
  179. data/app/models/workarea/inventory/transaction.rb +102 -0
  180. data/app/models/workarea/inventory/transaction_item.rb +19 -0
  181. data/app/models/workarea/inventory/unit_of_work.rb +81 -0
  182. data/app/models/workarea/lock.rb +75 -0
  183. data/app/models/workarea/lockable.rb +58 -0
  184. data/app/models/workarea/metrics/by_day.rb +59 -0
  185. data/app/models/workarea/metrics/by_week.rb +36 -0
  186. data/app/models/workarea/metrics/calculate_percentiles.rb +42 -0
  187. data/app/models/workarea/metrics/category_by_day.rb +21 -0
  188. data/app/models/workarea/metrics/country_by_day.rb +20 -0
  189. data/app/models/workarea/metrics/discount_by_day.rb +17 -0
  190. data/app/models/workarea/metrics/menu_by_day.rb +21 -0
  191. data/app/models/workarea/metrics/product_by_day.rb +22 -0
  192. data/app/models/workarea/metrics/product_by_week.rb +32 -0
  193. data/app/models/workarea/metrics/product_for_last_week.rb +185 -0
  194. data/app/models/workarea/metrics/revenue_change.rb +39 -0
  195. data/app/models/workarea/metrics/sales_by_day.rb +20 -0
  196. data/app/models/workarea/metrics/scoring.rb +30 -0
  197. data/app/models/workarea/metrics/search_by_day.rb +35 -0
  198. data/app/models/workarea/metrics/search_by_week.rb +36 -0
  199. data/app/models/workarea/metrics/search_for_last_week.rb +192 -0
  200. data/app/models/workarea/metrics/sku_by_day.rb +19 -0
  201. data/app/models/workarea/metrics/traffic_referrer_by_day.rb +20 -0
  202. data/app/models/workarea/metrics/user.rb +128 -0
  203. data/app/models/workarea/navigable.rb +46 -0
  204. data/app/models/workarea/navigation/breadcrumbs.rb +58 -0
  205. data/app/models/workarea/navigation/menu.rb +30 -0
  206. data/app/models/workarea/navigation/redirect.rb +61 -0
  207. data/app/models/workarea/navigation/search_results.rb +49 -0
  208. data/app/models/workarea/navigation/taxon.rb +150 -0
  209. data/app/models/workarea/navigation/taxon_cache.rb +43 -0
  210. data/app/models/workarea/normalize_email.rb +13 -0
  211. data/app/models/workarea/order.rb +335 -0
  212. data/app/models/workarea/order/item.rb +139 -0
  213. data/app/models/workarea/order/items_extension.rb +14 -0
  214. data/app/models/workarea/order/queries.rb +200 -0
  215. data/app/models/workarea/order/status.rb +48 -0
  216. data/app/models/workarea/ordering.rb +47 -0
  217. data/app/models/workarea/payment.rb +179 -0
  218. data/app/models/workarea/payment/address.rb +9 -0
  219. data/app/models/workarea/payment/authorize/credit_card.rb +42 -0
  220. data/app/models/workarea/payment/authorize/store_credit.rb +43 -0
  221. data/app/models/workarea/payment/capture.rb +43 -0
  222. data/app/models/workarea/payment/capture/credit_card.rb +25 -0
  223. data/app/models/workarea/payment/capture/store_credit.rb +25 -0
  224. data/app/models/workarea/payment/credit_card.rb +120 -0
  225. data/app/models/workarea/payment/credit_card_operation.rb +20 -0
  226. data/app/models/workarea/payment/insufficient_funds.rb +5 -0
  227. data/app/models/workarea/payment/operation.rb +50 -0
  228. data/app/models/workarea/payment/operation_implementation.rb +24 -0
  229. data/app/models/workarea/payment/processing.rb +102 -0
  230. data/app/models/workarea/payment/profile.rb +59 -0
  231. data/app/models/workarea/payment/purchase/credit_card.rb +42 -0
  232. data/app/models/workarea/payment/purchase/store_credit.rb +7 -0
  233. data/app/models/workarea/payment/refund.rb +44 -0
  234. data/app/models/workarea/payment/refund/credit_card.rb +25 -0
  235. data/app/models/workarea/payment/refund/store_credit.rb +35 -0
  236. data/app/models/workarea/payment/saved_credit_card.rb +43 -0
  237. data/app/models/workarea/payment/status.rb +74 -0
  238. data/app/models/workarea/payment/store_credit_card.rb +34 -0
  239. data/app/models/workarea/payment/tender.rb +80 -0
  240. data/app/models/workarea/payment/tender/credit_card.rb +49 -0
  241. data/app/models/workarea/payment/tender/store_credit.rb +27 -0
  242. data/app/models/workarea/payment/transaction.rb +148 -0
  243. data/app/models/workarea/payment_reference.rb +18 -0
  244. data/app/models/workarea/price_adjustment.rb +46 -0
  245. data/app/models/workarea/price_adjustment_extension.rb +19 -0
  246. data/app/models/workarea/price_adjustment_set.rb +69 -0
  247. data/app/models/workarea/pricing.rb +56 -0
  248. data/app/models/workarea/pricing/cache_key.rb +51 -0
  249. data/app/models/workarea/pricing/calculator.rb +37 -0
  250. data/app/models/workarea/pricing/calculators/customizations_calculator.rb +33 -0
  251. data/app/models/workarea/pricing/calculators/discount_calculator.rb +38 -0
  252. data/app/models/workarea/pricing/calculators/item_calculator.rb +28 -0
  253. data/app/models/workarea/pricing/calculators/overrides_calculator.rb +105 -0
  254. data/app/models/workarea/pricing/calculators/tax_calculator.rb +29 -0
  255. data/app/models/workarea/pricing/collection.rb +84 -0
  256. data/app/models/workarea/pricing/discount.rb +370 -0
  257. data/app/models/workarea/pricing/discount/amount_calculator.rb +57 -0
  258. data/app/models/workarea/pricing/discount/application_group.rb +126 -0
  259. data/app/models/workarea/pricing/discount/buy_some_get_some.rb +120 -0
  260. data/app/models/workarea/pricing/discount/buy_some_get_some/item_application.rb +65 -0
  261. data/app/models/workarea/pricing/discount/buy_some_get_some/order_items_by_product.rb +38 -0
  262. data/app/models/workarea/pricing/discount/buy_some_get_some/product_application.rb +83 -0
  263. data/app/models/workarea/pricing/discount/category.rb +59 -0
  264. data/app/models/workarea/pricing/discount/code_list.rb +100 -0
  265. data/app/models/workarea/pricing/discount/collection.rb +61 -0
  266. data/app/models/workarea/pricing/discount/conditions/item_quantity.rb +42 -0
  267. data/app/models/workarea/pricing/discount/conditions/order_total.rb +53 -0
  268. data/app/models/workarea/pricing/discount/conditions/promo_codes.rb +78 -0
  269. data/app/models/workarea/pricing/discount/conditions/user_tags.rb +36 -0
  270. data/app/models/workarea/pricing/discount/flat_or_percent_off.rb +47 -0
  271. data/app/models/workarea/pricing/discount/free_gift.rb +136 -0
  272. data/app/models/workarea/pricing/discount/generated_promo_code.rb +96 -0
  273. data/app/models/workarea/pricing/discount/order.rb +104 -0
  274. data/app/models/workarea/pricing/discount/order_total.rb +52 -0
  275. data/app/models/workarea/pricing/discount/product.rb +60 -0
  276. data/app/models/workarea/pricing/discount/product_attribute.rb +65 -0
  277. data/app/models/workarea/pricing/discount/product_attribute/item_qualifier.rb +52 -0
  278. data/app/models/workarea/pricing/discount/quantity_fixed_price.rb +102 -0
  279. data/app/models/workarea/pricing/discount/quantity_fixed_price/application_calculator.rb +57 -0
  280. data/app/models/workarea/pricing/discount/quantity_fixed_price/item_shares.rb +64 -0
  281. data/app/models/workarea/pricing/discount/reconcile_total.rb +39 -0
  282. data/app/models/workarea/pricing/discount/redemption.rb +33 -0
  283. data/app/models/workarea/pricing/discount/shipping.rb +80 -0
  284. data/app/models/workarea/pricing/order_totals.rb +56 -0
  285. data/app/models/workarea/pricing/override.rb +36 -0
  286. data/app/models/workarea/pricing/price.rb +52 -0
  287. data/app/models/workarea/pricing/price_distributor.rb +88 -0
  288. data/app/models/workarea/pricing/request.rb +146 -0
  289. data/app/models/workarea/pricing/shipping_totals.rb +27 -0
  290. data/app/models/workarea/pricing/sku.rb +88 -0
  291. data/app/models/workarea/pricing/tax_applier.rb +90 -0
  292. data/app/models/workarea/product_list.rb +11 -0
  293. data/app/models/workarea/product_rule.rb +139 -0
  294. data/app/models/workarea/query_string.rb +58 -0
  295. data/app/models/workarea/recommendation/product_predictor.rb +10 -0
  296. data/app/models/workarea/recommendation/search_predictor.rb +10 -0
  297. data/app/models/workarea/recommendation/settings.rb +24 -0
  298. data/app/models/workarea/recommendation/user_activity.rb +53 -0
  299. data/app/models/workarea/releasable.rb +171 -0
  300. data/app/models/workarea/release.rb +232 -0
  301. data/app/models/workarea/release/changeset.rb +137 -0
  302. data/app/models/workarea/release/status.rb +52 -0
  303. data/app/models/workarea/release_session.rb +45 -0
  304. data/app/models/workarea/reports/export.rb +62 -0
  305. data/app/models/workarea/search/admin.rb +133 -0
  306. data/app/models/workarea/search/admin/catalog_category.rb +67 -0
  307. data/app/models/workarea/search/admin/catalog_product.rb +98 -0
  308. data/app/models/workarea/search/admin/content.rb +37 -0
  309. data/app/models/workarea/search/admin/content_asset.rb +46 -0
  310. data/app/models/workarea/search/admin/content_page.rb +25 -0
  311. data/app/models/workarea/search/admin/inventory_sku.rb +27 -0
  312. data/app/models/workarea/search/admin/navigation.rb +50 -0
  313. data/app/models/workarea/search/admin/navigation_menu.rb +13 -0
  314. data/app/models/workarea/search/admin/order.rb +74 -0
  315. data/app/models/workarea/search/admin/payment_transaction.rb +68 -0
  316. data/app/models/workarea/search/admin/pricing_discount.rb +37 -0
  317. data/app/models/workarea/search/admin/pricing_sku.rb +25 -0
  318. data/app/models/workarea/search/admin/releasable.rb +41 -0
  319. data/app/models/workarea/search/admin/release.rb +38 -0
  320. data/app/models/workarea/search/admin/user.rb +59 -0
  321. data/app/models/workarea/search/customization.rb +81 -0
  322. data/app/models/workarea/search/facet_values.rb +16 -0
  323. data/app/models/workarea/search/hash_text.rb +32 -0
  324. data/app/models/workarea/search/help.rb +17 -0
  325. data/app/models/workarea/search/order_text.rb +75 -0
  326. data/app/models/workarea/search/settings.rb +79 -0
  327. data/app/models/workarea/search/storefront.rb +101 -0
  328. data/app/models/workarea/search/storefront/category.rb +19 -0
  329. data/app/models/workarea/search/storefront/page.rb +19 -0
  330. data/app/models/workarea/search/storefront/product.rb +133 -0
  331. data/app/models/workarea/search/storefront/product/analytics.rb +26 -0
  332. data/app/models/workarea/search/storefront/product/categories.rb +86 -0
  333. data/app/models/workarea/search/storefront/product/facets.rb +62 -0
  334. data/app/models/workarea/search/storefront/product/inventory.rb +34 -0
  335. data/app/models/workarea/search/storefront/product/pricing.rb +56 -0
  336. data/app/models/workarea/search/storefront/product/sorting.rb +25 -0
  337. data/app/models/workarea/search/storefront/product/text.rb +71 -0
  338. data/app/models/workarea/search/storefront/search.rb +27 -0
  339. data/app/models/workarea/search/user_text.rb +45 -0
  340. data/app/models/workarea/shipping.rb +176 -0
  341. data/app/models/workarea/shipping/address.rb +22 -0
  342. data/app/models/workarea/shipping/location_query.rb +49 -0
  343. data/app/models/workarea/shipping/rate.rb +19 -0
  344. data/app/models/workarea/shipping/rate_lookup.rb +55 -0
  345. data/app/models/workarea/shipping/service.rb +89 -0
  346. data/app/models/workarea/shipping/service_selection.rb +15 -0
  347. data/app/models/workarea/shipping/sku.rb +35 -0
  348. data/app/models/workarea/shipping_option.rb +53 -0
  349. data/app/models/workarea/sort.rb +153 -0
  350. data/app/models/workarea/status_calculator.rb +40 -0
  351. data/app/models/workarea/tax.rb +29 -0
  352. data/app/models/workarea/tax/category.rb +48 -0
  353. data/app/models/workarea/tax/rate.rb +30 -0
  354. data/app/models/workarea/tax/rate_lookup.rb +107 -0
  355. data/app/models/workarea/traffic_referrer.rb +9 -0
  356. data/app/models/workarea/user.rb +90 -0
  357. data/app/models/workarea/user/addresses.rb +51 -0
  358. data/app/models/workarea/user/admin_bookmark.rb +40 -0
  359. data/app/models/workarea/user/admin_visit.rb +39 -0
  360. data/app/models/workarea/user/authorization.rb +72 -0
  361. data/app/models/workarea/user/avatar.rb +32 -0
  362. data/app/models/workarea/user/login.rb +76 -0
  363. data/app/models/workarea/user/password_reset.rb +37 -0
  364. data/app/models/workarea/user/passwords.rb +67 -0
  365. data/app/models/workarea/user/recent_password.rb +27 -0
  366. data/app/models/workarea/user/saved_address.rb +13 -0
  367. data/app/models/workarea/user/system_users.rb +30 -0
  368. data/app/queries/workarea/admin_query_operation.rb +58 -0
  369. data/app/queries/workarea/admin_search_query_wrapper.rb +68 -0
  370. data/app/queries/workarea/alerts.rb +82 -0
  371. data/app/queries/workarea/bulk_action_selections.rb +39 -0
  372. data/app/queries/workarea/categorization.rb +63 -0
  373. data/app/queries/workarea/extract_content_block_text.rb +33 -0
  374. data/app/queries/workarea/find_pipeline_asset.rb +30 -0
  375. data/app/queries/workarea/find_taxonomy_slug.rb +24 -0
  376. data/app/queries/workarea/find_unique_slug.rb +35 -0
  377. data/app/queries/workarea/metadata.rb +56 -0
  378. data/app/queries/workarea/metadata/catalog_category.rb +45 -0
  379. data/app/queries/workarea/metadata/content_page.rb +37 -0
  380. data/app/queries/workarea/metadata/home_page.rb +48 -0
  381. data/app/queries/workarea/order_item_details.rb +55 -0
  382. data/app/queries/workarea/order_metrics.rb +203 -0
  383. data/app/queries/workarea/pricing_override_params.rb +31 -0
  384. data/app/queries/workarea/product_primary_image_url.rb +34 -0
  385. data/app/queries/workarea/product_primary_navigation.rb +41 -0
  386. data/app/queries/workarea/recommendation/order_based.rb +48 -0
  387. data/app/queries/workarea/recommendation/product_based.rb +47 -0
  388. data/app/queries/workarea/recommendation/searches.rb +21 -0
  389. data/app/queries/workarea/recommendation/user_activity_based.rb +40 -0
  390. data/app/queries/workarea/reports/average_order_value.rb +44 -0
  391. data/app/queries/workarea/reports/customers.rb +46 -0
  392. data/app/queries/workarea/reports/first_time_vs_returning_sales.rb +59 -0
  393. data/app/queries/workarea/reports/group_by_time.rb +84 -0
  394. data/app/queries/workarea/reports/low_inventory.rb +36 -0
  395. data/app/queries/workarea/reports/report.rb +83 -0
  396. data/app/queries/workarea/reports/sales_by_category.rb +51 -0
  397. data/app/queries/workarea/reports/sales_by_country.rb +56 -0
  398. data/app/queries/workarea/reports/sales_by_discount.rb +47 -0
  399. data/app/queries/workarea/reports/sales_by_menu.rb +51 -0
  400. data/app/queries/workarea/reports/sales_by_product.rb +54 -0
  401. data/app/queries/workarea/reports/sales_by_sku.rb +61 -0
  402. data/app/queries/workarea/reports/sales_by_traffic_referrer.rb +64 -0
  403. data/app/queries/workarea/reports/sales_over_time.rb +73 -0
  404. data/app/queries/workarea/reports/searches.rb +65 -0
  405. data/app/queries/workarea/reports/searches_over_time.rb +37 -0
  406. data/app/queries/workarea/reports/searches_without_results_over_time.rb +38 -0
  407. data/app/queries/workarea/search/admin_assets.rb +23 -0
  408. data/app/queries/workarea/search/admin_categories.rb +20 -0
  409. data/app/queries/workarea/search/admin_discounts.rb +30 -0
  410. data/app/queries/workarea/search/admin_index_search.rb +127 -0
  411. data/app/queries/workarea/search/admin_inventory_skus.rb +20 -0
  412. data/app/queries/workarea/search/admin_orders.rb +49 -0
  413. data/app/queries/workarea/search/admin_pages.rb +16 -0
  414. data/app/queries/workarea/search/admin_payment_transactions.rb +24 -0
  415. data/app/queries/workarea/search/admin_pricing_skus.rb +16 -0
  416. data/app/queries/workarea/search/admin_product_rules_preview.rb +10 -0
  417. data/app/queries/workarea/search/admin_products.rb +39 -0
  418. data/app/queries/workarea/search/admin_releasables.rb +18 -0
  419. data/app/queries/workarea/search/admin_releases.rb +38 -0
  420. data/app/queries/workarea/search/admin_search.rb +16 -0
  421. data/app/queries/workarea/search/admin_sorting.rb +38 -0
  422. data/app/queries/workarea/search/admin_users.rb +39 -0
  423. data/app/queries/workarea/search/categorization.rb +14 -0
  424. data/app/queries/workarea/search/categorization_filtering.rb +38 -0
  425. data/app/queries/workarea/search/category_browse.rb +119 -0
  426. data/app/queries/workarea/search/date_filter.rb +49 -0
  427. data/app/queries/workarea/search/facet.rb +71 -0
  428. data/app/queries/workarea/search/facet_matches.rb +39 -0
  429. data/app/queries/workarea/search/facet_sorting.rb +67 -0
  430. data/app/queries/workarea/search/facet_sorting/size.rb +15 -0
  431. data/app/queries/workarea/search/facets.rb +29 -0
  432. data/app/queries/workarea/search/filter.rb +70 -0
  433. data/app/queries/workarea/search/help_search.rb +58 -0
  434. data/app/queries/workarea/search/load_product_results.rb +36 -0
  435. data/app/queries/workarea/search/pagination.rb +46 -0
  436. data/app/queries/workarea/search/product_display_rules.rb +68 -0
  437. data/app/queries/workarea/search/product_entries.rb +24 -0
  438. data/app/queries/workarea/search/product_rules.rb +122 -0
  439. data/app/queries/workarea/search/product_rules_filtering.rb +14 -0
  440. data/app/queries/workarea/search/product_search.rb +218 -0
  441. data/app/queries/workarea/search/query.rb +131 -0
  442. data/app/queries/workarea/search/query_suggestions.rb +71 -0
  443. data/app/queries/workarea/search/range_facet.rb +60 -0
  444. data/app/queries/workarea/search/range_filter.rb +25 -0
  445. data/app/queries/workarea/search/range_parameter.rb +71 -0
  446. data/app/queries/workarea/search/related_help.rb +58 -0
  447. data/app/queries/workarea/search/related_products.rb +96 -0
  448. data/app/queries/workarea/search/search_suggestions.rb +43 -0
  449. data/app/queries/workarea/search/storefront_search.rb +51 -0
  450. data/app/queries/workarea/search/storefront_search/exact_matches.rb +34 -0
  451. data/app/queries/workarea/search/storefront_search/middleware.rb +26 -0
  452. data/app/queries/workarea/search/storefront_search/product_auto_redirect.rb +19 -0
  453. data/app/queries/workarea/search/storefront_search/product_multipass.rb +50 -0
  454. data/app/queries/workarea/search/storefront_search/redirect.rb +17 -0
  455. data/app/queries/workarea/search/storefront_search/response.rb +72 -0
  456. data/app/queries/workarea/search/storefront_search/spelling_correction.rb +31 -0
  457. data/app/queries/workarea/search/storefront_search/template.rb +17 -0
  458. data/app/queries/workarea/search/term_filter.rb +10 -0
  459. data/app/queries/workarea/search/terms_facet.rb +62 -0
  460. data/app/queries/workarea/taxonomy_sitemap.rb +34 -0
  461. data/app/seeds/workarea/admins_seeds.rb +53 -0
  462. data/app/seeds/workarea/assets_seeds.rb +23 -0
  463. data/app/seeds/workarea/browse_navigation_seeds.rb +30 -0
  464. data/app/seeds/workarea/browsing_pages_seeds.rb +33 -0
  465. data/app/seeds/workarea/categories_seeds.rb +50 -0
  466. data/app/seeds/workarea/customer_service_navigation_seeds.rb +16 -0
  467. data/app/seeds/workarea/customer_service_pages_seeds.rb +33 -0
  468. data/app/seeds/workarea/customers_seeds.rb +24 -0
  469. data/app/seeds/workarea/discounts_seeds.rb +79 -0
  470. data/app/seeds/workarea/dynamic_content_seeds.rb +62 -0
  471. data/app/seeds/workarea/email_content_seeds.rb +11 -0
  472. data/app/seeds/workarea/help_seeds.rb +65 -0
  473. data/app/seeds/workarea/inquiries_seeds.rb +15 -0
  474. data/app/seeds/workarea/insights_seeds.rb +65 -0
  475. data/app/seeds/workarea/orders_seeds.rb +113 -0
  476. data/app/seeds/workarea/products_seeds.rb +104 -0
  477. data/app/seeds/workarea/search_settings_seeds.rb +31 -0
  478. data/app/seeds/workarea/shipping_services_seeds.rb +61 -0
  479. data/app/seeds/workarea/system_content_seeds.rb +90 -0
  480. data/app/seeds/workarea/tax_seeds.rb +33 -0
  481. data/app/services/workarea/add_multiple_cart_items.rb +21 -0
  482. data/app/services/workarea/add_multiple_cart_items/item.rb +79 -0
  483. data/app/services/workarea/cancel_order.rb +68 -0
  484. data/app/services/workarea/cart_cleaner.rb +59 -0
  485. data/app/services/workarea/clean_range_facets.rb +38 -0
  486. data/app/services/workarea/copy_order.rb +73 -0
  487. data/app/services/workarea/copy_product.rb +27 -0
  488. data/app/services/workarea/create_fulfillment.rb +24 -0
  489. data/app/services/workarea/direct_upload.rb +77 -0
  490. data/app/services/workarea/direct_upload/asset.rb +14 -0
  491. data/app/services/workarea/direct_upload/processor.rb +20 -0
  492. data/app/services/workarea/direct_upload/product_image.rb +42 -0
  493. data/app/services/workarea/export_report.rb +88 -0
  494. data/app/services/workarea/hash_update.rb +32 -0
  495. data/app/services/workarea/inventory_adjustment.rb +45 -0
  496. data/app/services/workarea/login.rb +39 -0
  497. data/app/services/workarea/new_discount.rb +17 -0
  498. data/app/services/workarea/order_merge.rb +34 -0
  499. data/app/services/workarea/packaging.rb +103 -0
  500. data/app/services/workarea/save_publishing.rb +34 -0
  501. data/app/services/workarea/save_taxonomy.rb +39 -0
  502. data/app/services/workarea/set_navigable.rb +71 -0
  503. data/app/services/workarea/sort_navigation_menus_by_orders.rb +32 -0
  504. data/app/services/workarea/tag_update.rb +15 -0
  505. data/app/view_models/workarea/application_view_model.rb +72 -0
  506. data/app/view_models/workarea/shipping_carrier_view_model.rb +24 -0
  507. data/app/workers/sidekiq/callbacks.rb +242 -0
  508. data/app/workers/sidekiq/callbacks_worker.rb +73 -0
  509. data/app/workers/workarea/bulk_index_admin.rb +34 -0
  510. data/app/workers/workarea/bulk_index_products.rb +28 -0
  511. data/app/workers/workarea/bulk_index_searches.rb +33 -0
  512. data/app/workers/workarea/bust_discount_cache.rb +16 -0
  513. data/app/workers/workarea/bust_navigation_cache.rb +18 -0
  514. data/app/workers/workarea/bust_sku_cache.rb +16 -0
  515. data/app/workers/workarea/clean_inventory_transactions.rb +9 -0
  516. data/app/workers/workarea/clean_orders.rb +10 -0
  517. data/app/workers/workarea/clean_product_recommendations.rb +13 -0
  518. data/app/workers/workarea/clean_user_activity.rb +11 -0
  519. data/app/workers/workarea/deactivate_stale_discounts.rb +38 -0
  520. data/app/workers/workarea/generate_content_metadata.rb +17 -0
  521. data/app/workers/workarea/generate_insights.rb +37 -0
  522. data/app/workers/workarea/generate_promo_codes.rb +12 -0
  523. data/app/workers/workarea/index_admin_search.rb +40 -0
  524. data/app/workers/workarea/index_categorization.rb +24 -0
  525. data/app/workers/workarea/index_category.rb +20 -0
  526. data/app/workers/workarea/index_category_changes.rb +40 -0
  527. data/app/workers/workarea/index_fulfillment_changes.rb +16 -0
  528. data/app/workers/workarea/index_help.rb +18 -0
  529. data/app/workers/workarea/index_page.rb +20 -0
  530. data/app/workers/workarea/index_payment_transactions.rb +23 -0
  531. data/app/workers/workarea/index_product.rb +26 -0
  532. data/app/workers/workarea/index_product_children.rb +20 -0
  533. data/app/workers/workarea/index_product_rule.rb +22 -0
  534. data/app/workers/workarea/index_search_customizations.rb +18 -0
  535. data/app/workers/workarea/index_skus.rb +20 -0
  536. data/app/workers/workarea/keep_product_index_fresh.rb +32 -0
  537. data/app/workers/workarea/mark_discounts_as_redeemed.rb +30 -0
  538. data/app/workers/workarea/order_reminder.rb +16 -0
  539. data/app/workers/workarea/process_direct_upload.rb +10 -0
  540. data/app/workers/workarea/process_export.rb +21 -0
  541. data/app/workers/workarea/process_import.rb +29 -0
  542. data/app/workers/workarea/process_product_recommendations.rb +31 -0
  543. data/app/workers/workarea/process_reports_export.rb +20 -0
  544. data/app/workers/workarea/process_search_recommendations.rb +35 -0
  545. data/app/workers/workarea/publish_bulk_action.rb +14 -0
  546. data/app/workers/workarea/publish_release.rb +15 -0
  547. data/app/workers/workarea/redirect_navigable_slugs.rb +51 -0
  548. data/app/workers/workarea/save_order_metrics.rb +105 -0
  549. data/app/workers/workarea/save_user_order_details.rb +72 -0
  550. data/app/workers/workarea/send_refund_email.rb +17 -0
  551. data/app/workers/workarea/status_reporter.rb +12 -0
  552. data/app/workers/workarea/undo_release.rb +15 -0
  553. data/app/workers/workarea/update_elasticsearch_settings.rb +28 -0
  554. data/app/workers/workarea/update_payment_profile_email.rb +22 -0
  555. data/app/workers/workarea/verify_scheduled_releases.rb +35 -0
  556. data/bin/rails +18 -0
  557. data/config/i18n-js.yml +2 -0
  558. data/config/initializers/00_mongoid.rb +2 -0
  559. data/config/initializers/01_eager_load.rb +1 -0
  560. data/config/initializers/02_assets.rb +17 -0
  561. data/config/initializers/03_js_routes.rb +3 -0
  562. data/config/initializers/04_sidekiq.rb +1 -0
  563. data/config/initializers/05_scheduled_jobs.rb +92 -0
  564. data/config/initializers/06_predictor.rb +1 -0
  565. data/config/initializers/07_dragonfly.rb +117 -0
  566. data/config/initializers/08_inflections.rb +3 -0
  567. data/config/initializers/09_geocoder.rb +15 -0
  568. data/config/initializers/10_rack_middleware.rb +29 -0
  569. data/config/initializers/11_payment.rb +8 -0
  570. data/config/initializers/12_filter_parameters.rb +13 -0
  571. data/config/initializers/13_rack_attack.rb +178 -0
  572. data/config/initializers/14_content_block_types.rb +240 -0
  573. data/config/initializers/15_endpoint_monitoring.rb +41 -0
  574. data/config/initializers/16_turbolinks.rb +1 -0
  575. data/config/initializers/17_audit_log.rb +1 -0
  576. data/config/initializers/18_time_formats.rb +11 -0
  577. data/config/initializers/19_mailer_previews.rb +20 -0
  578. data/config/initializers/20_i18n_js.rb +3 -0
  579. data/config/initializers/20_mail_interceptor.rb +1 -0
  580. data/config/initializers/21_premailer.rb +3 -0
  581. data/config/initializers/21_serviceworkers.rb +16 -0
  582. data/config/initializers/22_session_store.rb +11 -0
  583. data/config/initializers/23_chartkick.rb +3 -0
  584. data/config/locales/en.yml +168 -0
  585. data/config/routes.rb +13 -0
  586. data/data/content_assets/100x100.png +0 -0
  587. data/data/content_assets/960x470_dark.png +0 -0
  588. data/data/content_assets/960x470_light.png +0 -0
  589. data/data/help/howto/add_help_articles/body.md +50 -0
  590. data/data/help/howto/add_help_articles/summary.md +1 -0
  591. data/lib/generators/workarea/content_block_type/USAGE +16 -0
  592. data/lib/generators/workarea/content_block_type/content_block_type_generator.rb +71 -0
  593. data/lib/generators/workarea/content_block_type/templates/block.svg +1 -0
  594. data/lib/generators/workarea/content_block_type/templates/initializer.rb +3 -0
  595. data/lib/generators/workarea/content_block_type/templates/storefront_view.html.haml.erb +4 -0
  596. data/lib/generators/workarea/content_block_type/templates/stylesheet.scss.erb +7 -0
  597. data/lib/generators/workarea/content_block_type/templates/view_model.rb.erb +16 -0
  598. data/lib/generators/workarea/decorator/USAGE +15 -0
  599. data/lib/generators/workarea/decorator/decorator_generator.rb +79 -0
  600. data/lib/generators/workarea/decorator/templates/decorator.rb.erb +20 -0
  601. data/lib/generators/workarea/decorator/templates/test_decorator.rb.erb +13 -0
  602. data/lib/generators/workarea/discount/USAGE +16 -0
  603. data/lib/generators/workarea/discount/discount_generator.rb +48 -0
  604. data/lib/generators/workarea/discount/templates/model.rb.erb +22 -0
  605. data/lib/generators/workarea/discount/templates/model_test.rb.erb +13 -0
  606. data/lib/generators/workarea/discount/templates/partial.html.haml +10 -0
  607. data/lib/generators/workarea/discount/templates/select_type_partial.rb.erb +6 -0
  608. data/lib/generators/workarea/discount/templates/view_model.rb.erb +11 -0
  609. data/lib/generators/workarea/discount/templates/view_model_test.rb.erb +11 -0
  610. data/lib/generators/workarea/docker/USAGE +16 -0
  611. data/lib/generators/workarea/docker/docker_generator.rb +61 -0
  612. data/lib/generators/workarea/docker/templates/.env.erb +6 -0
  613. data/lib/generators/workarea/docker/templates/Dockerfile.erb +48 -0
  614. data/lib/generators/workarea/docker/templates/docker-compose.yml.erb +72 -0
  615. data/lib/generators/workarea/docker/templates/docker-entrypoint.sh.erb +6 -0
  616. data/lib/generators/workarea/docker/templates/docker-sync.yml.erb +8 -0
  617. data/lib/generators/workarea/docker/templates/docker-wait.sh +11 -0
  618. data/lib/generators/workarea/docker/templates/docker.env +16 -0
  619. data/lib/generators/workarea/docker/templates/docker_init.rb.erb +29 -0
  620. data/lib/generators/workarea/install/USAGE +19 -0
  621. data/lib/generators/workarea/install/install_generator.rb +71 -0
  622. data/lib/generators/workarea/install/templates/initializer.rb.erb +22 -0
  623. data/lib/generators/workarea/js_adapter/USAGE +8 -0
  624. data/lib/generators/workarea/js_adapter/js_adapter_generator.rb +28 -0
  625. data/lib/generators/workarea/js_adapter/templates/js_adapter.js.erb +21 -0
  626. data/lib/generators/workarea/js_module/USAGE +8 -0
  627. data/lib/generators/workarea/js_module/js_module_generator.rb +30 -0
  628. data/lib/generators/workarea/js_module/templates/js_module.js.erb +33 -0
  629. data/lib/generators/workarea/override/USAGE +22 -0
  630. data/lib/generators/workarea/override/override_generator.rb +85 -0
  631. data/lib/generators/workarea/pricing_calculator/USAGE +9 -0
  632. data/lib/generators/workarea/pricing_calculator/pricing_calculator_generator.rb +26 -0
  633. data/lib/generators/workarea/pricing_calculator/templates/calculator.rb.erb +13 -0
  634. data/lib/generators/workarea/pricing_calculator/templates/test.rb.erb +13 -0
  635. data/lib/generators/workarea/product_template/USAGE +11 -0
  636. data/lib/generators/workarea/product_template/product_template_generator.rb +26 -0
  637. data/lib/generators/workarea/product_template/templates/view_model.rb.erb +16 -0
  638. data/lib/generators/workarea/seeds/USAGE +11 -0
  639. data/lib/generators/workarea/seeds/seeds_generator.rb +15 -0
  640. data/lib/generators/workarea/seeds/templates/seeds.rb.erb +15 -0
  641. data/lib/generators/workarea/style_guide/USAGE +24 -0
  642. data/lib/generators/workarea/style_guide/style_guide_generator.rb +35 -0
  643. data/lib/generators/workarea/style_guide/templates/style_guide_partial.html.haml.erb +51 -0
  644. data/lib/minitest/workarea_plugin.rb +11 -0
  645. data/lib/tasks/assets.rake +3 -0
  646. data/lib/tasks/cache.rake +40 -0
  647. data/lib/tasks/cleanup.rake +13 -0
  648. data/lib/tasks/help.rake +59 -0
  649. data/lib/tasks/insights.rake +49 -0
  650. data/lib/tasks/lint.rake +7 -0
  651. data/lib/tasks/search.rake +89 -0
  652. data/lib/tasks/services.rake +73 -0
  653. data/lib/tasks/tests.rake +96 -0
  654. data/lib/workarea.rb +88 -0
  655. data/lib/workarea/asset_endpoints/base.rb +23 -0
  656. data/lib/workarea/asset_endpoints/favicons.rb +22 -0
  657. data/lib/workarea/asset_endpoints/product_images.rb +16 -0
  658. data/lib/workarea/asset_endpoints/product_placeholder_images.rb +9 -0
  659. data/lib/workarea/autoexpire_cache_redis.rb +29 -0
  660. data/lib/workarea/bogus_carrier.rb +18 -0
  661. data/lib/workarea/cache.rb +106 -0
  662. data/lib/workarea/changelog.rake +87 -0
  663. data/lib/workarea/configuration.rb +1273 -0
  664. data/lib/workarea/configuration/action_mailer.rb +24 -0
  665. data/lib/workarea/configuration/asset_host.rb +13 -0
  666. data/lib/workarea/configuration/cache_store.rb +21 -0
  667. data/lib/workarea/configuration/dragonfly.rb +43 -0
  668. data/lib/workarea/configuration/elasticsearch.rb +39 -0
  669. data/lib/workarea/configuration/error_handling.rb +15 -0
  670. data/lib/workarea/configuration/headless_chrome.rb +42 -0
  671. data/lib/workarea/configuration/i18n.rb +12 -0
  672. data/lib/workarea/configuration/localized_active_fields.rb +26 -0
  673. data/lib/workarea/configuration/logstasher.rb +16 -0
  674. data/lib/workarea/configuration/mongoid.rb +27 -0
  675. data/lib/workarea/configuration/mongoid_client.rb +53 -0
  676. data/lib/workarea/configuration/puma.rb +37 -0
  677. data/lib/workarea/configuration/redis.rb +78 -0
  678. data/lib/workarea/configuration/s3.rb +68 -0
  679. data/lib/workarea/configuration/sidekiq.rb +120 -0
  680. data/lib/workarea/constants.rb +29 -0
  681. data/lib/workarea/core.rb +221 -0
  682. data/lib/workarea/core/engine.rb +134 -0
  683. data/lib/workarea/elasticsearch/document.rb +109 -0
  684. data/lib/workarea/elasticsearch/index.rb +143 -0
  685. data/lib/workarea/elasticsearch/query_cache.rb +132 -0
  686. data/lib/workarea/elasticsearch/serializer.rb +43 -0
  687. data/lib/workarea/ext/active_shipping/workarea.rb +7 -0
  688. data/lib/workarea/ext/freedom_patches/action_view_cache_helper.rb +26 -0
  689. data/lib/workarea/ext/freedom_patches/action_view_conditional_url_helper.rb +23 -0
  690. data/lib/workarea/ext/freedom_patches/action_view_number_helper.rb +23 -0
  691. data/lib/workarea/ext/freedom_patches/action_view_path_resolver.rb +16 -0
  692. data/lib/workarea/ext/freedom_patches/bson.rb +11 -0
  693. data/lib/workarea/ext/freedom_patches/country.rb +15 -0
  694. data/lib/workarea/ext/freedom_patches/dragonfly_attachment.rb +14 -0
  695. data/lib/workarea/ext/freedom_patches/dragonfly_callable_url_host.rb +28 -0
  696. data/lib/workarea/ext/freedom_patches/dragonfly_job_fetch_url.rb +22 -0
  697. data/lib/workarea/ext/freedom_patches/float.rb +13 -0
  698. data/lib/workarea/ext/freedom_patches/global_id.rb +24 -0
  699. data/lib/workarea/ext/freedom_patches/money.rb +23 -0
  700. data/lib/workarea/ext/freedom_patches/mongoid_simple_tags.rb +87 -0
  701. data/lib/workarea/ext/freedom_patches/net_http_ssl_connection.rb +19 -0
  702. data/lib/workarea/ext/freedom_patches/routes_reloader.rb +21 -0
  703. data/lib/workarea/ext/freedom_patches/string.rb +16 -0
  704. data/lib/workarea/ext/freedom_patches/uri.rb +7 -0
  705. data/lib/workarea/ext/jbuilder/jbuilder_append_partials.rb +16 -0
  706. data/lib/workarea/ext/mongoid/audit_log_entry.decorator +66 -0
  707. data/lib/workarea/ext/mongoid/each_by.rb +46 -0
  708. data/lib/workarea/ext/mongoid/error.rb +17 -0
  709. data/lib/workarea/ext/mongoid/except.rb +5 -0
  710. data/lib/workarea/ext/mongoid/find_ordered.rb +21 -0
  711. data/lib/workarea/ext/mongoid/list_field.rb +21 -0
  712. data/lib/workarea/ext/mongoid/moped_bson.rb +6 -0
  713. data/lib/workarea/ext/mongoid/timestamps_timeless.rb +51 -0
  714. data/lib/workarea/ext/sprockets/ruby_processor.rb +19 -0
  715. data/lib/workarea/ext/sprockets/task.rb +31 -0
  716. data/lib/workarea/geolocation.rb +71 -0
  717. data/lib/workarea/i18n.rb +71 -0
  718. data/lib/workarea/image_optim_processor.rb +13 -0
  719. data/lib/workarea/lint.rb +89 -0
  720. data/lib/workarea/lint/inconsistent_details.rb +32 -0
  721. data/lib/workarea/lint/products_missing_images.rb +13 -0
  722. data/lib/workarea/lint/products_missing_variants.rb +13 -0
  723. data/lib/workarea/lint/skus_missing_inventory.rb +19 -0
  724. data/lib/workarea/lint/skus_missing_pricing.rb +19 -0
  725. data/lib/workarea/lint/skus_missing_variants.rb +17 -0
  726. data/lib/workarea/mail_interceptor.rb +15 -0
  727. data/lib/workarea/monitoring/elasticsearch_check.rb +24 -0
  728. data/lib/workarea/monitoring/load_balancing_check.rb +9 -0
  729. data/lib/workarea/monitoring/mongoid_check.rb +23 -0
  730. data/lib/workarea/monitoring/sidekiq_queue_size_check.rb +16 -0
  731. data/lib/workarea/mount_point.rb +27 -0
  732. data/lib/workarea/paged_array.rb +37 -0
  733. data/lib/workarea/passenger.rb +5 -0
  734. data/lib/workarea/ping_home_base.rb +69 -0
  735. data/lib/workarea/plugin.rb +117 -0
  736. data/lib/workarea/plugin/asset_appends_helper.rb +36 -0
  737. data/lib/workarea/robots.rb +9 -0
  738. data/lib/workarea/routes_constraints/redirect.rb +11 -0
  739. data/lib/workarea/routes_constraints/super_admin.rb +11 -0
  740. data/lib/workarea/scheduled_jobs.rb +15 -0
  741. data/lib/workarea/scheduler.rb +44 -0
  742. data/lib/workarea/seeds.rb +69 -0
  743. data/lib/workarea/string_id.rb +45 -0
  744. data/lib/workarea/svg_asset_finder.rb +43 -0
  745. data/lib/workarea/swappable_list.rb +64 -0
  746. data/lib/workarea/url_token.rb +24 -0
  747. data/lib/workarea/validators/email_validator.rb +24 -0
  748. data/lib/workarea/validators/ip_address_validator.rb +7 -0
  749. data/lib/workarea/validators/parameter_validator.rb +9 -0
  750. data/lib/workarea/validators/password_validator.rb +32 -0
  751. data/lib/workarea/validators/url_validator.rb +11 -0
  752. data/lib/workarea/version.rb +28 -0
  753. data/test/dummy/README.rdoc +28 -0
  754. data/test/dummy/Rakefile +6 -0
  755. data/test/dummy/app/assets/images/.keep +0 -0
  756. data/test/dummy/app/assets/images/workarea/core/foo.png +0 -0
  757. data/test/dummy/app/assets/javascripts/application.js +13 -0
  758. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  759. data/test/dummy/app/controllers/application_controller.rb +5 -0
  760. data/test/dummy/app/controllers/concerns/.keep +0 -0
  761. data/test/dummy/app/helpers/application_helper.rb +2 -0
  762. data/test/dummy/app/mailers/.keep +0 -0
  763. data/test/dummy/app/models/.keep +0 -0
  764. data/test/dummy/app/models/concerns/.keep +0 -0
  765. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  766. data/test/dummy/bin/bundle +3 -0
  767. data/test/dummy/bin/rails +5 -0
  768. data/test/dummy/bin/rake +4 -0
  769. data/test/dummy/bin/setup +34 -0
  770. data/test/dummy/bin/update +29 -0
  771. data/test/dummy/config.ru +4 -0
  772. data/test/dummy/config/application.rb +21 -0
  773. data/test/dummy/config/boot.rb +5 -0
  774. data/test/dummy/config/cable.yml +9 -0
  775. data/test/dummy/config/environment.rb +5 -0
  776. data/test/dummy/config/environments/development.rb +51 -0
  777. data/test/dummy/config/environments/production.rb +86 -0
  778. data/test/dummy/config/environments/test.rb +43 -0
  779. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  780. data/test/dummy/config/initializers/assets.rb +11 -0
  781. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  782. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  783. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  784. data/test/dummy/config/initializers/inflections.rb +16 -0
  785. data/test/dummy/config/initializers/mime_types.rb +4 -0
  786. data/test/dummy/config/initializers/new_framework_defaults.rb +17 -0
  787. data/test/dummy/config/initializers/session_store.rb +3 -0
  788. data/test/dummy/config/initializers/workarea.rb +8 -0
  789. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  790. data/test/dummy/config/locales/en.yml +23 -0
  791. data/test/dummy/config/puma.rb +47 -0
  792. data/test/dummy/config/routes.rb +8 -0
  793. data/test/dummy/config/secrets.yml +22 -0
  794. data/test/dummy/config/spring.rb +6 -0
  795. data/test/dummy/db/seeds.rb +10 -0
  796. data/test/dummy/lib/assets/.keep +0 -0
  797. data/test/dummy/log/.keep +0 -0
  798. data/test/dummy/public/404.html +67 -0
  799. data/test/dummy/public/422.html +67 -0
  800. data/test/dummy/public/500.html +66 -0
  801. data/test/dummy/public/favicon.ico +1 -0
  802. data/test/fixtures/label.png +0 -0
  803. data/test/fixtures/tax_rates.csv +3 -0
  804. data/test/generators/workarea/content_block_type_generator_test.rb +48 -0
  805. data/test/generators/workarea/decorator_generator_test.rb +36 -0
  806. data/test/generators/workarea/discount_generator_test.rb +64 -0
  807. data/test/generators/workarea/docker_generator_test.rb +156 -0
  808. data/test/generators/workarea/install_generator_test.rb +92 -0
  809. data/test/generators/workarea/js_adapter_generator_test.rb +15 -0
  810. data/test/generators/workarea/override_generator_test.rb +16 -0
  811. data/test/generators/workarea/pricing_calculator_generator_test.rb +26 -0
  812. data/test/generators/workarea/product_template_generator_test.rb +36 -0
  813. data/test/generators/workarea/seeds_generator_test.rb +29 -0
  814. data/test/helpers/workarea/addresses_helper_test.rb +42 -0
  815. data/test/helpers/workarea/application_helper_test.rb +67 -0
  816. data/test/helpers/workarea/conditional_url_helper_test.rb +29 -0
  817. data/test/helpers/workarea/content_assets_helper_test.rb +23 -0
  818. data/test/helpers/workarea/facets_helper_test.rb +31 -0
  819. data/test/helpers/workarea/i18n_helper_test.rb +18 -0
  820. data/test/helpers/workarea/style_guides_helper_test.rb +63 -0
  821. data/test/integration/workarea/authentication_test.rb +166 -0
  822. data/test/integration/workarea/authorization_test.rb +88 -0
  823. data/test/integration/workarea/cache_varies_integration_test.rb +80 -0
  824. data/test/integration/workarea/monitoring_integration_test.rb +30 -0
  825. data/test/integration/workarea/rack_attack_integration_test.rb +168 -0
  826. data/test/javascripts/cookie_spec.js +37 -0
  827. data/test/javascripts/date_spec.js +102 -0
  828. data/test/javascripts/deletion_forms_spec.js +27 -0
  829. data/test/javascripts/duplicate_id_spec.js +15 -0
  830. data/test/javascripts/fixtures/deletion_forms.html.haml +3 -0
  831. data/test/javascripts/fixtures/duplicate_id.html.haml +6 -0
  832. data/test/javascripts/fixtures/form_submitting_controls.html.haml +4 -0
  833. data/test/javascripts/fixtures/reveal_password.html.haml +5 -0
  834. data/test/javascripts/fixtures/workarea_scope.html.haml +5 -0
  835. data/test/javascripts/form_submitting_controls_spec.js +36 -0
  836. data/test/javascripts/reveal_password_spec.js +22 -0
  837. data/test/javascripts/spec_helper.js +26 -0
  838. data/test/javascripts/string_spec.js +41 -0
  839. data/test/javascripts/url_spec.js +74 -0
  840. data/test/javascripts/workarea_spec.js +66 -0
  841. data/test/lib/workarea/asset_endpoints/favicons_test.rb +39 -0
  842. data/test/lib/workarea/autoexpire_cache_redis_test.rb +37 -0
  843. data/test/lib/workarea/constants_test.rb +26 -0
  844. data/test/lib/workarea/elasticsearch/document_test.rb +125 -0
  845. data/test/lib/workarea/elasticsearch/query_cache_test.rb +93 -0
  846. data/test/lib/workarea/ext/freedom_patches/country_test.rb +23 -0
  847. data/test/lib/workarea/ext/freedom_patches/dragonfly_callable_url_host_test.rb +20 -0
  848. data/test/lib/workarea/ext/freedom_patches/global_id_test.rb +16 -0
  849. data/test/lib/workarea/ext/mongoid/audit_log_entry_test.rb +68 -0
  850. data/test/lib/workarea/ext/mongoid/each_by_test.rb +49 -0
  851. data/test/lib/workarea/ext/mongoid/except_test.rb +18 -0
  852. data/test/lib/workarea/ext/mongoid/find_ordered_test.rb +17 -0
  853. data/test/lib/workarea/ext/mongoid/list_field_test.rb +27 -0
  854. data/test/lib/workarea/geolocation_test.rb +86 -0
  855. data/test/lib/workarea/lint/inconsistent_details_test.rb +46 -0
  856. data/test/lib/workarea/lint/products_missing_images_test.rb +18 -0
  857. data/test/lib/workarea/lint/products_missing_variants_test.rb +18 -0
  858. data/test/lib/workarea/lint/skus_missing_inventory_test.rb +30 -0
  859. data/test/lib/workarea/lint/skus_missing_pricing_test.rb +30 -0
  860. data/test/lib/workarea/lint/skus_missing_variants_test.rb +34 -0
  861. data/test/lib/workarea/mail_interceptor_test.rb +69 -0
  862. data/test/lib/workarea/paged_array_test.rb +11 -0
  863. data/test/lib/workarea/ping_home_base/request_test.rb +23 -0
  864. data/test/lib/workarea/plugin_test.rb +100 -0
  865. data/test/lib/workarea/scheduled_jobs_test.rb +26 -0
  866. data/test/lib/workarea/scheduler_test.rb +46 -0
  867. data/test/lib/workarea/string_id_test.rb +43 -0
  868. data/test/lib/workarea/svg_asset_finder_test.rb +29 -0
  869. data/test/lib/workarea/swappable_list_test.rb +45 -0
  870. data/test/lib/workarea/url_token_test.rb +21 -0
  871. data/test/lib/workarea/validators/email_validator_test.rb +25 -0
  872. data/test/lib/workarea/validators/parameter_validator_test.rb +19 -0
  873. data/test/lib/workarea/validators/password_validator_test.rb +60 -0
  874. data/test/mailers/workarea/application_mailer_test.rb +25 -0
  875. data/test/middleware/workarea/audit_log_middleware_test.rb +19 -0
  876. data/test/middleware/workarea/release_server_middleware_test.rb +13 -0
  877. data/test/models/workarea/address_equality_test.rb +62 -0
  878. data/test/models/workarea/address_test.rb +112 -0
  879. data/test/models/workarea/address_validation_test.rb +94 -0
  880. data/test/models/workarea/application_document_test.rb +39 -0
  881. data/test/models/workarea/bulk_action/product_edit_test.rb +138 -0
  882. data/test/models/workarea/bulk_action/sequential_product_edit_test.rb +40 -0
  883. data/test/models/workarea/bulk_action_test.rb +84 -0
  884. data/test/models/workarea/catalog/category_test.rb +41 -0
  885. data/test/models/workarea/catalog/customizations_test.rb +27 -0
  886. data/test/models/workarea/catalog/product_image_test.rb +39 -0
  887. data/test/models/workarea/catalog/product_placeholder_image_test.rb +17 -0
  888. data/test/models/workarea/catalog/product_positions_test.rb +43 -0
  889. data/test/models/workarea/catalog/product_test.rb +83 -0
  890. data/test/models/workarea/catalog/variant_test.rb +14 -0
  891. data/test/models/workarea/checkout/collect_payment_test.rb +51 -0
  892. data/test/models/workarea/checkout/shipping_options_test.rb +71 -0
  893. data/test/models/workarea/checkout/steps/addresses_test.rb +127 -0
  894. data/test/models/workarea/checkout/steps/payment_test.rb +108 -0
  895. data/test/models/workarea/checkout/steps/shipping_test.rb +106 -0
  896. data/test/models/workarea/checkout_test.rb +262 -0
  897. data/test/models/workarea/comment_test.rb +15 -0
  898. data/test/models/workarea/commentable_test.rb +29 -0
  899. data/test/models/workarea/content/asset_test.rb +32 -0
  900. data/test/models/workarea/content/asset_validation_test.rb +68 -0
  901. data/test/models/workarea/content/block_name_test.rb +25 -0
  902. data/test/models/workarea/content/block_test.rb +157 -0
  903. data/test/models/workarea/content/block_type_definition_test.rb +152 -0
  904. data/test/models/workarea/content/block_type_test.rb +95 -0
  905. data/test/models/workarea/content/email_test.rb +20 -0
  906. data/test/models/workarea/content/field_test.rb +15 -0
  907. data/test/models/workarea/content/fields/asset_test.rb +17 -0
  908. data/test/models/workarea/content/fields/products_test.rb +14 -0
  909. data/test/models/workarea/content/page_test.rb +13 -0
  910. data/test/models/workarea/content_test.rb +28 -0
  911. data/test/models/workarea/data_file/csv_test.rb +408 -0
  912. data/test/models/workarea/data_file/export_test.rb +24 -0
  913. data/test/models/workarea/data_file/format_test.rb +24 -0
  914. data/test/models/workarea/data_file/import_test.rb +106 -0
  915. data/test/models/workarea/data_file/json_test.rb +80 -0
  916. data/test/models/workarea/data_file/operation_test.rb +18 -0
  917. data/test/models/workarea/data_file/tax_test.rb +59 -0
  918. data/test/models/workarea/details_test.rb +63 -0
  919. data/test/models/workarea/discount_ids_test.rb +35 -0
  920. data/test/models/workarea/fulfillment/item_test.rb +34 -0
  921. data/test/models/workarea/fulfillment/package_test.rb +43 -0
  922. data/test/models/workarea/fulfillment_test.rb +217 -0
  923. data/test/models/workarea/help/article_test.rb +54 -0
  924. data/test/models/workarea/insights/base_test.rb +41 -0
  925. data/test/models/workarea/insights/best_customers_test.rb +51 -0
  926. data/test/models/workarea/insights/best_full_price_customers_test.rb +52 -0
  927. data/test/models/workarea/insights/cold_products_test.rb +124 -0
  928. data/test/models/workarea/insights/cold_searches_test.rb +124 -0
  929. data/test/models/workarea/insights/customer_acquisition_test.rb +44 -0
  930. data/test/models/workarea/insights/customers_at_risk_test.rb +26 -0
  931. data/test/models/workarea/insights/hot_products_test.rb +124 -0
  932. data/test/models/workarea/insights/hot_searches_test.rb +124 -0
  933. data/test/models/workarea/insights/low_aov_customers_test.rb +30 -0
  934. data/test/models/workarea/insights/most_discount_given.rb +70 -0
  935. data/test/models/workarea/insights/most_discounted_products_test.rb +47 -0
  936. data/test/models/workarea/insights/new_products_test.rb +33 -0
  937. data/test/models/workarea/insights/non_sellers_test.rb +39 -0
  938. data/test/models/workarea/insights/popular_searches_test.rb +45 -0
  939. data/test/models/workarea/insights/popular_searches_without_results_test.rb +28 -0
  940. data/test/models/workarea/insights/products_purchased_together_test.rb +63 -0
  941. data/test/models/workarea/insights/products_to_improve_test.rb +134 -0
  942. data/test/models/workarea/insights/promising_products_test.rb +137 -0
  943. data/test/models/workarea/insights/release_reminder_test.rb +25 -0
  944. data/test/models/workarea/insights/repeat_purchase_rate_test.rb +38 -0
  945. data/test/models/workarea/insights/sales_by_navigation_test.rb +94 -0
  946. data/test/models/workarea/insights/searches_to_improve_test.rb +134 -0
  947. data/test/models/workarea/insights/star_products_test.rb +67 -0
  948. data/test/models/workarea/insights/star_searches_test.rb +67 -0
  949. data/test/models/workarea/insights/top_categories_test.rb +94 -0
  950. data/test/models/workarea/insights/top_discounts_test.rb +91 -0
  951. data/test/models/workarea/insights/top_products_test.rb +94 -0
  952. data/test/models/workarea/insights/trending_products_test.rb +83 -0
  953. data/test/models/workarea/insights/trending_searches_test.rb +83 -0
  954. data/test/models/workarea/insights/upcoming_releases_test.rb +21 -0
  955. data/test/models/workarea/inventory/capture_test.rb +97 -0
  956. data/test/models/workarea/inventory/collection_test.rb +35 -0
  957. data/test/models/workarea/inventory/policies/allow_backorder_test.rb +70 -0
  958. data/test/models/workarea/inventory/policies/ignore_test.rb +21 -0
  959. data/test/models/workarea/inventory/policies/standard_test.rb +19 -0
  960. data/test/models/workarea/inventory/sku_test.rb +97 -0
  961. data/test/models/workarea/inventory/transaction_test.rb +169 -0
  962. data/test/models/workarea/inventory_test.rb +29 -0
  963. data/test/models/workarea/lock_test.rb +47 -0
  964. data/test/models/workarea/lockable_test.rb +73 -0
  965. data/test/models/workarea/metrics/by_day_test.rb +145 -0
  966. data/test/models/workarea/metrics/calculate_percentiles_test.rb +47 -0
  967. data/test/models/workarea/metrics/product_by_week_test.rb +141 -0
  968. data/test/models/workarea/metrics/product_for_last_week_test.rb +128 -0
  969. data/test/models/workarea/metrics/search_by_day_test.rb +40 -0
  970. data/test/models/workarea/metrics/search_by_week_test.rb +141 -0
  971. data/test/models/workarea/metrics/search_for_last_week_test.rb +134 -0
  972. data/test/models/workarea/metrics/user_test.rb +79 -0
  973. data/test/models/workarea/navigation/breadcrumbs_test.rb +52 -0
  974. data/test/models/workarea/navigation/menu_test.rb +23 -0
  975. data/test/models/workarea/navigation/redirect_test.rb +51 -0
  976. data/test/models/workarea/navigation/search_results_test.rb +32 -0
  977. data/test/models/workarea/navigation/taxon_test.rb +118 -0
  978. data/test/models/workarea/normalize_email_test.rb +17 -0
  979. data/test/models/workarea/order/item_test.rb +60 -0
  980. data/test/models/workarea/order/queries_test.rb +187 -0
  981. data/test/models/workarea/order_test.rb +154 -0
  982. data/test/models/workarea/ordering_test.rb +41 -0
  983. data/test/models/workarea/payment/address_test.rb +139 -0
  984. data/test/models/workarea/payment/authorize/credit_card_test.rb +108 -0
  985. data/test/models/workarea/payment/authorize/store_credit_test.rb +73 -0
  986. data/test/models/workarea/payment/capture/credit_card_test.rb +66 -0
  987. data/test/models/workarea/payment/capture/store_credit_test.rb +50 -0
  988. data/test/models/workarea/payment/capture_test.rb +168 -0
  989. data/test/models/workarea/payment/credit_card_integration_test.rb +174 -0
  990. data/test/models/workarea/payment/credit_card_test.rb +111 -0
  991. data/test/models/workarea/payment/operation_test.rb +143 -0
  992. data/test/models/workarea/payment/profile_test.rb +48 -0
  993. data/test/models/workarea/payment/purchase/credit_card_test.rb +95 -0
  994. data/test/models/workarea/payment/purchase/store_credit_test.rb +72 -0
  995. data/test/models/workarea/payment/refund/credit_card_test.rb +66 -0
  996. data/test/models/workarea/payment/refund/store_credit_test.rb +63 -0
  997. data/test/models/workarea/payment/refund_test.rb +188 -0
  998. data/test/models/workarea/payment/saved_credit_card_test.rb +32 -0
  999. data/test/models/workarea/payment/store_credit_card_test.rb +42 -0
  1000. data/test/models/workarea/payment/tender/credit_card_test.rb +52 -0
  1001. data/test/models/workarea/payment/tender/store_credit_test.rb +18 -0
  1002. data/test/models/workarea/payment/tender_test.rb +191 -0
  1003. data/test/models/workarea/payment/transaction_test.rb +126 -0
  1004. data/test/models/workarea/payment_reference_test.rb +17 -0
  1005. data/test/models/workarea/payment_test.rb +172 -0
  1006. data/test/models/workarea/price_adjustment_test.rb +26 -0
  1007. data/test/models/workarea/pricing/cache_key_test.rb +67 -0
  1008. data/test/models/workarea/pricing/calculators/customizations_calculator_test.rb +28 -0
  1009. data/test/models/workarea/pricing/calculators/discount_calculator_test.rb +152 -0
  1010. data/test/models/workarea/pricing/calculators/item_calculator_test.rb +76 -0
  1011. data/test/models/workarea/pricing/calculators/overrides_calculator_test.rb +130 -0
  1012. data/test/models/workarea/pricing/calculators/tax_calculator_test.rb +118 -0
  1013. data/test/models/workarea/pricing/collection_test.rb +101 -0
  1014. data/test/models/workarea/pricing/discount/amount_calculator_test.rb +31 -0
  1015. data/test/models/workarea/pricing/discount/application_group_test.rb +174 -0
  1016. data/test/models/workarea/pricing/discount/buy_some_get_some/order_items_by_product_test.rb +28 -0
  1017. data/test/models/workarea/pricing/discount/buy_some_get_some_test.rb +200 -0
  1018. data/test/models/workarea/pricing/discount/category_test.rb +68 -0
  1019. data/test/models/workarea/pricing/discount/code_list_test.rb +23 -0
  1020. data/test/models/workarea/pricing/discount/collection_test.rb +44 -0
  1021. data/test/models/workarea/pricing/discount/conditions/user_tags_test.rb +43 -0
  1022. data/test/models/workarea/pricing/discount/free_gift_test.rb +65 -0
  1023. data/test/models/workarea/pricing/discount/generated_promo_code_test.rb +14 -0
  1024. data/test/models/workarea/pricing/discount/order_test.rb +60 -0
  1025. data/test/models/workarea/pricing/discount/order_total_test.rb +60 -0
  1026. data/test/models/workarea/pricing/discount/product_attribute_test.rb +81 -0
  1027. data/test/models/workarea/pricing/discount/product_test.rb +63 -0
  1028. data/test/models/workarea/pricing/discount/quantity_fixed_price_test.rb +292 -0
  1029. data/test/models/workarea/pricing/discount/shipping_test.rb +67 -0
  1030. data/test/models/workarea/pricing/discount_test.rb +95 -0
  1031. data/test/models/workarea/pricing/override_test.rb +59 -0
  1032. data/test/models/workarea/pricing/price_distributor_test.rb +40 -0
  1033. data/test/models/workarea/pricing/price_test.rb +58 -0
  1034. data/test/models/workarea/pricing/request_test.rb +86 -0
  1035. data/test/models/workarea/pricing/sku_test.rb +47 -0
  1036. data/test/models/workarea/pricing/tax_applier_test.rb +125 -0
  1037. data/test/models/workarea/pricing_test.rb +1398 -0
  1038. data/test/models/workarea/product_rule_test.rb +55 -0
  1039. data/test/models/workarea/query_string_test.rb +90 -0
  1040. data/test/models/workarea/recommendation/user_activity_test.rb +96 -0
  1041. data/test/models/workarea/releasable_test.rb +479 -0
  1042. data/test/models/workarea/release_test.rb +287 -0
  1043. data/test/models/workarea/reports/export_test.rb +33 -0
  1044. data/test/models/workarea/search/admin/catalog_category_test.rb +44 -0
  1045. data/test/models/workarea/search/admin/catalog_product_test.rb +126 -0
  1046. data/test/models/workarea/search/admin/content_asset_test.rb +54 -0
  1047. data/test/models/workarea/search/admin/content_page_test.rb +18 -0
  1048. data/test/models/workarea/search/admin/content_test.rb +17 -0
  1049. data/test/models/workarea/search/admin/order_test.rb +105 -0
  1050. data/test/models/workarea/search/admin/pricing_discount_test.rb +31 -0
  1051. data/test/models/workarea/search/admin/releasable_test.rb +36 -0
  1052. data/test/models/workarea/search/admin/user_test.rb +53 -0
  1053. data/test/models/workarea/search/admin_test.rb +18 -0
  1054. data/test/models/workarea/search/customization_test.rb +69 -0
  1055. data/test/models/workarea/search/settings_test.rb +18 -0
  1056. data/test/models/workarea/search/storefront/product/categories_test.rb +95 -0
  1057. data/test/models/workarea/search/storefront/product/facets_test.rb +35 -0
  1058. data/test/models/workarea/search/storefront/product/inventory_test.rb +23 -0
  1059. data/test/models/workarea/search/storefront/product/pricing_test.rb +41 -0
  1060. data/test/models/workarea/search/storefront/product/text_test.rb +69 -0
  1061. data/test/models/workarea/search/storefront/product_test.rb +108 -0
  1062. data/test/models/workarea/search/storefront_test.rb +27 -0
  1063. data/test/models/workarea/shipping/address_test.rb +139 -0
  1064. data/test/models/workarea/shipping/location_query_test.rb +60 -0
  1065. data/test/models/workarea/shipping/rate_lookup_test.rb +76 -0
  1066. data/test/models/workarea/shipping/rate_test.rb +19 -0
  1067. data/test/models/workarea/shipping/service_test.rb +40 -0
  1068. data/test/models/workarea/shipping/sku_test.rb +31 -0
  1069. data/test/models/workarea/shipping_option_test.rb +50 -0
  1070. data/test/models/workarea/shipping_test.rb +106 -0
  1071. data/test/models/workarea/tax/category_test.rb +57 -0
  1072. data/test/models/workarea/tax/rate_lookup_test.rb +217 -0
  1073. data/test/models/workarea/tax_test.rb +34 -0
  1074. data/test/models/workarea/user/admin_bookmark_test.rb +39 -0
  1075. data/test/models/workarea/user/admin_visit_test.rb +23 -0
  1076. data/test/models/workarea/user/password_reset_test.rb +30 -0
  1077. data/test/models/workarea/user/recent_password_test.rb +50 -0
  1078. data/test/models/workarea/user/system_users_test.rb +14 -0
  1079. data/test/models/workarea/user_test.rb +312 -0
  1080. data/test/queries/workarea/admin_query_operation_test.rb +67 -0
  1081. data/test/queries/workarea/admin_search_query_wrapper_test.rb +90 -0
  1082. data/test/queries/workarea/alerts_test.rb +131 -0
  1083. data/test/queries/workarea/bulk_action_selections_test.rb +35 -0
  1084. data/test/queries/workarea/categorization_test.rb +88 -0
  1085. data/test/queries/workarea/extract_content_block_text_test.rb +60 -0
  1086. data/test/queries/workarea/find_pipeline_asset_test.rb +21 -0
  1087. data/test/queries/workarea/find_taxonomy_slug_test.rb +20 -0
  1088. data/test/queries/workarea/find_unique_slug_test.rb +14 -0
  1089. data/test/queries/workarea/metadata/catalog_category_test.rb +38 -0
  1090. data/test/queries/workarea/metadata/content_page_test.rb +36 -0
  1091. data/test/queries/workarea/metadata/home_page_test.rb +34 -0
  1092. data/test/queries/workarea/order_item_details_test.rb +43 -0
  1093. data/test/queries/workarea/order_metrics_test.rb +180 -0
  1094. data/test/queries/workarea/pricing_override_params_test.rb +28 -0
  1095. data/test/queries/workarea/product_primary_image_url_test.rb +22 -0
  1096. data/test/queries/workarea/product_primary_navigation_test.rb +49 -0
  1097. data/test/queries/workarea/recommendation/order_based_test.rb +51 -0
  1098. data/test/queries/workarea/recommendation/product_based_test.rb +91 -0
  1099. data/test/queries/workarea/recommendation/searches_test.rb +23 -0
  1100. data/test/queries/workarea/recommendation/user_activity_based_test.rb +37 -0
  1101. data/test/queries/workarea/reports/average_order_value_test.rb +336 -0
  1102. data/test/queries/workarea/reports/customers_test.rb +106 -0
  1103. data/test/queries/workarea/reports/first_time_vs_returning_sales_test.rb +274 -0
  1104. data/test/queries/workarea/reports/low_inventory_test.rb +48 -0
  1105. data/test/queries/workarea/reports/report_test.rb +100 -0
  1106. data/test/queries/workarea/reports/sales_by_category_test.rb +137 -0
  1107. data/test/queries/workarea/reports/sales_by_country_test.rb +130 -0
  1108. data/test/queries/workarea/reports/sales_by_discount_test.rb +122 -0
  1109. data/test/queries/workarea/reports/sales_by_menu_test.rb +130 -0
  1110. data/test/queries/workarea/reports/sales_by_product_test.rb +130 -0
  1111. data/test/queries/workarea/reports/sales_by_sku_test.rb +171 -0
  1112. data/test/queries/workarea/reports/sales_by_traffic_referrer_test.rb +159 -0
  1113. data/test/queries/workarea/reports/sales_over_time_test.rb +539 -0
  1114. data/test/queries/workarea/reports/searches_over_time_test.rb +90 -0
  1115. data/test/queries/workarea/reports/searches_test.rb +179 -0
  1116. data/test/queries/workarea/reports/searches_without_results_over_time_test.rb +100 -0
  1117. data/test/queries/workarea/search/admin_discounts_test.rb +26 -0
  1118. data/test/queries/workarea/search/admin_orders_test.rb +63 -0
  1119. data/test/queries/workarea/search/admin_payment_transactions_test.rb +13 -0
  1120. data/test/queries/workarea/search/admin_releases_test.rb +67 -0
  1121. data/test/queries/workarea/search/admin_search_test.rb +105 -0
  1122. data/test/queries/workarea/search/admin_users_test.rb +20 -0
  1123. data/test/queries/workarea/search/categorization_test.rb +31 -0
  1124. data/test/queries/workarea/search/category_browse_test.rb +334 -0
  1125. data/test/queries/workarea/search/date_filter_test.rb +39 -0
  1126. data/test/queries/workarea/search/facet_matches_test.rb +55 -0
  1127. data/test/queries/workarea/search/facet_sorting/size_test.rb +27 -0
  1128. data/test/queries/workarea/search/facet_sorting_test.rb +127 -0
  1129. data/test/queries/workarea/search/facet_test.rb +108 -0
  1130. data/test/queries/workarea/search/filter_test.rb +68 -0
  1131. data/test/queries/workarea/search/pagination_test.rb +66 -0
  1132. data/test/queries/workarea/search/product_entries_test.rb +14 -0
  1133. data/test/queries/workarea/search/product_facet_sorting_test.rb +90 -0
  1134. data/test/queries/workarea/search/product_rules_test.rb +348 -0
  1135. data/test/queries/workarea/search/product_search_test.rb +413 -0
  1136. data/test/queries/workarea/search/query_test.rb +43 -0
  1137. data/test/queries/workarea/search/range_facet_test.rb +15 -0
  1138. data/test/queries/workarea/search/range_parameter_test.rb +30 -0
  1139. data/test/queries/workarea/search/related_help_test.rb +101 -0
  1140. data/test/queries/workarea/search/related_products_test.rb +81 -0
  1141. data/test/queries/workarea/search/search_suggestions_test.rb +29 -0
  1142. data/test/queries/workarea/search/storefront_search_test.rb +111 -0
  1143. data/test/queries/workarea/search/terms_facet_test.rb +12 -0
  1144. data/test/queries/workarea/taxonomy_sitemap_test.rb +34 -0
  1145. data/test/services/workarea/add_multiple_cart_items/item_test.rb +56 -0
  1146. data/test/services/workarea/add_multiple_cart_items_test.rb +100 -0
  1147. data/test/services/workarea/cancel_order_test.rb +118 -0
  1148. data/test/services/workarea/cart_cleaner_test.rb +66 -0
  1149. data/test/services/workarea/clean_range_facets_test.rb +28 -0
  1150. data/test/services/workarea/copy_order_test.rb +83 -0
  1151. data/test/services/workarea/copy_product_test.rb +25 -0
  1152. data/test/services/workarea/create_fulfillment_test.rb +23 -0
  1153. data/test/services/workarea/direct_upload_test.rb +58 -0
  1154. data/test/services/workarea/export_report_test.rb +66 -0
  1155. data/test/services/workarea/hash_update_test.rb +24 -0
  1156. data/test/services/workarea/inventory_adjustment_test.rb +41 -0
  1157. data/test/services/workarea/login_test.rb +74 -0
  1158. data/test/services/workarea/order_merge_test.rb +30 -0
  1159. data/test/services/workarea/packaging_test.rb +91 -0
  1160. data/test/services/workarea/save_publishing_test.rb +46 -0
  1161. data/test/services/workarea/save_taxonomy_test.rb +72 -0
  1162. data/test/services/workarea/set_navigable_test.rb +54 -0
  1163. data/test/services/workarea/sort_navigation_menus_by_orders_test.rb +25 -0
  1164. data/test/teaspoon_env.rb +6 -0
  1165. data/test/test_helper.rb +10 -0
  1166. data/test/vcr_cassettes/csv_image_upload.yml +49 -0
  1167. data/test/view_models/workarea/shipping_carrier_view_model_test.rb +49 -0
  1168. data/test/workarea_test.rb +9 -0
  1169. data/test/workers/sidekiq/callbacks_test.rb +433 -0
  1170. data/test/workers/workarea/bulk_index_admin_test.rb +30 -0
  1171. data/test/workers/workarea/bulk_index_products_test.rb +18 -0
  1172. data/test/workers/workarea/bulk_index_searches_test.rb +45 -0
  1173. data/test/workers/workarea/clean_inventory_transactions_test.rb +19 -0
  1174. data/test/workers/workarea/clean_orders_test.rb +22 -0
  1175. data/test/workers/workarea/clean_product_recommendations_test.rb +15 -0
  1176. data/test/workers/workarea/deactivate_stale_discounts_test.rb +82 -0
  1177. data/test/workers/workarea/generate_content_metadata_test.rb +32 -0
  1178. data/test/workers/workarea/generate_insights_test.rb +38 -0
  1179. data/test/workers/workarea/index_admin_search_test.rb +10 -0
  1180. data/test/workers/workarea/index_categorization_test.rb +26 -0
  1181. data/test/workers/workarea/index_category_changes_test.rb +63 -0
  1182. data/test/workers/workarea/index_fulfillment_changes_test.rb +14 -0
  1183. data/test/workers/workarea/index_help_test.rb +18 -0
  1184. data/test/workers/workarea/index_payment_transactions_test.rb +42 -0
  1185. data/test/workers/workarea/index_product_rule_test.rb +20 -0
  1186. data/test/workers/workarea/index_product_test.rb +17 -0
  1187. data/test/workers/workarea/index_skus_test.rb +14 -0
  1188. data/test/workers/workarea/keep_product_index_fresh_test.rb +46 -0
  1189. data/test/workers/workarea/mark_discounts_as_redeemed_test.rb +51 -0
  1190. data/test/workers/workarea/order_reminder_test.rb +45 -0
  1191. data/test/workers/workarea/process_import_test.rb +57 -0
  1192. data/test/workers/workarea/process_product_recommendations_test.rb +57 -0
  1193. data/test/workers/workarea/process_search_recommendations_test.rb +27 -0
  1194. data/test/workers/workarea/publish_bulk_action_test.rb +27 -0
  1195. data/test/workers/workarea/publish_release_test.rb +20 -0
  1196. data/test/workers/workarea/redirect_navigable_slugs_test.rb +28 -0
  1197. data/test/workers/workarea/save_order_metrics_test.rb +14 -0
  1198. data/test/workers/workarea/save_user_order_details_test.rb +130 -0
  1199. data/test/workers/workarea/send_refund_email_test.rb +74 -0
  1200. data/test/workers/workarea/status_reporter_test.rb +20 -0
  1201. data/test/workers/workarea/undo_release_test.rb +23 -0
  1202. data/test/workers/workarea/update_payment_profile_email_test.rb +27 -0
  1203. data/test/workers/workarea/verify_scheduled_releases_test.rb +71 -0
  1204. data/vendor/active_shipping/.gitignore +15 -0
  1205. data/vendor/active_shipping/.travis.yml +31 -0
  1206. data/vendor/active_shipping/.yardopts +13 -0
  1207. data/vendor/active_shipping/CHANGELOG.md +218 -0
  1208. data/vendor/active_shipping/CONTRIBUTING.md +23 -0
  1209. data/vendor/active_shipping/Gemfile +3 -0
  1210. data/vendor/active_shipping/MIT-LICENSE +20 -0
  1211. data/vendor/active_shipping/README.md +163 -0
  1212. data/vendor/active_shipping/Rakefile +35 -0
  1213. data/vendor/active_shipping/active_shipping.gemspec +38 -0
  1214. data/vendor/active_shipping/dev.yml +17 -0
  1215. data/vendor/active_shipping/gemfiles/activesupport42.gemfile +5 -0
  1216. data/vendor/active_shipping/gemfiles/activesupport50.gemfile +6 -0
  1217. data/vendor/active_shipping/gemfiles/activesupport51.gemfile +5 -0
  1218. data/vendor/active_shipping/gemfiles/activesupport52.gemfile +5 -0
  1219. data/vendor/active_shipping/gemfiles/activesupport_master.gemfile +5 -0
  1220. data/vendor/active_shipping/lib/active_shipping.rb +26 -0
  1221. data/vendor/active_shipping/lib/active_shipping/address_validation_response.rb +29 -0
  1222. data/vendor/active_shipping/lib/active_shipping/carrier.rb +183 -0
  1223. data/vendor/active_shipping/lib/active_shipping/carriers.rb +34 -0
  1224. data/vendor/active_shipping/lib/active_shipping/carriers/australia_post.rb +248 -0
  1225. data/vendor/active_shipping/lib/active_shipping/carriers/benchmark_carrier.rb +31 -0
  1226. data/vendor/active_shipping/lib/active_shipping/carriers/bogus_carrier.rb +12 -0
  1227. data/vendor/active_shipping/lib/active_shipping/carriers/canada_post.rb +263 -0
  1228. data/vendor/active_shipping/lib/active_shipping/carriers/canada_post_pws.rb +908 -0
  1229. data/vendor/active_shipping/lib/active_shipping/carriers/fedex.rb +796 -0
  1230. data/vendor/active_shipping/lib/active_shipping/carriers/kunaki.rb +155 -0
  1231. data/vendor/active_shipping/lib/active_shipping/carriers/new_zealand_post.rb +260 -0
  1232. data/vendor/active_shipping/lib/active_shipping/carriers/shipwire.rb +178 -0
  1233. data/vendor/active_shipping/lib/active_shipping/carriers/stamps.rb +860 -0
  1234. data/vendor/active_shipping/lib/active_shipping/carriers/ups.rb +1216 -0
  1235. data/vendor/active_shipping/lib/active_shipping/carriers/usps.rb +708 -0
  1236. data/vendor/active_shipping/lib/active_shipping/carriers/usps_returns.rb +85 -0
  1237. data/vendor/active_shipping/lib/active_shipping/delivery_date_estimate.rb +20 -0
  1238. data/vendor/active_shipping/lib/active_shipping/delivery_date_estimates_response.rb +11 -0
  1239. data/vendor/active_shipping/lib/active_shipping/errors.rb +35 -0
  1240. data/vendor/active_shipping/lib/active_shipping/external_return_label_request.rb +417 -0
  1241. data/vendor/active_shipping/lib/active_shipping/external_return_label_response.rb +24 -0
  1242. data/vendor/active_shipping/lib/active_shipping/label.rb +10 -0
  1243. data/vendor/active_shipping/lib/active_shipping/label_response.rb +10 -0
  1244. data/vendor/active_shipping/lib/active_shipping/location.rb +166 -0
  1245. data/vendor/active_shipping/lib/active_shipping/package.rb +165 -0
  1246. data/vendor/active_shipping/lib/active_shipping/package_item.rb +60 -0
  1247. data/vendor/active_shipping/lib/active_shipping/rate_estimate.rb +196 -0
  1248. data/vendor/active_shipping/lib/active_shipping/rate_response.rb +32 -0
  1249. data/vendor/active_shipping/lib/active_shipping/response.rb +43 -0
  1250. data/vendor/active_shipping/lib/active_shipping/shipment_event.rb +22 -0
  1251. data/vendor/active_shipping/lib/active_shipping/shipment_packer.rb +108 -0
  1252. data/vendor/active_shipping/lib/active_shipping/shipping_response.rb +33 -0
  1253. data/vendor/active_shipping/lib/active_shipping/tracking_response.rb +119 -0
  1254. data/vendor/active_shipping/lib/active_shipping/version.rb +3 -0
  1255. data/vendor/active_shipping/lib/certs/eParcel.dtd +111 -0
  1256. data/vendor/active_shipping/shipit.rubygems.yml +1 -0
  1257. data/vendor/active_shipping/test/console.rb +39 -0
  1258. data/vendor/active_shipping/test/credentials.yml +69 -0
  1259. data/vendor/active_shipping/test/fixtures/files/label1.pdf +0 -0
  1260. data/vendor/active_shipping/test/fixtures/json/australia_post/calculate_domestic.json +13 -0
  1261. data/vendor/active_shipping/test/fixtures/json/australia_post/calculate_domestic_2.json +19 -0
  1262. data/vendor/active_shipping/test/fixtures/json/australia_post/calculate_international.json +12 -0
  1263. data/vendor/active_shipping/test/fixtures/json/australia_post/calculate_international_2.json +15 -0
  1264. data/vendor/active_shipping/test/fixtures/json/australia_post/error_message.json +5 -0
  1265. data/vendor/active_shipping/test/fixtures/json/australia_post/service_domestic.json +117 -0
  1266. data/vendor/active_shipping/test/fixtures/json/australia_post/service_domestic_2.json +117 -0
  1267. data/vendor/active_shipping/test/fixtures/json/australia_post/service_international.json +76 -0
  1268. data/vendor/active_shipping/test/fixtures/json/australia_post/service_international_2.json +59 -0
  1269. data/vendor/active_shipping/test/fixtures/json/newzealandpost/domestic_book.json +1 -0
  1270. data/vendor/active_shipping/test/fixtures/json/newzealandpost/domestic_default.json +1 -0
  1271. data/vendor/active_shipping/test/fixtures/json/newzealandpost/domestic_error.json +1 -0
  1272. data/vendor/active_shipping/test/fixtures/json/newzealandpost/domestic_poster.json +1 -0
  1273. data/vendor/active_shipping/test/fixtures/json/newzealandpost/domestic_small_half_pound.json +1 -0
  1274. data/vendor/active_shipping/test/fixtures/json/newzealandpost/international_book.json +1 -0
  1275. data/vendor/active_shipping/test/fixtures/json/newzealandpost/international_new_zealand_wii.json +1 -0
  1276. data/vendor/active_shipping/test/fixtures/json/newzealandpost/international_small_half_pound.json +1 -0
  1277. data/vendor/active_shipping/test/fixtures/json/newzealandpost/international_wii.json +1 -0
  1278. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_request.xml +25 -0
  1279. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_response.xml +130 -0
  1280. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_response_error.xml +16 -0
  1281. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_response_french.xml +122 -0
  1282. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_response_with_nil_value.xml +164 -0
  1283. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_response_with_postal_outlet.xml +155 -0
  1284. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_response_with_postal_outlet_french.xml +274 -0
  1285. data/vendor/active_shipping/test/fixtures/xml/canadapost/example_response_with_strange_delivery_date.xml +130 -0
  1286. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/dnc_tracking_details_en.xml +112 -0
  1287. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/merchant_details_error.xml +7 -0
  1288. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/merchant_details_response.xml +7 -0
  1289. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/option_response.xml +13 -0
  1290. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/option_response_no_conflicts.xml +7 -0
  1291. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/rates_info.xml +190 -0
  1292. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/rates_info_error.xml +7 -0
  1293. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/receipt_response.xml +42 -0
  1294. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/receipt_response_no_priced_options.xml +36 -0
  1295. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/register_token_error.xml +7 -0
  1296. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/register_token_response.xml +3 -0
  1297. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/service_options_response.xml +42 -0
  1298. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/services_error.xml +6 -0
  1299. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/services_response.xml +32 -0
  1300. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/shipment_domestic.xml +69 -0
  1301. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/shipment_response.xml +20 -0
  1302. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/shipment_us.xml +69 -0
  1303. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/tracking_details_en.xml +152 -0
  1304. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/tracking_details_en_error.xml +7 -0
  1305. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/tracking_details_en_undelivered.xml +116 -0
  1306. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/tracking_details_fr.xml +156 -0
  1307. data/vendor/active_shipping/test/fixtures/xml/canadapost_pws/tracking_details_no_expected_delivery_date.xml +40 -0
  1308. data/vendor/active_shipping/test/fixtures/xml/fedex/create_shipment_response.xml +2 -0
  1309. data/vendor/active_shipping/test/fixtures/xml/fedex/freight_rate_request.xml +82 -0
  1310. data/vendor/active_shipping/test/fixtures/xml/fedex/freight_rate_response.xml +506 -0
  1311. data/vendor/active_shipping/test/fixtures/xml/fedex/invalid_fedex_reply.xml +27 -0
  1312. data/vendor/active_shipping/test/fixtures/xml/fedex/ottawa_to_beverly_hills_commercial_rate_request.xml +79 -0
  1313. data/vendor/active_shipping/test/fixtures/xml/fedex/ottawa_to_beverly_hills_no_saturday_rate_request.xml +79 -0
  1314. data/vendor/active_shipping/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_request.xml +80 -0
  1315. data/vendor/active_shipping/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_response.xml +214 -0
  1316. data/vendor/active_shipping/test/fixtures/xml/fedex/raterequest_reply.xml +213 -0
  1317. data/vendor/active_shipping/test/fixtures/xml/fedex/raterequest_response_with_ground_home_delivery.xml +206 -0
  1318. data/vendor/active_shipping/test/fixtures/xml/fedex/reply_without_notifications.xml +185 -0
  1319. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_request.xml +29 -0
  1320. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_bad_tracking_number.xml +20 -0
  1321. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_delivered_at_door.xml +254 -0
  1322. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml +403 -0
  1323. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml +269 -0
  1324. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_empty_status_detail.xml +84 -0
  1325. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml +52 -0
  1326. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_failure_code_9080.xml +51 -0
  1327. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_in_transit.xml +127 -0
  1328. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_invalid_tracking_number.xml +52 -0
  1329. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_missing_status_code.xml +89 -0
  1330. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_multiple_results.xml +100 -0
  1331. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_not_found.xml +52 -0
  1332. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_shipment_exception.xml +209 -0
  1333. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_unable_to_process.xml +32 -0
  1334. data/vendor/active_shipping/test/fixtures/xml/fedex/tracking_response_with_blank_state.xml +107 -0
  1335. data/vendor/active_shipping/test/fixtures/xml/fedex/unknown_fedex_document_reply.xml +3 -0
  1336. data/vendor/active_shipping/test/fixtures/xml/kunaki/invalid_state_response.xml +3 -0
  1337. data/vendor/active_shipping/test/fixtures/xml/kunaki/no_valid_items_response.xml +3 -0
  1338. data/vendor/active_shipping/test/fixtures/xml/kunaki/successful_rates_response.xml +3 -0
  1339. data/vendor/active_shipping/test/fixtures/xml/kunaki/unsuccessful_rates_response.xml +9 -0
  1340. data/vendor/active_shipping/test/fixtures/xml/shipwire/international_rates_response.xml +17 -0
  1341. data/vendor/active_shipping/test/fixtures/xml/shipwire/new_carrier_rate_response.xml +18 -0
  1342. data/vendor/active_shipping/test/fixtures/xml/shipwire/no_rates_response.xml +7 -0
  1343. data/vendor/active_shipping/test/fixtures/xml/shipwire/rates_response.xml +36 -0
  1344. data/vendor/active_shipping/test/fixtures/xml/shipwire/rates_response_no_estimate.xml +14 -0
  1345. data/vendor/active_shipping/test/fixtures/xml/stamps/authenticate_user_request.xml +15 -0
  1346. data/vendor/active_shipping/test/fixtures/xml/stamps/authenticate_user_response.xml +10 -0
  1347. data/vendor/active_shipping/test/fixtures/xml/stamps/cleanse_address_request.xml +19 -0
  1348. data/vendor/active_shipping/test/fixtures/xml/stamps/cleanse_address_response.xml +27 -0
  1349. data/vendor/active_shipping/test/fixtures/xml/stamps/create_indicium_request.xml +69 -0
  1350. data/vendor/active_shipping/test/fixtures/xml/stamps/create_indicium_response.xml +40 -0
  1351. data/vendor/active_shipping/test/fixtures/xml/stamps/expired_authenticator_response.xml +15 -0
  1352. data/vendor/active_shipping/test/fixtures/xml/stamps/get_account_info_request.xml +11 -0
  1353. data/vendor/active_shipping/test/fixtures/xml/stamps/get_account_info_response.xml +36 -0
  1354. data/vendor/active_shipping/test/fixtures/xml/stamps/get_purchase_status_request.xml +12 -0
  1355. data/vendor/active_shipping/test/fixtures/xml/stamps/get_purchase_status_response.xml +16 -0
  1356. data/vendor/active_shipping/test/fixtures/xml/stamps/get_rates_request.xml +19 -0
  1357. data/vendor/active_shipping/test/fixtures/xml/stamps/get_rates_response.xml +351 -0
  1358. data/vendor/active_shipping/test/fixtures/xml/stamps/purchase_postage_request.xml +13 -0
  1359. data/vendor/active_shipping/test/fixtures/xml/stamps/purchase_postage_response.xml +17 -0
  1360. data/vendor/active_shipping/test/fixtures/xml/stamps/track_shipment_request.xml +12 -0
  1361. data/vendor/active_shipping/test/fixtures/xml/stamps/track_shipment_response.xml +45 -0
  1362. data/vendor/active_shipping/test/fixtures/xml/usps/api_error_rate_response.xml +53 -0
  1363. data/vendor/active_shipping/test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_base_rate_response.xml +2 -0
  1364. data/vendor/active_shipping/test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_plus_rate_response.xml +258 -0
  1365. data/vendor/active_shipping/test/fixtures/xml/usps/beverly_hills_to_new_york_book_rate_response.xml +108 -0
  1366. data/vendor/active_shipping/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_base_rate_response.xml +84 -0
  1367. data/vendor/active_shipping/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_plus_rate_response.xml +212 -0
  1368. data/vendor/active_shipping/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_rate_response.xml +230 -0
  1369. data/vendor/active_shipping/test/fixtures/xml/usps/first_class_packages_with_invalid_mail_type_response.xml +12 -0
  1370. data/vendor/active_shipping/test/fixtures/xml/usps/first_class_packages_with_mail_type_response.xml +16 -0
  1371. data/vendor/active_shipping/test/fixtures/xml/usps/first_class_packages_without_mail_type_response.xml +12 -0
  1372. data/vendor/active_shipping/test/fixtures/xml/usps/invalid_xml_response.xml +10 -0
  1373. data/vendor/active_shipping/test/fixtures/xml/usps/invalid_xml_tracking_response_error.xml +2 -0
  1374. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_request.xml +10 -0
  1375. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_request_batch.xml +12 -0
  1376. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_response.xml +162 -0
  1377. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_response_alt.xml +53 -0
  1378. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_response_batch.xml +231 -0
  1379. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_response_failure.xml +11 -0
  1380. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_response_not_available.xml +12 -0
  1381. data/vendor/active_shipping/test/fixtures/xml/usps/tracking_response_test_error.xml +8 -0
  1382. data/vendor/active_shipping/test/fixtures/xml/usps/us_rate_request.xml +18 -0
  1383. data/vendor/active_shipping/test/fixtures/xml/usps/us_rate_request_large.xml +18 -0
  1384. data/vendor/active_shipping/test/fixtures/xml/usps/world_rate_request_only_country.xml +22 -0
  1385. data/vendor/active_shipping/test/fixtures/xml/usps/world_rate_request_with_value.xml +24 -0
  1386. data/vendor/active_shipping/test/fixtures/xml/usps/world_rate_request_without_value.xml +24 -0
  1387. data/vendor/active_shipping/test/fixtures/xml/usps_returns/external_return_label_response.xml +2 -0
  1388. data/vendor/active_shipping/test/fixtures/xml/usps_returns/external_return_label_response_failure.xml +10 -0
  1389. data/vendor/active_shipping/test/remote/australia_post_test.rb +140 -0
  1390. data/vendor/active_shipping/test/remote/canada_post_pws_platform_test.rb +259 -0
  1391. data/vendor/active_shipping/test/remote/canada_post_pws_test.rb +169 -0
  1392. data/vendor/active_shipping/test/remote/canada_post_test.rb +55 -0
  1393. data/vendor/active_shipping/test/remote/fedex_test.rb +400 -0
  1394. data/vendor/active_shipping/test/remote/kunaki_test.rb +37 -0
  1395. data/vendor/active_shipping/test/remote/new_zealand_post_test.rb +149 -0
  1396. data/vendor/active_shipping/test/remote/shipwire_test.rb +84 -0
  1397. data/vendor/active_shipping/test/remote/stamps_test.rb +396 -0
  1398. data/vendor/active_shipping/test/remote/usps_returns_test.rb +72 -0
  1399. data/vendor/active_shipping/test/remote/usps_test.rb +243 -0
  1400. data/vendor/active_shipping/test/test_helper.rb +295 -0
  1401. data/vendor/active_shipping/test/unit/carrier_test.rb +130 -0
  1402. data/vendor/active_shipping/test/unit/carriers/australia_post_test.rb +181 -0
  1403. data/vendor/active_shipping/test/unit/carriers/benchmark_test.rb +18 -0
  1404. data/vendor/active_shipping/test/unit/carriers/canada_post_pws_rating_test.rb +379 -0
  1405. data/vendor/active_shipping/test/unit/carriers/canada_post_pws_register_test.rb +76 -0
  1406. data/vendor/active_shipping/test/unit/carriers/canada_post_pws_shipping_test.rb +258 -0
  1407. data/vendor/active_shipping/test/unit/carriers/canada_post_pws_test.rb +59 -0
  1408. data/vendor/active_shipping/test/unit/carriers/canada_post_pws_tracking_test.rb +154 -0
  1409. data/vendor/active_shipping/test/unit/carriers/canada_post_test.rb +148 -0
  1410. data/vendor/active_shipping/test/unit/carriers/fedex_test.rb +693 -0
  1411. data/vendor/active_shipping/test/unit/carriers/kunaki_test.rb +56 -0
  1412. data/vendor/active_shipping/test/unit/carriers/new_zealand_post_test.rb +177 -0
  1413. data/vendor/active_shipping/test/unit/carriers/shipwire_test.rb +188 -0
  1414. data/vendor/active_shipping/test/unit/carriers/stamps_test.rb +245 -0
  1415. data/vendor/active_shipping/test/unit/carriers/usps_returns_test.rb +45 -0
  1416. data/vendor/active_shipping/test/unit/carriers/usps_test.rb +633 -0
  1417. data/vendor/active_shipping/test/unit/carriers_test.rb +16 -0
  1418. data/vendor/active_shipping/test/unit/external_return_label_request_test.rb +258 -0
  1419. data/vendor/active_shipping/test/unit/location_test.rb +234 -0
  1420. data/vendor/active_shipping/test/unit/package_item_test.rb +232 -0
  1421. data/vendor/active_shipping/test/unit/package_test.rb +404 -0
  1422. data/vendor/active_shipping/test/unit/rate_estimate_test.rb +93 -0
  1423. data/vendor/active_shipping/test/unit/response_test.rb +38 -0
  1424. data/vendor/active_shipping/test/unit/shipment_event_test.rb +20 -0
  1425. data/vendor/active_shipping/test/unit/shipment_packer_test.rb +212 -0
  1426. data/vendor/active_shipping/test/unit/tracking_response_test.rb +41 -0
  1427. data/workarea-core.gemspec +98 -0
  1428. metadata +2585 -0
@@ -0,0 +1,88 @@
1
+ module Workarea
2
+ class << self
3
+ delegate :add_append, to: :'Workarea::Plugin'
4
+
5
+ %w(stylesheets javascripts partials).each do |type|
6
+ delegate :"append_#{type}", :"#{type}_appends", to: :'Workarea::Plugin'
7
+ end
8
+ end
9
+
10
+ # Colors used for styling executable output
11
+ COLOR_CODES = {
12
+ red: 31,
13
+ green: 32,
14
+ yellow: 33
15
+ }
16
+
17
+ # Shortcut for configuration, passes config
18
+ # to the block given.
19
+ #
20
+ # @example Set an option
21
+ # Workarea.configure do |config|
22
+ # config.some_value = true
23
+ # end
24
+ #
25
+ def self.configure
26
+ yield(config)
27
+ end
28
+
29
+ # A shortcut to the Rails' application config
30
+ # relevant to Workarea.
31
+ #
32
+ # @return [ActiveSupport::Configurable::Configuration]
33
+ #
34
+ def self.config
35
+ @custom_config.presence || Configuration.config
36
+ end
37
+
38
+ def self.with_config
39
+ @custom_config ||= config.deep_dup
40
+ yield(@custom_config)
41
+ ensure
42
+ @custom_config = nil
43
+ end
44
+
45
+ # A [Redis] client for general application use.
46
+ #
47
+ # @return [Redis]
48
+ #
49
+ def self.redis
50
+ @redis ||= Redis.new(Configuration::Redis.persistent.to_h)
51
+ end
52
+
53
+ # The [Elasticsearch::Client] for general application use.
54
+ #
55
+ # @return [Elasticsearch::Client]
56
+ #
57
+ def self.elasticsearch
58
+ @elasticsearch ||= ::Elasticsearch::Client.new(
59
+ Configuration::Elasticsearch.find
60
+ )
61
+ end
62
+
63
+ # The [Fog::Storage::AWS] instance for internal application S3 use.
64
+ #
65
+ # @return [Fog::Storage::AWS]
66
+ #
67
+ def self.s3
68
+ @s3 ||= begin
69
+ options = { region: Configuration::S3.region.to_s }
70
+
71
+ if Configuration::S3.use_iam_profile?
72
+ options.merge!(use_iam_profile: true)
73
+ else
74
+ options.merge!(
75
+ aws_access_key_id: Configuration::S3.access_key_id.to_s,
76
+ aws_secret_access_key: Configuration::S3.secret_access_key.to_s
77
+ )
78
+ end
79
+
80
+ Fog.mock! unless Configuration::S3.configured?
81
+ Fog::AWS::Storage.new(options)
82
+ end
83
+ end
84
+ end
85
+
86
+ require 'workarea/core'
87
+ require 'workarea/admin'
88
+ require 'workarea/storefront'
@@ -0,0 +1,23 @@
1
+ module Workarea
2
+ module AssetEndpoints
3
+ class Base
4
+ attr_reader :params, :app, :env
5
+
6
+ def initialize(params, app, env)
7
+ @params = params
8
+ @app = app
9
+ @env = env
10
+ end
11
+
12
+ def result
13
+ raise(NotImplementedError, "#{self.class} must implement #result")
14
+ end
15
+
16
+ private
17
+
18
+ def request
19
+ @request ||= Rack::Request.new(env)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ module Workarea
2
+ module AssetEndpoints
3
+ class Favicons < Base
4
+ def result
5
+ return unless Workarea.config.favicon_allowed_sizes.include?(params[:size])
6
+ find_asset(params[:size])&.favicon(params[:size])
7
+ end
8
+
9
+ def ico
10
+ find_asset('ico')&.favicon_ico
11
+ end
12
+
13
+ private
14
+
15
+ def find_asset(type)
16
+ Content::Asset.favicons(type).first ||
17
+ Content::Asset.favicons.first ||
18
+ Content::Asset.favicon_placeholder
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module Workarea
2
+ module AssetEndpoints
3
+ class ProductImages < Base
4
+ def result
5
+ Catalog::Product
6
+ .find_by(slug: params[:slug])
7
+ .images
8
+ .find(params[:image_id])
9
+ .process(params[:job])
10
+
11
+ rescue Mongoid::Errors::DocumentNotFound
12
+ Catalog::ProductPlaceholderImage.cached.process(params[:job])
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ module Workarea
2
+ module AssetEndpoints
3
+ class ProductPlaceholderImages < Base
4
+ def result
5
+ Catalog::ProductPlaceholderImage.cached.process(params[:job])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ # from Geocoder GitHub Repository
2
+ #
3
+ # This class implements a cache with simple delegation to the Redis store, but
4
+ # when it creates a key/value pair, it also sends an EXPIRE command with a TTL.
5
+ #
6
+ module Workarea
7
+ class AutoexpireCacheRedis
8
+ def initialize(store, ttl = 259200) # "time to live" of 3 days
9
+ @store = store
10
+ @ttl = ttl
11
+ end
12
+
13
+ def [](url)
14
+ @store.get(url)
15
+ end
16
+
17
+ def []=(url, value)
18
+ @store.setex(url, @ttl, value)
19
+ end
20
+
21
+ def keys
22
+ @store.keys
23
+ end
24
+
25
+ def del(url)
26
+ @store.del(url)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ module Workarea
2
+ class BogusCarrier < ActiveShipping::Workarea
3
+ MESSAGE = 'SUCCESS - 0000 Success'
4
+
5
+ def create_shipment(origin, destination, packages, options = {})
6
+ labels = [ActiveShipping::Label.new(generate_tracking_number, image)]
7
+ ActiveShipping::LabelResponse.new(true, MESSAGE, {}, labels: labels)
8
+ end
9
+
10
+ def generate_tracking_number
11
+ "1ZX1A#{Array.new(13) { rand(0..9) }.join}"
12
+ end
13
+
14
+ def image
15
+ IO.read(Core::Engine.root.join('test', 'fixtures', 'label.png'))
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,106 @@
1
+ module Workarea
2
+ module Cache
3
+ class RackCacheKey < Rack::Cache::Key
4
+ def generate
5
+ "#{super}:#{@request.env['workarea.cache_varies']}"
6
+ end
7
+ end
8
+
9
+ class Varies
10
+ class UnsupportedSessionAccess < RuntimeError; end
11
+
12
+ attr_reader :env
13
+ delegate_missing_to :request
14
+
15
+ # This allows varying the HTTP and fragment caching on cookies, session or
16
+ # other request-based info (like headers). This is useful when you'd like
17
+ # to vary responses based on some data the browser won't be sending - like
18
+ # what segments a request will be in or geolocation. You'll want to be
19
+ # VERY careful when doing this - remember this block will be run on
20
+ # _every_ request, so doing expensive things like DB queries is
21
+ # discouraged.
22
+ #
23
+ # The source of data on which you can vary is an ActionDispatch::Request:
24
+ # http://api.rubyonrails.org/classes/ActionDispatch/Request.html
25
+ #
26
+ # This allows you to access headers, session, cookies, IP address, etc.
27
+ # Within this block, all missing method calls are delegated to an instance
28
+ # of ActionDispatch::Request. You also have access to an instance of
29
+ # Workarea::Geolocation to work with as well (available by calling
30
+ # geolocation).
31
+ #
32
+ #
33
+ # Here are some examples of how you might use this varying:
34
+ #
35
+ #
36
+ # Retailer wants separate content for each region:
37
+ # Workarea::Cache::Varies.on { geolocation.region }
38
+ #
39
+ #
40
+ # Some users have custom price lists:
41
+ # # in app/controllers/workarea/application_controller.decorator
42
+ # after_action :set_price_list
43
+ #
44
+ # def set_price_list
45
+ # session[:price_list_id] = current_user.try(:price_list_id)
46
+ # end
47
+ #
48
+ # # in config/initializers/workarea.rb
49
+ # Workarea::Cache::Varies.on { session[:price_list_id] }
50
+ #
51
+ #
52
+ # A segmentation plugin sets segments based on the current user:
53
+ # # in app/controllers/workarea/application_controller.decorator
54
+ # after_action :set_segment_ids
55
+ #
56
+ # def set_segment_ids
57
+ # session[:segment_ids] = Segments.find_matching(current_user).map(&:id)
58
+ # end
59
+ #
60
+ # # in config/initializers/workarea.rb
61
+ # Workarea::Cache::Varies.on { session[:segment_ids].sort.join }
62
+ #
63
+ #
64
+ def self.on(&block)
65
+ Workarea.config.cache_varies ||= []
66
+ Workarea.config.cache_varies << block
67
+ end
68
+
69
+ def initialize(env, varies = Workarea.config.cache_varies)
70
+ @env = env
71
+ @varies = Array.wrap(varies)
72
+ end
73
+
74
+ def to_s
75
+ @to_s ||= @varies.map { |v| instance_exec(&v).to_s }.join(':')
76
+ end
77
+
78
+ def cookies
79
+ request.cookie_jar
80
+ end
81
+
82
+ def session
83
+ raise UnsupportedSessionAccess unless session_cookie_store?
84
+ @session ||= (cookies.signed_or_encrypted[session_key] || {}).with_indifferent_access
85
+ end
86
+
87
+ def request
88
+ @request ||= ActionDispatch::Request.new(env)
89
+ end
90
+
91
+ def geolocation
92
+ @geolocation ||= Workarea::Geolocation.new(env, request.remote_ip)
93
+ end
94
+
95
+ private
96
+
97
+ def session_key
98
+ Rails.application.config.session_options[:key]
99
+ end
100
+
101
+ def session_cookie_store?
102
+ Rails.application.config.session_store == ActionDispatch::Session::CookieStore
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,87 @@
1
+ namespace :workarea do
2
+ desc 'Generate a CHANGELOG.md file based on Git history'
3
+ task changelog: :environment do
4
+ # Ensure directory
5
+ if Dir['.git'].empty?
6
+ raise "the changelog task must be run from this repo's root directory"
7
+ end
8
+
9
+ # set up & capture git log
10
+ from =
11
+ if `git tag`.empty?
12
+ `git rev-list --max-parents=0 HEAD`.strip
13
+ else
14
+ `git describe --tags --abbrev=0`.strip
15
+ end
16
+ git_log_format = '%H[/PIECE]%s[/PIECE]%b[/PIECE]%an[/ENTRY]'
17
+ log = `git log #{from}..HEAD --pretty=format:'#{git_log_format}' --no-merges`
18
+
19
+ # assumes only one gemspec in project root
20
+ gem = Gem::Specification.load(Dir['./*.gemspec'].first)
21
+ gem_name = gem.name.tr('_', '-').split('-').map(&:capitalize).join(' ')
22
+ gem_version = gem.version.version
23
+
24
+ # Iterate through each commit in the log, cataloging entries and reverts
25
+ entries = {}
26
+ reverts = []
27
+ log.split('[/ENTRY]').each do |commit|
28
+ pieces = commit.split('[/PIECE]').map(&:strip)
29
+ sha, subject, body, author = pieces
30
+
31
+ next if subject =~ /update changelog/i
32
+ next if subject =~ /release version/i
33
+ next if body =~ /no changelog/i
34
+
35
+ entries[sha] = {
36
+ subject: subject,
37
+ body: body,
38
+ author: author
39
+ }
40
+
41
+ if subject.start_with?('Revert')
42
+ reverts << body.match(/[a-f0-9]{40}/)
43
+ reverts << sha
44
+ end
45
+ end
46
+
47
+ # Remove revert commits from log entries
48
+ reverts.each { |key| entries.delete key }
49
+
50
+ # guard against empty changelog
51
+ if entries.empty?
52
+ raise "the generated changelog must have at least one entry"
53
+ end
54
+
55
+ # set message title
56
+ message = []
57
+ message << "#{gem_name} #{gem_version} (#{Date.today})"
58
+ message << '-' * 80 + "\n"
59
+
60
+ # loop through all entries, templetizing their contents
61
+ entries.each do |sha, entry|
62
+ message << "* #{entry[:subject]}\n"
63
+ entry[:body].each_line do |line|
64
+ if line.strip.empty?
65
+ message << ''
66
+ else
67
+ message << " #{line.strip}"
68
+ end
69
+ end
70
+ message << " #{entry[:author]}\n"
71
+ end
72
+
73
+ # ensure and append to changelog
74
+ FileUtils.touch('CHANGELOG.md')
75
+
76
+ tempfile = Tempfile.new
77
+ changelog = File.expand_path('./CHANGELOG.md')
78
+
79
+ File.open(tempfile, 'a') do |file|
80
+ file << message.join("\n")
81
+ file << "\n\n\n"
82
+ file << File.read(changelog)
83
+ end
84
+
85
+ FileUtils.mv(tempfile, changelog)
86
+ end
87
+ end
@@ -0,0 +1,1273 @@
1
+ module Workarea
2
+ module Configuration
3
+ def self.config
4
+ Rails.configuration.workarea
5
+ end
6
+
7
+ def self.setup_defaults
8
+ Rails.configuration.workarea = ActiveSupport::Configurable::Configuration.new
9
+
10
+ config.site_name = 'Workarea'
11
+ config.host = 'www.example.com'
12
+ config.email_to = 'customerservice@example.com'
13
+ config.email_from = 'noreply@example.com'
14
+
15
+ # Config sent to the ImageMagick through Dragonfly for optimizing jpgs
16
+ # All metadata profiles are removed, comments cleared by comment -set ""
17
+ # +profile takes a list of profiles to be removed
18
+ # 8bim: Adobe path information
19
+ # exif: Camera metadata
20
+ # iptc: information exchange metadata
21
+ # xmp: Extensible metadata platform (Adobe Metadata)
22
+ config.jpg_encode_options = '+profile "8bim,exif,iptc,xmp" -set comment "" -interlace Plane -quality 85'
23
+
24
+ # Stores instances of payment gateways for Workarea::Payment to use
25
+ config.gateways = ActiveSupport::Configurable::Configuration.new
26
+ config.gateways.shipping = ActiveShipping::Workarea.new
27
+
28
+ # Whether or not to allow po box addresses for shipping/payment
29
+ config.allow_shipping_address_po_box = false
30
+ config.allow_payment_address_po_box = true
31
+
32
+ # How to validate whether an address is a PO Box
33
+ config.po_box_regex = /(?:P(?:ost(?:al)?)?[\.\-\s]*(?:(?:O(?:ffice)?[\.\-\s]*)?B(?:ox|in|\b|\d)|o(?:ffice|\b)(?:[-\s]*\d)|code)|box[-\s\b]*\d)/i
34
+
35
+ # How long a user stays logged in
36
+ config.admin_session_timeout = 1.hour
37
+ config.customer_session_timeout = 10.minutes
38
+
39
+ # How long the completed order cookie lasts, i.e. how long they have to
40
+ # sign up for an account after placing the order and have the order
41
+ # details copied to the account. Be careful changing this.
42
+ config.completed_order_timeout = 10.minutes
43
+
44
+ # How long a password reset stays valid
45
+ config.password_reset_timeout = 2.hours
46
+
47
+ # How long the built-in HTTP cache lasts TODO remove in v4
48
+ config.page_cache_ttl = 15.minutes
49
+
50
+ # Where to store Dragonfly asset files
51
+ config.asset_store = (Rails.env.test? || Rails.env.development?) ? :file_system : :s3
52
+
53
+ # Different types of available Content::Assets
54
+ config.asset_types = %w(image pdf flash video audio text)
55
+
56
+ # Product detail page templates
57
+ config.product_templates = [:option_selects, :option_thumbnails]
58
+
59
+ # Customization classes available to validate product customizations
60
+ config.customization_types = []
61
+
62
+ # How many times to retry image importing on failure
63
+ config.images_import_retries = 2
64
+
65
+ # How long an order is considered active before considering it abandoned
66
+ config.order_active_period = 2.hours
67
+
68
+ # How long to lock an order when an attempt to place it is being made
69
+ # @deprecated as of v3.2 locking is handled via Workarea::Lock
70
+ config.order_lock_period = 10.seconds
71
+
72
+ # How long a checkout can be idle before the user is forced to restart
73
+ config.checkout_expiration = 15.minutes
74
+
75
+ # How long to wait until abandoned orders are deleted from the database
76
+ config.order_expiration_period = 6.months
77
+
78
+ # Number of orders to display on the user order history page
79
+ config.storefront_user_order_display_count = 50
80
+
81
+ # The available tender types for purchase/refund, used in order to
82
+ # determine purchase precedence and in reverse for refund precedence.
83
+ config.tender_types = [:store_credit, :credit_card]
84
+
85
+ # How many failed login attempts before marking the user locked out
86
+ config.allowed_login_attempts = 6
87
+
88
+ # How long an account is locked out after making too many
89
+ # failed login attempts
90
+ config.lockout_period = 30.minutes
91
+
92
+ # How long an adminstrators password lasts
93
+ config.password_lifetime = 90.days
94
+
95
+ # How many passwords to keep and validate against
96
+ config.password_history_length = 4
97
+
98
+ # Password requirement level: :weak, :medium, or :strong
99
+ config.password_strength = :weak
100
+
101
+ # Default page size for products
102
+ config.per_page = 20
103
+
104
+ # The multiplier used to decay views and sales scores.
105
+ # This decay is applied weekly.
106
+ config.score_decay = 0.9
107
+
108
+ # How many search suggestions should be shown in the
109
+ # autocomplete searches
110
+ config.search_suggestions = 5
111
+
112
+ # The minimum number of search results required to consider the results
113
+ # sufficient. If a search result set is not sufficient, the search will
114
+ # try another pass with looser options to bring in more matches.
115
+ config.search_sufficient_results = 2
116
+
117
+ # Default values for search boosts
118
+ config.default_search_boosts = {
119
+ name: 3,
120
+ description: 0.25,
121
+ category_names: 1,
122
+ details: 1,
123
+ facets: 2
124
+ }
125
+
126
+ # How long logged search queries are stored
127
+ config.search_query_expiration = 30.days
128
+
129
+ # How many products to consider stale in a reindexing batch for freshness.
130
+ config.stale_products_size = 100
131
+
132
+ # Minimum number of words for content to be searchable on the storefront
133
+ config.minimum_content_search_words = 5
134
+
135
+ # Subjects list for the contact form { 'slug' => 'description' }
136
+ config.inquiry_subjects = {
137
+ 'orders' => 'Orders',
138
+ 'returns' => 'Returns and Exchanges',
139
+ 'products' => 'Product Information',
140
+ 'feedback' => 'Feedback',
141
+ 'general' => 'General Inquiry'
142
+ }
143
+
144
+ # Attributes used when copying addresses or comparing them
145
+ config.address_attributes = [
146
+ :first_name,
147
+ :last_name,
148
+ :company,
149
+ :street,
150
+ :street_2,
151
+ :city,
152
+ :region,
153
+ :postal_code,
154
+ :country,
155
+ :phone_number,
156
+ :phone_extension
157
+ ]
158
+
159
+ # User activity record length, e.g. the number of recently viewed products
160
+ # to store.
161
+ config.max_user_activities = 6
162
+
163
+ # Map of ActiveMerchant credit card issuer to friendly display name of
164
+ # issuer. Used to display issuer name and issuer icon in views. Unknown
165
+ # values will display as titleized version of the ActiveMerchant key passed
166
+ credit_card_issuers = Hash.new { |hash, key| key.titleize }
167
+ config.credit_card_issuers = credit_card_issuers.merge(
168
+ 'visa' => 'Visa',
169
+ 'diners_club' => "Diner's Club",
170
+ 'master' => 'MasterCard',
171
+ 'discover' => 'Discover',
172
+ 'american_express' => 'American Express'
173
+ )
174
+
175
+ config.credit_card_issuers['bogus'] = 'Test Card' unless Rails.env.production?
176
+
177
+ # Most credit card processors won't let a capture/purchase be refunded until
178
+ # the transaction settles. (Most processors settle once a day). If your processor
179
+ # allows immediate refuding you can include extra tests around refund operations.
180
+ config.run_credit_card_refund_tests = false
181
+
182
+ # Determines the order in which discounts are calculated.
183
+ config.discount_application_order = %w(
184
+ Workarea::Pricing::Discount::Product
185
+ Workarea::Pricing::Discount::ProductAttribute
186
+ Workarea::Pricing::Discount::Category
187
+ Workarea::Pricing::Discount::BuySomeGetSome
188
+ Workarea::Pricing::Discount::QuantityFixedPrice
189
+ Workarea::Pricing::Discount::FreeGift
190
+ Workarea::Pricing::Discount::OrderTotal
191
+ Workarea::Pricing::Discount::Shipping
192
+ )
193
+
194
+ # How long a discount can go unused before being considered stale. Stale
195
+ # discounts will be automatically deactivated, and this will show in the
196
+ # admin.
197
+ config.discount_staleness_ttl = 30.days
198
+
199
+ # Number of orders to show in account summary dashboard
200
+ config.recent_order_count = 3
201
+
202
+ # How many products show in a category summary content block
203
+ config.category_summary_product_count = 6
204
+
205
+ # How many products show in product insights content block
206
+ config.product_insights_count = 6
207
+
208
+ # Colors and theming for customer-facing emails
209
+ # TODO: v4 remove
210
+ config.email_theme = ActiveSupport::OrderedOptions.new
211
+ config.email_theme.width = 600
212
+ config.email_theme.background_color = '#ffffff'
213
+ config.email_theme.layout_link_color = '#000000'
214
+ config.email_theme.layout_separator_color = '#dddddd'
215
+ config.email_theme.layout_background_color = '#bbbbbb'
216
+ config.email_theme.banner_image_width = '277'
217
+ config.email_theme.banner_image_height = '50'
218
+ config.email_theme.heading_color = '#333333'
219
+ config.email_theme.text_color = '#000000'
220
+ config.email_theme.link_color = '#7a2d82'
221
+ config.email_theme.table_background_color = '#a9a9a8'
222
+ config.email_theme.table_border_color = '#999999'
223
+
224
+ # Number of results to show in admin jump to search autocomplete
225
+ config.default_admin_jump_to_result_count = 15
226
+
227
+ # Whether or not to enforce the Workarea.config.host meaning, redirect
228
+ # to the Workarea.config.host if the current request host doesn't match.
229
+ #
230
+ config.enforce_host = !Rails.env.test? && !Rails.env.development?
231
+
232
+ # An array of the available breakpoints for the storefront,
233
+ # Also used by admin for content preview and allowing a content block to
234
+ # conditionally show or hide at a given breakpoint.
235
+ Workarea.config.storefront_break_points = {
236
+ small: 320,
237
+ medium: 760,
238
+ wide: 960,
239
+ x_wide: 1160
240
+ }
241
+
242
+ # An array of the available breakpoints for the admin
243
+ Workarea.config.admin_break_points = {
244
+ small: 320,
245
+ medium: 760,
246
+ wide: 960,
247
+ x_wide: 1160
248
+ }
249
+
250
+ # An array of breakpoints to be used in content preview
251
+ # Can be configured independantly of all site breakpoints
252
+ config.content_preview_breakpoints = ['small', 'medium', 'wide']
253
+
254
+ # Origin location for calculating shipping costs
255
+ config.shipping_origin = {
256
+ country: 'US',
257
+ state: 'PA',
258
+ city: 'Philadelphia',
259
+ zip: '19106'
260
+ }
261
+
262
+ # Global options for calculating shipping costs
263
+ config.shipping_options = { units: :imperial }
264
+
265
+ # Default package dimensions to use for calculating shipping costs.
266
+ # It's recommended to set these to your average or standard box size when
267
+ # using shipping rates from a carrier.
268
+ #
269
+ # Dimensions on a specific Shipping::Sku will override these.
270
+ #
271
+ config.shipping_dimensions = [1, 1, 1]
272
+
273
+ # The content block types currently available. Most easily customized by
274
+ # calling Workarea::Content.define_block_types
275
+ config.content_block_types = SwappableList.new
276
+
277
+ # Field mappings for category rules
278
+ config.product_rule_fields = {
279
+ search: 'search',
280
+ category: 'facets.category_id',
281
+ price: 'numeric.price',
282
+ on_sale: 'facets.on_sale',
283
+ available_inventory: 'numeric.inventory',
284
+ created_at: 'created_at',
285
+ excluded_products: '_id'
286
+ }
287
+
288
+ # The number of activity entries to show on the admin dashboard
289
+ config.activity_size_on_dashboard = 5
290
+
291
+ # Max amount of words to use for meta description smart defaults
292
+ config.meta_description_max_words = 30
293
+
294
+ # Define content areas used by views to render content. These settings are
295
+ # used to define what areas to allow administration.
296
+ config.content_areas = {
297
+ 'category' => %w(above_results below_results),
298
+ 'checkout' => %w(confirmation confirmation_signup),
299
+ 'customization' => %w(above_results),
300
+ 'generic' => %w(default),
301
+ 'layout' => %w(header_promo footer_navigation),
302
+ 'search' => %w(results no_results)
303
+ }
304
+
305
+ # Configuration for what navigation items to show in the admin jump to
306
+ config.jump_to_navigation = {
307
+ 'Help' => :help_index_path,
308
+ 'Activity' => :activity_path,
309
+ 'Dashboard' => :root_path,
310
+ 'Products' => :catalog_products_path,
311
+ 'Assets' => :content_assets_path,
312
+ 'Categories' => :catalog_categories_path,
313
+ 'Redirects' => :navigation_redirects_path,
314
+ 'Orders' => :orders_path,
315
+ 'Pages' => :content_pages_path,
316
+ 'People' => :users_path,
317
+ 'Discounts' => :pricing_discounts_path,
318
+ 'Releases' => :releases_path,
319
+ 'Taxonomy' => :navigation_taxons_path,
320
+ 'Navigation' => :navigation_menus_path,
321
+ 'Pricing' => :pricing_skus_path,
322
+ 'Orders dashboard' => :orders_dashboards_path,
323
+ 'Catalog dashboard' => :catalog_dashboards_path,
324
+ 'Store dashboard' => :store_dashboards_path,
325
+ 'Search settings' => :search_settings_path,
326
+ 'Shipping services' => :shipping_services_path,
327
+ 'Search results customization' => :search_customizations_path,
328
+ 'Transactional email content' => :content_emails_path,
329
+ 'People dashboard' => :people_dashboards_path,
330
+ 'Inventory' => :inventory_skus_path,
331
+ 'Promo code lists' => :pricing_discount_code_lists_path,
332
+ 'Payment transactions' => :payment_transactions_path,
333
+ 'Tax categories' => :tax_categories_path,
334
+ 'Trash' => :trash_index_path,
335
+ 'Email signups' => :email_signups_path,
336
+ 'Imports and Exports' => :data_files_path,
337
+ 'Sales over Time Report' => :sales_over_time_report_path,
338
+ 'Average Order Value Report' => :average_order_value_report_path,
339
+ 'Sales by Traffic Referrer Report' => :sales_by_traffic_referrer_report_path,
340
+ 'Sales by Product Report' => :sales_by_product_report_path,
341
+ 'Sales by Category Report' => :sales_by_category_report_path,
342
+ 'Sales by SKU Report' => :sales_by_sku_report_path,
343
+ 'Sales by Discount Report' => :sales_by_discount_report_path,
344
+ 'Sales by Country Report' => :sales_by_country_report_path,
345
+ 'Customers Report' => :customers_report_path,
346
+ 'First-time vs Returning Sales Report' => :first_time_vs_returning_sales_report_path,
347
+ 'Searches Report' => :searches_report_path,
348
+ 'Low Inventory Report' => :low_inventory_report_path
349
+ }
350
+
351
+ # Params to permit when creating URLs on browse pages for facet links
352
+ # and the sorting form. The current facets are appended to this list.
353
+ config.permitted_facet_params = [
354
+ :controller,
355
+ :action,
356
+ :id,
357
+ :utf,
358
+ :q,
359
+ :sort
360
+ ]
361
+
362
+ # For monitoring, threshold for how many sidekiq jobs can be queued before
363
+ # it is flagged as needing attention. Does not affect the behavior of sidekiq.
364
+ #
365
+ config.sidekiq_critical_queue_size = 25_000
366
+
367
+ # Exclude content related to the list of classes from being index for
368
+ # search. They will not show up in content search results.
369
+ #
370
+ config.exclude_from_content_search_index = %w(
371
+ Workarea::Catalog::Category
372
+ Workarea::Search::Customization
373
+ Workarea::Navigation::Menu
374
+ )
375
+
376
+ # Fields to be skipped when storing changesets for releases
377
+ config.untracked_release_changes_fields = %w(created_at updated_at slug)
378
+
379
+ # Placeholder text used for content block default data.
380
+ config.placeholder_text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin sagittis faucibus augue, sit amet mattis leo tincidunt ac. Nullam vulputate eleifend enim. Nunc eu lorem semper, convallis ipsum pharetra, pretium metus. Donec lobortis dolor ac metus vulputate vulputate nec at nulla. Suspendisse potenti. Praesent placerat elementum justo quis malesuada. Donec sollicitudin ligula augue, rutrum vestibulum ex rutrum in. Integer id orci eu nisl accumsan suscipit a ut sapien. Nam non justo at nibh laoreet tempus. Sed sagittis velit eu tellus imperdiet, et ultricies justo aliquet. Fusce id felis sem.'
381
+
382
+ # Maximum number of most visited to show for admin shortcuts
383
+ config.admin_max_most_visited = 3
384
+
385
+ # Maximum number of recently visited to show for admin shortcuts
386
+ # TODO unused, remove in v4
387
+ config.admin_max_recently_visited = 5
388
+
389
+ # Encoding for CSV files imported through the admin
390
+ # TODO unused, remove in v4
391
+ config.import_csv_file_encoding = 'r:ISO-8859-1'
392
+
393
+ # Number of displayable bookmarks in the admin
394
+ config.max_admin_bookmarks = 10
395
+
396
+ # What classes get run as part of Workarea::Seeds.run
397
+ # Plugins and implementations should add to this list.
398
+ config.seeds = SwappableList.new(
399
+ %w(
400
+ Workarea::SearchSettingsSeeds
401
+ Workarea::EmailContentSeeds
402
+ Workarea::TaxSeeds
403
+ Workarea::ShippingServicesSeeds
404
+
405
+ Workarea::AssetsSeeds
406
+ Workarea::CategoriesSeeds
407
+ Workarea::ProductsSeeds
408
+ Workarea::CustomerServicePagesSeeds
409
+ Workarea::BrowsingPagesSeeds
410
+ Workarea::DiscountsSeeds
411
+ Workarea::DynamicContentSeeds
412
+ Workarea::BrowseNavigationSeeds
413
+ Workarea::CustomerServiceNavigationSeeds
414
+ Workarea::SystemContentSeeds
415
+
416
+ Workarea::AdminsSeeds
417
+ Workarea::CustomersSeeds
418
+ Workarea::OrdersSeeds
419
+ Workarea::InquiriesSeeds
420
+ Workarea::HelpSeeds
421
+ Workarea::InsightsSeeds
422
+ )
423
+ )
424
+
425
+ # How many searches to index in the storefront for suggestions
426
+ config.max_searches_to_index = 1000
427
+
428
+ # The name of the asset placeholder image file
429
+ # TODO v3.5 remove
430
+ # @deprecated will be removed in v3.5, use `image_placeholder_image_name`
431
+ config.placeholder_asset_name = 'placeholder.png'
432
+
433
+ # The name of the asset placeholder image file
434
+ config.image_placeholder_image_name = 'placeholder.png'
435
+
436
+ # The name of the product placeholder image file
437
+ config.product_placeholder_image_name = 'product_placeholder.jpg'
438
+
439
+ # The name of the OpenGraph placeholder image file
440
+ config.open_graph_placeholder_image_name = 'open_graph_placeholder.png'
441
+
442
+ # The name of the OpenGraph placeholder image file
443
+ config.favicon_placeholder_image_name = 'favicon_placeholder.png'
444
+
445
+ # Additional search option types to include in query building
446
+ # query, post_filter, and aggregations are always included.
447
+ config.search_query_options = %w(sort size from suggest)
448
+
449
+ # The number of filter results returned for each filter type. As of
450
+ # ElasticSearch 5, 0 no longer denotes returning all values. A value
451
+ # greater than 0 must be defined.
452
+ config.default_search_facet_result_sizes = 10
453
+
454
+ # The number of filter results returned for any specified filter type.
455
+ # If no size is defined for a filter type, the default will be
456
+ # what's specified in the default config above.
457
+ config.search_facet_result_sizes = { color: 10, size: 10 }
458
+
459
+ # Define how facet values should be sorted when displayed on the
460
+ # storefront. You can provide a symbol for elasticsearch supported order
461
+ # options - :count, :alphabetical_asc, or :alphabetical_desc. You can also
462
+ # provide a proc or the name of a class that responds to `call`. The proc
463
+ # or class will be handed the hash of facets values with count along with
464
+ # the name of the facet and should return the sorted hash.
465
+ #
466
+ # Providing a proc
467
+ # color: -> (name, result) { # reorder results here }
468
+ #
469
+ config.search_facet_sorts = {
470
+ category: :alphabetical_asc,
471
+ color: :count,
472
+ size: 'Workarea::Search::FacetSorting::Size'
473
+ }
474
+
475
+ # The default sorting of facet types not defined in
476
+ # Workarea.config.search_facet_sorts. See search_facet_sorts for
477
+ # valid options.
478
+ config.search_facet_default_sort = :count
479
+
480
+ # The size to use for a facet aggregation when being ordered dynamically
481
+ # through a proc or class. We do this to return all values so the facets
482
+ # returned can be sorted before being narrowed to the size defined
483
+ # in Workarea.config.search_facet_result_sizes
484
+ config.search_facet_dynamic_sorting_size = 100
485
+
486
+ # The order the size facets will be rendered in on storefront search
487
+ # results and category browse.
488
+ config.search_facet_size_sort =
489
+ ['Extra Small', 'Small', 'Medium', 'Large', 'Extra Large']
490
+
491
+ # Countries available for use
492
+ config.countries = [Country['US'], Country['CA']]
493
+
494
+ # Classes to use when trying to find a name for a content block based on
495
+ # its fields. Must be a Mongoid::Document and instances must respond to
496
+ # #name
497
+ config.content_block_name_search_classes = SwappableList.new(
498
+ %w(
499
+ Workarea::Content::Asset
500
+ Workarea::Navigation::Taxon
501
+ Workarea::Catalog::Category
502
+ Workarea::Content::Page
503
+ )
504
+ )
505
+
506
+ # Mappings used for the various Elasticsearch indexes
507
+ config.elasticsearch_mappings = ActiveSupport::Configurable::Configuration.new
508
+ config.elasticsearch_mappings.admin = {
509
+ admin: {
510
+ dynamic_templates: [
511
+ {
512
+ facet_values: {
513
+ path_match: 'facets.*',
514
+ mapping: { type: 'keyword', analyzer: 'keyword' }
515
+ }
516
+ }
517
+ ],
518
+ properties: {
519
+ id: { type: 'keyword' },
520
+ name: { type: 'keyword' },
521
+ model_class: { type: 'keyword' },
522
+ type: { type: 'keyword' },
523
+ status: { type: 'keyword' },
524
+ keywords: { type: 'keyword' },
525
+ search_text: { type: 'text', analyzer: 'text_analyzer' },
526
+ jump_to_text: { type: 'text', analyzer: 'autocomplete_analyzer' },
527
+ jump_to_search_text: { type: 'text', analyzer: 'autocomplete_analyzer' },
528
+ jump_to_position: { type: 'integer' },
529
+ jump_to_param: { type: 'keyword' },
530
+ updated_at: { type: 'date' },
531
+ releasable: { type: 'boolean' },
532
+ placed_at: { type: 'date' }
533
+ }
534
+ }
535
+ }
536
+
537
+ config.elasticsearch_mappings.storefront = {
538
+ category: { properties: { query: { type: 'percolator' } } },
539
+ storefront: {
540
+ dynamic_templates: [
541
+ {
542
+ facets: {
543
+ path_match: 'facets.*',
544
+ mapping: { type: 'keyword' }
545
+ }
546
+ },
547
+ {
548
+ numeric: {
549
+ path_match: 'numeric.*',
550
+ mapping: { type: 'float' }
551
+ }
552
+ },
553
+ {
554
+ keywords: {
555
+ path_match: 'keywords.*',
556
+ mapping: { type: 'keyword' }
557
+ }
558
+ },
559
+ {
560
+ sorts: {
561
+ path_match: 'sorts.*',
562
+ mapping: { type: 'float' }
563
+ }
564
+ },
565
+ {
566
+ content: {
567
+ path_match: 'content.*',
568
+ mapping: { type: 'text', analyzer: 'text_analyzer' }
569
+ }
570
+ },
571
+ {
572
+ cache: {
573
+ path_match: 'cache.*',
574
+ mapping: { index: false }
575
+ }
576
+ }
577
+ ],
578
+ properties: {
579
+ id: { type: 'keyword' },
580
+ type: { type: 'keyword' },
581
+ slug: { type: 'keyword' },
582
+ suggestion_content: { type: 'string', analyzer: 'suggestion_analyzer' },
583
+
584
+ # This would be covered by the facets dynamic mapping but to reduce
585
+ # the likelihood of no-field-mapping errors, including
586
+ # out-of-the-box mappings here.
587
+ 'keywords.name' => { type: 'keyword' },
588
+ 'keywords.catalog_id' => { type: 'keyword' },
589
+ 'keywords.sku' => { type: 'keyword' },
590
+ 'facets.category_id' => { type: 'keyword' },
591
+ 'facets.on_sale' => { type: 'keyword' }
592
+ }
593
+ }
594
+ }
595
+
596
+ config.elasticsearch_mappings.help = {
597
+ help: {
598
+ dynamic_templates: [
599
+ {
600
+ facet_values: {
601
+ path_match: 'facets.*',
602
+ mapping: { type: 'string', analyzer: 'keyword' }
603
+ }
604
+ }
605
+ ],
606
+ properties: {
607
+ id: { type: 'string', index: 'not_analyzed' },
608
+ name: { type: 'string', analyzer: 'text_analyzer' },
609
+ body: { type: 'string', analyzer: 'text_analyzer' },
610
+ created_at: { type: 'date' }
611
+ }
612
+ }
613
+ }
614
+
615
+ config.elasticsearch_mappings.order = {
616
+ order: {
617
+ properties: {
618
+ id: { type: 'string', index: 'not_analyzed' },
619
+ email: { type: 'string', index: 'not_analyzed'},
620
+ user_id: { type: 'string', index: 'not_analyzed'},
621
+ status: { type: 'string', index: 'not_analyzed'},
622
+
623
+ placed: { type: 'boolean' },
624
+ placed_at: { type: 'date' },
625
+ placed_in: { type: 'integer' },
626
+
627
+ guest_checkout: { type: 'boolean' },
628
+ returning_customer: { type: 'boolean' },
629
+
630
+ total_value: { type: 'double' },
631
+ total_price: { type: 'double' },
632
+ total_revenue: { type: 'double' },
633
+
634
+ shipping_services: { type: 'string', index: 'not_analyzed'},
635
+ regions: { type: 'string', index: 'not_analyzed'},
636
+ payment_methods: { type: 'string', index: 'not_analyzed'},
637
+
638
+ discounts: { type: 'string', index: 'not_analyzed'},
639
+ discounts_redeemed: { type: 'integer' },
640
+
641
+ created_at: { type: 'date' },
642
+ expires_at: { type: 'date' }
643
+ }
644
+ }
645
+ }
646
+
647
+ # The Elasticsearch settings used for all indexes. Invalid if used as
648
+ # defined here because the synonym filter isn't defined. If you want to
649
+ # use these, use Workarea::Search::Settings.current.elasticsearch_settings
650
+ # instead. That method will add the synonyms for the current locale, as
651
+ # defined by the admin.
652
+ #
653
+ # Feel free to customize these to achieve the best possible search
654
+ # results. Read the documentation here:
655
+ #
656
+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html
657
+ #
658
+ config.elasticsearch_settings = {
659
+ analysis: {
660
+ filter: {
661
+ snowball: { type: 'snowball', language: 'English' }
662
+ },
663
+ analyzer: {
664
+ text_analyzer: {
665
+ type: 'custom',
666
+ tokenizer: 'standard',
667
+ char_filter: %w(html_strip),
668
+ filter: %w(lowercase synonym snowball)
669
+ },
670
+ autocomplete_analyzer: {
671
+ type: 'custom',
672
+ tokenizer: 'standard',
673
+ filter: %w(lowercase stop)
674
+ },
675
+ suggestion_analyzer: {
676
+ type: 'custom',
677
+ tokenizer: 'standard',
678
+ char_filter: %w(html_strip),
679
+ filter: %w(lowercase)
680
+ }
681
+ }
682
+ }
683
+ }
684
+
685
+ # In test env, only use a single shard. This is for consistency when
686
+ # scoring documents in testing. Elasticsearch scores can vary based on
687
+ # number of shards.
688
+ #
689
+ # http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/relevance-is-broken.html
690
+ #
691
+ if Rails.env.test?
692
+ config.elasticsearch_settings.merge!(
693
+ number_of_shards: 1,
694
+ number_of_replicas: 0
695
+ )
696
+ end
697
+
698
+ # Used in the logarithm to smooth out the effect views has on product
699
+ # scoring in search. A factor greater than 1 increases the effect, and a
700
+ # factor less than 1 decreases the effect
701
+ config.default_search_views_factor = 1
702
+
703
+ # Used to add in scores from fields that didn't win the dismax. Setting it
704
+ # to 1 makes it an even boolean OR between fields.
705
+ config.search_dismax_tie_breaker = 0.5
706
+
707
+ # The minimum number of documents a term should appear in before being
708
+ # considered a relevant term to suggest in search.
709
+ config.search_suggestion_min_doc_freq = 2
710
+
711
+ # Used in the admin ChangesetsHelper to map types of releasables to icons
712
+ # Icons are displayed on planned changes view
713
+ config.releasable_icons = {
714
+ block: 'workarea/admin/icons/content.svg',
715
+ customization: 'workarea/admin/icons/search.svg',
716
+ discount: 'workarea/admin/icons/pricing_discount.svg',
717
+ menu: 'workarea/admin/icons/menu.svg',
718
+ price: 'workarea/admin/icons/pricing_sku.svg',
719
+ product: 'workarea/admin/icons/products.svg',
720
+ sku: 'workarea/admin/icons/variants.svg'
721
+ }
722
+
723
+ # Classes run as middleware for storefront site searches
724
+ config.storefront_search_middleware = SwappableList.new(
725
+ %w(
726
+ Workarea::Search::StorefrontSearch::Redirect
727
+ Workarea::Search::StorefrontSearch::ExactMatches
728
+ Workarea::Search::StorefrontSearch::ProductMultipass
729
+ Workarea::Search::StorefrontSearch::SpellingCorrection
730
+ Workarea::Search::StorefrontSearch::Template
731
+ )
732
+ )
733
+
734
+ # Release session timeout - how long a release is worked on before a
735
+ # reminder is shown.
736
+ config.release_session_timeout = 30.minutes
737
+
738
+ # The number of pages viewed before an admin is reminded that they have a
739
+ # release in their session.
740
+ config.release_session_max_page_views = 30
741
+
742
+ # The document types to exclude from activity feed
743
+ config.activity_excluded_types = SwappableList.new(
744
+ %w(Workarea::Release::Changeset)
745
+ )
746
+
747
+ # The regexes, names, and links used to show tracking links in order history.
748
+ # Used in ShippingCarrierViewModel
749
+ config.shipping_service_tracking_links = {
750
+ /^1Z/i => ['UPS', 'http://wwwapps.ups.com/WebTracking/track?track=yes&trackNums='],
751
+ /^[0-9]{12,15}$/ => ['FedEx', 'http://www.fedex.com/Tracking?action=track&tracknumbers='],
752
+ /^[0-9]{4,4}\s?[0-9]{4,4}\s?[0-9]{4,4}\s?[0-9]{4,4}\s?[0-9]{4,4}\s?[0-9]{2,2}$/ => ['USPS', 'https://tools.usps.com/go/TrackConfirmAction_input?qtc_tLabels1=']
753
+ }
754
+
755
+ # The paths to exclude from logged admin page visits
756
+ config.admin_visit_excluded_paths = %w(root_path toolbar_path)
757
+
758
+ # Minimum available quantity for a sku before
759
+ # low inventory status is displayed.
760
+ config.low_inventory_threshold = 5
761
+
762
+ # Maximum number of similar products to store with each product.
763
+ # See https://github.com/Pathgather/predictor#limiting-similarities
764
+ config.max_recommendation_similarities = 64
765
+
766
+ # How long an order or session contents contribute to recommendations.
767
+ # Adjust this for performance depending on volume.
768
+ config.recommendation_expiration = 90.days
769
+
770
+ # Default sources for product-based recommendations. This OOB order is
771
+ # based on conversion rate.
772
+ config.product_based_recommendation_default_sources = %w(custom similar purchased)
773
+
774
+ # Number of recommendations to show on the detail page
775
+ config.detail_page_recommendations_count = 6
776
+
777
+ # Number of recommendations to show in the personalized recommendations
778
+ # content block
779
+ config.personalized_recommendations_count = 6
780
+
781
+ # Number of recommendations to show in transactional emails
782
+ config.email_recommendations_count = 4
783
+
784
+ # Number of recommendations to show on the cart
785
+ config.cart_recommendations_count = 6
786
+
787
+ # Maximum number of admin related help articles to return
788
+ config.max_admin_related_help = 3
789
+
790
+ # The TTL of bulk action records
791
+ config.bulk_action_expiration = 6.months
792
+
793
+ # Classes used to update checkout data and determine checkout status.
794
+ # Used in Workarea::Checkout
795
+ config.checkout_steps = SwappableList.new(
796
+ %w(
797
+ Workarea::Checkout::Steps::Addresses
798
+ Workarea::Checkout::Steps::Shipping
799
+ Workarea::Checkout::Steps::Payment
800
+ )
801
+ )
802
+
803
+ # Classes used to determine the status of a Workarea::Fulfillment
804
+ config.fulfillment_status_calculators = SwappableList.new(
805
+ %w(
806
+ Workarea::Fulfillment::Status::NotAvailable
807
+ Workarea::Fulfillment::Status::Open
808
+ Workarea::Fulfillment::Status::Canceled
809
+ Workarea::Fulfillment::Status::Shipped
810
+ Workarea::Fulfillment::Status::PartiallyShipped
811
+ Workarea::Fulfillment::Status::PartiallyCanceled
812
+ )
813
+ )
814
+
815
+ # Classes used to determine the status of a Workarea::Order
816
+ config.order_status_calculators = SwappableList.new(
817
+ %w(
818
+ Workarea::Order::Status::Cart
819
+ Workarea::Order::Status::Canceled
820
+ Workarea::Order::Status::Placed
821
+ Workarea::Order::Status::Checkout
822
+ Workarea::Order::Status::Abandoned
823
+ )
824
+ )
825
+
826
+ # Classes used to determine the status of a Workarea::Payment
827
+ config.payment_status_calculators = SwappableList.new(
828
+ %w(
829
+ Workarea::Payment::Status::NotApplicable
830
+ Workarea::Payment::Status::Pending
831
+ Workarea::Payment::Status::Authorized
832
+ Workarea::Payment::Status::Captured
833
+ Workarea::Payment::Status::Refunded
834
+ Workarea::Payment::Status::PartiallyCaptured
835
+ Workarea::Payment::Status::PartiallyRefunded
836
+ )
837
+ )
838
+
839
+ # Defines the state level for payment and fulfillment statuses.
840
+ config.status_state_indicators = {
841
+ open: 'pending',
842
+ canceled: 'done',
843
+ shipped: 'done',
844
+ partially_shipped: 'danger',
845
+ partially_canceled: 'danger',
846
+ not_applicable: 'done',
847
+ pending: 'danger', # payment pending
848
+ authorized: 'pending',
849
+ captured: 'done',
850
+ refunded: 'done',
851
+ partially_captured: 'danger',
852
+ partially_refunded: 'done',
853
+ not_available: 'pending'
854
+ }
855
+
856
+ # Classes used to determine the status of a Workarea::Release
857
+ config.release_status_calculators = SwappableList.new(
858
+ %w(
859
+ Workarea::Release::Status::Unscheduled
860
+ Workarea::Release::Status::Scheduled
861
+ Workarea::Release::Status::Published
862
+ Workarea::Release::Status::Undone
863
+ Workarea::Release::Status::ScheduledUndo
864
+ )
865
+ )
866
+
867
+ # How many recent views to show
868
+ config.user_activity_display_size = 4
869
+
870
+ # Classes used to manage inventory. Must inherit from
871
+ # Workarea::Inventory::Policies::Base. The first in this list will be used
872
+ # as the default (Ignore is highly recommended default).
873
+ config.inventory_policies = SwappableList.new(
874
+ %w(
875
+ Workarea::Inventory::Policies::Ignore
876
+ Workarea::Inventory::Policies::Standard
877
+ Workarea::Inventory::Policies::DisplayableWhenOutOfStock
878
+ Workarea::Inventory::Policies::AllowBackorder
879
+ )
880
+ )
881
+
882
+ # Classes used to calculate pricing. They are run in this order.
883
+ config.pricing_calculators = SwappableList.new(
884
+ %w(
885
+ Workarea::Pricing::Calculators::ItemCalculator
886
+ Workarea::Pricing::Calculators::CustomizationsCalculator
887
+ Workarea::Pricing::Calculators::OverridesCalculator
888
+ Workarea::Pricing::Calculators::DiscountCalculator
889
+ Workarea::Pricing::Calculators::TaxCalculator
890
+ )
891
+ )
892
+
893
+ # values changed on a product when copied via CopyProduct
894
+ config.product_copy_default_attributes = {
895
+ active: false,
896
+ slug: nil,
897
+ created_at: nil,
898
+ updated_at: nil
899
+ }
900
+
901
+ # Fields that do not get copied to the new order when cloning an order.
902
+ config.copy_order_ignored_fields = %i(
903
+ token checkout_started_at placed_at canceled_at created_at updated_at
904
+ )
905
+
906
+ # Options to pass to gravatar when looking up an image for an admin avatar
907
+ # See more info at https://en.gravatar.com/site/implement/images/
908
+ config.gravatar_options = { s: 80, default: 'identicon' }
909
+
910
+ # Length of time that Rails' caches exist
911
+ #
912
+ # WARNING - changing these values will affect your application's performance
913
+ #
914
+ config.cache_expirations = ActiveSupport::Configurable::Configuration.new
915
+ config.cache_expirations.http_cache = 15.minutes
916
+ config.cache_expirations.content_blocks = 1.hour
917
+ config.cache_expirations.discount_application_groups = 15.minutes
918
+ config.cache_expirations.shipping_services = 1.hour
919
+ config.cache_expirations.tax_rate_by_code = 5.minutes
920
+ config.cache_expirations.products_default_category = 1.day
921
+ config.cache_expirations.render_content_blocks = 1.hour
922
+ config.cache_expirations.cart_recommendations_fragment_cache = 3.hours
923
+ config.cache_expirations.categories_fragment_cache = 1.hour
924
+ config.cache_expirations.pages_fragment_cache = 1.hour
925
+ config.cache_expirations.product_pricing_fragment_cache = 1.week
926
+ config.cache_expirations.product_summary_fragment_cache = 75.minutes
927
+ config.cache_expirations.product_show_fragment_cache = 1.hour
928
+ config.cache_expirations.left_navigation_fragment_cache = 1.day
929
+ config.cache_expirations.sitemap_fragment_cache = 1.day
930
+ config.cache_expirations.free_gift_attributes = 1.hour
931
+ config.cache_expirations.reports = 1.hour
932
+
933
+ # Send transactional emails. Allows default transaction emails to be
934
+ # disabled when using third-party email services.
935
+ config.send_transactional_emails = true
936
+
937
+ # How much to boost an exact match in a search result. Result scores are
938
+ # then checked against this value, and if a result has at least this score
939
+ # the response will redirect to that result. It should be sufficiently
940
+ # high as to not be accidentally triggered by a normal matching score.
941
+ config.search_exact_match_score = 9_999
942
+
943
+ # How much boost is given to search results where there is a phrase match
944
+ # with the product name. People associate a lot of weight with name
945
+ # matching so it makes sense to dramatically boost these matches. This
946
+ # should be less than search_exact_match_score so it doesn't accidentally
947
+ # trigger an exact match.
948
+ config.search_name_phrase_match_boost = 999
949
+
950
+ # Allow skipping enforcing host
951
+ config.skip_enforce_host = ->(request) { request.user_agent =~ /ELB-Health/ }
952
+
953
+ # Determines the time a lock is held before it automatically releases
954
+ config.default_lock_expiration = 30.seconds
955
+
956
+ # How many items per-page to use when performing a bulk action from the
957
+ # admin. If you find your bulk action Sidekiq workers are using too much
958
+ # memory, lower this value.
959
+ config.bulk_action_per_page = 500
960
+
961
+ # location to store results of performance tests
962
+ config.performance_test_output_path = 'tmp/performance'
963
+
964
+ # Maximum percentage increase in time between performance test runs
965
+ config.performance_test_max_percentage_of_change = 0.25
966
+
967
+ # Number of previous result times to compare a performance test
968
+ # time against
969
+ config.performance_test_comparisons = 3
970
+
971
+ # Limit outgoing email in qa / staging environments to admin users
972
+ # If the below lambda evaluates to true then the message will be sent
973
+ # A boolean value can also be used - the test environment sets this to false
974
+ config.send_email = lambda { |message|
975
+ return true if Rails.env.in?(%w(test development production))
976
+ recipients = (Array(message.to) + Array(message.cc) + Array(message.bcc)).compact
977
+
978
+ recipients.any? do |email|
979
+ email.in?(Workarea::User.admins.pluck(:email))
980
+ end
981
+ }
982
+
983
+ # The number of orders to load per query when generating
984
+ # product recommendations
985
+ config.product_recommendation_index_page_size = 500
986
+
987
+ # The number of user_activity documents to load per query when generating
988
+ # search recommendations
989
+ config.search_recommendation_index_page_size = 500
990
+
991
+ # Capybara window dimensions
992
+ config.capybara_browser_width = 1400
993
+ config.capybara_browser_height = 768
994
+
995
+ # Whether the app should skip connecting to external services on boot,
996
+ # such as Mongo, Elasticsearch, or Redis.
997
+ config.skip_service_connections = ENV['WORKAREA_SKIP_SERVICES'].to_s =~ /true/
998
+
999
+ # This is a feature flag, which enables localized active fields. If you're
1000
+ # upgrading, you can set this to false to avoid having to do a MongoDB
1001
+ # migration.
1002
+ config.localized_active_fields = true
1003
+
1004
+ # Options passed to headless chrome driver at initialization
1005
+ #
1006
+ # This will be renamed in an upcoming minor to allow for more flexibility
1007
+ # in how Chrome gets configured.
1008
+ config.headless_chrome_options = [
1009
+ 'headless',
1010
+ 'disable-gpu',
1011
+ 'disable-popup-blocking',
1012
+ '--enable-features=NetworkService,NetworkServiceInProcess',
1013
+ "--window-size=#{config.capybara_browser_width},#{config.capybara_browser_width}"
1014
+ ]
1015
+
1016
+ # HTTP caching headers can mess up system tests so we disable HTTP caching in tests.
1017
+ # Certain tests (for instance, AB testing plugin) want to be able to test caching
1018
+ # headers correctly, so we offer disabling this. But it should only be done on a test
1019
+ # by test basis, turning this off will break system tests completely.
1020
+ config.strip_http_caching_in_tests = true
1021
+
1022
+ # Determines the sort order for the option selections for those product detail
1023
+ # templates. Return the options passed in the order you'd like them to
1024
+ # appear in the template. We pass the product in case there are other
1025
+ # factors to base sorting on.
1026
+ config.option_selections_sort = ->(product, options) { options.sort_by(&:name) }
1027
+
1028
+ # Maximum character length of the :return_to URL, so a cookie
1029
+ # overflow error won't get thrown.
1030
+ config.return_to_url_max_length = 800
1031
+
1032
+ # All fields on the User model which related to permissions. Used to
1033
+ # determine which fields to grant to super admin.
1034
+ config.permissions_fields = %i(admin releases_access store_access
1035
+ catalog_access search_access orders_access people_access reports_access
1036
+ settings_access marketing_access help_admin permissions_manager
1037
+ can_publish_now can_restore)
1038
+
1039
+ # Whitelist of sizes that will be processed with AssetEndpoints::Favicons
1040
+ # Used for favicons_path(size)
1041
+ config.favicon_allowed_sizes = %w(32x32 16x16 150x150 180x180 192x192 512x512)
1042
+
1043
+ # Data used for generating .webmanifest content and related meta tags
1044
+ # See https://developer.mozilla.org/en-US/docs/Web/Manifest for options.
1045
+ config.web_manifest = ActiveSupport::Configurable::Configuration.new
1046
+
1047
+ # Used for the Windows Metro tile background color.
1048
+ # Default matches Metro's blue.
1049
+ config.web_manifest.tile_color = '#2d89ef'
1050
+
1051
+ # Used to define a background color within the site.webmanifest. Useful
1052
+ # when the manifest is available before the application styles.
1053
+ # Default is white.
1054
+ config.web_manifest.background_color = '#ffffff'
1055
+
1056
+ # Used to customize elements of the browser for various platforms.
1057
+ # Default is Workarea blue.
1058
+ config.web_manifest.theme_color = '#0060ff'
1059
+
1060
+ # Preferred display mode for the web application when loaded from a
1061
+ # smartphone homescreen.
1062
+ config.web_manifest.display_mode = 'standalone'
1063
+
1064
+ # Fields ignored in the generated import samples
1065
+ config.data_file_ignored_fields = %w(
1066
+ subscribed_user_ids
1067
+ last_indexed_at
1068
+ pricing_cache_key
1069
+ lock_expires_at
1070
+ product_attributes
1071
+ password_digest
1072
+ super_admin
1073
+ user_activity_id
1074
+ checkout_by_id
1075
+ price_adjustments
1076
+ purchased
1077
+ )
1078
+
1079
+ # Supported file formats for generic data file management. The first will be the default.
1080
+ config.data_file_formats = %w(json csv)
1081
+
1082
+ # How many examples to show in the import sample file produced in the admin
1083
+ config.data_file_sample_size = 2
1084
+
1085
+ # How long to keep records of import/export around
1086
+ config.data_file_operation_ttl = 3.months
1087
+
1088
+ # Define files used for asset manifests
1089
+ config.asset_manifests = ActiveSupport::Configurable::Configuration.new
1090
+ config.asset_manifests.storefront_stylesheet = 'workarea/storefront/application.css'
1091
+ config.asset_manifests.storefront_email_stylesheet = 'workarea/storefront/email.css'
1092
+ config.asset_manifests.storefront_javascript = 'workarea/storefront/application.js'
1093
+ config.asset_manifests.storefront_javascript_head = 'workarea/storefront/head.js'
1094
+
1095
+ # An admin selecting more items than this threshold will be taken
1096
+ # to a second page to confirm their deletion. Otherwise a basic
1097
+ # confirmation dialog will be used. This is to minimize the risk of
1098
+ # accidentally deleting a large number of items.
1099
+ config.bulk_action_deletion_confirmation_threshold = 10
1100
+
1101
+ config.product_rule_preview_search_classes = {
1102
+ 'Workarea::Search::Customization' => 'Workarea::Search::ProductSearch',
1103
+ 'Workarea::Catalog::Category' => 'Workarea::Search::CategoryBrowse'
1104
+ }
1105
+
1106
+ # The percentage of products/categories/discounts to be displayed within
1107
+ # the admin as top and/or trending based on revenue of the last 4 weeks.
1108
+ config.top_or_trending_threshold = {
1109
+ product: 0.03,
1110
+ category: 0.03,
1111
+ discount: 0.03
1112
+ }
1113
+
1114
+ # Regular Expression for HTML5 Pattern Validation of filters in
1115
+ # the admin. Filters can be added through the UI, but they cannot
1116
+ # be named "Type" or "type", otherwise the attribute could cause
1117
+ # mapping issues within Elasticsearch. This pattern also validates
1118
+ # a lack of trailing or preceding spaces, as these are typical
1119
+ # typing errors that are difficult to see within the admin.
1120
+ #
1121
+ # It is not generally recommended that you change this setting.
1122
+ config.product_filter_input_validation_pattern = '\b(?!type|Type)\b\S+$|^(\S+\s\S+)*$'
1123
+
1124
+ # How long direct-to-s3 upload URLs last - they are signed and expire after
1125
+ # this amount of time.
1126
+ config.product_bulk_image_upload_access_time = 5.minutes
1127
+
1128
+ # How product bulk image upload image naming conventios get validated
1129
+ config.direct_upload_product_image_filename_regex = /[^.]*\.\d+\..+/
1130
+
1131
+ # How product bulk image upload image naming conventions get processed into
1132
+ # attributes for the image. This default provides the convention:
1133
+ # `product_id.position.option.jpg`. So for example, `00A.1.green.jpg` would
1134
+ # create an image for the `00A` product with position of 1 and option of green.
1135
+ config.direct_upload_product_image_filename_processor = lambda do |filename|
1136
+ pieces = filename.split('.')
1137
+
1138
+ {
1139
+ product_id: pieces[0],
1140
+ position: pieces[1].to_i,
1141
+ option: pieces.length > 3 ? pieces[2] : nil
1142
+ }
1143
+ end
1144
+
1145
+ # Provide some dummy credentials for testing. These get passed to Fog
1146
+ # which will be mocked in the test env.
1147
+ if Rails.env.test?
1148
+ config.s3 = {
1149
+ region: 'us-east-1',
1150
+ bucket_name: 'workarea',
1151
+ access_key_id: '{ACCESS_KEY_ID}',
1152
+ secret_access_key: '{SECRET_ACCESS_KEY}',
1153
+ }
1154
+ end
1155
+
1156
+ # The default amount of time over which to report when generating reports
1157
+ # in the admin.
1158
+ config.reports_default_starts_at = -> { 3.months.ago }
1159
+
1160
+ # The maximum number of results to display in the admin for a report.
1161
+ # Additional results can be retrieved with an export.
1162
+ config.reports_max_results = 500
1163
+
1164
+ # How long to keep records of reports exports around
1165
+ config.reports_export_ttl = 3.months
1166
+
1167
+ # Skip the appending of partials or assets by using a mix of strings,
1168
+ # regular expressions, or Procs.
1169
+ config.skip_partials = []
1170
+ config.skip_stylesheets = []
1171
+ config.skip_javascripts = []
1172
+
1173
+ # The maximum number of products a category can have featured before
1174
+ # IndexCategoryChanges will queue individual workers for batches of
1175
+ # products rather than indexing the products inline. This change prevents
1176
+ # memory issues with storing a large elasticsearch request in memory.
1177
+ config.category_inline_index_product_max_count = 100
1178
+
1179
+ # The number of documents to move at a time when generating insights
1180
+ # aggregation data.
1181
+ config.insights_aggregation_per_page = 1000
1182
+
1183
+ # How many products to include in product-list insights, like promising
1184
+ # products, star products, etc.
1185
+ config.insights_products_list_max_results = 4
1186
+
1187
+ # How many users to include in user-list insights, like best customers,
1188
+ # customers at risk, etc.
1189
+ config.insights_users_list_max_results = 5
1190
+
1191
+ # How many users to include in category-list insights, like top categories,
1192
+ # hot categories, etc.
1193
+ config.insights_categories_list_max_results = 5
1194
+
1195
+ # How many searches to include in search-list insights, like popular
1196
+ # searches, searches without results, etc.
1197
+ config.insights_searches_list_max_results = 5
1198
+
1199
+ # How many searches to include in release-list insights, like upcoming
1200
+ # releases and release reminder.
1201
+ config.insights_releases_list_max_results = 3
1202
+
1203
+ # How many searches to include in discount-list insights, like top
1204
+ # discounts and most discount given.
1205
+ config.insights_discounts_list_max_results = 3
1206
+
1207
+ # Models that are represented in insights. Used to dynamically
1208
+ # fetch documents associated to generated insights.
1209
+ config.insights_model_classes = %w(
1210
+ Workarea::Catalog::Category
1211
+ Workarea::Catalog::Product
1212
+ Workarea::Release
1213
+ Workarea::Pricing::Discount
1214
+ Workarea::Navigation::Menu
1215
+ )
1216
+
1217
+ # Options passed to Chartkick gem for rendering graphs.
1218
+ config.default_chartkick_options = {
1219
+ width: '90%',
1220
+ height: '150px',
1221
+ colors: %w(#0060ff #ff8100),
1222
+ thousands: ','
1223
+ }
1224
+
1225
+ # Configuration keys to hide from Settings Dashboard
1226
+ config.hide_from_settings = %i(gateways)
1227
+
1228
+ # The default length of time to tell elasticsearch to keep the scroll
1229
+ # context alive.
1230
+ config.elasticsearch_default_scroll = '3m'
1231
+
1232
+ # This is how long data will count towards sorting scores. Sorting scores
1233
+ # drive top sellers and most popular sorts.
1234
+ config.sorting_score_ttl = 1.year
1235
+
1236
+ # The number of data points in an admin sparkline. These are shown on
1237
+ # index pages, in cards, and in autocompletes.
1238
+ config.admin_sparkline_size = 10
1239
+
1240
+ # The maximum number of categories that are returned by
1241
+ # +Search::Storefront::Product::Categories.find_categories!+ when
1242
+ # a user attempts to view all categories by rules for a given
1243
+ # product in the admin.
1244
+ config.product_categories_by_rules_max_count = 100
1245
+
1246
+ # Parameters to ignore when rendering breadcrumbs for search results
1247
+ config.exclude_from_search_results_breadcrumbs = %i(
1248
+ action
1249
+ controller
1250
+ authenticity_token
1251
+ utf
1252
+ terms_facets
1253
+ range_facets
1254
+ rules
1255
+ pass
1256
+ )
1257
+
1258
+ # Taxonomy for default seeds
1259
+ config.default_seeds_taxonomy = {
1260
+ 'Clothing' => ['T-Shirts', 'Shoes', 'Loungewear'],
1261
+ 'Tech' => ['Phone Cases', 'Headphones', 'Gaming'],
1262
+ 'Books' => ['Fiction', 'Non-Fiction', "Children's"],
1263
+ 'Toys' => ['Puzzles', 'Board Games', 'Outdoor']
1264
+ }
1265
+
1266
+ # Options for reading and decoding CSV import data. Use this
1267
+ # setting to configure the `:encoding` options for `CSV.foreach`
1268
+ # if your CSV files are failing to import with a UTF-8 encoding
1269
+ # error.
1270
+ config.csv_import_options = {}
1271
+ end
1272
+ end
1273
+ end