workarea 3.4.12

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 (571) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +326 -0
  3. data/CHANGELOG.md +20501 -0
  4. data/README.md +163 -0
  5. data/docker-compose.yml +27 -0
  6. data/docs/Gemfile +8 -0
  7. data/docs/bin/middleman +29 -0
  8. data/docs/config.rb +87 -0
  9. data/docs/config.ru +7 -0
  10. data/docs/data/articles.yml +157 -0
  11. data/docs/package.json +15 -0
  12. data/docs/source/404.html.erb +13 -0
  13. data/docs/source/articles/access-routes-in-javascript.html.md +33 -0
  14. data/docs/source/articles/add-a-content-area.html.md +169 -0
  15. data/docs/source/articles/add-a-content-block-type.html.md +334 -0
  16. data/docs/source/articles/add-a-report.html.md +202 -0
  17. data/docs/source/articles/add-css-through-the-admin-ui.html.md +30 -0
  18. data/docs/source/articles/add-javascript-through-a-manifest.html.md +367 -0
  19. data/docs/source/articles/add-javascript-through-a-view.html.md +80 -0
  20. data/docs/source/articles/add-javascript-through-the-admin-ui.html.md +30 -0
  21. data/docs/source/articles/add-metrics.html.md +58 -0
  22. data/docs/source/articles/add-or-replace-a-pricing-calculator.html.md +150 -0
  23. data/docs/source/articles/add-remove-or-change-a-mongoid-validation.html.md +147 -0
  24. data/docs/source/articles/add-remove-or-change-a-product-template.html.md +142 -0
  25. data/docs/source/articles/add-remove-sort-and-group-storefront-search-filters.html.md +483 -0
  26. data/docs/source/articles/add-stylesheets-through-a-manifest.html.md +276 -0
  27. data/docs/source/articles/add-system-content.html.md +138 -0
  28. data/docs/source/articles/analytics-overview.html.md +51 -0
  29. data/docs/source/articles/analyze-storefront-search-results.html.md +261 -0
  30. data/docs/source/articles/api-overview.html.md +35 -0
  31. data/docs/source/articles/appending.html.md +506 -0
  32. data/docs/source/articles/application-document.html.md +88 -0
  33. data/docs/source/articles/automated-javascript-testing.html.md +162 -0
  34. data/docs/source/articles/b2b-overview.html.md +64 -0
  35. data/docs/source/articles/browser-and-device-support.html.md +47 -0
  36. data/docs/source/articles/change-product-placeholder-image.html.md +39 -0
  37. data/docs/source/articles/change-storefront-search-results.html.md +283 -0
  38. data/docs/source/articles/change-the-storefront-product-pricing-ui.html.md +348 -0
  39. data/docs/source/articles/change-the-storefront-search-filters-ui.html.md +103 -0
  40. data/docs/source/articles/checkout.html.md +479 -0
  41. data/docs/source/articles/commerce-model.html.md +164 -0
  42. data/docs/source/articles/configuration-for-hosting.html.md +106 -0
  43. data/docs/source/articles/configuration.html.md +406 -0
  44. data/docs/source/articles/configure-a-payment-gateway.html.md +58 -0
  45. data/docs/source/articles/configure-asset-storage.html.md +29 -0
  46. data/docs/source/articles/configure-asset-types.html.md +18 -0
  47. data/docs/source/articles/configure-contact-form-subjects-list.html.md +24 -0
  48. data/docs/source/articles/configure-imageoptim.html.md +23 -0
  49. data/docs/source/articles/configure-locales.html.md +45 -0
  50. data/docs/source/articles/configure-logins-and-authentication.html.md +42 -0
  51. data/docs/source/articles/configure-low-inventory-threshold.html.md +26 -0
  52. data/docs/source/articles/configure-product-image-sizes-and-processing.html.md +28 -0
  53. data/docs/source/articles/content.html.md +554 -0
  54. data/docs/source/articles/contentable.html.md +41 -0
  55. data/docs/source/articles/contribute-code.html.md +69 -0
  56. data/docs/source/articles/contribute-documentation.html.md +60 -0
  57. data/docs/source/articles/create-a-custom-discount.html.md +234 -0
  58. data/docs/source/articles/create-a-new-app.html.md +131 -0
  59. data/docs/source/articles/create-a-plugin.html.md +19 -0
  60. data/docs/source/articles/create-a-style-guide.html.md +71 -0
  61. data/docs/source/articles/create-a-theme.html.md +134 -0
  62. data/docs/source/articles/css-architectural-overview.html.md +89 -0
  63. data/docs/source/articles/customize-a-helper.html.md +91 -0
  64. data/docs/source/articles/decoration.html.md +415 -0
  65. data/docs/source/articles/define-and-configure-inventory-policies.html.md +107 -0
  66. data/docs/source/articles/documentation-style-guide.html.md +48 -0
  67. data/docs/source/articles/documentation.html.md +54 -0
  68. data/docs/source/articles/domain-modeling.html.md +82 -0
  69. data/docs/source/articles/error-pages.html.md.erb +95 -0
  70. data/docs/source/articles/extension-overview.html.md +152 -0
  71. data/docs/source/articles/favicon-support.html.md +112 -0
  72. data/docs/source/articles/feature-spec-helper-stylesheet.html.md +25 -0
  73. data/docs/source/articles/featurejs-and-feature-spec-helper.html.md +20 -0
  74. data/docs/source/articles/help-and-support.html.md +34 -0
  75. data/docs/source/articles/html-fragment-caching.html.md +46 -0
  76. data/docs/source/articles/http-caching.html.md +43 -0
  77. data/docs/source/articles/i18n.html.md +35 -0
  78. data/docs/source/articles/images-flow.html.md +10 -0
  79. data/docs/source/articles/index-storefront-search-documents.html.md +104 -0
  80. data/docs/source/articles/infrastructure.html.md +46 -0
  81. data/docs/source/articles/installing.html.md +61 -0
  82. data/docs/source/articles/integrate-a-payment-gateway.html.md +124 -0
  83. data/docs/source/articles/integrate-a-web-analytics-provider.html.md +35 -0
  84. data/docs/source/articles/integrate-an-inventory-management-system.html.md +88 -0
  85. data/docs/source/articles/integrating-with-other-software.html.md +59 -0
  86. data/docs/source/articles/inventory.html.md +352 -0
  87. data/docs/source/articles/javascript-coding-standards.html.md +30 -0
  88. data/docs/source/articles/javascript-modules.html.md +174 -0
  89. data/docs/source/articles/javascript-overview.html.md +62 -0
  90. data/docs/source/articles/javascript-reference-documentation.html.md +51 -0
  91. data/docs/source/articles/javascript-templates.html.md +52 -0
  92. data/docs/source/articles/low-level-caching.html.md +25 -0
  93. data/docs/source/articles/maintain-a-plugin.html.md +12 -0
  94. data/docs/source/articles/maintenance-policy.html.md +79 -0
  95. data/docs/source/articles/navigable.html.md +51 -0
  96. data/docs/source/articles/navigating-the-code.html.md +149 -0
  97. data/docs/source/articles/navigation.html.md +386 -0
  98. data/docs/source/articles/order-life-cycle.html.md +546 -0
  99. data/docs/source/articles/order-pricing.html.md +389 -0
  100. data/docs/source/articles/orders-and-items.html.md +210 -0
  101. data/docs/source/articles/orders.html.md +66 -0
  102. data/docs/source/articles/overriding.html.md +155 -0
  103. data/docs/source/articles/overview.html.md +43 -0
  104. data/docs/source/articles/plugins-overview.html.md +12 -0
  105. data/docs/source/articles/prerequisites-and-dependencies.html.md +202 -0
  106. data/docs/source/articles/products.html.md.erb +1270 -0
  107. data/docs/source/articles/progressive-web-application-support.html.md +148 -0
  108. data/docs/source/articles/rails-asset-manifests.html.md +33 -0
  109. data/docs/source/articles/rails-asset-view-helpers.html.md +25 -0
  110. data/docs/source/articles/reading-data.html.md +10 -0
  111. data/docs/source/articles/releasable.html.md +37 -0
  112. data/docs/source/articles/report-a-bug.html.md +75 -0
  113. data/docs/source/articles/ruby-coding-standards.html.md +10 -0
  114. data/docs/source/articles/run-sidekiq-in-a-local-environment.html.md +40 -0
  115. data/docs/source/articles/searching.html.md +1005 -0
  116. data/docs/source/articles/security-policy.html.md +42 -0
  117. data/docs/source/articles/seeds.html.md +345 -0
  118. data/docs/source/articles/shipping.html.md +756 -0
  119. data/docs/source/articles/sort-and-exclude-product-options.html.md +47 -0
  120. data/docs/source/articles/storefront-search-features.html.md +568 -0
  121. data/docs/source/articles/storefront-searches.html.md +126 -0
  122. data/docs/source/articles/style-guides.html.md +21 -0
  123. data/docs/source/articles/stylesheet-coding-standards.html.md +24 -0
  124. data/docs/source/articles/stylesheets-overview.html.md +67 -0
  125. data/docs/source/articles/swappable-list-data-structure.html.md +81 -0
  126. data/docs/source/articles/system-emails.html.md +102 -0
  127. data/docs/source/articles/taggable.html.md +8 -0
  128. data/docs/source/articles/test-a-credit-card-transaction.html.md +16 -0
  129. data/docs/source/articles/test-if-a-plugin-is-installed.html.md +34 -0
  130. data/docs/source/articles/testing.html.md +914 -0
  131. data/docs/source/articles/themes-overview.html.md +155 -0
  132. data/docs/source/articles/translate-administrable-content.html.md +14 -0
  133. data/docs/source/articles/translate-javascript-content.html.md +16 -0
  134. data/docs/source/articles/translate-or-customize-message-content.html.md +29 -0
  135. data/docs/source/articles/translate-or-customize-static-content.html.md +30 -0
  136. data/docs/source/articles/use-an-existing-workarea-app.html.md +108 -0
  137. data/docs/source/articles/view-models.html.md +509 -0
  138. data/docs/source/articles/views.html.md +14 -0
  139. data/docs/source/articles/workers.html.md +613 -0
  140. data/docs/source/articles/writing-data.html.md +10 -0
  141. data/docs/source/cli.html.md +163 -0
  142. data/docs/source/favicon.ico +0 -0
  143. data/docs/source/images/3-variants-1-option.png +0 -0
  144. data/docs/source/images/3-variants-3-options.png +0 -0
  145. data/docs/source/images/3-years-primary-image.png +0 -0
  146. data/docs/source/images/404-storefront-error-page.png +0 -0
  147. data/docs/source/images/404-system-content-admin.png +0 -0
  148. data/docs/source/images/404.jpg +0 -0
  149. data/docs/source/images/5-years-primary-image.png +0 -0
  150. data/docs/source/images/activity-dashboard.png +0 -0
  151. data/docs/source/images/activity-for-object.png +0 -0
  152. data/docs/source/images/activity-ui.png +0 -0
  153. data/docs/source/images/adding-captioned-image-block-custom-icon.png +0 -0
  154. data/docs/source/images/adding-captioned-image-block-default-icon.png +0 -0
  155. data/docs/source/images/admin-alerts-ui.png +0 -0
  156. data/docs/source/images/admin-category-range-filters.png +0 -0
  157. data/docs/source/images/admin-for-3-column-hero.png +0 -0
  158. data/docs/source/images/admin-help-index.png +0 -0
  159. data/docs/source/images/admin-help-ui.png +0 -0
  160. data/docs/source/images/admin-javascript.png +0 -0
  161. data/docs/source/images/admin-notification-for-deactivated-discount.png +0 -0
  162. data/docs/source/images/admin-notifications-ui.png +0 -0
  163. data/docs/source/images/admin-product-show-page.png +0 -0
  164. data/docs/source/images/admin-products-index-page.png +0 -0
  165. data/docs/source/images/admin-range-filters.png +0 -0
  166. data/docs/source/images/admin-style-guides-navigation.png +0 -0
  167. data/docs/source/images/after-re-seeding.png +0 -0
  168. data/docs/source/images/after-seeding-localhost-3000.png +0 -0
  169. data/docs/source/images/after-seeding.png +0 -0
  170. data/docs/source/images/arrow.svg +1 -0
  171. data/docs/source/images/arrow_white.svg +1 -0
  172. data/docs/source/images/aws-resource-map.png +0 -0
  173. data/docs/source/images/backordered-until-output-on-inventory-sku-card.png +0 -0
  174. data/docs/source/images/before-seeding-localhost-3000.png +0 -0
  175. data/docs/source/images/before-seeding.png +0 -0
  176. data/docs/source/images/browsing-workarea-versions-on-the-web.png +0 -0
  177. data/docs/source/images/bulk-asset-upload-on-assets-index-page.png +0 -0
  178. data/docs/source/images/bulk-asset-upload-while-editing-content.png +0 -0
  179. data/docs/source/images/bundle-show-workarea-core.png +0 -0
  180. data/docs/source/images/bundle-show-workarea.png +0 -0
  181. data/docs/source/images/calendar-for-backordered-until-field.png +0 -0
  182. data/docs/source/images/captioned-image-block-in-storefront.png +0 -0
  183. data/docs/source/images/captioned-image-content-block-storefront-component-style-guide.png +0 -0
  184. data/docs/source/images/cart-system-content-in-admin.png +0 -0
  185. data/docs/source/images/cart-system-content-in-storefront.png +0 -0
  186. data/docs/source/images/checkout-addresses-guest.png +0 -0
  187. data/docs/source/images/checkout-addresses-user.png +0 -0
  188. data/docs/source/images/checkout-confirmation.png +0 -0
  189. data/docs/source/images/checkout-flow-0.png +0 -0
  190. data/docs/source/images/checkout-flow-1.png +0 -0
  191. data/docs/source/images/checkout-flow-2.png +0 -0
  192. data/docs/source/images/checkout-flow-3.png +0 -0
  193. data/docs/source/images/checkout-flow-4.png +0 -0
  194. data/docs/source/images/checkout-payment-guest.png +0 -0
  195. data/docs/source/images/checkout-payment-user.png +0 -0
  196. data/docs/source/images/checkout-shipping.png +0 -0
  197. data/docs/source/images/color-picker-component-admin-style-guide.png +0 -0
  198. data/docs/source/images/color-picker-component-on-content-editing-screen.png +0 -0
  199. data/docs/source/images/commerce-model-carts-orders.png +0 -0
  200. data/docs/source/images/commerce-model-order-pricing.png +0 -0
  201. data/docs/source/images/commerce-model.png +0 -0
  202. data/docs/source/images/configuring-an-index-pattern-in-kibana.png +0 -0
  203. data/docs/source/images/content-block-presets.png +0 -0
  204. data/docs/source/images/content-search-customization.png +0 -0
  205. data/docs/source/images/country-with-region-data-in-address-form.png +0 -0
  206. data/docs/source/images/country-without-region-data-in-address-form.png +0 -0
  207. data/docs/source/images/create-content-block-preset-ui.png +0 -0
  208. data/docs/source/images/credit-card-icons.png +0 -0
  209. data/docs/source/images/css-added-through-admin.png +0 -0
  210. data/docs/source/images/css-admin-ui.png +0 -0
  211. data/docs/source/images/current-configuration-shown-in-admin-settings.png +0 -0
  212. data/docs/source/images/customer-impersonation-in-admin.png +0 -0
  213. data/docs/source/images/customer-impersonation-in-store-front.png +0 -0
  214. data/docs/source/images/date-filter-same-day.png +0 -0
  215. data/docs/source/images/developer-toolbar-in-store-front.png +0 -0
  216. data/docs/source/images/discounts-sorted-by-most-redeemed.png +0 -0
  217. data/docs/source/images/edit-help-article.png +0 -0
  218. data/docs/source/images/editing-content-for-search-customization.png +0 -0
  219. data/docs/source/images/editing-dynamic-captioned-image-block.png +0 -0
  220. data/docs/source/images/editing-product-fields-in-the-admin.png +0 -0
  221. data/docs/source/images/editing-search-system-content.png +0 -0
  222. data/docs/source/images/editing-static-captioned-image-block-custom-icon.png +0 -0
  223. data/docs/source/images/editing-static-captioned-image-block-default-icon.png +0 -0
  224. data/docs/source/images/external.svg +1 -0
  225. data/docs/source/images/favicon_16.png +0 -0
  226. data/docs/source/images/favicon_180.png +0 -0
  227. data/docs/source/images/favicon_32.png +0 -0
  228. data/docs/source/images/filters-all.png +0 -0
  229. data/docs/source/images/filters-control.png +0 -0
  230. data/docs/source/images/filters-custom.png +0 -0
  231. data/docs/source/images/filters-groups.png +0 -0
  232. data/docs/source/images/filters-material.png +0 -0
  233. data/docs/source/images/filters-omitted.png +0 -0
  234. data/docs/source/images/filters-pinned.png +0 -0
  235. data/docs/source/images/filters-range.png +0 -0
  236. data/docs/source/images/filters-sorted.png +0 -0
  237. data/docs/source/images/filters-wrapping-to-second-line-in-admin.png +0 -0
  238. data/docs/source/images/generic-product-template-images-no-options-selected.png +0 -0
  239. data/docs/source/images/generic-product-template-images-options-selected.png +0 -0
  240. data/docs/source/images/generic-template.png +0 -0
  241. data/docs/source/images/hosting.svg +1 -0
  242. data/docs/source/images/image-group-content-block-in-storefront.png +0 -0
  243. data/docs/source/images/images.svg +1 -0
  244. data/docs/source/images/import-export-screenshot.png +0 -0
  245. data/docs/source/images/invalid-display.png +0 -0
  246. data/docs/source/images/itcss.png +0 -0
  247. data/docs/source/images/kibana-dev-tools-console.png +0 -0
  248. data/docs/source/images/layout-content-admin-with-2-areas.png +0 -0
  249. data/docs/source/images/layout-content-admin-with-3-areas.png +0 -0
  250. data/docs/source/images/link-to-search-system-content.png +0 -0
  251. data/docs/source/images/logo.svg +1 -0
  252. data/docs/source/images/menu.svg +2 -0
  253. data/docs/source/images/mongo-replica-set.svg +1 -0
  254. data/docs/source/images/multi-column-hero-blocks.png +0 -0
  255. data/docs/source/images/option-selects-product-template-images-options-selected.png +0 -0
  256. data/docs/source/images/option-selects-template.png +0 -0
  257. data/docs/source/images/option-thumbnails-template.png +0 -0
  258. data/docs/source/images/order-item-total-price-diagram.png +0 -0
  259. data/docs/source/images/order-pricing-cart-example.png +0 -0
  260. data/docs/source/images/order-pricing-example-adjustments.png +0 -0
  261. data/docs/source/images/order-pricing-example-totals.png +0 -0
  262. data/docs/source/images/order-pricing-placed-order-example.png +0 -0
  263. data/docs/source/images/order-shipping-total-diagram.png +0 -0
  264. data/docs/source/images/order-show-with-multiple-tenders.png +0 -0
  265. data/docs/source/images/order-subtotal-price-diagram.png +0 -0
  266. data/docs/source/images/order-tax-total-diagram.png +0 -0
  267. data/docs/source/images/order-total-price-diagram.png +0 -0
  268. data/docs/source/images/order-total-value-diagram.png +0 -0
  269. data/docs/source/images/orders-dashboard-links.png +0 -0
  270. data/docs/source/images/oval.svg +1 -0
  271. data/docs/source/images/payment-icon-storefront-style-guide.png +0 -0
  272. data/docs/source/images/people-dashboard-links.png +0 -0
  273. data/docs/source/images/price-adjustments-diagram.png +0 -0
  274. data/docs/source/images/price-display-no-options.png +0 -0
  275. data/docs/source/images/price-display-options-selected.png +0 -0
  276. data/docs/source/images/pricing-calculators-diagram.png +0 -0
  277. data/docs/source/images/product-list-content-block-admin.png +0 -0
  278. data/docs/source/images/product-list-content-block-in-store-front.png +0 -0
  279. data/docs/source/images/promo-products-excluded-autocomplete-results-after.png +0 -0
  280. data/docs/source/images/promo-products-excluded-featured-category-results-after.png +0 -0
  281. data/docs/source/images/promo-products-excluded-recommendations-results-after.png +0 -0
  282. data/docs/source/images/promo-products-excluded-search-category-results-after.png +0 -0
  283. data/docs/source/images/promo-products-excluded-search-results-after.png +0 -0
  284. data/docs/source/images/promo-products-included-autocomplete-results-before.png +0 -0
  285. data/docs/source/images/promo-products-included-featured-category-results-before.png +0 -0
  286. data/docs/source/images/promo-products-included-recommendations-results-before.png +0 -0
  287. data/docs/source/images/promo-products-included-search-category-results-before.png +0 -0
  288. data/docs/source/images/promo-products-included-search-results-before.png +0 -0
  289. data/docs/source/images/rails-version-constraint.png +0 -0
  290. data/docs/source/images/re-enable-discount.png +0 -0
  291. data/docs/source/images/reading-data.svg +1 -0
  292. data/docs/source/images/readme-hero.png +0 -0
  293. data/docs/source/images/redesigned-customized-sort-for-search-results.png +0 -0
  294. data/docs/source/images/reviews-summary-above-share-buttons.png +0 -0
  295. data/docs/source/images/reviews-summary-below-product-name.png +0 -0
  296. data/docs/source/images/reviews-summary-below-share-buttons.png +0 -0
  297. data/docs/source/images/reviews-summary-removed.png +0 -0
  298. data/docs/source/images/rsa-fingerprint-for-stash.png +0 -0
  299. data/docs/source/images/ruby-version-constraint.png +0 -0
  300. data/docs/source/images/script-tag-added-through-admin.png +0 -0
  301. data/docs/source/images/search-analysis-admin-alternate-rendering.png +0 -0
  302. data/docs/source/images/search-analysis-admin.png +0 -0
  303. data/docs/source/images/search-quality-report.png +0 -0
  304. data/docs/source/images/search.svg +1 -0
  305. data/docs/source/images/searching-for-cart-system-content-in-admin.png +0 -0
  306. data/docs/source/images/searching-for-layout-system-content-in-admin.png +0 -0
  307. data/docs/source/images/seeded-admin.png +0 -0
  308. data/docs/source/images/seeds-from-plugins.png +0 -0
  309. data/docs/source/images/seo-metadata-automation-ui.png +0 -0
  310. data/docs/source/images/show-password-button.png +0 -0
  311. data/docs/source/images/storefront-autocomplete.png +0 -0
  312. data/docs/source/images/storefront-category-summary-content-block.png +0 -0
  313. data/docs/source/images/storefront-category.png +0 -0
  314. data/docs/source/images/storefront-product-after-overriding.png +0 -0
  315. data/docs/source/images/storefront-product-before-overriding.png +0 -0
  316. data/docs/source/images/storefront-product-browse-page.png +0 -0
  317. data/docs/source/images/storefront-product-recommendations.png +0 -0
  318. data/docs/source/images/storefront-product-show-page.png +0 -0
  319. data/docs/source/images/storefront-requests-and-search-requests.png +0 -0
  320. data/docs/source/images/storefront-search-request-handling.png +0 -0
  321. data/docs/source/images/storefront-search-response-creation.png +0 -0
  322. data/docs/source/images/storefront-search.png +0 -0
  323. data/docs/source/images/storefront-style-guides-navigation.png +0 -0
  324. data/docs/source/images/styles.css +3 -0
  325. data/docs/source/images/tax-categories-ui.png +0 -0
  326. data/docs/source/images/tax-rates-ui.png +0 -0
  327. data/docs/source/images/unpurchasable-product.png +0 -0
  328. data/docs/source/images/url-redirects-filtering.png +0 -0
  329. data/docs/source/images/utility-nav-area-in-admin.png +0 -0
  330. data/docs/source/images/utility-nav-area-in-storefront.png +0 -0
  331. data/docs/source/images/validation-message-in-storefront.png +0 -0
  332. data/docs/source/images/view-model-interface.png +0 -0
  333. data/docs/source/images/viewing-workarea-version-in-source.png +0 -0
  334. data/docs/source/images/workarea.svg +1 -0
  335. data/docs/source/images/worst-performing-searches-on-results-customization-page.png +0 -0
  336. data/docs/source/images/writing-data.svg +1 -0
  337. data/docs/source/index.html.erb +167 -0
  338. data/docs/source/javascripts/jquery.js +2 -0
  339. data/docs/source/javascripts/lunr.js +7 -0
  340. data/docs/source/javascripts/site.js +299 -0
  341. data/docs/source/javascripts/vendor/highlight.pack.js +2 -0
  342. data/docs/source/layouts/article.erb +106 -0
  343. data/docs/source/layouts/bare.erb +46 -0
  344. data/docs/source/layouts/layout.erb +43 -0
  345. data/docs/source/release-notes.html.md +258 -0
  346. data/docs/source/release-notes/workarea-3-0-0.html.md +146 -0
  347. data/docs/source/release-notes/workarea-3-0-1.html.md +161 -0
  348. data/docs/source/release-notes/workarea-3-0-10.html.md +39 -0
  349. data/docs/source/release-notes/workarea-3-0-11.html.md +277 -0
  350. data/docs/source/release-notes/workarea-3-0-12.html.md +14 -0
  351. data/docs/source/release-notes/workarea-3-0-13.html.md +153 -0
  352. data/docs/source/release-notes/workarea-3-0-14.html.md +93 -0
  353. data/docs/source/release-notes/workarea-3-0-15.html.md +107 -0
  354. data/docs/source/release-notes/workarea-3-0-16.html.md +36 -0
  355. data/docs/source/release-notes/workarea-3-0-17.html.md +141 -0
  356. data/docs/source/release-notes/workarea-3-0-18.html.md +123 -0
  357. data/docs/source/release-notes/workarea-3-0-19.html.md +160 -0
  358. data/docs/source/release-notes/workarea-3-0-2.html.md +222 -0
  359. data/docs/source/release-notes/workarea-3-0-20.html.md +95 -0
  360. data/docs/source/release-notes/workarea-3-0-21.html.md +168 -0
  361. data/docs/source/release-notes/workarea-3-0-22.html.md +268 -0
  362. data/docs/source/release-notes/workarea-3-0-23.html.md +173 -0
  363. data/docs/source/release-notes/workarea-3-0-24.html.md +19 -0
  364. data/docs/source/release-notes/workarea-3-0-25.html.md +26 -0
  365. data/docs/source/release-notes/workarea-3-0-26.html.md +199 -0
  366. data/docs/source/release-notes/workarea-3-0-27.html.md +113 -0
  367. data/docs/source/release-notes/workarea-3-0-28.html.md +39 -0
  368. data/docs/source/release-notes/workarea-3-0-29.html.md +73 -0
  369. data/docs/source/release-notes/workarea-3-0-3.html.md +35 -0
  370. data/docs/source/release-notes/workarea-3-0-30.html.md +186 -0
  371. data/docs/source/release-notes/workarea-3-0-31.html.md +125 -0
  372. data/docs/source/release-notes/workarea-3-0-32.html.md +73 -0
  373. data/docs/source/release-notes/workarea-3-0-33.html.md +137 -0
  374. data/docs/source/release-notes/workarea-3-0-34.html.md +203 -0
  375. data/docs/source/release-notes/workarea-3-0-35.html.md +205 -0
  376. data/docs/source/release-notes/workarea-3-0-36.html.md +105 -0
  377. data/docs/source/release-notes/workarea-3-0-37.html.md +144 -0
  378. data/docs/source/release-notes/workarea-3-0-38.html.md +73 -0
  379. data/docs/source/release-notes/workarea-3-0-39.html.md +77 -0
  380. data/docs/source/release-notes/workarea-3-0-4.html.md +14 -0
  381. data/docs/source/release-notes/workarea-3-0-40.html.md +130 -0
  382. data/docs/source/release-notes/workarea-3-0-41.html.md +70 -0
  383. data/docs/source/release-notes/workarea-3-0-42.html.md +52 -0
  384. data/docs/source/release-notes/workarea-3-0-43.html.md +72 -0
  385. data/docs/source/release-notes/workarea-3-0-44.html.md +93 -0
  386. data/docs/source/release-notes/workarea-3-0-45.html.md +61 -0
  387. data/docs/source/release-notes/workarea-3-0-46.html.md +171 -0
  388. data/docs/source/release-notes/workarea-3-0-47.html.md +130 -0
  389. data/docs/source/release-notes/workarea-3-0-48.html.md +160 -0
  390. data/docs/source/release-notes/workarea-3-0-49.html.md +28 -0
  391. data/docs/source/release-notes/workarea-3-0-5.html.md +225 -0
  392. data/docs/source/release-notes/workarea-3-0-50.html.md +74 -0
  393. data/docs/source/release-notes/workarea-3-0-51.html.md +61 -0
  394. data/docs/source/release-notes/workarea-3-0-52.html.md +76 -0
  395. data/docs/source/release-notes/workarea-3-0-53.html.md +126 -0
  396. data/docs/source/release-notes/workarea-3-0-54.html.md +112 -0
  397. data/docs/source/release-notes/workarea-3-0-55.html.md +105 -0
  398. data/docs/source/release-notes/workarea-3-0-56.html.md +56 -0
  399. data/docs/source/release-notes/workarea-3-0-57.html.md +82 -0
  400. data/docs/source/release-notes/workarea-3-0-58.html.md +153 -0
  401. data/docs/source/release-notes/workarea-3-0-59.html.md +78 -0
  402. data/docs/source/release-notes/workarea-3-0-6.html.md +165 -0
  403. data/docs/source/release-notes/workarea-3-0-60.html.md +43 -0
  404. data/docs/source/release-notes/workarea-3-0-61.html.md +46 -0
  405. data/docs/source/release-notes/workarea-3-0-62.html.md +23 -0
  406. data/docs/source/release-notes/workarea-3-0-63.html.md +25 -0
  407. data/docs/source/release-notes/workarea-3-0-64.html.md +25 -0
  408. data/docs/source/release-notes/workarea-3-0-65.html.md +37 -0
  409. data/docs/source/release-notes/workarea-3-0-7.html.md +207 -0
  410. data/docs/source/release-notes/workarea-3-0-8.html.md +337 -0
  411. data/docs/source/release-notes/workarea-3-0-9.html.md +196 -0
  412. data/docs/source/release-notes/workarea-3-1-0.html.md +414 -0
  413. data/docs/source/release-notes/workarea-3-1-1.html.md +139 -0
  414. data/docs/source/release-notes/workarea-3-1-10.html.md +19 -0
  415. data/docs/source/release-notes/workarea-3-1-11.html.md +27 -0
  416. data/docs/source/release-notes/workarea-3-1-12.html.md +216 -0
  417. data/docs/source/release-notes/workarea-3-1-13.html.md +113 -0
  418. data/docs/source/release-notes/workarea-3-1-14.html.md +39 -0
  419. data/docs/source/release-notes/workarea-3-1-15.html.md +107 -0
  420. data/docs/source/release-notes/workarea-3-1-16.html.md +188 -0
  421. data/docs/source/release-notes/workarea-3-1-17.html.md +141 -0
  422. data/docs/source/release-notes/workarea-3-1-18.html.md +73 -0
  423. data/docs/source/release-notes/workarea-3-1-19.html.md +137 -0
  424. data/docs/source/release-notes/workarea-3-1-2.html.md +55 -0
  425. data/docs/source/release-notes/workarea-3-1-20.html.md +203 -0
  426. data/docs/source/release-notes/workarea-3-1-21.html.md +205 -0
  427. data/docs/source/release-notes/workarea-3-1-22.html.md +121 -0
  428. data/docs/source/release-notes/workarea-3-1-23.html.md +144 -0
  429. data/docs/source/release-notes/workarea-3-1-24.html.md +94 -0
  430. data/docs/source/release-notes/workarea-3-1-25.html.md +77 -0
  431. data/docs/source/release-notes/workarea-3-1-26.html.md +130 -0
  432. data/docs/source/release-notes/workarea-3-1-27.html.md +70 -0
  433. data/docs/source/release-notes/workarea-3-1-28.html.md +52 -0
  434. data/docs/source/release-notes/workarea-3-1-29.html.md +44 -0
  435. data/docs/source/release-notes/workarea-3-1-3.html.md +185 -0
  436. data/docs/source/release-notes/workarea-3-1-30.html.md +72 -0
  437. data/docs/source/release-notes/workarea-3-1-31.html.md +93 -0
  438. data/docs/source/release-notes/workarea-3-1-32.html.md +61 -0
  439. data/docs/source/release-notes/workarea-3-1-33.html.md +171 -0
  440. data/docs/source/release-notes/workarea-3-1-34.html.md +130 -0
  441. data/docs/source/release-notes/workarea-3-1-35.html.md +179 -0
  442. data/docs/source/release-notes/workarea-3-1-36.html.md +28 -0
  443. data/docs/source/release-notes/workarea-3-1-37.html.md +74 -0
  444. data/docs/source/release-notes/workarea-3-1-38.html.md +61 -0
  445. data/docs/source/release-notes/workarea-3-1-39.html.md +96 -0
  446. data/docs/source/release-notes/workarea-3-1-4.html.md +148 -0
  447. data/docs/source/release-notes/workarea-3-1-40.html.md +126 -0
  448. data/docs/source/release-notes/workarea-3-1-41.html.md +128 -0
  449. data/docs/source/release-notes/workarea-3-1-42.html.md +105 -0
  450. data/docs/source/release-notes/workarea-3-1-43.html.md +37 -0
  451. data/docs/source/release-notes/workarea-3-1-44.html.md +82 -0
  452. data/docs/source/release-notes/workarea-3-1-45.html.md +153 -0
  453. data/docs/source/release-notes/workarea-3-1-46.html.md +91 -0
  454. data/docs/source/release-notes/workarea-3-1-47.html.md +65 -0
  455. data/docs/source/release-notes/workarea-3-1-48.html.md +46 -0
  456. data/docs/source/release-notes/workarea-3-1-49.html.md +23 -0
  457. data/docs/source/release-notes/workarea-3-1-5.html.md +169 -0
  458. data/docs/source/release-notes/workarea-3-1-50.html.md +42 -0
  459. data/docs/source/release-notes/workarea-3-1-51.html.md +25 -0
  460. data/docs/source/release-notes/workarea-3-1-52.html.md +57 -0
  461. data/docs/source/release-notes/workarea-3-1-6.html.md +117 -0
  462. data/docs/source/release-notes/workarea-3-1-7.html.md +176 -0
  463. data/docs/source/release-notes/workarea-3-1-8.html.md +283 -0
  464. data/docs/source/release-notes/workarea-3-1-9.html.md +212 -0
  465. data/docs/source/release-notes/workarea-3-2-0.html.md +1705 -0
  466. data/docs/source/release-notes/workarea-3-2-1.html.md +216 -0
  467. data/docs/source/release-notes/workarea-3-2-10.html.md +237 -0
  468. data/docs/source/release-notes/workarea-3-2-11.html.md +121 -0
  469. data/docs/source/release-notes/workarea-3-2-12.html.md +145 -0
  470. data/docs/source/release-notes/workarea-3-2-13.html.md +138 -0
  471. data/docs/source/release-notes/workarea-3-2-14.html.md +77 -0
  472. data/docs/source/release-notes/workarea-3-2-15.html.md +130 -0
  473. data/docs/source/release-notes/workarea-3-2-16.html.md +111 -0
  474. data/docs/source/release-notes/workarea-3-2-17.html.md +52 -0
  475. data/docs/source/release-notes/workarea-3-2-18.html.md +44 -0
  476. data/docs/source/release-notes/workarea-3-2-19.html.md +72 -0
  477. data/docs/source/release-notes/workarea-3-2-2.html.md +145 -0
  478. data/docs/source/release-notes/workarea-3-2-20.html.md +93 -0
  479. data/docs/source/release-notes/workarea-3-2-21.html.md +61 -0
  480. data/docs/source/release-notes/workarea-3-2-22.html.md +154 -0
  481. data/docs/source/release-notes/workarea-3-2-23.html.md +130 -0
  482. data/docs/source/release-notes/workarea-3-2-24.html.md +200 -0
  483. data/docs/source/release-notes/workarea-3-2-25.html.md +28 -0
  484. data/docs/source/release-notes/workarea-3-2-26.html.md +94 -0
  485. data/docs/source/release-notes/workarea-3-2-27.html.md +61 -0
  486. data/docs/source/release-notes/workarea-3-2-28.html.md +96 -0
  487. data/docs/source/release-notes/workarea-3-2-29.html.md +126 -0
  488. data/docs/source/release-notes/workarea-3-2-30.html.md +112 -0
  489. data/docs/source/release-notes/workarea-3-2-31.html.md +105 -0
  490. data/docs/source/release-notes/workarea-3-2-32.html.md +56 -0
  491. data/docs/source/release-notes/workarea-3-2-33.html.md +82 -0
  492. data/docs/source/release-notes/workarea-3-2-34.html.md +153 -0
  493. data/docs/source/release-notes/workarea-3-2-35.html.md +91 -0
  494. data/docs/source/release-notes/workarea-3-2-36.html.md +118 -0
  495. data/docs/source/release-notes/workarea-3-2-37.html.md +46 -0
  496. data/docs/source/release-notes/workarea-3-2-38.html.md +23 -0
  497. data/docs/source/release-notes/workarea-3-2-39.html.md +42 -0
  498. data/docs/source/release-notes/workarea-3-2-4.html.md +109 -0
  499. data/docs/source/release-notes/workarea-3-2-40.html.md +25 -0
  500. data/docs/source/release-notes/workarea-3-2-41.html.md +90 -0
  501. data/docs/source/release-notes/workarea-3-2-5.html.md +186 -0
  502. data/docs/source/release-notes/workarea-3-2-6.html.md +173 -0
  503. data/docs/source/release-notes/workarea-3-2-7.html.md +89 -0
  504. data/docs/source/release-notes/workarea-3-2-8.html.md +137 -0
  505. data/docs/source/release-notes/workarea-3-2-9.html.md +219 -0
  506. data/docs/source/release-notes/workarea-3-3-0.html.md +1272 -0
  507. data/docs/source/release-notes/workarea-3-3-1.html.md +324 -0
  508. data/docs/source/release-notes/workarea-3-3-10.html.md +69 -0
  509. data/docs/source/release-notes/workarea-3-3-11.html.md +72 -0
  510. data/docs/source/release-notes/workarea-3-3-12.html.md +136 -0
  511. data/docs/source/release-notes/workarea-3-3-13.html.md +61 -0
  512. data/docs/source/release-notes/workarea-3-3-14.html.md +196 -0
  513. data/docs/source/release-notes/workarea-3-3-15.html.md +167 -0
  514. data/docs/source/release-notes/workarea-3-3-16.html.md +234 -0
  515. data/docs/source/release-notes/workarea-3-3-17.html.md +82 -0
  516. data/docs/source/release-notes/workarea-3-3-18.html.md +165 -0
  517. data/docs/source/release-notes/workarea-3-3-19.html.md +106 -0
  518. data/docs/source/release-notes/workarea-3-3-2.html.md +72 -0
  519. data/docs/source/release-notes/workarea-3-3-20.html.md +116 -0
  520. data/docs/source/release-notes/workarea-3-3-21.html.md +228 -0
  521. data/docs/source/release-notes/workarea-3-3-22.html.md +125 -0
  522. data/docs/source/release-notes/workarea-3-3-23.html.md +154 -0
  523. data/docs/source/release-notes/workarea-3-3-24.html.md +70 -0
  524. data/docs/source/release-notes/workarea-3-3-25.html.md +114 -0
  525. data/docs/source/release-notes/workarea-3-3-26.html.md +260 -0
  526. data/docs/source/release-notes/workarea-3-3-27.html.md +138 -0
  527. data/docs/source/release-notes/workarea-3-3-28.html.md +147 -0
  528. data/docs/source/release-notes/workarea-3-3-29.html.md +63 -0
  529. data/docs/source/release-notes/workarea-3-3-3.html.md +153 -0
  530. data/docs/source/release-notes/workarea-3-3-30.html.md +102 -0
  531. data/docs/source/release-notes/workarea-3-3-31.html.md +57 -0
  532. data/docs/source/release-notes/workarea-3-3-32.html.md +44 -0
  533. data/docs/source/release-notes/workarea-3-3-33.html.md +114 -0
  534. data/docs/source/release-notes/workarea-3-3-4.html.md +332 -0
  535. data/docs/source/release-notes/workarea-3-3-5.html.md +242 -0
  536. data/docs/source/release-notes/workarea-3-3-6.html.md +100 -0
  537. data/docs/source/release-notes/workarea-3-3-7.html.md +148 -0
  538. data/docs/source/release-notes/workarea-3-3-8.html.md +163 -0
  539. data/docs/source/release-notes/workarea-3-3-9.html.md +93 -0
  540. data/docs/source/release-notes/workarea-3-4-0.html.md +580 -0
  541. data/docs/source/release-notes/workarea-3-4-1.html.md +150 -0
  542. data/docs/source/release-notes/workarea-3-4-10.html.md +72 -0
  543. data/docs/source/release-notes/workarea-3-4-11.html.md +60 -0
  544. data/docs/source/release-notes/workarea-3-4-12.html.md +155 -0
  545. data/docs/source/release-notes/workarea-3-4-2.html.md +188 -0
  546. data/docs/source/release-notes/workarea-3-4-3.html.md +136 -0
  547. data/docs/source/release-notes/workarea-3-4-4.html.md +114 -0
  548. data/docs/source/release-notes/workarea-3-4-5.html.md +275 -0
  549. data/docs/source/release-notes/workarea-3-4-6.html.md +169 -0
  550. data/docs/source/release-notes/workarea-3-4-7.html.md +162 -0
  551. data/docs/source/release-notes/workarea-3-4-8.html.md +95 -0
  552. data/docs/source/release-notes/workarea-3-4-9.html.md +135 -0
  553. data/docs/source/search.html.erb +34 -0
  554. data/docs/source/shared/_header.erb +61 -0
  555. data/docs/source/shared/_svgs.erb +17 -0
  556. data/docs/source/style_guide/index.html.erb +382 -0
  557. data/docs/source/stylesheets/_base.scss +125 -0
  558. data/docs/source/stylesheets/_components.scss +669 -0
  559. data/docs/source/stylesheets/_helpers.scss +10 -0
  560. data/docs/source/stylesheets/_opinions.scss +42 -0
  561. data/docs/source/stylesheets/_settings.scss +56 -0
  562. data/docs/source/stylesheets/_typography.scss +119 -0
  563. data/docs/source/stylesheets/site.css.scss +14 -0
  564. data/docs/source/stylesheets/vendor/_avalanche.scss +328 -0
  565. data/docs/source/stylesheets/vendor/_normalize.scss +341 -0
  566. data/docs/source/stylesheets/vendor/highlight/_tomorrow_night_blue.scss +75 -0
  567. data/docs/source/upgrade-guides.html.md +18 -0
  568. data/docs/source/upgrade-guides/workarea-3-4-0.html.md +152 -0
  569. data/docs/workarea_renderer.rb +8 -0
  570. data/docs/yarn.lock +2522 -0
  571. metadata +669 -0
@@ -0,0 +1,164 @@
1
+ ---
2
+ title: Commerce Model
3
+ excerpt: The following diagram is a model of commerce from Workarea's perspective.
4
+ ---
5
+
6
+ Commerce Model
7
+ ======================================================================
8
+
9
+ The following diagram is a model of _commerce_ from Workarea's perspective.
10
+ In this model, Workarea receives _catalog data_ as input and returns _order data_ as output.
11
+ Activity within Workarea is represented as a cycle of actions, some of which are completed by _administrators_ within the _Admin_; the rest by _shoppers_ within the _Storefront_.
12
+
13
+ (
14
+ Keep in mind this model is an abstraction of the Workarea system.
15
+ In practice, catalog and order data are not the only input/output, and actions within the system are non-linear and asynchronous.
16
+ )
17
+
18
+ ![Commerce Model](../images/commerce-model.png)
19
+
20
+
21
+ Code Mappings
22
+ ----------------------------------------------------------------------
23
+
24
+ Use this illustration of Workarea to improve your mental model of the system.
25
+ Keep this representation of Workarea in mind when reading Workarea code and documentation.
26
+
27
+ To help you in this regard, the following sections map the actions from the diagram to relevant _models_, _view models_, and _services_ within the base Workarea platform.
28
+ (These object types are those used to write to and read from the primary data store.)
29
+
30
+ Each section provides a command which you can run from the root of your application to list the pathnames of the relevant files within your version of Workarea.
31
+
32
+
33
+ ### Admins Manage Catalog
34
+
35
+ ```bash
36
+ echo "
37
+ $(bundle show workarea-core)/app/models/workarea/catalog/product.rb
38
+ $(bundle show workarea-core)/app/models/workarea/catalog/variant.rb
39
+ $(bundle show workarea-core)/app/models/workarea/catalog/product_image.rb
40
+ $(bundle show workarea-core)/app/models/workarea/pricing/sku.rb
41
+ $(bundle show workarea-core)/app/models/workarea/pricing/price.rb
42
+ $(bundle show workarea-core)/app/models/workarea/inventory/sku.rb
43
+ $(bundle show workarea-core)/app/models/workarea/shipping/sku.rb
44
+ $(bundle show workarea-core)/app/services/workarea/copy_product.rb
45
+ $(bundle show workarea-core)/app/models/workarea/shipping/service.rb
46
+ $(bundle show workarea-core)/app/models/workarea/shipping/rate.rb
47
+ $(bundle show workarea-core)/app/models/workarea/tax/category.rb
48
+ $(bundle show workarea-core)/app/models/workarea/tax/rate.rb
49
+ "
50
+ ```
51
+
52
+
53
+ ### Admins Merchandise Store
54
+
55
+ ```bash
56
+ echo "
57
+ $(bundle show workarea-core)/app/models/workarea/release.rb
58
+ $(bundle show workarea-core)/app/models/workarea/release/changeset.rb
59
+ $(bundle show workarea-core)/app/models/workarea/catalog/category.rb
60
+ $(bundle show workarea-core)/app/models/workarea/product_rule.rb
61
+ $(bundle show workarea-core)/app/models/workarea/search/settings.rb
62
+ $(bundle show workarea-core)/app/models/workarea/search/customization.rb
63
+ $(bundle show workarea-core)/app/models/workarea/content.rb
64
+ $(bundle show workarea-core)/app/models/workarea/content/page.rb
65
+ $(bundle show workarea-core)/app/models/workarea/content/block.rb
66
+ $(bundle show workarea-core)/app/models/workarea/content/asset.rb
67
+ $(bundle show workarea-core)/app/models/workarea/navigation/redirect.rb
68
+ $(bundle show workarea-core)/app/models/workarea/navigation/taxon.rb
69
+ $(bundle show workarea-core)/app/models/workarea/navigation/menu.rb
70
+ $(bundle show workarea-core)/app/models/workarea/recommendation/settings.rb
71
+ $(bundle show workarea-core)/app/models/workarea/pricing/discount.rb
72
+ "
73
+ ```
74
+
75
+
76
+ ### Shoppers Search & Browse Products
77
+
78
+ ```bash
79
+ echo "
80
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/category_view_model.rb
81
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/search_view_model.rb
82
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/search_suggestion_view_model.rb
83
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/page_view_model.rb
84
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/content_view_model.rb
85
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/menu_view_model.rb
86
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/recommendations_view_model.rb
87
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/product_view_model.rb
88
+ "
89
+ ```
90
+
91
+ ### Shoppers View Products
92
+
93
+ ```bash
94
+ echo "
95
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/product_view_model.rb
96
+ "
97
+ ```
98
+
99
+
100
+ ### Shoppers Create & Manage Carts
101
+
102
+ ```bash
103
+ echo "
104
+ $(bundle show workarea-core)/app/models/workarea/order.rb
105
+ $(bundle show workarea-core)/app/models/workarea/order/item.rb
106
+ $(bundle show workarea-core)/app/models/workarea/pricing.rb
107
+ $(bundle show workarea-core)/app/models/workarea/price_adjustment.rb
108
+ $(bundle show workarea-core)/app/models/workarea/pricing/calculator.rb
109
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/cart_view_model.rb
110
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/cart_item_view_model.rb
111
+ "
112
+ ```
113
+
114
+ ### Shoppers Place Orders
115
+
116
+ ```bash
117
+ echo "
118
+ $(bundle show workarea-core)/app/models/workarea/checkout.rb
119
+ $(bundle show workarea-core)/app/models/workarea/checkout/steps/base.rb
120
+ $(bundle show workarea-core)/app/models/workarea/payment.rb
121
+ $(bundle show workarea-core)/app/models/workarea/payment/transaction.rb
122
+ $(bundle show workarea-core)/app/models/workarea/inventory.rb
123
+ $(bundle show workarea-core)/app/models/workarea/inventory/transaction.rb
124
+ $(bundle show workarea-core)/app/models/workarea/inventory/transaction_item.rb
125
+ $(bundle show workarea-core)/app/models/workarea/shipping.rb
126
+ $(bundle show workarea-core)/app/models/workarea/shipping/service_selection.rb
127
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/order_view_model.rb
128
+ $(bundle show workarea-storefront)/app/view_models/workarea/storefront/order_item_view_model.rb
129
+ $(bundle show workarea-core)/app/models/workarea/pricing/discount/redemption.rb
130
+ $(bundle show workarea-core)/app/services/workarea/create_fulfillment.rb
131
+ "
132
+ ```
133
+
134
+
135
+ ### Admins Manage Orders
136
+
137
+ ```bash
138
+ echo "
139
+ $(bundle show workarea-core)/app/models/workarea/fulfillment.rb
140
+ $(bundle show workarea-core)/app/models/workarea/fulfillment/item.rb
141
+ $(bundle show workarea-core)/app/models/workarea/fulfillment/event.rb
142
+ $(bundle show workarea-core)/app/models/workarea/fulfillment/package.rb
143
+ $(bundle show workarea-core)/app/models/workarea/pricing/override.rb
144
+ $(bundle show workarea-core)/app/models/workarea/pricing/request.rb
145
+ $(bundle show workarea-core)/app/models/workarea/payment/refund.rb
146
+ $(bundle show workarea-core)/app/services/workarea/cancel_order.rb
147
+ $(bundle show workarea-core)/app/services/workarea/copy_order.rb
148
+ "
149
+ ```
150
+
151
+
152
+ ### Admins View Insights & Reports
153
+
154
+ ```bash
155
+ echo "
156
+ $(bundle show workarea-core)/app/models/workarea/metrics/by_day.rb
157
+ $(bundle show workarea-core)/app/models/workarea/metrics/by_week.rb
158
+ $(bundle show workarea-core)/app/models/workarea/insights/base.rb
159
+ $(bundle show workarea-admin)/app/view_models/workarea/admin/insight_view_model.rb
160
+ $(bundle show workarea-admin)/app/view_models/workarea/admin/reports/insights_view_model.rb
161
+ $(bundle show workarea-core)/app/models/workarea/reports/export.rb
162
+ $(bundle show workarea-core)/app/services/workarea/export_report.rb
163
+ "
164
+ ```
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: Configuration for Hosting
3
+ excerpt: How to configure Workarea for hosting in practice.
4
+ ---
5
+
6
+ # Configuration for Hosting
7
+
8
+ Here's what you'll need to configure Workarea for hosting. It'll outline commonly set configurations and why. To learn more about Workarea infrastructure configuration, check out the code here: [https://github.com/workarea-commerce/workarea/tree/master/core/lib/workarea/configuration](https://github.com/workarea-commerce/workarea/tree/master/core/lib/workarea/configuration).
9
+
10
+ ## Application
11
+
12
+ ### Web
13
+
14
+ Workarea ships with a [default Puma configuration](https://github.com/workarea-commerce/workarea/blob/master/core/lib/workarea/configuration/puma.rb) out-of-the-box. If you want to configure this, remove the custom Workarea config from your `config/puma.rb`. Workarea will respect the following Puma environment variables if set:
15
+
16
+ | Name | Default | Notes |
17
+ |---|---|---|
18
+ | `PORT` | `3000` | - |
19
+ | `RAILS_MAX_THREADS` | `5` | - |
20
+ | `RAILS_ENV` | `development` | - |
21
+ | `WEB_CONCURRENCY` | | - |
22
+
23
+ ### Sidekiq
24
+
25
+ Workarea will automatically configure Sidekiq based on the other Workarea configuration (like Redis).
26
+
27
+ | Name | Default | Notes |
28
+ |---|---|---|
29
+ | `WORKAREA_SIDEKIQ_CONCURRENCY` | Dynamic | Based on number of processes |
30
+ | `WORKAREA_SIDEKIQ_DEFAULT_TIMEOUT` | `5` |
31
+
32
+ _Note:_ Workarea will not try to configure Sidekiq if `config/sidekiq.yml` or `config/sidekiq.yml.erb` are present.
33
+
34
+ ## Databases
35
+
36
+ ### MongoDB
37
+
38
+ Workarea automatically configures Mongoid for you with the recommended settings. No further action is required. However, settings provided in `config/mongoid.yml` will override the default Workarea configuration. Doing this is discouraged.
39
+
40
+ Workarea uses two different instances of `Mongoid::Client`, one for primary application use, and one specifically for metrics collection. This is done to allow sharding metrics/reporting from standard application use.
41
+
42
+ | Name | Default | Notes |
43
+ |---|---|---|
44
+ | `WORKAREA_MONGOID_HOST_0` | `localhost:27017` | increment `0` for each host |
45
+ | `WORKAREA_MONGOID_OPTIONS` | `{}` | JSON-serialized [options for Mongoid](https://docs.mongodb.com/mongoid/current/tutorials/mongoid-installation/#anatomy-of-a-mongoid-config) |
46
+ | `WORKAREA_MONGOID_METRICS_HOST_0` | `localhost:27017` | increment `0` for each host |
47
+ | `WORKAREA_MONGOID_METRICS_OPTIONS` | `{}` | JSON-serialized [options for Mongoid](https://docs.mongodb.com/mongoid/current/tutorials/mongoid-installation/#anatomy-of-a-mongoid-config) |
48
+
49
+ You can configure hosts using `WORKAREA_MONGOID_HOST_*` environment variables. You can add as many hosts as desired, just be sure to end the environment variable names with digits, e.g. `WORKAREA_MONGOID_HOST_0`, `WORKAREA_MONGOID_HOST_1`, `WORKAREA_MONGOID_HOST_2`, etc.
50
+
51
+ ### Elasticsearch
52
+
53
+ You can set an arbitrary number of Elasticsearch hosts for Workarea to use, or simply specify one (perhaps behind a load balancer).
54
+
55
+ | Name | Default | Notes |
56
+ |---|---|---|
57
+ | `WORKAREA_ELASTICSEARCH_URL_0` | `localhost:9200` | increment `0` for each host |
58
+ | `WORKAREA_ELASTICSEARCH_URL` | `localhost:9200` | used if the digit-trailing vars are blank |
59
+
60
+ You can configure hosts using `WORKAREA_ELASTICSEARCH_URL_*` environment variables. You can add as many hosts as desired, just be sure to end the environment variable names with digits, e.g. `WORKAREA_ELASTICSEARCH_URL_0`, `WORKAREA_ELASTICSEARCH_URL_1`, `WORKAREA_ELASTICSEARCH_URL_2`, etc.
61
+
62
+ ### Redis
63
+
64
+ While only one instance of Redis is _required_ to run Workarea, you can run two for distributing load. The first would be for persistent data like the Sidekiq queue or recommendations. The second is for ephemeral data like cache.
65
+
66
+ | Name | Default | Notes |
67
+ |---|---|---|
68
+ | `WORKAREA_REDIS_HOST` | `localhost` | host for persistent Redis |
69
+ | `WORKAREA_REDIS_PORT` | `6379` | port for persistent Redis |
70
+ | `WORKAREA_REDIS_DB` | `0` | database for persistent Redis |
71
+ | `WORKAREA_REDIS_CACHE_HOST` | `localhost` | host for ephemeral Redis |
72
+ | `WORKAREA_REDIS_CACHE_PORT` | `6379` | port for ephemeral Redis |
73
+ | `WORKAREA_REDIS_CACHE_DB` | `0` | database for ephemeral Redis |
74
+
75
+ ## Miscellaneous
76
+
77
+ ### Assets
78
+
79
+ You'll need at least one S3 bucket setup to run Workarea. An optional second (called the "integration" bucket in the code) can be configured for integrating with other systems, like flat-file exports, image imports, etc.
80
+
81
+ | Name | Default | Notes |
82
+ |---|---|---|
83
+ | `WORKAREA_S3_REGION` | `us-east-1` | - |
84
+ | `WORKAREA_S3_ACCESS_KEY_ID` | | if this is blank _and_ the secret access key is blank, Workarea will use the IAM profile |
85
+ | `WORKAREA_S3_SECRET_ACCESS_KEY` | | if this is blank _and_ the access key ID is blank, Workarea will use the IAM profile |
86
+ | `WORKAREA_S3_BUCKET_NAME` | | - |
87
+ | `WORKAREA_S3_INTEGRATION_REGION` | | (optional) |
88
+ | `WORKAREA_S3_INTEGRATION_ACCESS_KEY_ID` | | (optional) |
89
+ | `WORKAREA_S3_INTEGRATION_SECRET_ACCESS_KEY` | | (optional) |
90
+ | `WORKAREA_S3_INTEGRATION_BUCKET_NAME` | | (optional) |
91
+
92
+ ### Asset Host
93
+
94
+ Workarea ships with support for the asset host as an environment variable. This sets the Rails configurations to this value.
95
+
96
+ | Name | Default | Notes |
97
+ |---|---|---|
98
+ | `WORKAREA_ASSET_HOST` | | set this to your CDN |
99
+
100
+ ### Logstash
101
+
102
+ Workarea depends on the [logstasher gem](https://github.com/shadabahmed/logstasher) to provide [Logstash](https://www.elastic.co/products/logstash) support out-of-the-box. This will only be enabled if the environment variable is set.
103
+
104
+ | Name | Default | Notes |
105
+ |---|---|---|
106
+ | `WORKAREA_LOGSTASH` | | set this to `true` to enable `logstasher` |
@@ -0,0 +1,406 @@
1
+ ---
2
+ title: Configuration
3
+ excerpt: Every Workarea application has Ruby and JavaScript configurations, which consist of customizable named values that provide designed extension points for the application and its installed plugins. Configuration, as an extension technique, is the proces
4
+ ---
5
+
6
+ # Configuration
7
+
8
+ Every Workarea application has Ruby and JavaScript configurations, which consist of customizable named values that provide designed extension points for the application and its installed plugins. <dfn>Configuration</dfn>, as an extension technique, is the process of customizing configuration keys, known informally as <dfn>configs</dfn>, and their values.
9
+
10
+ Configuration allows _developers_ to customize an application beyond the capabilities of administrators. Because configs are _designed_ extension points, configuration is less expensive than other extension techniques, which require developers to extend the platform beyond its original design.
11
+
12
+ ## Configuration Objects
13
+
14
+ Ruby and JavaScript configuration objects provide access to the current configuration of the application and allow developers to change the configuration.
15
+
16
+ ### Ruby Configuration Object
17
+
18
+ Use `Workarea.config` to access the current Ruby configuration. The configuration object is hash-like (composed of keys and values) and also provides an accessor method for each key. This configuration object is actually a member of the Rails configuration, which is covered in more detail below.
19
+
20
+ The following example, which I ran in a Rails console, lists all the configs for my sample application.
21
+
22
+ ```ruby
23
+ puts Workarea.config.keys.sort
24
+ # activity_excluded_types
25
+ # activity_size_on_dashboard
26
+ # address_attributes
27
+ # admin_break_points
28
+ # admin_max_most_visited
29
+ # admin_max_recently_visited
30
+ # admin_session_timeout
31
+ # admin_visit_excluded_paths
32
+ # allowed_login_attempts
33
+ # analytics_timezone
34
+ # asset_store
35
+ # asset_types
36
+ # blog_entries_on_index
37
+ # bulk_action_expiration
38
+ # cache_expirations
39
+ # cart_recommendations_count
40
+ # category_summary_product_count
41
+ # checkout_expiration
42
+ # checkout_steps
43
+ # clothing_swatch_size
44
+ # ... (truncated)
45
+ # user_activity_display_size
46
+ ```
47
+
48
+ The config object contains _all_ platform configs, including those added as extensions by installed plugins.
49
+
50
+ The next example examines the values of several keys, demonstrating the varying complexity of configuration values.
51
+
52
+ ```ruby
53
+ Workarea.config.blog_entries_on_index
54
+ # => 4
55
+
56
+ Workarea.config.max_admin_bookmarks
57
+ # => 10
58
+
59
+ Workarea.config.product_templates
60
+ # => [:test_product, :package, :family, :clothing]
61
+
62
+ Workarea.config.shipping_origin
63
+ # => {:country=>"US", :state=>"PA", :city=>"Philadelphia", :zip=>"19106"}
64
+
65
+ Workarea.config.pricing_calculators
66
+ # => #<Workarea::SwappableList:0x007f508b94d670 @source=["Workarea::Pricing::Calculators::ItemCalculator", "Workarea::Pricing::Calculators::CustomizationsCalculator", "Workarea::Pricing::Calculators::DiscountCalculator", "Workarea::Pricing::Calculators::TaxCalculator"]>
67
+
68
+ Workarea.config.elasticsearch_mappings.storefront
69
+ # => {:category=>{:properties=>{:query=>{:type=>"percolator"}}}, :storefront=>{:dynamic_templates=>[{:facets=>{:path_match=>"facets.*", :mapping=>{:type=>"keyword"}}}, {:numeric=>{:path_match=>"numeric.*", :mapping=>{:type=>"float"}}}, {:keywords=>{:path_match=>"keywords.*", :mapping=>{:type=>"keyword"}}}, {:sorts=>{:path_match=>"sorts.*", :mapping=>{:type=>"float"}}}, {:content=>{:path_match=>"content.*", :mapping=>{:type=>"text", :analyzer=>"text_analyzer"}}}, {:cache=>{:path_match=>"cache.*", :mapping=>{:index=>false}}}], :properties=>{:id=>{:type=>"keyword"}, :type=>{:type=>"keyword"}, :slug=>{:type=>"keyword"}, :suggestion_content=>{:type=>"string", :analyzer=>"text_analyzer"}, "facets.category_id"=>{:type=>"keyword"}, "facets.on_sale"=>{:type=>"keyword"}}}}
70
+ ```
71
+
72
+ The Ruby configuration is also exposed through the _Settings_ dashboard in the Admin (_/admin/dashboards/settings_).
73
+
74
+ ![Current configuration shown in Admin Settings](images/current-configuration-shown-in-admin-settings.png)
75
+
76
+ ### JavaScript Configuration Object
77
+
78
+ Use `WORKAREA.config` to access the current JavaScript configuration.
79
+
80
+ The following example, which I ran in a browser console, lists all the configs for my sample application in lexicographical order.
81
+
82
+ ```js
83
+ console.log(Object.keys(WORKAREA.config).sort().join('\n'))
84
+ // categorizedAutocompleteFields
85
+ // contentBlocks
86
+ // contentEditorForms
87
+ // dashboardCharts
88
+ // date
89
+ // datepickerFields
90
+ // datetimepicker
91
+ // deletionForms
92
+ // dropzones
93
+ // formSubmittingControls
94
+ // forms
95
+ // helpLookupButtons
96
+ // imageFileExtensions
97
+ // messages
98
+ // productImagesSortable
99
+ // recommendationsSortables
100
+ // remoteSelects
101
+ // storefrontBreakPoints
102
+ // tooltipster
103
+ // validationErrorAnalyticsThrottle
104
+ // wysiwygs
105
+ ```
106
+
107
+ The config object contains _all_ platform configs relevant to the current page, including those added as extensions by installed plugins. The configuration object is specific to the current UI (e.g. Admin, Storefront), since each UI has its own JavaScript manifests, which load different JavaScript config files.
108
+
109
+ ### Accessing the Ruby Configuration in JavaScript
110
+
111
+ The Admin and Storefront configuration files, _workarea-admin/app/assets/javascripts/workarea/admin/config.js.erb_ and _workarea-storefront/app/assets/javascripts/workarea/storefront/config.js.erb_, are processed by ERB during compilation, providing access to the application's Ruby configuration.
112
+
113
+ The following example demonstrates how responsive break points sizes are read from a Ruby config in order to write them to a JavaScript config.
114
+
115
+ ```js
116
+ <%# workarea-storefront/app/assets/javascripts/workarea/storefront/config.js.erb %>
117
+
118
+ <%# ... %>
119
+
120
+ WORKAREA.config.storefrontBreakPoints = {
121
+ sizes: {
122
+ <% Workarea.config.storefront_break_points.each do |name, size| %>
123
+ '<%= name %>': <%= size %>,
124
+ <% end %>
125
+ },
126
+
127
+ ie9Matches: [
128
+ 'small',
129
+ 'medium',
130
+ 'wide'
131
+ ]
132
+ };
133
+
134
+ <%# ... %>
135
+ ```
136
+
137
+ The same values are therefore accessible through Ruby and JavaScript.
138
+
139
+ ```ruby
140
+ # Storefront break points in Ruby
141
+
142
+ Workarea.config.storefront_break_points
143
+ # => {:small=>320, :medium=>760, :wide=>960, :x_wide=>1160}
144
+ ```
145
+
146
+ ```js
147
+ // Storefront break points in JavaScript
148
+
149
+ console.log(JSON.stringify(WORKAREA.config.storefrontBreakPoints.sizes))
150
+ // => {"small":320,"medium":760,"wide":960,"x_wide":1160}
151
+ ```
152
+
153
+ ## Configuring an App in Ruby
154
+
155
+ To configure an app in Ruby, modify config values or add config keys from within an initializer or an environment-specific configuration file. It is also possible to modify the configuration temporarily, which is useful for testing (see below).
156
+
157
+ ### Initializers & Environment Files
158
+
159
+ Write Workarea configuration code anywhere you would write Rails configuration code, most likely within an initializer or an environment-specific config file. The boilerplate for a Workarea application includes the following initializer.
160
+
161
+ ```ruby
162
+ # config/initializers/workarea.rb
163
+
164
+ Workarea.configure do |config|
165
+ # Basic site info
166
+ config.site_name = 'Board Game Supercenter'
167
+ config.host = 'board-game-supercenter.dev'
168
+ config.email_to = 'customerservice@board-game-supercenter.dev'
169
+ config.email_from = 'noreply@board-game-supercenter.dev'
170
+ end
171
+ ```
172
+
173
+ The `Workarea.configure` method yields the Workarea configuration object to its block, providing a convenient interface for bulk configuration. Application developers typically write their configuration code within this block.
174
+
175
+ Rails also provides environment-specific files, such as _config/environments/development.rb_ and _config/environments/production.rb_. Write environment-specific configuration code within the appropriate environment file.
176
+
177
+ The plugins I looked at are less consistent than applications in where they write their configuration code. When writing configuration code within a plugin, I recommend using initializers that describe the type of configuration, such as _config/initializers/seeds.rb_ and _config/initializers/assets.rb_. Or, for small plugins, use a single generic initializer, such as _config/initializers/workarea.rb_.
178
+
179
+ Some existing plugins write configuration code in the _engine.rb_ file, within inline intializers. Avoid that technique in new plugins—such initializers run _after_ the application's initializers, making it more difficult for an application to override values specified in the plugin.
180
+
181
+ ### Modifying Values
182
+
183
+ Within your initializer, modify existing configuration values as needed by assigning a new value or manipulating the existing value, as shown in the following examples.
184
+
185
+ ```ruby
186
+ Workarea.config.blog_entries_on_index = 5
187
+
188
+ Workarea.config.seeds.push('Workarea::SharesSeeds')
189
+
190
+ Workarea.config.seeds << 'Workarea::ReviewSeeds'
191
+
192
+ Workarea.configure do |config|
193
+ config.jump_to_navigation.merge!('Reviews' => :reviews_path)
194
+ end
195
+
196
+ Workarea.config.seeds.insert_after('Workarea::ProductsSeeds', 'Workarea::PackageProductSeeds')
197
+
198
+ Workarea.configure do |config|
199
+ config.product_templates += %i(package family)
200
+ end
201
+
202
+ Workarea.config.product_templates << :clothing
203
+
204
+ Workarea.configure do |config|
205
+ config.storefront_search_middleware.swap(
206
+ 'Workarea::Search::StorefrontSearch::Template',
207
+ 'Workarea::Search::StorefrontSearch::TemplateWithContent'
208
+ )
209
+ end
210
+
211
+ Workarea.config.clothing_swatch_size ||= '44x'
212
+
213
+ Workarea.config.product_copy_default_attributes ||= {}
214
+ Workarea.config.product_copy_default_attributes.merge!(
215
+ total_reviews: 0,
216
+ average_rating: nil
217
+ )
218
+ ```
219
+
220
+ ### Adding Keys
221
+
222
+ A plugin may add new configuration keys to provide applications with extension points for the functionality provided by the plugin. To add a new key, simply assign a value to it.
223
+
224
+ ```ruby
225
+ Workarea.config.and_now_for_something_completely_different = 'Anthologies are cool'
226
+ ```
227
+
228
+ ### Temporary Configuration (Testing)
229
+
230
+ In the context of tests, it can be useful to change a config temporarily, perhaps for the duration of a single test or assertion. Use `Workarea.with_config` with a block to set or modify a config for the duration of the block. The following test case demonstrates this concept.
231
+
232
+ ```ruby
233
+ # workarea-core-3.1.0/test/queries/workarea/search/pagination_test.rb
234
+ require 'test_helper'
235
+
236
+ module Workarea
237
+ module Search
238
+ class PaginationTest < TestCase
239
+ # ...
240
+
241
+ def test_from
242
+ Workarea.with_config do |config|
243
+ config.per_page = 30
244
+ assert_equal(0, Paginate.new(page: 1).from)
245
+ end
246
+
247
+ Workarea.with_config do |config|
248
+ config.per_page = 15
249
+ assert_equal(15, Paginate.new(page: 2).from)
250
+ end
251
+
252
+ Workarea.with_config do |config|
253
+ config.per_page = 45
254
+ assert_equal(90, Paginate.new(page: 3).from)
255
+ end
256
+ end
257
+
258
+ def test_size
259
+ Workarea.with_config do |config|
260
+ config.per_page = 30
261
+
262
+ search = Paginate.new(page: 2)
263
+ assert_equal(30, search.size)
264
+ end
265
+ end
266
+ end
267
+ end
268
+ end
269
+ ```
270
+
271
+ ## Configuring an App in JavaScript
272
+
273
+ To configure an app in JavaScript, modify config values or add config keys from within a JavaScript config file and [append](appending.html) the config file to an append point within the relevant manifest to include it on the page. <sup><a href="#notes" id="note-1-context">[1]</a></sup>
274
+
275
+ The following examples for the fictional store <cite>Board Game Supercenter</cite> demonstrate appending an application-specific JavaScript config file in the Storefront.
276
+
277
+ ```js
278
+ // board_game_supercenter/app/assets/javascripts/workarea/storefront/board_game_supercenter/config.js
279
+
280
+ WORKAREA.config.messages.delay = 5000;
281
+ ```
282
+
283
+
284
+ ```js
285
+ # board_game_supercenter/config/initializers/appends.rb
286
+
287
+ Workarea.append_javascripts(
288
+ 'storefront.config',
289
+ 'workarea/storefront/board_game_supercenter/config'
290
+ )
291
+ ```
292
+
293
+ Similarly, the following examples append an Admin config file for the fictional <cite>Workarea Loyalty</cite> plugin.
294
+
295
+ ```js
296
+ // workarea-loyalty/app/assets/javascripts/workarea/admin/loyalty/config.js
297
+
298
+ WORKAREA.config.loyaltyBadges = {
299
+ events: ['hover']
300
+ }
301
+ ```
302
+
303
+
304
+ ```ruby
305
+ # workarea-loyalty/config/initializers/appends.rb
306
+
307
+ Workarea.append_javascripts(
308
+ 'admin.config',
309
+ 'workarea/admin/loyalty/config'
310
+ )
311
+ ```
312
+
313
+ If you need access to the Ruby config object within your JavaScript config file, use a file ending in _.js.erb_ instead. See example above.
314
+
315
+ ## Rails Configuration
316
+
317
+ You should also be familiar with [configuring your Rails application](http://guides.rubyonrails.org/configuring.html), since Workarea depends on several Rails configuration values.
318
+
319
+ Use `Rails.application.config` or `Rails.configuration` to access the Rails configuration object. The Ruby configuration for Workarea is actually a member of the Rails configuration.
320
+
321
+ ```ruby
322
+ Workarea.config == Rails.application.config.workarea
323
+ # => true
324
+
325
+ Workarea.config == Rails.configuration.workarea
326
+ # => true
327
+ ```
328
+
329
+ However, Workarea makes use of additional Rails configs that live outside the Workarea-specific configuration. Two important examples are the application time zone and locales, each covered below.
330
+
331
+ ### Configuring the Application Time Zone
332
+
333
+ [Since Workarea 3.2.0](workarea-3-2-0.html#uses-rails-time-zone-to-display-all-dates-times), you must configure a time zone for the admin side of your Workarea application. Set `config.time_zone` in your Rails general configuration in `config/application.rb`.
334
+
335
+ ```ruby
336
+ # config/application.rb
337
+
338
+ module YourApp
339
+ class Application < Rails::Application
340
+ # ...
341
+ config.time_zone = 'Eastern Time (US & Canada)'
342
+ # ...
343
+ end
344
+ end
345
+ ```
346
+
347
+ Rails provides a command to list the time zones it recognizes, which is demonstrated in the following shell session:
348
+
349
+ ```bash
350
+ $ bin/rails -T time
351
+ rails time:zones[country_or_offset] # List all time zones, list by two-letter country code (`rails time:zones[US]`), or list by UTC offset (`rails time:zones[-8]`)
352
+ $ bin/rails time:zones
353
+
354
+ * UTC -11:00 *
355
+ American Samoa
356
+ International Date Line West
357
+ Midway Island
358
+
359
+ … more …
360
+
361
+ * UTC +13:00 *
362
+ Nuku'alofa
363
+ Samoa
364
+ Tokelau Is.
365
+
366
+ $ bin/rails time:zones[US]
367
+
368
+ * UTC -10:00 *
369
+ America/Adak
370
+ Hawaii
371
+
372
+ … more …
373
+
374
+ * UTC -05:00 *
375
+ America/Detroit
376
+ America/Indiana/Marengo
377
+ America/Indiana/Petersburg
378
+ America/Indiana/Vevay
379
+ America/Indiana/Vincennes
380
+ America/Indiana/Winamac
381
+ America/Kentucky/Louisville
382
+ America/Kentucky/Monticello
383
+ Eastern Time (US & Canada)
384
+ Indiana (East)
385
+
386
+ $ bin/rails time:zones[-5]
387
+
388
+ * UTC -05:00 *
389
+ Bogota
390
+ Eastern Time (US & Canada)
391
+ Indiana (East)
392
+ Lima
393
+ Quito
394
+
395
+ $
396
+ ```
397
+
398
+ ### Configuring Locales
399
+
400
+ Other important Rails configurations are the _available locales_, _default locale_, and _locale fallbacks_. All of Workarea's user interfaces are internationalized and therefore depend on these values.
401
+
402
+ Review the [Configure Locales](configure-locales.html) guide for coverage of this topic.
403
+
404
+ ## Notes
405
+
406
+ [1] Alternatively, if you are working in an application that is [overriding](overriding.html) the relevant manifest, you can require the config file within your manifest override.