workarea-core 3.4.45 → 3.5.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +52 -0
  3. data/app/assets/javascripts/workarea/core/modules/duplicate_id.js +1 -5
  4. data/app/assets/javascripts/workarea/core/modules/style_guide_autocomplete_fields.js +9 -42
  5. data/app/assets/javascripts/workarea/core/modules/url.js +14 -0
  6. data/app/controllers/workarea/application_controller.rb +5 -1
  7. data/app/controllers/workarea/authentication.rb +15 -26
  8. data/app/controllers/workarea/authorization.rb +3 -3
  9. data/app/controllers/workarea/current_referrer.rb +1 -2
  10. data/app/controllers/workarea/current_release.rb +1 -1
  11. data/app/controllers/workarea/current_segments.rb +52 -0
  12. data/app/controllers/workarea/current_tracking.rb +45 -0
  13. data/app/controllers/workarea/http_caching.rb +30 -0
  14. data/app/controllers/workarea/impersonation.rb +18 -44
  15. data/app/helpers/workarea/schema_org_helper.rb +21 -0
  16. data/app/mailers/workarea/application_mailer.rb +2 -4
  17. data/app/middleware/workarea/application_middleware.rb +44 -0
  18. data/app/middleware/workarea/query_cache_middleware.rb +55 -0
  19. data/app/middleware/workarea/release_server_middleware.rb +1 -1
  20. data/app/models/workarea/application_document.rb +1 -1
  21. data/app/models/workarea/bulk_action/product_edit.rb +6 -6
  22. data/app/models/workarea/calculate_percent_change.rb +1 -1
  23. data/app/models/workarea/catalog/category.rb +0 -2
  24. data/app/models/workarea/catalog/product.rb +19 -2
  25. data/app/models/workarea/checkout/collect_payment.rb +10 -1
  26. data/app/models/workarea/checkout/fraud/analyzer.rb +44 -0
  27. data/app/models/workarea/checkout/fraud/no_decision_analyzer.rb +14 -0
  28. data/app/models/workarea/checkout/fraud/test_analyzer.rb +26 -0
  29. data/app/models/workarea/checkout.rb +18 -6
  30. data/app/models/workarea/configuration/admin.rb +25 -0
  31. data/app/models/workarea/configuration/params.rb +45 -0
  32. data/app/models/workarea/content/asset.rb +5 -18
  33. data/app/models/workarea/content/block.rb +8 -2
  34. data/app/models/workarea/content/block_draft.rb +7 -2
  35. data/app/models/workarea/content/block_type.rb +2 -2
  36. data/app/models/workarea/content/block_type_definition.rb +4 -0
  37. data/app/models/workarea/content/preset.rb +1 -1
  38. data/app/models/workarea/content.rb +12 -82
  39. data/app/models/workarea/data_file/csv.rb +6 -8
  40. data/app/models/workarea/data_file/import.rb +9 -1
  41. data/app/models/workarea/data_file/json.rb +1 -20
  42. data/app/models/workarea/data_file/operation.rb +0 -4
  43. data/app/models/workarea/data_file/tax_rates.rb +3 -0
  44. data/app/models/workarea/featured_products.rb +8 -0
  45. data/app/models/workarea/fulfillment/policies/base.rb +21 -0
  46. data/app/models/workarea/fulfillment/policies/download.rb +21 -0
  47. data/app/models/workarea/fulfillment/policies/ignore.rb +11 -0
  48. data/app/models/workarea/fulfillment/policies/ship.rb +15 -0
  49. data/app/models/workarea/fulfillment/sku.rb +72 -0
  50. data/app/models/workarea/fulfillment/token.rb +36 -0
  51. data/app/models/workarea/inquiry.rb +1 -2
  52. data/app/models/workarea/insights/customer_acquisition.rb +5 -9
  53. data/app/models/workarea/insights/trending_products.rb +2 -2
  54. data/app/models/workarea/insights/trending_searches.rb +2 -2
  55. data/app/models/workarea/inventory/collection.rb +30 -0
  56. data/app/models/workarea/inventory/collection_status.rb +40 -0
  57. data/app/models/workarea/metrics/affinity.rb +33 -0
  58. data/app/models/workarea/metrics/country_by_day.rb +4 -0
  59. data/app/models/workarea/metrics/product_by_day.rb +3 -0
  60. data/app/models/workarea/metrics/product_by_week.rb +2 -0
  61. data/app/models/workarea/metrics/product_for_last_week.rb +8 -12
  62. data/app/models/workarea/metrics/sales_by_day.rb +5 -0
  63. data/app/models/workarea/metrics/search_by_day.rb +1 -3
  64. data/app/models/workarea/metrics/search_for_last_week.rb +5 -11
  65. data/app/models/workarea/metrics/segment_by_day.rb +31 -0
  66. data/app/models/workarea/metrics/sku_by_day.rb +3 -0
  67. data/app/models/workarea/metrics/tender_by_day.rb +11 -0
  68. data/app/models/workarea/metrics/update_user_aggregations.rb +77 -0
  69. data/app/models/workarea/metrics/user.rb +73 -87
  70. data/app/models/workarea/navigation/breadcrumbs.rb +10 -1
  71. data/app/models/workarea/order/fraud_decision.rb +18 -0
  72. data/app/models/workarea/order/item.rb +5 -0
  73. data/app/models/workarea/order/queries.rb +1 -0
  74. data/app/models/workarea/order/status.rb +10 -1
  75. data/app/models/workarea/order.rb +47 -4
  76. data/app/models/workarea/payment/credit_card.rb +12 -0
  77. data/app/models/workarea/payment.rb +7 -2
  78. data/app/models/workarea/pricing/cache_key.rb +9 -3
  79. data/app/models/workarea/pricing/calculator.rb +5 -1
  80. data/app/models/workarea/pricing/calculators/tax_calculator.rb +32 -5
  81. data/app/models/workarea/pricing/discount/application_group.rb +8 -3
  82. data/app/models/workarea/pricing/discount/free_gift.rb +2 -1
  83. data/app/models/workarea/pricing/discount/redemption.rb +1 -1
  84. data/app/models/workarea/pricing/discount.rb +2 -3
  85. data/app/models/workarea/pricing/item_tax_applier.rb +41 -0
  86. data/app/models/workarea/pricing/price.rb +1 -0
  87. data/app/models/workarea/pricing/request.rb +11 -0
  88. data/app/models/workarea/pricing/sku.rb +1 -0
  89. data/app/models/workarea/pricing/tax_application.rb +21 -0
  90. data/app/models/workarea/pricing/tax_applier.rb +12 -15
  91. data/app/models/workarea/pricing/unsupported_segmentation.rb +22 -0
  92. data/app/models/workarea/product_rule.rb +5 -0
  93. data/app/models/workarea/releasable.rb +83 -89
  94. data/app/models/workarea/release/activation.rb +45 -0
  95. data/app/models/workarea/release/changes.rb +45 -0
  96. data/app/models/workarea/release/changeset.rb +42 -52
  97. data/app/models/workarea/release/preview.rb +28 -0
  98. data/app/models/workarea/release/status.rb +2 -24
  99. data/app/models/workarea/release.rb +72 -99
  100. data/app/models/workarea/release_session.rb +11 -11
  101. data/app/models/workarea/search/admin/catalog_product.rb +1 -2
  102. data/app/models/workarea/search/admin/fulfillment_sku.rb +27 -0
  103. data/app/models/workarea/search/admin/order.rb +1 -1
  104. data/app/models/workarea/search/admin/pricing_discount.rb +1 -1
  105. data/app/models/workarea/search/admin/release.rb +1 -4
  106. data/app/models/workarea/search/admin/segment.rb +19 -0
  107. data/app/models/workarea/search/admin.rb +17 -39
  108. data/app/models/workarea/search/order_text.rb +23 -6
  109. data/app/models/workarea/search/storefront/category_query.rb +152 -0
  110. data/app/models/workarea/search/storefront/product/categories.rb +11 -45
  111. data/app/models/workarea/search/storefront.rb +33 -29
  112. data/app/models/workarea/segment/first_time_customer.rb +8 -0
  113. data/app/models/workarea/segment/first_time_visitor.rb +12 -0
  114. data/app/models/workarea/segment/life_cycle.rb +44 -0
  115. data/app/models/workarea/segment/loyal_customer.rb +12 -0
  116. data/app/models/workarea/segment/returning_customer.rb +14 -0
  117. data/app/models/workarea/segment/returning_visitor.rb +12 -0
  118. data/app/models/workarea/segment/rules/base.rb +16 -0
  119. data/app/models/workarea/segment/rules/browser_info.rb +29 -0
  120. data/app/models/workarea/segment/rules/geolocation.rb +29 -0
  121. data/app/models/workarea/segment/rules/geolocation_option.rb +53 -0
  122. data/app/models/workarea/segment/rules/last_order.rb +14 -0
  123. data/app/models/workarea/segment/rules/logged_in.rb +13 -0
  124. data/app/models/workarea/segment/rules/orders.rb +17 -0
  125. data/app/models/workarea/segment/rules/revenue.rb +17 -0
  126. data/app/models/workarea/segment/rules/sessions.rb +17 -0
  127. data/app/models/workarea/segment/rules/tags.rb +14 -0
  128. data/app/models/workarea/segment/rules/traffic_referrer.rb +18 -0
  129. data/app/models/workarea/segment.rb +54 -0
  130. data/app/models/workarea/segmentable.rb +66 -0
  131. data/app/models/workarea/sort.rb +14 -2
  132. data/app/models/workarea/tax/rate.rb +35 -1
  133. data/app/models/workarea/user/authorization.rb +19 -13
  134. data/app/models/workarea/user/login.rb +4 -0
  135. data/app/models/workarea/user/password_reset.rb +1 -3
  136. data/app/queries/workarea/categorization.rb +3 -3
  137. data/app/queries/workarea/featured_categorization.rb +53 -0
  138. data/app/queries/workarea/order_cancellation_metrics.rb +155 -0
  139. data/app/queries/workarea/order_item_details.rb +16 -3
  140. data/app/queries/workarea/order_metrics.rb +32 -3
  141. data/app/queries/workarea/product_primary_navigation.rb +13 -2
  142. data/app/queries/workarea/product_releases.rb +38 -0
  143. data/app/queries/workarea/recommendation/user_activity_based.rb +14 -6
  144. data/app/queries/workarea/reports/average_order_value.rb +1 -1
  145. data/app/queries/workarea/reports/customers.rb +14 -11
  146. data/app/queries/workarea/reports/first_time_vs_returning_sales.rb +1 -1
  147. data/app/queries/workarea/reports/group_by_time.rb +13 -17
  148. data/app/queries/workarea/reports/sales_by_category.rb +1 -1
  149. data/app/queries/workarea/reports/sales_by_country.rb +10 -3
  150. data/app/queries/workarea/reports/sales_by_discount.rb +1 -1
  151. data/app/queries/workarea/reports/sales_by_menu.rb +1 -1
  152. data/app/queries/workarea/reports/sales_by_product.rb +39 -4
  153. data/app/queries/workarea/reports/sales_by_sku.rb +39 -4
  154. data/app/queries/workarea/reports/sales_by_tender.rb +42 -0
  155. data/app/queries/workarea/reports/sales_by_traffic_referrer.rb +1 -1
  156. data/app/queries/workarea/reports/sales_over_time.rb +10 -3
  157. data/app/queries/workarea/reports/searches.rb +1 -1
  158. data/app/queries/workarea/reports/searches_over_time.rb +1 -1
  159. data/app/queries/workarea/reports/searches_without_results_over_time.rb +1 -1
  160. data/app/queries/workarea/search/admin_fulfillment_skus.rb +20 -0
  161. data/app/queries/workarea/search/admin_releases.rb +1 -4
  162. data/app/queries/workarea/search/admin_search.rb +0 -4
  163. data/app/queries/workarea/search/admin_segments.rb +16 -0
  164. data/app/queries/workarea/search/admin_sorting.rb +1 -1
  165. data/app/queries/workarea/search/pagination.rb +1 -4
  166. data/app/queries/workarea/search/product_display_rules.rb +40 -8
  167. data/app/queries/workarea/search/product_entries.rb +15 -1
  168. data/app/queries/workarea/search/product_search.rb +4 -1
  169. data/app/queries/workarea/search/storefront_search/exact_matches.rb +1 -1
  170. data/app/queries/workarea/search/storefront_search/response.rb +6 -4
  171. data/app/queries/workarea/search/storefront_search.rb +5 -4
  172. data/app/seeds/workarea/assets_seeds.rb +2 -1
  173. data/app/seeds/workarea/insights_seeds.rb +0 -23
  174. data/app/seeds/workarea/orders_seeds.rb +7 -6
  175. data/app/seeds/workarea/products_seeds.rb +2 -0
  176. data/app/seeds/workarea/segments_seeds.rb +8 -0
  177. data/app/seeds/workarea/tax_seeds.rb +3 -3
  178. data/app/services/workarea/cancel_order.rb +8 -3
  179. data/app/services/workarea/copy_order.rb +6 -0
  180. data/app/services/workarea/create_fulfillment.rb +5 -3
  181. data/app/services/workarea/direct_upload.rb +11 -19
  182. data/app/services/workarea/hash_update.rb +1 -18
  183. data/app/services/workarea/packaging.rb +1 -1
  184. data/app/services/workarea/save_publishing.rb +5 -1
  185. data/app/workers/sidekiq/callbacks.rb +4 -52
  186. data/app/workers/sidekiq/callbacks_worker.rb +4 -6
  187. data/app/workers/workarea/bulk_index_admin.rb +2 -2
  188. data/app/workers/workarea/bulk_index_products.rb +6 -5
  189. data/app/workers/workarea/bulk_index_searches.rb +5 -5
  190. data/app/workers/workarea/deactivate_stale_discounts.rb +3 -3
  191. data/app/workers/workarea/generate_insights.rb +1 -1
  192. data/app/workers/workarea/index_admin_search.rb +1 -0
  193. data/app/workers/workarea/index_categorization.rb +4 -7
  194. data/app/workers/workarea/index_category.rb +2 -1
  195. data/app/workers/workarea/index_category_changes.rb +11 -6
  196. data/app/workers/workarea/index_fulfillment_changes.rb +2 -1
  197. data/app/workers/workarea/index_help.rb +2 -1
  198. data/app/workers/workarea/index_page.rb +2 -1
  199. data/app/workers/workarea/index_payment_transactions.rb +2 -1
  200. data/app/workers/workarea/index_product.rb +4 -4
  201. data/app/workers/workarea/index_product_children.rb +4 -3
  202. data/app/workers/workarea/index_product_rule.rb +3 -2
  203. data/app/workers/workarea/index_search_customizations.rb +3 -2
  204. data/app/workers/workarea/index_skus.rb +5 -6
  205. data/app/workers/workarea/keep_product_index_fresh.rb +3 -5
  206. data/app/workers/workarea/process_import.rb +3 -3
  207. data/app/workers/workarea/process_search_recommendations.rb +5 -9
  208. data/app/workers/workarea/publish_release.rb +1 -0
  209. data/app/workers/workarea/save_metrics.rb +116 -0
  210. data/app/workers/workarea/save_order_cancellation_metrics.rb +35 -0
  211. data/app/workers/workarea/save_order_metrics.rb +10 -74
  212. data/app/workers/workarea/status_reporter.rb +2 -4
  213. data/app/workers/workarea/synchronize_user_metrics.rb +17 -0
  214. data/app/workers/workarea/update_payment_profile_email.rb +22 -0
  215. data/app/workers/workarea/verify_scheduled_releases.rb +4 -11
  216. data/config/initializers/00_configuration.rb +185 -0
  217. data/config/initializers/02_assets.rb +1 -0
  218. data/config/initializers/05_scheduled_jobs.rb +0 -7
  219. data/config/initializers/10_rack_middleware.rb +2 -5
  220. data/config/initializers/11_payment.rb +4 -0
  221. data/config/initializers/13_rack_attack.rb +2 -4
  222. data/config/initializers/14_content_block_types.rb +16 -16
  223. data/config/initializers/15_endpoint_monitoring.rb +3 -6
  224. data/config/initializers/{21_premailer.rb → 24_premailer.rb} +1 -0
  225. data/config/initializers/{20_i18n_js.rb → 25_i18n_js.rb} +0 -0
  226. data/config/locales/en.yml +13 -24
  227. data/lib/generators/workarea/content_block_type/templates/initializer.rb +1 -1
  228. data/lib/generators/workarea/install/USAGE +0 -1
  229. data/lib/generators/workarea/install/install_generator.rb +0 -21
  230. data/lib/generators/workarea/install/templates/initializer.rb.erb +1 -1
  231. data/lib/tasks/insights.rake +1 -0
  232. data/lib/tasks/migrate.rake +106 -0
  233. data/lib/tasks/search.rake +17 -19
  234. data/lib/tasks/tests.rake +1 -1
  235. data/lib/workarea/cache.rb +6 -35
  236. data/lib/workarea/changelog.rake +2 -2
  237. data/lib/workarea/configuration/administrable/definition.rb +42 -0
  238. data/lib/workarea/configuration/administrable/field.rb +79 -0
  239. data/lib/workarea/configuration/administrable/fieldset.rb +44 -0
  240. data/lib/workarea/configuration/administrable_options.rb +24 -0
  241. data/lib/workarea/configuration/cache_store.rb +3 -1
  242. data/lib/workarea/configuration/content_blocks.rb +17 -0
  243. data/lib/workarea/configuration/mongoid.rb +1 -4
  244. data/lib/workarea/configuration/session.rb +36 -0
  245. data/lib/workarea/configuration/sidekiq.rb +3 -1
  246. data/lib/workarea/configuration.rb +121 -148
  247. data/lib/workarea/core/engine.rb +3 -58
  248. data/lib/workarea/core.rb +15 -11
  249. data/lib/workarea/elasticsearch/document.rb +8 -15
  250. data/lib/workarea/ext/freedom_patches/action_view_cache_helper.rb +4 -6
  251. data/lib/workarea/ext/freedom_patches/active_support_duration.rb +14 -0
  252. data/lib/workarea/ext/freedom_patches/money.rb +11 -0
  253. data/lib/workarea/ext/freedom_patches/premailer.rb +6 -0
  254. data/lib/workarea/ext/freedom_patches/string.rb +19 -4
  255. data/lib/workarea/ext/mongoid/find_ordered.rb +2 -2
  256. data/lib/workarea/ext/mongoid/lookup_hash.rb +30 -0
  257. data/lib/workarea/geolocation.rb +24 -6
  258. data/lib/workarea/routes_constraints/super_admin.rb +1 -1
  259. data/lib/workarea/version.rb +3 -4
  260. data/lib/workarea/visit.rb +92 -0
  261. data/lib/workarea/warnings.rb +95 -0
  262. data/lib/workarea.rb +102 -3
  263. data/test/dummy/config/initializers/session_store.rb +1 -1
  264. data/test/fixtures/tax_rates.csv +3 -3
  265. data/test/generators/workarea/content_block_type_generator_test.rb +1 -1
  266. data/test/generators/workarea/install_generator_test.rb +0 -13
  267. data/test/integration/workarea/authentication_test.rb +27 -4
  268. data/test/integration/workarea/authorization_test.rb +5 -0
  269. data/test/integration/workarea/cache_varies_integration_test.rb +21 -23
  270. data/test/integration/workarea/monitoring_integration_test.rb +5 -10
  271. data/test/javascripts/duplicate_id_spec.js +1 -7
  272. data/test/javascripts/fixtures/{duplicate_id_fail.html.haml → duplicate_id.html.haml} +0 -1
  273. data/test/javascripts/form_submitting_controls_spec.js +0 -1
  274. data/test/lib/workarea/asset_endpoints/favicons_test.rb +11 -13
  275. data/test/lib/workarea/configuration/administrable/definition_test.rb +71 -0
  276. data/test/lib/workarea/configuration/administrable/field_test.rb +128 -0
  277. data/test/lib/workarea/configuration/administrable/fieldset_test.rb +78 -0
  278. data/test/lib/workarea/configuration/configuration_test.rb +20 -0
  279. data/test/lib/workarea/elasticsearch/document_test.rb +0 -20
  280. data/test/lib/workarea/elasticsearch/query_cache_test.rb +7 -7
  281. data/test/lib/workarea/ext/freedom_patches/money_test.rb +11 -0
  282. data/test/lib/workarea/ext/mongoid/lookup_hash_test.rb +86 -0
  283. data/test/lib/workarea/geolocation_test.rb +20 -0
  284. data/test/mailers/workarea/application_mailer_test.rb +1 -11
  285. data/test/middleware/workarea/query_cache_middleware_test.rb +55 -0
  286. data/test/models/workarea/checkout/collect_payment_test.rb +14 -6
  287. data/test/models/workarea/checkout_test.rb +31 -57
  288. data/test/models/workarea/configuration/params_test.rb +37 -0
  289. data/test/models/workarea/data_file/csv_test.rb +8 -73
  290. data/test/models/workarea/data_file/import_test.rb +31 -0
  291. data/test/models/workarea/data_file/json_test.rb +6 -48
  292. data/test/models/workarea/data_file/tax_test.rb +3 -0
  293. data/test/models/workarea/fulfillment/policies/download_test.rb +39 -0
  294. data/test/models/workarea/fulfillment/sku_test.rb +54 -0
  295. data/test/models/workarea/insights/best_customers_test.rb +5 -2
  296. data/test/models/workarea/insights/best_full_price_customers_test.rb +5 -2
  297. data/test/models/workarea/insights/customer_acquisition_test.rb +1 -1
  298. data/test/models/workarea/insights/customers_at_risk_test.rb +1 -1
  299. data/test/models/workarea/insights/low_aov_customers_test.rb +1 -1
  300. data/test/models/workarea/inventory/collection_test.rb +75 -0
  301. data/test/models/workarea/metrics/affinity_test.rb +85 -0
  302. data/test/models/workarea/metrics/product_by_week_test.rb +27 -31
  303. data/test/models/workarea/metrics/search_by_day_test.rb +3 -0
  304. data/test/models/workarea/metrics/search_by_week_test.rb +27 -31
  305. data/test/models/workarea/metrics/update_user_aggregations_test.rb +62 -0
  306. data/test/models/workarea/metrics/user_test.rb +146 -63
  307. data/test/models/workarea/navigation/breadcrumbs_test.rb +12 -2
  308. data/test/models/workarea/order/queries_test.rb +2 -0
  309. data/test/models/workarea/order_test.rb +44 -0
  310. data/test/models/workarea/payment/address_test.rb +109 -111
  311. data/test/models/workarea/payment/credit_card_integration_test.rb +0 -52
  312. data/test/models/workarea/payment/credit_card_test.rb +5 -0
  313. data/test/models/workarea/pricing/cache_key_test.rb +7 -1
  314. data/test/models/workarea/pricing/calculators/tax_calculator_test.rb +41 -1
  315. data/test/models/workarea/pricing/discount/collection_test.rb +27 -29
  316. data/test/models/workarea/pricing/discount_test.rb +22 -24
  317. data/test/models/workarea/pricing/item_tax_applier_test.rb +83 -0
  318. data/test/models/workarea/pricing/price_test.rb +9 -0
  319. data/test/models/workarea/pricing/request_test.rb +13 -0
  320. data/test/models/workarea/pricing/sku_test.rb +9 -0
  321. data/test/models/workarea/releasable_active_test.rb +113 -0
  322. data/test/models/workarea/releasable_test.rb +69 -120
  323. data/test/models/workarea/release/changeset_test.rb +41 -0
  324. data/test/models/workarea/release_jobs_test.rb +52 -0
  325. data/test/models/workarea/release_previewing_test.rb +43 -0
  326. data/test/models/workarea/release_test.rb +59 -153
  327. data/test/models/workarea/search/admin/content_asset_test.rb +26 -28
  328. data/test/models/workarea/search/order_text_test.rb +35 -0
  329. data/test/models/workarea/search/storefront/category_query_test.rb +81 -0
  330. data/test/models/workarea/search/storefront/product/categories_test.rb +10 -70
  331. data/test/models/workarea/search/storefront/product_test.rb +10 -11
  332. data/test/models/workarea/search/storefront_test.rb +1 -13
  333. data/test/models/workarea/segment/life_cycle_test.rb +24 -0
  334. data/test/models/workarea/segment/rules/browser_info_test.rb +33 -0
  335. data/test/models/workarea/segment/rules/geolocation_option_test.rb +16 -0
  336. data/test/models/workarea/segment/rules/geolocation_test.rb +49 -0
  337. data/test/models/workarea/segment/rules/last_order_test.rb +32 -0
  338. data/test/models/workarea/segment/rules/logged_in_test.rb +25 -0
  339. data/test/models/workarea/segment/rules/orders_test.rb +59 -0
  340. data/test/models/workarea/segment/rules/revenue_test.rb +59 -0
  341. data/test/models/workarea/segment/rules/sessions_test.rb +26 -0
  342. data/test/models/workarea/segment/rules/tags_test.rb +27 -0
  343. data/test/models/workarea/segment/rules/traffic_referrer_test.rb +31 -0
  344. data/test/models/workarea/segment_test.rb +80 -0
  345. data/test/models/workarea/segmentable_test.rb +74 -0
  346. data/test/models/workarea/shipping/address_test.rb +109 -111
  347. data/test/models/workarea/shipping/sku_test.rb +8 -12
  348. data/test/models/workarea/user/password_reset_test.rb +4 -12
  349. data/test/models/workarea/user_test.rb +13 -10
  350. data/test/queries/workarea/admin_search_query_wrapper_test.rb +21 -25
  351. data/test/queries/workarea/categorization_test.rb +49 -0
  352. data/test/queries/workarea/featured_categorization_test.rb +66 -0
  353. data/test/queries/workarea/order_cancellation_metrics_test.rb +203 -0
  354. data/test/queries/workarea/order_item_details_test.rb +17 -0
  355. data/test/queries/workarea/order_metrics_test.rb +12 -0
  356. data/test/queries/workarea/product_releases_test.rb +56 -0
  357. data/test/queries/workarea/recommendation/searches_test.rb +3 -3
  358. data/test/queries/workarea/recommendation/user_activity_based_test.rb +4 -4
  359. data/test/queries/workarea/reports/customers_test.rb +12 -8
  360. data/test/queries/workarea/reports/report_test.rb +4 -6
  361. data/test/queries/workarea/reports/sales_by_country_test.rb +18 -3
  362. data/test/queries/workarea/reports/sales_by_product_test.rb +28 -8
  363. data/test/queries/workarea/reports/sales_by_sku_test.rb +28 -8
  364. data/test/queries/workarea/reports/sales_by_tender_test.rb +100 -0
  365. data/test/queries/workarea/reports/sales_by_traffic_referrer_test.rb +6 -6
  366. data/test/queries/workarea/search/admin_releases_test.rb +1 -26
  367. data/test/queries/workarea/search/admin_search_test.rb +0 -10
  368. data/test/queries/workarea/search/admin_users_test.rb +2 -2
  369. data/test/queries/workarea/search/category_browse_test.rb +53 -0
  370. data/test/queries/workarea/search/facet_sorting/size_test.rb +11 -13
  371. data/test/queries/workarea/search/pagination_test.rb +9 -26
  372. data/test/queries/workarea/search/product_entries_test.rb +27 -0
  373. data/test/queries/workarea/search/product_search_test.rb +0 -16
  374. data/test/queries/workarea/search/storefront_search/response_test.rb +26 -0
  375. data/test/queries/workarea/search/storefront_search_test.rb +34 -36
  376. data/test/services/workarea/cancel_order_test.rb +27 -13
  377. data/test/services/workarea/copy_order_test.rb +17 -0
  378. data/test/services/workarea/direct_upload_test.rb +1 -46
  379. data/test/services/workarea/export_report_test.rb +41 -45
  380. data/test/services/workarea/hash_update_test.rb +12 -12
  381. data/test/services/workarea/packaging_test.rb +9 -11
  382. data/test/services/workarea/save_publishing_test.rb +23 -0
  383. data/test/workers/sidekiq/callbacks_test.rb +0 -22
  384. data/test/workers/workarea/deactivate_stale_discounts_test.rb +2 -2
  385. data/test/workers/workarea/index_category_changes_test.rb +5 -7
  386. data/test/workers/workarea/keep_product_index_fresh_test.rb +1 -1
  387. data/test/workers/workarea/process_import_test.rb +0 -6
  388. data/test/workers/workarea/process_search_recommendations_test.rb +4 -5
  389. data/test/workers/workarea/status_reporter_test.rb +2 -1
  390. data/test/workers/workarea/synchronize_user_metrics_test.rb +57 -0
  391. data/test/workers/workarea/update_payment_profile_email_test.rb +27 -0
  392. data/test/workers/workarea/verify_scheduled_releases_test.rb +0 -26
  393. data/workarea-core.gemspec +13 -11
  394. metadata +196 -92
  395. data/app/assets/javascripts/workarea/core/templates/ui_menu_item.jst.ejs +0 -10
  396. data/app/controllers/workarea/admin_guest_browsing.rb +0 -54
  397. data/app/middleware/workarea/rack_cache_config_middleware.rb +0 -19
  398. data/app/queries/workarea/search/search_suggestions.rb +0 -43
  399. data/app/workers/workarea/bust_discount_cache.rb +0 -16
  400. data/app/workers/workarea/clean_user_activity.rb +0 -11
  401. data/app/workers/workarea/undo_release.rb +0 -15
  402. data/app/workers/workarea/update_email.rb +0 -33
  403. data/lib/generators/workarea/docker/USAGE +0 -16
  404. data/lib/generators/workarea/docker/docker_generator.rb +0 -61
  405. data/lib/generators/workarea/docker/templates/.env.erb +0 -6
  406. data/lib/generators/workarea/docker/templates/Dockerfile.erb +0 -48
  407. data/lib/generators/workarea/docker/templates/docker-compose.yml.erb +0 -72
  408. data/lib/generators/workarea/docker/templates/docker-entrypoint.sh.erb +0 -6
  409. data/lib/generators/workarea/docker/templates/docker-sync.yml.erb +0 -8
  410. data/lib/generators/workarea/docker/templates/docker-wait.sh +0 -11
  411. data/lib/generators/workarea/docker/templates/docker.env +0 -16
  412. data/lib/generators/workarea/docker/templates/docker_init.rb.erb +0 -29
  413. data/lib/workarea/configuration/headless_chrome.rb +0 -42
  414. data/lib/workarea/configuration/puma.rb +0 -37
  415. data/lib/workarea/ext/freedom_patches/i18n_js.rb +0 -27
  416. data/lib/workarea/ext/freedom_patches/mongoid_localized_defaults.rb +0 -25
  417. data/lib/workarea/ext/jbuilder/jbuilder_cache.rb +0 -29
  418. data/lib/workarea/ext/referer_parser/parser.decorator +0 -43
  419. data/lib/workarea/queues_pauser.rb +0 -26
  420. data/lib/workarea/robots.rb +0 -9
  421. data/test/generators/workarea/docker_generator_test.rb +0 -156
  422. data/test/javascripts/fixtures/duplicate_id_pass.html.haml +0 -2
  423. data/test/lib/workarea/ext/freedom_patches/mongoid_localized_defaults_test.rb +0 -25
  424. data/test/lib/workarea/ext/referer_parser/parser_test.rb +0 -20
  425. data/test/queries/workarea/search/search_suggestions_test.rb +0 -29
  426. data/test/workers/workarea/undo_release_test.rb +0 -23
  427. data/test/workers/workarea/update_email_test.rb +0 -39
@@ -5,7 +5,7 @@ module Workarea
5
5
  include GroupByTime
6
6
 
7
7
  self.reporting_class = Metrics::SalesByDay
8
- self.sort_fields = %w(_id units_sold orders customers merchandise discounts shipping tax revenue)
8
+ self.sort_fields = %w(_id units_sold orders cancellations customers merchandise discounts shipping tax refund revenue)
9
9
 
10
10
  def aggregation
11
11
  [filter, project_used_fields, group_by_time, add_aov]
@@ -14,8 +14,11 @@ module Workarea
14
14
  def filter
15
15
  {
16
16
  '$match' => {
17
- 'reporting_on' => { '$gte' => starts_at.utc, '$lte' => ends_at.utc },
18
- 'orders' => { '$gt' => 0 }
17
+ 'reporting_on' => { '$gte' => starts_at, '$lte' => ends_at },
18
+ '$or' => [
19
+ { 'orders' => { '$gt' => 0 } },
20
+ { 'cancellations' => { '$gt' => 0 } }
21
+ ]
19
22
  }
20
23
  }
21
24
  end
@@ -25,6 +28,7 @@ module Workarea
25
28
  '$project' => {
26
29
  'reporting_on' => 1,
27
30
  'orders' => 1,
31
+ 'cancellations' => 1,
28
32
  'returning_orders' => 1,
29
33
  'customers' => 1,
30
34
  'units_sold' => 1,
@@ -32,6 +36,7 @@ module Workarea
32
36
  'shipping' => 1,
33
37
  'discounts' => 1,
34
38
  'tax' => 1,
39
+ 'refund' => 1,
35
40
  'revenue' => 1
36
41
  }
37
42
  }
@@ -43,6 +48,7 @@ module Workarea
43
48
  '_id' => time_group_id,
44
49
  'starts_at' => { '$min' => '$reporting_on' },
45
50
  'orders' => { '$sum' => '$orders' },
51
+ 'cancellations' => { '$sum' => '$cancellations' },
46
52
  'returning_orders' => { '$sum' => '$returning_orders' },
47
53
  'customers' => { '$sum' => '$customers' },
48
54
  'units_sold' => { '$sum' => '$units_sold' },
@@ -50,6 +56,7 @@ module Workarea
50
56
  'shipping' => { '$sum' => '$shipping' },
51
57
  'discounts' => { '$sum' => '$discounts' },
52
58
  'tax' => { '$sum' => '$tax' },
59
+ 'refund' => { '$sum' => '$refund' },
53
60
  'revenue' => { '$sum' => '$revenue' }
54
61
  }
55
62
  }
@@ -13,7 +13,7 @@ module Workarea
13
13
  def filter_date_range
14
14
  {
15
15
  '$match' => {
16
- 'reporting_on' => { '$gte' => starts_at.utc, '$lte' => ends_at.utc },
16
+ 'reporting_on' => { '$gte' => starts_at, '$lte' => ends_at },
17
17
  'total_results' => total_results_query
18
18
  }
19
19
  }
@@ -14,7 +14,7 @@ module Workarea
14
14
  def filter_date_range
15
15
  {
16
16
  '$match' => {
17
- 'reporting_on' => { '$gte' => starts_at.utc, '$lte' => ends_at.utc }
17
+ 'reporting_on' => { '$gte' => starts_at, '$lte' => ends_at }
18
18
  }
19
19
  }
20
20
  end
@@ -14,7 +14,7 @@ module Workarea
14
14
  def filter
15
15
  {
16
16
  '$match' => {
17
- 'reporting_on' => { '$gte' => starts_at.utc, '$lte' => ends_at.utc },
17
+ 'reporting_on' => { '$gte' => starts_at, '$lte' => ends_at },
18
18
  'total_results' => 0
19
19
  }
20
20
  }
@@ -0,0 +1,20 @@
1
+ module Workarea
2
+ module Search
3
+ class AdminFulfillmentSkus
4
+ include Query
5
+ include AdminIndexSearch
6
+ include AdminSorting
7
+ include Pagination
8
+
9
+ document Search::Admin
10
+
11
+ def initialize(params = {})
12
+ super(params.merge(type: 'fulfillment_sku'))
13
+ end
14
+
15
+ def facets
16
+ super + [TermsFacet.new(self, 'policy')]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -9,10 +9,7 @@ module Workarea
9
9
  document Search::Admin
10
10
 
11
11
  def self.available_sorts
12
- Sort::Collection.new(
13
- Sort.published_date,
14
- Sort.undo_date
15
- )
12
+ Sort::Collection.new(Sort.published_date)
16
13
  end
17
14
 
18
15
  def initialize(params = {})
@@ -11,10 +11,6 @@ module Workarea
11
11
  def self.available_sorts
12
12
  AdminSorting.available_sorts
13
13
  end
14
-
15
- def default_admin_sort
16
- [{ _score: :desc }, { updated_at: :desc }]
17
- end
18
14
  end
19
15
  end
20
16
  end
@@ -0,0 +1,16 @@
1
+ module Workarea
2
+ module Search
3
+ class AdminSegments
4
+ include Query
5
+ include AdminIndexSearch
6
+ include AdminSorting
7
+ include Pagination
8
+
9
+ document Search::Admin
10
+
11
+ def initialize(params = {})
12
+ super(params.merge(type: 'segment'))
13
+ end
14
+ end
15
+ end
16
+ end
@@ -16,7 +16,7 @@ module Workarea
16
16
  end
17
17
 
18
18
  def default_admin_sort
19
- [{ updated_at: :desc }, { _score: :desc }]
19
+ [{ _score: :desc }, { updated_at: :desc }]
20
20
  end
21
21
 
22
22
  def user_selected_sort
@@ -7,10 +7,7 @@ module Workarea
7
7
  end
8
8
 
9
9
  def per_page
10
- return Workarea.config.per_page if params[:per_page].blank?
11
-
12
- tmp = params[:per_page].to_i
13
- tmp > 0 ? tmp : Workarea.config.per_page
10
+ params[:per_page].presence || Workarea.config.per_page
14
11
  end
15
12
 
16
13
  def size
@@ -1,6 +1,8 @@
1
1
  module Workarea
2
2
  module Search
3
3
  module ProductDisplayRules
4
+ extend ActiveSupport::Concern
5
+
4
6
  def product_display_query_clauses(allow_displayable_when_out_of_stock: true)
5
7
  [
6
8
  { term: { type: 'product' } },
@@ -8,7 +10,8 @@ module Workarea
8
10
  inventory_display_clause(
9
11
  allow_displayable_when_out_of_stock: allow_displayable_when_out_of_stock
10
12
  ),
11
- active_for_release_clause
13
+ active_for_segments_clause,
14
+ preview_current_release_clause
12
15
  ]
13
16
  end
14
17
 
@@ -36,23 +39,52 @@ module Workarea
36
39
  result
37
40
  end
38
41
 
39
- def active_for_release_clause
42
+ def active_for_segments_clause
43
+ {
44
+ bool: {
45
+ must: [
46
+ { term: { 'active.now' => true } },
47
+ {
48
+ bool: {
49
+ should: [
50
+ { bool: { must_not: { exists: { field: 'active_segment_ids' } } } },
51
+ { terms: { 'active_segment_ids' => Segment.current.map(&:id) } }
52
+ ]
53
+ }
54
+ }
55
+ ]
56
+ }
57
+ }
58
+ end
59
+
60
+ def preview_current_release_clause
40
61
  if Release.current.blank?
41
- { term: { 'active.now' => true } }
62
+ {
63
+ bool: {
64
+ minimum_should_match: 1,
65
+ should: [
66
+ { term: { release_id: 'live' } },
67
+ { bool: { must_not: { exists: { field: 'release_id' } } } } # for upgrade compatiblity
68
+ ]
69
+ }
70
+ }
42
71
  else
43
72
  {
44
73
  bool: {
74
+ minimum_should_match: 1,
45
75
  should: [
46
- { term: { "active.#{Release.current.id}" => true } },
76
+ { term: { release_id: Release.current.id } },
47
77
  {
48
78
  bool: {
79
+ must_not: [{ term: { changeset_release_ids: Release.current.id } }],
49
80
  must: [
50
- { term: { 'active.now' => true } },
51
81
  {
52
82
  bool: {
53
- must_not: {
54
- exists: { field: "active.#{Release.current.id}" }
55
- }
83
+ minimum_should_match: 1,
84
+ should: [
85
+ { term: { release_id: 'live' } },
86
+ { bool: { must_not: { exists: { field: 'release_id' } } } } # for upgrade compatiblity
87
+ ]
56
88
  }
57
89
  }
58
90
  ]
@@ -13,7 +13,21 @@ module Workarea
13
13
  end
14
14
 
15
15
  def entries
16
- @entries ||= @products.flat_map { |p| index_entries_for(p) }
16
+ @entries ||= live_entries + release_entries
17
+ end
18
+
19
+ def live_entries
20
+ @live_entries ||= @products.flat_map do |product|
21
+ index_entries_for(product.without_release)
22
+ end
23
+ end
24
+
25
+ def release_entries
26
+ @release_entries ||= @products.flat_map do |product|
27
+ ProductReleases.new(product).releases.map do |release|
28
+ index_entries_for(product.in_release(release))
29
+ end
30
+ end
17
31
  end
18
32
 
19
33
  def index_entries_for(product)
@@ -55,7 +55,10 @@ module Workarea
55
55
  end
56
56
 
57
57
  def customization
58
- @customization ||= Customization.active.find_by_query(params[:q])
58
+ return @customization if defined?(@customization)
59
+
60
+ result = Customization.find_by_query(params[:q])
61
+ @customization = result.active? ? result : nil
59
62
  end
60
63
 
61
64
  def boosts
@@ -2,7 +2,7 @@ module Workarea
2
2
  module Search
3
3
  class StorefrontSearch
4
4
  class ExactMatches
5
- include Middleware
5
+ include StorefrontSearch::Middleware
6
6
 
7
7
  def call(response)
8
8
  exact_match = find_exact_match(response)
@@ -34,10 +34,7 @@ module Workarea
34
34
  #
35
35
  def reset!(params, by: nil)
36
36
  @params = params
37
- @query = Search::ProductSearch.new(
38
- params.merge(rules: customization&.product_rules)
39
- )
40
-
37
+ @query = Search::ProductSearch.new(params.merge(rules: product_rules))
41
38
  @trace << Trace.new(@params, @query, by)
42
39
  end
43
40
 
@@ -61,6 +58,11 @@ module Workarea
61
58
  @query.query_suggestions
62
59
  end
63
60
 
61
+ def product_rules
62
+ return [] if customization.blank?
63
+ customization.product_rules.usable
64
+ end
65
+
64
66
  private
65
67
 
66
68
  def terms_facets
@@ -4,14 +4,15 @@ module Workarea
4
4
  attr_reader :params
5
5
 
6
6
  def initialize(params)
7
- @params = params.with_indifferent_access.except(:per_page)
7
+ @params = params
8
8
  @used_middleware = []
9
9
  end
10
10
 
11
11
  def customization
12
- @customization ||= Customization.active.find_by_query(
13
- params[:q].try(:strip).to_s
14
- )
12
+ @customization ||= begin
13
+ match = Customization.find_by_query(params[:q].try(:strip).to_s)
14
+ match.active? ? match : Customization.new
15
+ end
15
16
  end
16
17
 
17
18
  def response
@@ -14,7 +14,8 @@ module Workarea
14
14
 
15
15
  Content::Asset.create!(
16
16
  name: filename.titleize,
17
- file: File.new(path)
17
+ file: File.new(path),
18
+ alt_text: filename.titleize
18
19
  )
19
20
  end
20
21
  end
@@ -58,31 +58,8 @@ module Workarea
58
58
  end
59
59
 
60
60
  def process
61
- add_previous_week_insights
62
- add_previous_month_insights
63
-
64
61
  ProcessProductRecommendations.new.perform
65
62
  GenerateInsights.generate_all!
66
63
  end
67
-
68
- def add_previous_week_insights
69
- (1...12).each do |weeks|
70
- travel_to weeks.weeks.ago
71
-
72
- GenerateInsights.generate_weekly_insights
73
-
74
- travel_back
75
- end
76
- end
77
-
78
- def add_previous_month_insights
79
- (1...3).each do |months|
80
- travel_to months.months.ago
81
-
82
- GenerateInsights.generate_monthly_insights
83
-
84
- travel_back
85
- end
86
- end
87
64
  end
88
65
  end
@@ -36,18 +36,19 @@ module Workarea
36
36
  user.addresses.create!(
37
37
  first_name: user.first_name,
38
38
  last_name: user.last_name,
39
- street: Faker::Address.street_address,
40
- city: Faker::Address.city,
41
- postal_code: Faker::Address.zip_code,
42
- region: Faker::Address.state_abbr,
39
+ street: '22 S. 3rd St.',
40
+ city: 'Philadelphia',
41
+ postal_code: '19106',
42
+ region: 'PA',
43
43
  country: 'US',
44
- phone_number: Faker::PhoneNumber.cell_phone,
45
- phone_extension: Faker::PhoneNumber.extension
44
+ phone_number: '2159251800'
46
45
  )
47
46
  end
48
47
 
49
48
  payment_profile = Payment::Profile.lookup(PaymentReference.new(user))
50
49
 
50
+ payment_profile.update(store_credit: [0, 10].sample.to_m)
51
+
51
52
  saved_card = payment_profile.credit_cards.first
52
53
 
53
54
  saved_card ||= payment_profile.credit_cards.create!(
@@ -46,6 +46,8 @@ module Workarea
46
46
  { regular: sku_price, sale: sale_price < 0 ? 1.to_m : sale_price }
47
47
  ]
48
48
  )
49
+
50
+ Fulfillment::Sku.create!(id: sku)
49
51
  end
50
52
 
51
53
  sizes = product.variants.map { |v| v.details['Size'] }
@@ -0,0 +1,8 @@
1
+ module Workarea
2
+ class SegmentsSeeds
3
+ def perform
4
+ puts 'Adding segments...'
5
+ Workarea::Segment::LifeCycle.create!
6
+ end
7
+ end
8
+ end
@@ -9,13 +9,13 @@ module Workarea
9
9
  )
10
10
 
11
11
  category.rates.create!(
12
- percentage: 0.07,
12
+ region_percentage: 0.07,
13
13
  country: 'US',
14
14
  region: 'PA'
15
15
  )
16
16
 
17
17
  category.rates.create!(
18
- percentage: 0.08,
18
+ region_percentage: 0.08,
19
19
  country: 'US',
20
20
  region: 'NY',
21
21
  tier_min: 0,
@@ -23,7 +23,7 @@ module Workarea
23
23
  )
24
24
 
25
25
  category.rates.create!(
26
- percentage: 0.09,
26
+ region_percentage: 0.09,
27
27
  country: 'US',
28
28
  region: 'NY',
29
29
  tier_min: 200.01
@@ -1,5 +1,3 @@
1
- # TODO: Factor out remaining calls to this service and then remove
2
- # Plugins call Order#cancel directly and no longer go through this service
3
1
  module Workarea
4
2
  class CancelOrder
5
3
  attr_reader :order, :params
@@ -45,7 +43,7 @@ module Workarea
45
43
  refund if refund?
46
44
  update_fulfillment if update_fulfillment?
47
45
 
48
- order.cancel
46
+ order.cancel.tap { |canceled| update_metrics if canceled }
49
47
  end
50
48
 
51
49
  private
@@ -64,5 +62,12 @@ module Workarea
64
62
  def fulfillment
65
63
  @fulfillment ||= Fulfillment.find_or_initialize_by(id: order.id)
66
64
  end
65
+
66
+ def update_metrics
67
+ SaveOrderCancellationMetrics.perform_async(
68
+ order.id,
69
+ occured_at: order.canceled_at
70
+ )
71
+ end
67
72
  end
68
73
  end
@@ -34,6 +34,12 @@ module Workarea
34
34
  cancel_original if cancel_original?
35
35
  end
36
36
 
37
+ def anonymize!
38
+ new_order.update!(user_id: nil, email: nil)
39
+ new_payment.destroy!
40
+ new_shippings.each(&:destroy!)
41
+ end
42
+
37
43
  def save_new_order
38
44
  Workarea.config.copy_order_ignored_fields.each do |field|
39
45
  new_order.send("#{field}=", nil)
@@ -11,10 +11,12 @@ module Workarea
11
11
  def perform
12
12
  @order.items.each do |item|
13
13
  next if fulfillment.items.detect { |i| i.order_item_id == item.id.to_s }
14
+ fulfillment.items.build(order_item_id: item.id, quantity: item.quantity)
14
15
 
15
- fulfillment.items.build(
16
- order_item_id: item.id,
17
- quantity: item.quantity
16
+ Fulfillment::Sku.process!(
17
+ item.sku,
18
+ order_item: item,
19
+ fulfillment: fulfillment
18
20
  )
19
21
  end
20
22
 
@@ -6,26 +6,18 @@ module Workarea
6
6
  uri = URI.parse(request_url)
7
7
  url = "#{uri.scheme}://#{uri.host}"
8
8
  url += ":#{uri.port}" unless uri.port.in? [80, 443]
9
- id = "direct_upload_#{url}"
10
9
 
11
- response = begin
12
- Workarea.s3.get_bucket_cors(Configuration::S3.bucket)
13
- rescue Excon::Error::NotFound
14
- Excon::Response.new(body: { 'CORSConfiguration' => [] })
15
- end
16
-
17
- cors = response.data[:body]
18
-
19
- unless cors['CORSConfiguration'].pluck('ID').include?(id)
20
- cors['CORSConfiguration'] << {
21
- 'ID' => id,
22
- 'AllowedMethod' => 'PUT',
23
- 'AllowedOrigin' => url,
24
- 'AllowedHeader' => '*'
25
- }
26
-
27
- Workarea.s3.put_bucket_cors(Configuration::S3.bucket, cors)
28
- end
10
+ Workarea.s3.put_bucket_cors(
11
+ Configuration::S3.bucket,
12
+ 'CORSConfiguration' => [
13
+ {
14
+ 'ID' => "direct_upload_#{url}",
15
+ 'AllowedMethod' => 'PUT',
16
+ 'AllowedOrigin' => url,
17
+ 'AllowedHeader' => '*'
18
+ }
19
+ ]
20
+ )
29
21
  end
30
22
 
31
23
  attr_reader :type, :filename
@@ -5,30 +5,13 @@ module Workarea
5
5
  parsed.map(&:to_s).map(&:strip).reject(&:blank?) if parsed.present?
6
6
  end
7
7
 
8
- def initialize(original: {}, adds: [], updates: [], removes: [])
9
- @original = original
8
+ def initialize(adds: [], updates: [], removes: [])
10
9
  @adds = Array(adds).flatten.each_slice(2).to_a
11
10
  @updates = Array(updates).flatten.each_slice(2).to_a
12
11
  @removes = Array(removes).flatten
13
12
  end
14
13
 
15
- def result
16
- apply_to(@original.deep_dup)
17
- end
18
-
19
- # TODO v3.6 remove this method, doesn't work when the field is localized
20
- # @deprecated
21
14
  def apply(hash)
22
- warn <<~eos
23
- [DEPRECATION] `HashUpdate#apply` is deprecated and will be removed in
24
- version 3.6.0. Please use `HashUpdate#result` instead.
25
- eos
26
- apply_to(hash)
27
- end
28
-
29
- private
30
-
31
- def apply_to(hash)
32
15
  @adds.each do |tuple|
33
16
  key, value = *tuple
34
17
  hash[key] = self.class.parse_values(value)
@@ -89,7 +89,7 @@ module Workarea
89
89
  end
90
90
 
91
91
  def shippable_items
92
- @order.items.reject(&:digital?)
92
+ @order.items.select(&:requires_shipping?)
93
93
  end
94
94
 
95
95
  def stacked_dimensions
@@ -12,7 +12,7 @@ module Workarea
12
12
  return true if @releasable.blank?
13
13
 
14
14
  Release.with_current(release.try(:id)) do
15
- @releasable.update_attributes!(active: activate?)
15
+ @releasable.update!(active: activate?, active_segment_ids: active_segment_ids)
16
16
  end
17
17
  end
18
18
 
@@ -30,5 +30,9 @@ module Workarea
30
30
  def activate?
31
31
  @params[:activate] != 'never'
32
32
  end
33
+
34
+ def active_segment_ids
35
+ Array.wrap(@params[:active_segment_ids])
36
+ end
33
37
  end
34
38
  end