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,3 +1,4 @@
1
1
  Premailer::Rails.config.merge!(
2
+ remove_scripts: false,
2
3
  create_shorthands: false
3
4
  )
@@ -50,33 +50,12 @@ en:
50
50
  unit: instance
51
51
  csv:
52
52
  unit: row
53
- duration:
54
- years:
55
- one: '%{count} year'
56
- other: '%{count} years'
57
- months:
58
- one: '%{count} month'
59
- other: '%{count} months'
60
- weeks:
61
- one: '%{count} week'
62
- other: '%{count} weeks'
63
- days:
64
- one: '%{count} day'
65
- other: '%{count} days'
66
- hours:
67
- one: '%{count} hour'
68
- other: '%{count} hours'
69
- minutes:
70
- one: '%{count} minute'
71
- other: '%{count} minutes'
72
- seconds:
73
- one: '%{count} second'
74
- other: '%{count} seconds'
75
53
  errors:
76
54
  messages:
77
55
  contains_type: cannot contain 'type'
78
56
  not_a_date: must be a date
79
57
  invalid_credit_card_number: is not a valid credit card number
58
+ invalid_credit_card_issuer: '%{value} cards are not accepted. We accept %{issuers}.'
80
59
  expired_date: is an expired date
81
60
  incomplete: is incomplete
82
61
  must_be_future: must be in the future
@@ -91,14 +70,16 @@ en:
91
70
  must_be_unique: must be unique
92
71
  not_star_query: "cannot be '*'"
93
72
  undo_unpublished_release: cannot be set when Publish Date is blank
73
+ max_allowed_segments: You cannot have more than 15 total segments in Workarea.
74
+ unsupported_segmentation: aren't supported for pricing.
94
75
  facets:
95
76
  price_range:
96
77
  over: 'Over %{price}'
97
78
  under: 'Under %{price}'
79
+ fulfillment_sku:
80
+ name: "Fulfillment SKU %{id}"
98
81
  inventory_sku:
99
82
  name: "Inventory %{id}"
100
- inquiry:
101
- subjects: {}
102
83
  order:
103
84
  name: "Order %{id}"
104
85
  traffic_referrer:
@@ -108,6 +89,8 @@ en:
108
89
  search: search
109
90
  social: social
110
91
  unknown: unknown
92
+ errors:
93
+ count_limit: Orders cannot exceed %{size} items.
111
94
  messages:
112
95
  info: Info
113
96
  error: Error
@@ -131,10 +114,14 @@ en:
131
114
  description: Price Override
132
115
  pricing_sku:
133
116
  name: "Pricing %{id}"
117
+ release:
118
+ undo: Undo %{name}
134
119
  sorts:
135
120
  available: Available
136
121
  average_order_value: Average Order Total
122
+ country: Country
137
123
  destination: Destination
124
+ downloads: Most Downloaded
138
125
  end: End Date
139
126
  last_updated: Recently Updated
140
127
  modified: Last Updated
@@ -147,6 +134,7 @@ en:
147
134
  path: Path
148
135
  pending: Pending
149
136
  popularity: Most Popular
137
+ postal_code: Postal Code
150
138
  price_asc: Price, Low to High
151
139
  price_desc: Price, High to Low
152
140
  published_date: Published Date
@@ -154,6 +142,7 @@ en:
154
142
  query: Search Terms
155
143
  rating: Highest Rated
156
144
  redemptions: Most Redeemed
145
+ region: Region
157
146
  relevance: Relevance
158
147
  sales: Sales
159
148
  sku: SKU
@@ -1,3 +1,3 @@
1
- Workarea::Content.define_block_types do
1
+ Workarea.define_content_block_types do
2
2
 
3
3
  end
@@ -6,7 +6,6 @@ Example:
6
6
 
7
7
  This will create:
8
8
  config/initializers/workarea.rb
9
- config/puma.rb
10
9
  db/seeds.rb
11
10
 
12
11
  This will modify:
@@ -37,14 +37,6 @@ module Workarea
37
37
  environment '# Run Sidekiq tasks synchronously so that Sidekiq is not required in Development', env: 'development'
38
38
  end
39
39
 
40
- def configure_puma
41
- remove_file 'config/puma.rb'
42
- create_file 'config/puma.rb', <<~TEXT
43
- require 'workarea/configuration/puma'
44
- Workarea::Configuration::Puma.load(self)
45
- TEXT
46
- end
47
-
48
40
  def update_test_helper
49
41
  inject_into_file(
50
42
  'test/test_helper.rb',
@@ -63,19 +55,6 @@ module Workarea
63
55
  remove_file 'public/favicon.ico'
64
56
  end
65
57
 
66
- def add_development_mailer_port
67
- development_port = <<-CODE
68
-
69
- config.action_mailer.default_url_options = { port: 3000 }
70
- CODE
71
-
72
- inject_into_file(
73
- 'config/environments/development.rb',
74
- development_port,
75
- before: /^end/
76
- )
77
- end
78
-
79
58
  private
80
59
 
81
60
  def app_name
@@ -4,7 +4,7 @@ Workarea.configure do |config|
4
4
 
5
5
  config.host = {
6
6
  'test' => 'www.example.com',
7
- 'development' => 'localhost',
7
+ 'development' => 'localhost:3000',
8
8
  'production' => 'www.<%= app_name.dasherize %>.com' # TODO
9
9
  }[Rails.env]
10
10
 
@@ -39,6 +39,7 @@ namespace :workarea do
39
39
  Workarea::Metrics::SearchByWeek.delete_all
40
40
  Workarea::Metrics::SearchForLastWeek.delete_all
41
41
  Workarea::Metrics::SkuByDay.delete_all
42
+ Workarea::Metrics::TenderByDay.delete_all
42
43
  Workarea::Metrics::TrafficReferrerByDay.delete_all
43
44
  Workarea::Metrics::User.delete_all
44
45
  Workarea::Insights::Base.delete_all
@@ -0,0 +1,106 @@
1
+ namespace :workarea do
2
+ namespace :migrate do
3
+ desc 'Migrate the database from v3.4 to v3.5'
4
+ task v3_5: :environment do
5
+ count = 0
6
+
7
+ Workarea::Release.where(:undo_at.gte => Time.current).each do |release|
8
+ undo = release.build_undo(publish_at: release.undo_at).tap(&:save!)
9
+
10
+ release.changesets.each do |changeset|
11
+ changeset.build_undo(release: undo).save!
12
+ end
13
+
14
+ Workarea::Scheduler.delete(release.undo_job_id)
15
+
16
+ release.update_attributes!(undo_at: nil, undo_job_id: nil)
17
+ count += 1
18
+ end
19
+
20
+ Workarea::Release.all.each { |r| Workarea::IndexAdminSearch.perform(r) }
21
+
22
+ puts "✅ #{count} undo releases have been created."
23
+
24
+ count = 0
25
+
26
+ Workarea::Tax::Category.each_by(100) do |category|
27
+ category.rates.each_by(500) do |rate|
28
+ rate.postal_code_percentage = rate.percentage
29
+ rate.percentage = nil
30
+ end
31
+
32
+ category.save!
33
+ count += 1
34
+ end
35
+
36
+ puts "✅ #{count} tax categories updated."
37
+
38
+ Workarea::Catalog::Product.each_by(500) do |product|
39
+ next unless product.digital?
40
+
41
+ product.skus.each do |sku|
42
+ fulfillment = Workarea::Fulfillment::Sku.find_or_initialize_by(id: sku)
43
+ fulfillment.policy = 'ignore'
44
+ fulfillment.save!
45
+ end
46
+ end
47
+
48
+ puts "✅ #{count} fulfillment skus for digital product have been created."
49
+
50
+ count = 0
51
+ failed_ids = []
52
+ backup = Mongo::Collection.new(Mongoid::Clients.default.database, 'workarea_legacy_segments')
53
+
54
+ legacy_segments = Workarea::Segment.collection.find.to_a
55
+ legacy_segments.each do |doc|
56
+ backup.insert_one(doc)
57
+ Workarea::Segment.collection.delete_one(doc.slice('_id'))
58
+
59
+ segment = Workarea::Segment.new(
60
+ id: doc['_id'],
61
+ name: doc['name'],
62
+ subscribed_user_ids: doc['subscribed_user_ids'],
63
+ created_at: doc['created_at'],
64
+ updated_at: doc['updated_at']
65
+ )
66
+
67
+ doc['conditions'].each do |condition|
68
+ if condition['_type'] =~ /UserTag/
69
+ segment.rules << Workarea::Segment::Rules::Tags.new(tags: condition['tags'])
70
+ elsif condition['_type'] =~ /TotalSpent/
71
+ rule = Workarea::Segment::Rules::Revenue.new
72
+
73
+ if condition['operator'] == 'equals'
74
+ rule.minimum = rule.maximum = Money.demongoize(condition['amount'])
75
+ elsif condition['operator'] == 'less_than_or_equals'
76
+ rule.maximum = Money.demongoize(condition['amount'])
77
+ elsif condition['operator'] == 'less_than'
78
+ rule.maximum = (Money.demongoize(condition['amount']) - 0.01.to_m)
79
+ elsif condition['operator'] == 'greater_than_or_equals'
80
+ rule.minimum = Money.demongoize(condition['amount'])
81
+ elsif condition['operator'] == 'greater_than'
82
+ rule.minimum = (Money.demongoize(condition['amount']) + 0.01.to_m)
83
+ end
84
+
85
+ segment.rules << rule
86
+ end
87
+ end
88
+
89
+ if doc['conditions'].size == segment.rules.size && segment.save
90
+ count += 1
91
+ else
92
+ failed_ids << doc['_id']
93
+ end
94
+ end
95
+
96
+ puts "✅ #{count} segments have been migrated." if count > 0
97
+ if failed_ids.any?
98
+ puts "⛔️ #{failed_ids.count} segments failed to migrate."
99
+ puts "You can find copies of the original segments in the workarea_legacy_segments collection."
100
+ puts "The segments that failed are #{failed_ids.to_sentence}."
101
+ end
102
+
103
+ puts "\nMigration complete!"
104
+ end
105
+ end
106
+ end
@@ -1,5 +1,10 @@
1
1
  namespace :workarea do
2
2
  namespace :search_index do
3
+ def setup
4
+ require 'sidekiq/testing/inline' unless ENV['INLINE'] == 'false'
5
+ Workarea.config.bulk_index_batch_size = ENV['BATCH_SIZE'].to_i if ENV['BATCH_SIZE'].present?
6
+ end
7
+
3
8
  desc 'Reindex all data'
4
9
  task all: :environment do
5
10
  Rake::Task['workarea:search_index:storefront'].invoke
@@ -9,17 +14,14 @@ namespace :workarea do
9
14
 
10
15
  desc 'Reindex admin'
11
16
  task admin: :environment do
12
- require 'sidekiq/testing/inline' unless ENV['INLINE'] == 'false'
17
+ setup
13
18
  puts 'Indexing admin...'
14
-
15
- Workarea::QueuesPauser.with_paused_queues do
16
- Workarea::Search::Admin.reset_indexes!
17
- end
19
+ Workarea::Search::Admin.reset_indexes!
18
20
 
19
21
  Mongoid.models.each do |klass|
20
22
  next unless Workarea::Search::Admin.for(klass.first).present?
21
23
 
22
- klass.all.each_slice_of(100) do |models|
24
+ klass.all.each_slice_of(Workarea.config.bulk_index_batch_size) do |models|
23
25
  Workarea::BulkIndexAdmin.perform_by_models(models)
24
26
  end
25
27
  end
@@ -31,13 +33,11 @@ namespace :workarea do
31
33
 
32
34
  desc 'Reindex storefront'
33
35
  task storefront: :environment do
34
- require 'sidekiq/testing/inline' unless ENV['INLINE'] == 'false'
36
+ setup
35
37
  puts 'Indexing storefront...'
36
38
 
37
- Workarea::QueuesPauser.with_paused_queues do
38
- Workarea::Search::Storefront.reset_indexes!
39
- Workarea::Search::Storefront.ensure_dynamic_mappings
40
- end
39
+ Workarea::Search::Storefront.reset_indexes!
40
+ Workarea::Search::Storefront.ensure_dynamic_mappings
41
41
 
42
42
  # This code finds all unique filters for products so we can index a sample
43
43
  # product for each to ensure the dynamic mappings get created.
@@ -65,12 +65,12 @@ namespace :workarea do
65
65
  Workarea::Search::Storefront::Product.new(product).save
66
66
  end
67
67
 
68
- Workarea::Catalog::Category.all.each_by(100) do |category|
69
- Workarea::Search::Storefront::Product.add_category(category)
68
+ Workarea::Catalog::Category.all.each_by(Workarea.config.bulk_index_batch_size) do |category|
69
+ Workarea::Search::Storefront::CategoryQuery.new(category).create
70
70
  Workarea::Search::Storefront::Category.new(category).save
71
71
  end
72
72
 
73
- Workarea::Content::Page.all.each_by(100) do |page|
73
+ Workarea::Content::Page.all.each_by(Workarea.config.bulk_index_batch_size) do |page|
74
74
  Workarea::Search::Storefront::Page.new(page).save
75
75
  end
76
76
 
@@ -80,14 +80,12 @@ namespace :workarea do
80
80
 
81
81
  desc 'Reindex help'
82
82
  task help: :environment do
83
- require 'sidekiq/testing/inline' unless ENV['INLINE'] == 'false'
83
+ setup
84
84
  puts 'Indexing help...'
85
85
 
86
- Workarea::QueuesPauser.with_paused_queues do
87
- Workarea::Search::Help.reset_indexes!
88
- end
86
+ Workarea::Search::Help.reset_indexes!
89
87
 
90
- Workarea::Help::Article.all.each_by(100) do |help_article|
88
+ Workarea::Help::Article.all.each_by(Workarea.config.bulk_index_batch_size) do |help_article|
91
89
  Workarea::Search::Help.new(help_article).save
92
90
  end
93
91
  end
@@ -86,7 +86,7 @@ namespace :workarea do
86
86
  Workarea::Plugin.installed.map(&:root) +
87
87
  [Rails.root]
88
88
 
89
- ENV['PERF_TEST'] = 'true'
89
+ ENV['PERF_TEST'] = true
90
90
  Rails::TestUnit::Runner.rake_run(
91
91
  roots
92
92
  .map { |r| FileList["#{r}/test/performance/**/*_test.rb"] }
@@ -29,7 +29,7 @@ module Workarea
29
29
  # A shortcut to the Rails' application config
30
30
  # relevant to Workarea.
31
31
  #
32
- # @return [ActiveSupport::Configurable::Configuration]
32
+ # @return [Workarea::Configuration::AdministrableOptions]
33
33
  #
34
34
  def self.config
35
35
  @custom_config.presence || Configuration.config
@@ -81,8 +81,107 @@ module Workarea
81
81
  Fog::AWS::Storage.new(options)
82
82
  end
83
83
  end
84
+
85
+ # Use this to parse a referrer. It's globalized here because each instantiation
86
+ # will read a file, and we may need an instance on every request if there's a
87
+ # segment setup for referrer.
88
+ #
89
+ # @return [RefererParser::Parser]
90
+ #
91
+ def self.referrer_parser
92
+ @referrer_parser ||= RefererParser::Parser.new
93
+ end
94
+
95
+ # Define block types for use by administrators. A block type represents a
96
+ # row of content on the storefront, self-contained with its own styles and
97
+ # responsive logic.
98
+ #
99
+ # == Defining new block types
100
+ #
101
+ # Workarea.define_content_block_types do
102
+ # # Create a new block type called 2 Column Text
103
+ # # The ID or slug for this type will be :2_column_text
104
+ # block_type '2 Column Text' do
105
+ # # Set a description, which will be shown to admin users when
106
+ # # selecting a block type
107
+ # description 'Provides 2 columns of text'
108
+ #
109
+ # # Allows custom specification of which icon to use to display this
110
+ # # block type in the admin when selecting a new block. The default
111
+ # # is workarea/admin/content_block_types/#{block_type_id}
112
+ # icon 'workarea/admin/content_block_types/columns'
113
+ #
114
+ # # Tags are used for filtering content block types in the admin when
115
+ # # creating a new block and selecting its type
116
+ # tags %w(columns text)
117
+ #
118
+ # # You can also specify a custom view model to be used in the store
119
+ # # front when rendering. You could even share view models for
120
+ # # different blocks
121
+ # view_model 'Workarea::Storefront::ContentBlocks::ColumnsViewModel'
122
+ #
123
+ # # If your block type requires developer-facing configuration, you
124
+ # # you can specify any arbitrary attributes and they will be added
125
+ # # to the #config hash on the block type. For example, configuration
126
+ # # values tied to site design.
127
+ # height 960
128
+ # width 470
129
+ #
130
+ # # Use fieldset to group fields together for admin display. The
131
+ # # fieldset has no other use.
132
+ # fieldset 'Left Column' do
133
+ # # A field corresponds to one input in the admin and one key in
134
+ # # the Workarea::Content::Block#data hash. It will be referenced
135
+ # # by a systemized version of the name.
136
+ #
137
+ # # The second argument must be a type. Out-of-the-box valid types
138
+ # # include :asset, :category, :options, :products, :rich_text,
139
+ # # :string, and :url.
140
+ #
141
+ # # Options can be specific to the field type. All field types
142
+ # # support :default and :required.
143
+ # field 'Left Column Text', :text, required: true, default: 'Left Column'
144
+ # end
145
+ #
146
+ # fieldset 'Right Column' do
147
+ # field 'Right Column Text', :text, required: true, default: 'Right Column'
148
+ # end
149
+ # end
150
+ # end
151
+ #
152
+ # == Overriding values for existing block types
153
+ #
154
+ # To allow full customization, all details about a block type and its fields
155
+ # can be overridden. Here's an example of overriding details on the Product
156
+ # List block type which ships out of the box.
157
+ #
158
+ # Workarea.define_content_block_types do
159
+ # # Open the Product List block up again
160
+ # block_type 'Product List' do
161
+ # # Override the default on Title
162
+ # field 'Title', :string, default: 'Staff Picks'
163
+ # # Add a new field called description
164
+ # field 'Description', :text, default: 'Top picks by our staff
165
+ #
166
+ # # No need to touch other fields, they remain the same
167
+ # end
168
+ # end
169
+ #
170
+ # == Admin UI
171
+ # The admin UI for the block will be automatically generated based on the
172
+ # fields provided.
173
+ #
174
+ def self.define_content_block_types(&block)
175
+ Configuration::ContentBlocks.building_blocks << block
176
+ end
177
+
178
+ # Use this deprecation to warn about the next minor release.
179
+ #
180
+ # @return [ActiveSupport::Deprecation]
181
+ #
182
+ def self.deprecation
183
+ @deprecation ||= ActiveSupport::Deprecation.new('3.6', 'Workarea')
184
+ end
84
185
  end
85
186
 
86
187
  require 'workarea/core'
87
- require 'workarea/admin'
88
- require 'workarea/storefront'