workarea-core 3.4.44 → 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.rb +18 -6
  26. data/app/models/workarea/checkout/collect_payment.rb +10 -1
  27. data/app/models/workarea/checkout/fraud/analyzer.rb +44 -0
  28. data/app/models/workarea/checkout/fraud/no_decision_analyzer.rb +14 -0
  29. data/app/models/workarea/checkout/fraud/test_analyzer.rb +26 -0
  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.rb +12 -82
  33. data/app/models/workarea/content/asset.rb +5 -18
  34. data/app/models/workarea/content/block.rb +8 -2
  35. data/app/models/workarea/content/block_draft.rb +7 -2
  36. data/app/models/workarea/content/block_type.rb +2 -2
  37. data/app/models/workarea/content/block_type_definition.rb +4 -0
  38. data/app/models/workarea/content/preset.rb +1 -1
  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.rb +47 -4
  72. data/app/models/workarea/order/fraud_decision.rb +18 -0
  73. data/app/models/workarea/order/item.rb +5 -0
  74. data/app/models/workarea/order/queries.rb +1 -0
  75. data/app/models/workarea/order/status.rb +10 -1
  76. data/app/models/workarea/payment.rb +7 -2
  77. data/app/models/workarea/payment/credit_card.rb +12 -0
  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.rb +2 -3
  82. data/app/models/workarea/pricing/discount/application_group.rb +8 -3
  83. data/app/models/workarea/pricing/discount/free_gift.rb +2 -1
  84. data/app/models/workarea/pricing/discount/redemption.rb +1 -1
  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.rb +72 -99
  95. data/app/models/workarea/release/activation.rb +45 -0
  96. data/app/models/workarea/release/changes.rb +45 -0
  97. data/app/models/workarea/release/changeset.rb +42 -52
  98. data/app/models/workarea/release/preview.rb +28 -0
  99. data/app/models/workarea/release/status.rb +2 -24
  100. data/app/models/workarea/release_session.rb +11 -11
  101. data/app/models/workarea/search/admin.rb +17 -39
  102. data/app/models/workarea/search/admin/catalog_product.rb +1 -2
  103. data/app/models/workarea/search/admin/fulfillment_sku.rb +27 -0
  104. data/app/models/workarea/search/admin/order.rb +1 -1
  105. data/app/models/workarea/search/admin/pricing_discount.rb +1 -1
  106. data/app/models/workarea/search/admin/release.rb +1 -4
  107. data/app/models/workarea/search/admin/segment.rb +19 -0
  108. data/app/models/workarea/search/order_text.rb +23 -6
  109. data/app/models/workarea/search/storefront.rb +33 -29
  110. data/app/models/workarea/search/storefront/category_query.rb +152 -0
  111. data/app/models/workarea/search/storefront/product/categories.rb +11 -45
  112. data/app/models/workarea/segment.rb +54 -0
  113. data/app/models/workarea/segment/first_time_customer.rb +8 -0
  114. data/app/models/workarea/segment/first_time_visitor.rb +12 -0
  115. data/app/models/workarea/segment/life_cycle.rb +44 -0
  116. data/app/models/workarea/segment/loyal_customer.rb +12 -0
  117. data/app/models/workarea/segment/returning_customer.rb +14 -0
  118. data/app/models/workarea/segment/returning_visitor.rb +12 -0
  119. data/app/models/workarea/segment/rules/base.rb +16 -0
  120. data/app/models/workarea/segment/rules/browser_info.rb +29 -0
  121. data/app/models/workarea/segment/rules/geolocation.rb +29 -0
  122. data/app/models/workarea/segment/rules/geolocation_option.rb +53 -0
  123. data/app/models/workarea/segment/rules/last_order.rb +14 -0
  124. data/app/models/workarea/segment/rules/logged_in.rb +13 -0
  125. data/app/models/workarea/segment/rules/orders.rb +17 -0
  126. data/app/models/workarea/segment/rules/revenue.rb +17 -0
  127. data/app/models/workarea/segment/rules/sessions.rb +17 -0
  128. data/app/models/workarea/segment/rules/tags.rb +14 -0
  129. data/app/models/workarea/segment/rules/traffic_referrer.rb +18 -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.rb +5 -4
  170. data/app/queries/workarea/search/storefront_search/exact_matches.rb +1 -1
  171. data/app/queries/workarea/search/storefront_search/response.rb +6 -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.rb +102 -3
  236. data/lib/workarea/cache.rb +6 -35
  237. data/lib/workarea/changelog.rake +2 -2
  238. data/lib/workarea/configuration.rb +121 -148
  239. data/lib/workarea/configuration/administrable/definition.rb +42 -0
  240. data/lib/workarea/configuration/administrable/field.rb +79 -0
  241. data/lib/workarea/configuration/administrable/fieldset.rb +44 -0
  242. data/lib/workarea/configuration/administrable_options.rb +24 -0
  243. data/lib/workarea/configuration/cache_store.rb +3 -1
  244. data/lib/workarea/configuration/content_blocks.rb +17 -0
  245. data/lib/workarea/configuration/mongoid.rb +1 -4
  246. data/lib/workarea/configuration/session.rb +36 -0
  247. data/lib/workarea/configuration/sidekiq.rb +3 -1
  248. data/lib/workarea/core.rb +15 -11
  249. data/lib/workarea/core/engine.rb +3 -58
  250. data/lib/workarea/elasticsearch/document.rb +8 -15
  251. data/lib/workarea/ext/freedom_patches/action_view_cache_helper.rb +4 -6
  252. data/lib/workarea/ext/freedom_patches/active_support_duration.rb +14 -0
  253. data/lib/workarea/ext/freedom_patches/money.rb +11 -0
  254. data/lib/workarea/ext/freedom_patches/premailer.rb +6 -0
  255. data/lib/workarea/ext/freedom_patches/string.rb +19 -4
  256. data/lib/workarea/ext/mongoid/find_ordered.rb +2 -2
  257. data/lib/workarea/ext/mongoid/lookup_hash.rb +30 -0
  258. data/lib/workarea/geolocation.rb +24 -6
  259. data/lib/workarea/routes_constraints/super_admin.rb +1 -1
  260. data/lib/workarea/version.rb +3 -4
  261. data/lib/workarea/visit.rb +92 -0
  262. data/lib/workarea/warnings.rb +95 -0
  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 +12 -10
  394. metadata +188 -78
  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
@@ -1,16 +0,0 @@
1
- DOCKER=true
2
-
3
- # Passed from env
4
- APP_PATH
5
- GEM_HOME
6
- BUNDLE_PATH
7
- BUNDLE_BIN
8
- BUNDLE_GEMS__WEBLINC__COM
9
-
10
- # Set autoconfig service connections
11
- WORKAREA_MONGOID_HOST_0=mongo:27017
12
- WORKAREA_REDIS_HOST=redis
13
- WORKAREA_REDIS_PORT=6379
14
- WORKAREA_REDIS_CACHE_HOST=redis
15
- WORKAREA_REDIS_CACHE_PORT=6379
16
- WORKAREA_ELASTICSEARCH_URL=elasticsearch:9200
@@ -1,29 +0,0 @@
1
- # Do things here that you only want to apply to your docker environment
2
- #
3
- if ENV['DOCKER'].to_s =~ /true/
4
- #
5
- # Modify workarea configuration
6
- #
7
- Workarea.configure do |config|
8
- config.headless_chrome_options << 'no-sandbox'
9
- end
10
-
11
- #
12
- # Modify application configuration
13
- #
14
- Rails.application.configure do
15
- <%= 'config.file_watcher = ActiveSupport::FileUpdateChecker' unless include_docker_sync? %>
16
-
17
- # Uncomment if you want to use mailcatcher
18
- # config.action_mailer.delivery_method = :smtp
19
- # config.action_mailer.smtp_settings = { :address => 'mailcatcher', :port => 1025 }
20
-
21
- # Allow web console in Docker
22
- if Rails.env.development?
23
- config.web_console.whitelisted_ips = Socket.ip_address_list.reduce([]) do |res, addrinfo|
24
- addrinfo.ipv4? ? res << IPAddr.new(addrinfo.ip_address).mask(24) : res
25
- end
26
- WebConsole::Request.whitelisted_ips = WebConsole::Whitelist.new(config.web_console.whitelisted_ips)
27
- end
28
- end
29
- end
@@ -1,42 +0,0 @@
1
- module Workarea
2
- module Configuration
3
- module HeadlessChrome
4
- extend self
5
-
6
- # TODO v3.5
7
- #
8
- # Allow apps to configure both Chrome options and arguments separately, as
9
- # any given release to Chrome may require changing these separately.
10
- #
11
- def load
12
- Workarea.config.headless_chrome_args = Workarea.config.headless_chrome_options
13
- end
14
-
15
- def options
16
- default_options.merge(env_options)
17
- end
18
-
19
- def default_options
20
- { args: args, w3c: false }
21
- end
22
-
23
- def env_options
24
- parsed = if ENV['WORKAREA_HEADLESS_CHROME_OPTIONS'].blank?
25
- {}
26
- else
27
- JSON.parse(ENV['WORKAREA_HEADLESS_CHROME_OPTIONS'])
28
- end
29
-
30
- parsed.symbolize_keys
31
- end
32
-
33
- def args
34
- (Workarea.config.headless_chrome_args + env_args).uniq
35
- end
36
-
37
- def env_args
38
- ENV['WORKAREA_HEADLESS_CHROME_ARGS'].to_s.split
39
- end
40
- end
41
- end
42
- end
@@ -1,37 +0,0 @@
1
- module Workarea
2
- module Configuration
3
- module Puma
4
- extend self
5
-
6
- def load(puma)
7
- puma.port(port)
8
- puma.threads(threads, threads)
9
- puma.environment(environment)
10
-
11
- if workers.present?
12
- puma.workers(workers)
13
- puma.preload_app!
14
- end
15
-
16
- puma.plugin(:tmp_restart)
17
- puma.set_remote_address(header: 'X-Real-IP') # For hosted environments
18
- end
19
-
20
- def port
21
- ENV.fetch('PORT') { 3000 }
22
- end
23
-
24
- def threads
25
- ENV.fetch('RAILS_MAX_THREADS') { 5 }
26
- end
27
-
28
- def environment
29
- ENV.fetch('RAILS_ENV') { 'development' }
30
- end
31
-
32
- def workers
33
- ENV.fetch('WEB_CONCURRENCY') { nil }
34
- end
35
- end
36
- end
37
- end
@@ -1,27 +0,0 @@
1
- module I18n
2
- module JS
3
- class FallbackLocales
4
- # i18n-js uses just the second part of this check out-of-the-box. This
5
- # causes the I18n fallbacks to get autoloaded without the developer
6
- # knowing.
7
- #
8
- # This surfaces in tests. System or integration tests will do this check
9
- # for compiling assets, then I18n fallbacks get autoloaded. So this shows
10
- # as some tests not having fallbacks if they run before one of those tests
11
- # or magically having fallbacks if they run after one of those types of
12
- # tests.
13
- #
14
- # Adding the `respond_to?` check doesn't cause autoload, but will return
15
- # `true` if fallbacks are enabled. Retain the original check because we
16
- # want the current I18n::JS backend to be checked, once fallbacks are
17
- # `require`d `I18n.respond_to?(:fallbacks)` will always return `true`.
18
- #
19
- # See also: https://github.com/fnando/i18n-js/blob/master/lib/i18n/js/fallback_locales.rb#L49-L58
20
- #
21
- def using_i18n_fallbacks_module?
22
- I18n.respond_to?(:fallbacks) &&
23
- I18n::JS.backend.class.included_modules.include?(I18n::Backend::Fallbacks)
24
- end
25
- end
26
- end
27
- end
@@ -1,25 +0,0 @@
1
- module Mongoid
2
- module Fields
3
- module LocalizedDefaults
4
- def create_accessors(name, meth, options = {})
5
- super
6
-
7
- if options[:localize]
8
- field = fields[name]
9
-
10
- define_method meth do |*args|
11
- result = super(*args)
12
- return result unless result.nil?
13
-
14
- default_name = field.send(:default_name)
15
- return send(default_name) if respond_to?(default_name)
16
-
17
- field.default_val
18
- end
19
- end
20
- end
21
- end
22
-
23
- ClassMethods.prepend(LocalizedDefaults)
24
- end
25
- end
@@ -1,29 +0,0 @@
1
- decorate JbuilderTemplate, with: :workarea do
2
- def _cache_fragment_for(*)
3
- return yield if workarea_admin?
4
-
5
- super
6
- end
7
-
8
- def _cache_key(*)
9
- super.tap do |result|
10
- result << workarea_cache_varies if workarea_cache_varies.present?
11
- end
12
- end
13
-
14
- private
15
-
16
- def workarea_admin?
17
- @context&.controller&.current_user&.admin?
18
- rescue ::RuntimeError
19
- false
20
- end
21
-
22
- def workarea_cache_varies
23
- workarea_request_env['workarea.cache_varies']
24
- end
25
-
26
- def workarea_request_env
27
- @context.controller.request.env || {}
28
- end
29
- end
@@ -1,43 +0,0 @@
1
- module RefererParser
2
- # This code is actually in `master` branch of
3
- # https://github.com/snowplow-referer-parser/ruby-referer-parser but
4
- # has not yet been released. It's used to allow through android-app://
5
- # URLs.
6
- decorate Parser do
7
- # Given a string or URI, return a hash of data
8
- def parse(obj)
9
- url = obj.is_a?(URI) ? obj : URI.parse(obj.to_s)
10
-
11
- unless ['android-app', 'http', 'https'].include?(url.scheme)
12
- raise InvalidUriError, "Only Android-App, HTTP, and HTTPS schemes are supported -- #{url.scheme}"
13
- end
14
-
15
- data = { known: false, uri: url.to_s }
16
-
17
- domain, name_key = domain_and_name_key_for(url)
18
- if domain && name_key
19
- referer_data = @name_hash[name_key]
20
- data[:known] = true
21
- data[:source] = referer_data[:source]
22
- data[:medium] = referer_data[:medium]
23
- data[:domain] = domain
24
-
25
- # Parse parameters if the referer uses them
26
- if url.query && referer_data[:parameters]
27
- query_params = CGI.parse(url.query)
28
- referer_data[:parameters].each do |param|
29
- # If there is a matching parameter, get the first non-blank value
30
- unless (values = query_params[param]).empty?
31
- data[:term] = values.reject { |v| v.strip == '' }.first
32
- break if data[:term]
33
- end
34
- end
35
- end
36
- end
37
-
38
- data
39
- rescue URI::InvalidURIError
40
- raise InvalidUriError.new("Unable to parse URI, not a URI? -- #{obj.inspect}", $ERROR_INFO)
41
- end
42
- end
43
- end
@@ -1,26 +0,0 @@
1
- module Workarea
2
- module QueuesPauser
3
- extend self
4
-
5
- def pause_queues!
6
- pauser = Sidekiq::Throttled::QueuesPauser.instance
7
- queues.each { |queue| pauser.pause!(queue) }
8
- end
9
-
10
- def resume_queues!
11
- pauser = Sidekiq::Throttled::QueuesPauser.instance
12
- queues.each { |queue| pauser.resume!(queue) }
13
- end
14
-
15
- def with_paused_queues(&block)
16
- pause_queues!
17
- yield
18
- ensure
19
- resume_queues!
20
- end
21
-
22
- def queues
23
- Configuration::Sidekiq.queues
24
- end
25
- end
26
- end
@@ -1,9 +0,0 @@
1
- module Workarea
2
- module Robots
3
- REGEX = /\b(80legs|Aboundex|AhrefsBot|alexa|Baidu|bing|CCBot|covario|discobot|exabot|ezooms|FairShare|fatbot|Gigabot|goodzer|Googlebot|hailoobot|IstellaBot|jikespider|libwww-perl|lwp-trivial|LYCOSA|mahonie|msnbot|MJ12bot|nessus|Nutch|SBIder|scanalert|ScoutJet|SeznamBot|ShopWiki|SiteUptime|Slurp|sogou|UnwindFetchor|WBSearchBot|WordPress|yandexbot|ZIBB|ZyBorg)\b/i
4
-
5
- def self.is_robot?(user_agent)
6
- user_agent.to_s =~ REGEX
7
- end
8
- end
9
- end
@@ -1,156 +0,0 @@
1
- require 'test_helper'
2
- require 'generators/workarea/docker/docker_generator'
3
-
4
- module Workarea
5
- class DockerGeneratorTest < GeneratorTest
6
- tests Workarea::DockerGenerator
7
- destination Dir.mktmpdir
8
- setup :prepare_destination
9
-
10
- setup :make_gitignore
11
-
12
- def make_gitignore
13
- FileUtils.touch("#{destination_root}/.gitignore")
14
- end
15
-
16
- def test_optionless_generator
17
- run_generator
18
- assert_file 'docker.env'
19
- assert_no_file 'docker-sync.yml'
20
-
21
- assert_file '.env' do |file|
22
- assert_match('GEM_HOME=/gems', file)
23
- end
24
-
25
- assert_file 'Dockerfile' do |file|
26
- refute_match('EXPOSE 3035', file)
27
- end
28
-
29
- assert_file 'docker-compose.yml' do |file|
30
- assert_match('.:${APP_PATH}', file)
31
- refute_match('webpack_server:', file)
32
- assert_match('gem_cache:/gems', file)
33
- end
34
-
35
- assert_file 'docker-entrypoint.sh' do |file|
36
- assert_match('bin/rails server', file)
37
- end
38
-
39
- assert_file 'config/initializers/z_docker.rb' do |file|
40
- assert_match('ActiveSupport::FileUpdateChecker', file)
41
- assert_match('config.web_console.whitelisted_ips', file)
42
- end
43
-
44
- assert_file '.gitignore' do |file|
45
- assert_match('# Ignore docker caches', file)
46
- end
47
- end
48
-
49
- def test_generator_with_sync
50
- run_generator %w(--sync)
51
- assert_file 'docker.env'
52
- assert_file 'docker-sync.yml'
53
-
54
- assert_file '.env' do |file|
55
- assert_match('GEM_HOME=/workarea/docker', file)
56
- end
57
-
58
- assert_file 'Dockerfile' do |file|
59
- refute_match('EXPOSE 3035', file)
60
- end
61
-
62
- assert_file 'docker-compose.yml' do |file|
63
- refute_match('.:${APP_PATH}', file)
64
- assert_match('-sync:${APP_PATH}:nocopy', file)
65
- refute_match('webpack_server:', file)
66
- refute_match('gem_cache:/gems', file)
67
- end
68
-
69
- assert_file 'docker-entrypoint.sh' do |file|
70
- assert_match('bin/rails server', file)
71
- end
72
-
73
- assert_file 'config/initializers/z_docker.rb' do |file|
74
- refute_match('ActiveSupport::FileUpdateChecker', file)
75
- assert_match('config.web_console.whitelisted_ips', file)
76
- end
77
-
78
- assert_file '.gitignore' do |file|
79
- assert_match('# Ignore docker caches', file)
80
- assert_match('.docker-sync', file)
81
- end
82
- end
83
-
84
- def test_generator_with_webpack
85
- FileUtils.touch("#{destination_root}/Gemfile")
86
-
87
- run_generator %w(--webpack)
88
- assert_file 'docker.env'
89
- assert_no_file 'docker-sync.yml'
90
-
91
- assert_file '.env' do |file|
92
- assert_match('GEM_HOME=/gems', file)
93
- end
94
-
95
- assert_file 'Dockerfile' do |file|
96
- assert_match('EXPOSE 3035', file)
97
- end
98
-
99
- assert_file 'docker-compose.yml' do |file|
100
- assert_match('.:${APP_PATH}', file)
101
- assert_match('webpack_server:', file)
102
- assert_match('gem_cache:/gems', file)
103
- end
104
-
105
- assert_file 'docker-entrypoint.sh' do |file|
106
- assert_match('yarn install', file)
107
- end
108
-
109
- assert_file 'config/initializers/z_docker.rb' do |file|
110
- assert_match('ActiveSupport::FileUpdateChecker', file)
111
- end
112
-
113
- assert_file '.gitignore' do |file|
114
- assert_match('# Ignore docker caches', file)
115
- refute_match('.docker-sync', file)
116
- end
117
- end
118
-
119
- def test_generator_with_webpack_and_sync
120
- FileUtils.touch("#{destination_root}/Gemfile")
121
-
122
- run_generator %w(-WS)
123
- assert_file 'docker.env'
124
- assert_file 'docker-sync.yml'
125
-
126
- assert_file '.env' do |file|
127
- assert_match('GEM_HOME=/workarea/docker', file)
128
- end
129
-
130
- assert_file 'Dockerfile' do |file|
131
- assert_match('EXPOSE 3035', file)
132
- end
133
-
134
- assert_file 'docker-compose.yml' do |file|
135
- refute_match('.:${APP_PATH}', file)
136
- assert_match('-sync:${APP_PATH}:nocopy', file)
137
- assert_match('webpack_server:', file)
138
- refute_match('gem_cache:/gems', file)
139
- end
140
-
141
- assert_file 'docker-entrypoint.sh' do |file|
142
- assert_match('yarn install', file)
143
- end
144
-
145
- assert_file 'config/initializers/z_docker.rb' do |file|
146
- refute_match('ActiveSupport::FileUpdateChecker', file)
147
- assert_match('config.web_console.whitelisted_ips', file)
148
- end
149
-
150
- assert_file '.gitignore' do |file|
151
- assert_match('# Ignore docker caches', file)
152
- assert_match('.docker-sync', file)
153
- end
154
- end
155
- end
156
- end