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,66 @@
1
+ ---
2
+ title: Orders
3
+ excerpt: 'Workarea applications facilitate orders: transactions between consumers and retailers. Due to their complexity, orders are enabled by and recorded across many models within the Workarea platform. More specifically, various models within the Order, Shi'
4
+ ---
5
+
6
+ # Orders
7
+
8
+ Workarea applications facilitate <dfn>orders</dfn>: transactions between consumers and retailers. Due to their complexity, orders are enabled by and recorded across many models within the Workarea platform. More specifically, various models within the `Order`, `Shipping`, `Payment`, `Pricing`, `Inventory`, and `Fulfillment` modules enable and record these transactions.
9
+
10
+ However, at the core of each of these transaction is an `Order` model. The order model uniquely identifies the transaction, and using its `id`, you can join the various models, providing a complete record of the transaction.
11
+
12
+ ## Seeding Order Data
13
+
14
+ Workarea provides [seeds](seeds.html) for orders, which are defined in `Workarea::OrdersSeeds`. This seeds script creates a variety of placed orders, as well as the user, shipping, and payment data needed to place those orders.
15
+
16
+ Each order is placed through <dfn>checkout</dfn>, a process that joins an order with the other models necessary to represent a complete consumer/retailer transaction.
17
+
18
+ Finally, the script _fulfills_ each order, which involves capturing the associated payment and marking the items shipped.
19
+
20
+ ## Joining Order Data
21
+
22
+ Using the first seeded order as its subject, the following example demonstrates how you can join an order model with the corresponding shippings, payment, inventory transactions, and fulfillment. In practice, this sort of in-application join is typically performed in a [view model](view-models.html).
23
+
24
+ ```
25
+ order = Workarea::Order.first
26
+
27
+ shippings = Workarea::Shipping.where(order_id: order.id).to_a
28
+ # => [#<Workarea::Shipping _id: 5a95ab0707dd423bb63a92d0, ...>]
29
+
30
+ payment = Workarea::Payment.find(order.id)
31
+ # => #<Workarea::Payment _id: 048E031F8B, ...>
32
+
33
+ inventory_transactions =
34
+ Workarea::Inventory::Transaction.where(order_id: order.id).to_a
35
+ # => [#<Workarea::Inventory::Transaction _id: 5a95ab0a07dd423bb63a931, ...>]
36
+
37
+ fulfillment = Workarea::Fulfillment.find(order.id)
38
+ # => #<Workarea::Fulfillment _id: 048E031F8B, ...>
39
+ ```
40
+
41
+ ## The Order Module
42
+
43
+ As you can see in the example above, the `id` of the Order model is what relates the various models. Central to order modeling is the `Order` module and its primary models: `Order` and `Order::Item`.
44
+
45
+ The following order module topics are pertinent to Workarea application and plugin developers:
46
+
47
+ - [The _order_ and _order item_ abstractions](orders-and-items.html)
48
+ - What they represent
49
+ - How they are structured
50
+ - Order statuses and states
51
+ - Managing carts
52
+ - Indexing and searching for orders
53
+ - Managing placed orders
54
+ - Exporting orders
55
+ - Canceling orders
56
+ - Copying orders
57
+ - Order reporting and insights
58
+ - Extending orders
59
+
60
+ ## Summary
61
+
62
+ - Orders are transactions between consumers and retailers, which are represented by various models within the Workarea platform
63
+ - The model central to a consumer/retailer transaction is `Order`; its `id` joins the other models
64
+ - The platform provides seeds to bootstrap an environment with placed orders
65
+ - Forthcoming guides will explain the order and item abstractions and the various uses of orders within the platform
66
+
@@ -0,0 +1,155 @@
1
+ ---
2
+ title: Overriding
3
+ excerpt: Overriding is a UI extension technique where an application replaces views and assets from the platform with its own customized copies of the files. The replacement files—called overrides—allow HTML, CSS, and JavaScript sent to the browser to be exten
4
+ ---
5
+
6
+ # Overriding
7
+
8
+ <dfn>Overriding</dfn> is a UI extension technique where an application _replaces_ views and assets from the platform with its own customized copies of the files. The replacement files—called <dfn>overrides</dfn>—allow HTML, CSS, and JavaScript sent to the browser to be extensively customized by the application.
9
+
10
+ An application can override platform views, layouts, and partials, as well as platform files served by the asset pipeline, such as stylesheets, JavaScript files, images, and fonts.
11
+
12
+ To override any of these files, simply copy the file to the same path within your application. Rails will render or serve your override instead of the original file from the platform. This works because when resolving paths, Action View and Sprockets both look for files within your application before looking in any Rails engines, including the Workarea engines.
13
+
14
+ ## Example
15
+
16
+ UI customizations can be extensive, but I'll use a simple example to demonstrate the concept of overriding. By default, product pages in the Storefront display recommendations below the full product description. Refer to the following image.
17
+
18
+ ![Storefront product page before overriding](images/storefront-product-before-overriding.png)
19
+
20
+ The following example overrides the _products#show_ view in order to change the rendered HTML, moving the recommendations _above_ the product description.
21
+
22
+ ### Identify the File to Override
23
+
24
+ Before you can create an override, you must identify the file you want to customize. In my case, the file is _app/views/workarea/storefront/products/show.html.haml_. I know this from experience, but there are a variety of ways to search for the file if you are less familiar with the composition of the Storefront.
25
+
26
+ For example, you can tail the Rails log while browsing to the page of interest. The following example demonstrates a simple search on the log to list recently rendered Haml files.
27
+
28
+ ```bash
29
+ $ tail -f log/development.log | grep 'haml'
30
+ Rendered vendor/ruby/2.4.0/gems/workarea-reviews-2.1.0/app/views/workarea/storefront/products/_rating.html.haml (20.2ms)
31
+ Rendered vendor/ruby/2.4.0/gems/workarea-reviews-2.1.0/app/views/workarea/storefront/products/_reviews_summary.html.haml (35.0ms)
32
+ Rendered vendor/ruby/2.4.0/gems/workarea-clothing-2.1.0/app/views/workarea/storefront/products/_clothing_summary.html.haml (7.1ms)
33
+ Rendered vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/views/workarea/storefront/products/_summary.html.haml (274.9ms)
34
+ Rendered vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/views/workarea/storefront/recent_views/show.html.haml (329.8ms)
35
+ Rendering vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/views/workarea/storefront/products/show.html.haml within layouts/workarea/storefront/application
36
+ Rendered vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/views/workarea/storefront/products/_price.html.haml (5.8ms)
37
+ Rendered vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/views/workarea/storefront/products/_pricing.html.haml (19.7ms)
38
+ # ...
39
+ ```
40
+
41
+ Or, inspect the DOM for a unique string, and search for that string within all installed Workarea engines. In my example, I observed the class value _product-detail-container_, which seemed like a good search term. As shown below, this reduced the list of candidates to three files (two of them views), a small enough set to review manually.&nbsp;<sup><a href="#notes" id="note-1-context">[1]</a></sup>
42
+
43
+ ```bash
44
+ $ grep -lr 'product-detail-container' $(bundle show --paths | grep 'workarea')</kbd>
45
+ /vagrant/board-game-supercenter/vendor/ruby/2.4.0/gems/workarea-package_products-3.1.0/app/views/workarea/storefront/products/package_show.html.haml
46
+ /vagrant/board-game-supercenter/vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/assets/stylesheets/workarea/storefront/components/_product_detail_container.scss
47
+ /vagrant/board-game-supercenter/vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/views/workarea/storefront/products/show.html.haml
48
+ ```
49
+
50
+ ### Copy the File into Your Application
51
+
52
+ Next, I create the necessary directory structure and copy the file into my application. The file path, relative to the engine root, is identical within the Storefront engine and my application.
53
+
54
+ ```bash
55
+ $ mkdir -p app/views/workarea/storefront/products
56
+ $ cp vendor/ruby/2.4.0/gems/workarea-storefront-3.1.1/app/views/workarea/storefront/products/show.html.haml app/views/workarea/storefront/products
57
+ ```
58
+
59
+ The override has now effectively replaced the original Storefront file, but the files are identical, so there is no observable difference in the application. It is a good idea to commit the new file to your application repository before changing it, so that the introduction of the file and the changes you make to it are recorded separately in your repository history.
60
+
61
+ ```bash
62
+ $ git commit -m 'Override view' app/views/workarea/storefront/products/show.html.haml
63
+ ```
64
+
65
+ ### Customize the File
66
+
67
+ Now you can edit the file as necessary for your requirements. Be sure to edit the copy of the file within your application and not the original engine copy. For my example, I re-ordered the product description and recommendations, as shown in the diff below.
68
+
69
+ ```diff
70
+ diff --git a/app/views/workarea/storefront/products/show.html.haml b/app/views/workarea/storefront/products/show.html.haml
71
+ index 1ef4ec4..6969e5e 100644
72
+ --- a/app/views/workarea/storefront/products/show.html.haml
73
+ +++ b/app/views/workarea/storefront/products/show.html.haml
74
+ @@ -27,11 +27,6 @@
75
+ .product-details{ class: "product-details--#{@product.template}" }
76
+ = render "workarea/storefront/products/templates/#{@product.template}", product: @product
77
+
78
+ - - if @product.description.present?
79
+ - .product-detail-container__description#description
80
+ - %h2.product-detail-container__description-heading= t('workarea.storefront.products.description')
81
+ - .product-detail-container__description-body{ itemprop: 'description' }!= @product.description
82
+ -
83
+ - if @product.recommendations.any?
84
+ %h2= t('workarea.storefront.recommendations.heading')
85
+
86
+ @@ -41,6 +36,11 @@
87
+ .product-summary.product-summary--small{ itemprop: 'isRelatedTo', itemscope: true, itemtype: 'http://schema.org/Product' }
88
+ = render 'workarea/storefront/products/summary', product: product
89
+
90
+ + - if @product.description.present?
91
+ + .product-detail-container__description#description
92
+ + %h2.product-detail-container__description-heading= t('workarea.storefront.products.description')
93
+ + .product-detail-container__description-body{ itemprop: 'description' }!= @product.description
94
+ +
95
+ %div{ data: { recommendations_placeholder: recent_views_path } }
96
+
97
+ = append_partials('storefront.product_show', product: @product)
98
+ ```
99
+
100
+ Browsing to the same page demonstrates the final result: the recommendations display above the product description.
101
+
102
+ ![Storefront product page after overriding](images/storefront-product-after-overriding.png)
103
+
104
+ ## Override Generator
105
+
106
+ Workarea also provides an override generator, which you can use to create overrides for a given type and path. Run the generator with the _‑‑help_ option to view its documentation. The following example demonstrates running the command in Workarea 3.1.2.
107
+
108
+ ```bash
109
+ $ bin/rails g workarea:override --help
110
+ Usage:
111
+ rails generate workarea:override TYPE PATH [options]
112
+
113
+ Runtime options:
114
+ -f, [--force] # Overwrite files that already exist
115
+ -p, [--pretend], [--no-pretend] # Run but do not make any changes
116
+ -q, [--quiet], [--no-quiet] # Suppress status output
117
+ -s, [--skip], [--no-skip] # Skip files that already exist
118
+
119
+ Options:
120
+ TYPE can be one of:
121
+ - views
122
+ - layouts
123
+ - stylesheets
124
+ - javascripts
125
+ - images
126
+ - fonts
127
+
128
+ Description:
129
+ Generates application-specific overrides of Workarea front-end files
130
+
131
+ Examples:
132
+ rails g workarea:override views workarea/storefront
133
+ rails g workarea:override layouts workarea/storefront/application.html.haml
134
+ rails g workarea:override layouts workarea/admin/application.html.haml
135
+ rails g workarea:override stylesheets workarea/storefront/reviews
136
+ rails g workarea:override stylesheets workarea/core/helpers/_respond_to.scss
137
+ rails g workarea:override javascripts workarea/core/modules/string.js
138
+ rails g workarea:override javascripts workarea/storefront/templates/btn.jst.ejs
139
+ rails g workarea:override fonts workarea/storefront/icons.woff
140
+ rails g workarea:override stylesheets jquery_ui/admin/_ui_dialog.scss
141
+ ```
142
+
143
+ ## Impact on Upgrades
144
+
145
+ Overrides provide enormous design flexibility, but they can affect the cost of upgrading your application to a newer release of the platform. Because your overrides maintain no relationship to the files they've replaced in the platform, changes to the files introduced by the platform will not be present in your application after upgrading. You will need to manually apply the same changes to your overrides if desired.
146
+
147
+ To mitigate this problem, Workarea provides [Workarea Upgrade](https://stash.tools.weblinc.com/projects/WL/repos/workarea-upgrade/browse). Among its features, it will show diffs of Workarea changes for the files you've overridden in your application, easing the process of merging those changes into your overrides.
148
+
149
+ ## Overrides within Plugins
150
+
151
+ Unlike other [extension](extension-overview.html) techniques, overriding is used almost exclusively by applications and is used by plugins in only rare cases. Although plugins are technically able to override files, it becomes problematic when other plugins or the application in which they are installed also want to override the same files. Plugins therefore override files only when they can assume they are the canonical source for the files, such as a theme plugin overriding the Storefront layout and assets.
152
+
153
+ ## Notes
154
+
155
+ [1] I'm using Unix tools in my examples because they're universally available and are easy to represent in textual documentation. You should use whatever tools you are comfortable with for searching and browsing source code.
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: Overview
3
+ excerpt: An overview of what Workarea is, how it's distributed, and its major technologies.
4
+ ---
5
+
6
+ # Overview
7
+
8
+ Workarea is an open-source, enterprise-grade commerce platform. The platform and many of its plugins are maintained by Workarea. The rest of the Workarea community maintain the majority of Workarea's plugins and also contribute directly to the platform. Workarea Commerce Cloud is a subscription service offered by the [Workarea](https://www.workarea.com) company, which includes extended functionality and cloud-based hosting.
9
+
10
+ ## Built with
11
+
12
+ ### Ruby
13
+
14
+ Workarea is written in Ruby, and is built on the [Ruby on Rails](https://rubyonrails.org) framework. As such, it's distributed as a gem via [RubyGems](http://guides.rubygems.org/). Workarea and it's plugins are [Rails' engines](https://guides.rubyonrails.org/engines.html) that get mounted inside a host Rails application. Workarea also relies on [Sidekiq](https://sidekiq.org) for processing background work.
15
+
16
+ ### Databases
17
+
18
+ #### MongoDB
19
+
20
+ [MongoDB](https://www.mongodb.com) serves as the canonical, database-of-record in Workarea. Its flexible, document-oriented data model is a good fit for diverse catalogs offered by retailers and fits well with our plugin model, where the schema can be managed in the application code.
21
+
22
+ #### Elasticsearch
23
+
24
+ [Elasticsearch](https://www.elastic.co/products/elasticsearch) drives all the important listing and browsing done in Workarea. This includes storefront search, product recommendations, category browsing, admin indexes, and more. Its robust querying makes it a perfect fit for all the searching requirements a large ecommerce system has.
25
+
26
+ #### Redis
27
+
28
+ [Redis](https://redis.io) is Workarea's Swiss army knife of databases. It stores the Sidekiq job queue, provides storage for recommendations, serves as the Rails cache, and more.
29
+
30
+ ## Customization
31
+
32
+ Workarea is designed to be customized to work for merchants with different needs. The four primary ways of customizing Workarea's behaviors are [configuration](configuration.html), [plugins](plugins-overview.html), [decoration](decoration.html), and Rails' overrides system ([overriding](overriding.html)).
33
+
34
+ ## Testing
35
+
36
+ Workarea inherits the Rails' community's ethic of testing. In this spirit, Workarea distributes its test suite as runnable and customizable, just like any application code using decoration techniques. This helps implementers of Workarea to ensure their customizations don't break Workarea out-of-the-box functionality and helps with upgrades to new versions. [Read more on testing.](testing.html)
37
+
38
+ ## How do I get started?
39
+
40
+ You have two options for jumping in with Workarea.
41
+
42
+ 1. Try out a user-facing demo, using [instructions from our README](https://github.com/workarea-commerce/workarea#demo)
43
+ 2. [Create a new app](create-a-new-app.html) and start coding
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Plugins Overview
3
+ excerpt: A Workarea plugin is a Rails engine used to add to or customize the features of the Workarea platform. Plugins allow code to be managed and maintained separately by different teams, in different repositories, and on different schedules. Plugins distribu
4
+ ---
5
+
6
+ # Plugins Overview
7
+
8
+ A Workarea plugin is a Rails engine used to add to or customize the features of the Workarea platform. Plugins allow code to be managed and maintained separately by different teams, in different repositories, and on different schedules. Plugins distribute the development of the platform so the core developers don't have to develop every feature a project may require.
9
+
10
+ Systems integrators (SIs) are encouraged to develop their own plugins to package features for re-use across projects or teams.
11
+
12
+
@@ -0,0 +1,202 @@
1
+ ---
2
+ title: Prerequisites & Dependencies
3
+ excerpt: The Workarea platform stands on the shoulders of many other software projects. Workarea's training and support materials focus on Workarea software and do not teach the specifics of Workarea's dependencies. However, this "prerequisite" knowledge is covere
4
+ ---
5
+
6
+ # Prerequisites & Dependencies
7
+
8
+ The Workarea platform stands on the shoulders of many other software projects. Workarea's training and support materials focus on Workarea software and do not teach the specifics of Workarea's dependencies. However, this "prerequisite" knowledge is covered in depth by many other resources. In this guide, I introduce Workarea's most notable dependencies and provide links to resources that cover each.
9
+
10
+ ## Help from the Workarea Community
11
+
12
+ While studying these topics, you may need to reach out for help. In addition to the usual places ([Google](https://www.google.com/), [Stack Overflow](http://stackoverflow.com/)), consider jumping on the [Workarea Slack](https://workarea-community.slack.com), where developers who have experience with Workarea applications will have the opportunity to help you.
13
+
14
+ ## Critical Paths
15
+
16
+ For those looking for the short list(s), I've listed below the critical paths for back end and front end specialists.
17
+
18
+ ### Back End
19
+
20
+ - [Ruby language](https://www.ruby-lang.org/en/) and [object oriented programming in Ruby](http://www.poodr.com/)
21
+ - [Ruby on Rails web framework](http://rubyonrails.org/)
22
+ - [Sidekiq background jobs](http://sidekiq.org/)
23
+ - [MongoDB document database](https://www.mongodb.org/) and [Mongoid object-document mapper](https://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/)
24
+ - [Elasticsearch full text search engine](https://www.elastic.co/products/elasticsearch) and [Elasticsearch libraries for Rails applications](https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-persistence)
25
+
26
+ ### Front End
27
+
28
+ - [Ruby language](https://www.ruby-lang.org/en/)
29
+ - [Ruby on Rails web framework](http://rubyonrails.org/)
30
+ - [Haml templates](http://haml.info/)
31
+ - [SCSS stylesheets](http://sass-lang.com/)
32
+ - [BEM-based UI components](http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/)
33
+ - [lodash utility library](https://lodash.com/)
34
+ - [jQuery DOM manipulation and ajax library](https://jquery.com/)
35
+
36
+ Continue reading for a deeper dive into Workarea's dependencies.
37
+
38
+ ## Fundamentals
39
+
40
+ Let's start with some fundamentals.
41
+
42
+ ### Operating System & Shell
43
+
44
+ Although it may be possible to develop Workarea applications on Windows, Workarea is hosted on and designed for use on Unix operating systems (including macOS). The <dfn>shell</dfn> is the program that passes commands from your keyboard to the operating system, and is also known as the <dfn>command line interface</dfn>, or <dfn>CLI</dfn>, for the OS. Many Workarea features depend on familiarity with the shell.
45
+
46
+ [The Command Line Crash Course](http://cli.learncodethehardway.org/book/) and [LinuxCommand.org](http://linuxcommand.org/) are online tutorials that present increasingly complex shell concepts while encouraging you to follow along. The material from LinuxCommand.org has also been developed into an ebook that's available [from the author](http://linuxcommand.org/tlcl.php) and [from No Starch Press](https://www.nostarch.com/tlcl.htm).
47
+
48
+ ### Git
49
+
50
+ [Git](https://git-scm.com/) is the version control system used to manage Workarea source code and is the VCS you will most likely use to manage your application source code as well.
51
+
52
+ If you're completely new to Git, try it out interactively with [Try Git](https://try.github.io/levels/1/challenges/1). The [project's website](https://git-scm.com/) provides full API documentation for the command line interface and provides information about [graphical applications](https://git-scm.com/downloads/guis) for working with Git.
53
+
54
+ The site also provides downloads of the book [Pro Git](https://git-scm.com/book/en/v2), a easily digestible introduction to using Git. The book is also available [from Apress](http://www.apress.com/9781484200773).
55
+
56
+ ## Ruby & Rails
57
+
58
+ Ruby and Rails are at the heart of Workarea, both technologically and philosophically. Both value developer happiness and productivity, two design principles that guide the development of the Workarea platform.
59
+
60
+ ### Ruby Language
61
+
62
+ The predominant programming language in Workarea is [Ruby](https://www.ruby-lang.org/en/), a general purpose programming language used primarily for web applications due to the success of Ruby on Rails, which I cover below. While known chiefly as an object-oriented language, Ruby also provides strong support for the functional programming paradigm and is often used procedurally as a scripting language. Ruby's reader-friendly syntax, supportive community, and expansive standard library make it a favorite among developers.
63
+
64
+ Those new to Ruby can learn it interactively at [Try Ruby](http://tryruby.org/levels/1/challenges/0). Beyond that, check out [Programming Ruby](https://pragprog.com/book/ruby4/programming-ruby-1-9-2-0), also known as <dfn>The Pickaxe</dfn>. The book was the seminal English language work on Ruby. It provides a complete tutorial and reference for the language and is updated regularly by its original author and publisher. For a more whimsical explanation of the language, check out the ebook [Why's (Poignant) Guide to Ruby](http://poignant.guide/), a community favorite. Or, if you're an experienced programmer coming from another language, you may want to consult O'Reilly's [The Ruby Programming Language](http://shop.oreilly.com/product/9780596516178.do), co-authored by Yukihiro Matsumoto (Matz), the creator of Ruby.
65
+
66
+ Ruby's [official documentation](http://ruby-doc.org/) covers Ruby Core as well as the Standard Library, a collection of "blessed" libraries that ship with Ruby. The Ruby [project website](https://www.ruby-lang.org/en/) links to many other Ruby resources.
67
+
68
+ I'd also like to note that the Rails web framework includes [Active Support Core Extensions](http://edgeguides.rubyonrails.org/active_support_core_extensions.html) which extend many of Ruby's classes with additional useful methods. Many of these methods are used heavily in Workarea.
69
+
70
+ ### Ruby Version Management
71
+
72
+ Ruby version managers exist to (1) install ruby versions and (2) change ruby versions. You will likely need many versions of Ruby installed to work on multiple applications that were developed at different points in time.
73
+
74
+ Workarea developers generally use [rbenv](https://github.com/rbenv/rbenv) + [ruby-build](https://github.com/rbenv/ruby-build) for this purpose. Other popular choices are [chruby](https://github.com/postmodern/chruby) + [ruby-install](https://github.com/postmodern/ruby-install) or [rvm](https://rvm.io/). Refer to each project's documentation to see how the tool installs and switches between different ruby versions.
75
+
76
+ ### Ruby Programming
77
+
78
+ Ruby is often used for two different types of programming, scripting and applications. While scripts are typically written procedurally, applications tend to follow object-oriented design principles in order to manage complexity. For a primer on object-oriented design in Ruby, I highly recommend [Practical Object-Oriented Design in Ruby](http://www.poodr.com/), aka <dfn>POODR</dfn>. Sandi Metz leverages her decades of programming experience to bring object-orientation to life with clear examples using idomatic Ruby.
79
+
80
+ Central to the long term maintenance of applications is <dfn>refactoring</dfn>, restructuring software without changing its observable behavior. [Refactoring: Ruby Edition](http://martinfowler.com/books/refactoringRubyEd.html) is a rewrite of Martin Fowler's classic text on refactoring, this time with code examples in Ruby.
81
+
82
+ ### Rails
83
+
84
+ [Ruby on Rails](http://rubyonrails.org/) is the de facto standard web framework for Ruby. Rails' [design principles](http://rubyonrails.org/doctrine/) of developer happiness and productivity were inspired by Ruby. Workarea builds heavily on Rails, both technologically and philosophically.
85
+
86
+ If you're new to Rails, get started with one of many Rails tutorials. The book [Agile Web Development with Rails](https://pragprog.com/book/rails4/agile-web-development-with-rails-4) is one such tutorial and was originally written by David Heinemeier Hansson (DHH), the creator of Rails. The book is now maintained by Sam Ruby under the same publisher and is diligently updated for each new version of Rails.
87
+
88
+ Next move on to the [Ruby on Rails Guides](http://guides.rubyonrails.org/), which are maintened by the Rails team and community, and cover the different aspects of Rails in greater depth. Workarea tries to deviate as little as possible from Rails, but one difference is the use of Mongoid instead of Active Record. I explain Mongoid below, but mention it here because Active Record is covered prominently in the Rails guides. Fortunately, Mongoid copies the API of Active Record, so if you have an existing knowledge of Active Record, it will translate well to Mongoid.
89
+
90
+ Finally, for a class and method level reference, refer to the [Rails API Documentation](http://api.rubyonrails.org/).
91
+
92
+ ### Testing
93
+
94
+ Automated testing is core to the Ruby community and to Workarea. Workarea uses several testing tools, some of which are listed below.
95
+
96
+ | Project | Description |
97
+ | --- | --- |
98
+ | [Minitest](https://github.com/seattlerb/minitest) | Testing framework for Ruby including test runner, assertion library, and mocking library |
99
+ | [Capybara](https://github.com/jnicklas/capybara) | Acceptance testing library providing a DSL to drive a headless browser |
100
+ | [WebMock](https://github.com/bblimke/webmock) | A library for stubbing and setting expectations on HTTP requests in Ruby |
101
+ | [vcr](https://github.com/vcr/vcr) | Library for recording and replaying HTTP requests and responses |
102
+
103
+ ### Additional Dependencies
104
+
105
+ The following table lists other notable libraries utilized by Workarea.
106
+
107
+ | Project | Usage |
108
+ | --- | --- |
109
+ | [Sidekiq](https://github.com/mperham/sidekiq) | Process potentially expensive jobs in the background |
110
+ | [Sidekiq-Cron](https://github.com/ondrejbartas/sidekiq-cron) | Schedule Sidekiq jobs |
111
+ | [Dragonfly](https://markevans.github.io/dragonfly/) | Store files and process images using ImageMagick |
112
+ | [Active Merchant](https://github.com/activemerchant/active_merchant) | Integrate with a variety of payment gateways |
113
+ | [I18n.js](https://github.com/fnando/i18n-js) | Provide Ruby I18n translations in JavaScript |
114
+ | [JsRoutes](https://github.com/railsware/js-routes) | Provide Rails named routes in JavaScript |
115
+ | [Kaminari](https://github.com/amatsuda/kaminari) | Paginate collections |
116
+ | [Local Time](https://github.com/basecamp/local_time) | Display times in a user's local time zone |
117
+ | [Predictor](https://github.com/Pathgather/predictor) | Produce product recommendations |
118
+ | [Rack::Attack!!!](https://github.com/kickstarter/rack-attack) | Block and throttle abusive requests |
119
+
120
+ Ruby libraries for interacting with databases are covered below.
121
+
122
+ ## Databases
123
+
124
+ Workarea applications depend on three different document-based (NoSQL) databases: MongoDB, Elasticsearch, and Redis. Each of the databases uses a client/server architecture, and Workarea provides a Ruby client for each database. Resources for the three databases and their Ruby drivers are provided below.
125
+
126
+ ### MongoDB & Mongoid
127
+
128
+ [MongoDB](https://www.mongodb.org/) is used as the primary data store in Workarea applications. MongoDB is a NoSQL database designed for modern web applications. It is designed primarily for developers rather than analysts and employs an intuitive data model based on documents rather than tables. MongoDB utilizes a client/server architecture where programming language APIs are used to communicate with the server via BSON, a binary representation of JSON (with proprietary extensions).
129
+
130
+ Workarea applications typically run on the latest version of the database, currently v3.2.
131
+
132
+ While there is a low level Ruby driver for MongoDB, Workarea uses [Mongoid](https://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/), an <dfn>Object-Document Mapper</dfn>, or <dfn>ODM</dfn>. Mongoid provides an API that is purposefully similar to [Active Record](http://guides.rubyonrails.org/active_record_basics.html), the library used to persist models in Rails applictions using relational databases. If you have any familiarity with Active Record, that knowledge should transfer directly to Mongoid.
133
+
134
+ If you're new to MongoDB, I recommend the book [MongoDB in Action, Second Edition](https://www.manning.com/books/mongodb-in-action-second-edition), written by a former employee of [MongoDB, Inc.](https://www.mongodb.com/), the corporate sponsor and developer of MongoDB. The book introduces Mongo and compares it to other databases before explaining how to develop a Mongo application using the MongoDB shell and MongoDB Ruby driver. The second edition was updated to cover MongoDB version 3.0.
135
+
136
+ MongoDB Inc. also provides free online courses at [MongoDB University](https://university.mongodb.com/). While they don't teach a Ruby-specific course, all the Mongo drivers have a similar API, so knowledge of one will transfer to any other.
137
+
138
+ The following learning resources are available directly from MongoDB:
139
+
140
+ - [MongoDB Manual](https://docs.mongodb.org/manual/)
141
+ - [Getting Started Guide](https://docs.mongodb.org/getting-started/shell/)
142
+ - [Ruby Driver Tutorial](https://docs.mongodb.org/ecosystem/drivers/ruby/)
143
+ - [Mongoid Tutorial](https://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/)
144
+
145
+ Workarea also uses the following libraries to extend Mongoid:
146
+
147
+ | Project | Extension to Mongoid |
148
+ | --- | --- |
149
+ | [Money-Rails](https://github.com/RubyMoney/money-rails) | `Money` data type |
150
+ | [Mongoid::ActiveMerchant](https://github.com/bencrouse/mongoid-active_merchant) | `ActiveMerchant::Billing::Response` data type |
151
+ | [Mongoid::AuditLog](https://github.com/bencrouse/mongoid-audit_log) | Audit logging of Mongoid documents |
152
+ | [mongoid-paranoia](https://github.com/haihappen/mongoid-paranoia) | "Soft" deletion of Mongoid documents |
153
+ | [mongoid-tree](https://github.com/benedikt/mongoid-tree) | Tree structure |
154
+
155
+ ### Elasticsearch
156
+
157
+ [Elasticsearch](https://www.elastic.co/products/elasticsearch) is the full text search engine for Workarea applications. The project is built on top of Apache Lucene, a full text search engine library used to integrate search functionality into Java applications. Elasticsearch, also written in Java, hides the complexities of Lucene behind RESTful APIs. Elasticsearch clients use these APIs to communicate with Elasticsearch servers via JSON over HTTP.
158
+
159
+ Workarea uses Elasticsearch version 5.x. Workarea applications use a Ruby client to communicate with the Elasticsearch server.
160
+
161
+ If you're new to Elasticsearch there is no better resource than [Elasticsearch: The Definitive Guide](https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html). This holistic and accessible book presents the technology and philosophy of Elasticsearch and is written and maintained by two trainers from [Elastic](https://www.elastic.co/), the corporate sponsor and developer of Elasticsearch. The book is also available from [O'Reilly Media](http://shop.oreilly.com/product/0636920028505.do).
162
+
163
+ Elastic also provides [in person trainings](https://www.elastic.co/training) at various locations for a fee.
164
+
165
+ The [Elasticsearch Reference (v5.0)](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/index.html) is a complete reference to the Elasticsearch RESTful APIs.
166
+
167
+ ### Redis
168
+
169
+ Workarea also makes use of [Redis](http://redis.io/), an in-memory data structure store, used as a database and cache. Workarea applications use the [Ruby client library for Redis](https://github.com/redis/redis-rb) to communicate with a Redis server over the network via a proprietary protocol.
170
+
171
+ Due to its simplicity, there is little to learn about Redis. Refer to the [command reference](http://redis.io/commands) as needed to manipulate keys and values stored in Redis.
172
+
173
+ ## Front End
174
+
175
+ ### HTML & CSS
176
+
177
+ Workarea uses a modular component library to compose its UIs. Front end developers will benefit from familiarity with a UI component library, such as [Bootstrap](http://getbootstrap.com/components/). Workarea uses [style guides](style-guides.html) to document and unit test its UI components. Unit testing of front end components is not a well adopted practice among front end developers. If this concept is new to you, review the [test suite for Normalize.css](https://github.com/necolas/normalize.css/blob/master/test.html) ([view the rendered HTML](http://htmlpreview.github.io/?https://github.com/necolas/normalize.css/blob/master/test.html)), which demonstrates the idea well.
178
+
179
+ Another important concept of the Workarea front end is [BEM](http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/), which stands for <dfn>Block, Element, Modifier</dfn>. Workarea uses the BEM methodology for naming and structuring HTML and CSS. BEM and other concepts are explained in [CSS Guidelines](http://cssguidelin.es/), which Workarea follows as a style guide.
180
+
181
+ Front end developers should also familiarize themselves with the following HTML/CSS dependencies:
182
+
183
+ | Project | Description |
184
+ | --- | --- |
185
+ | [Haml](http://haml.info/) | The server-side templating language responsible for rendering HTML |
186
+ | [Sass (SCSS)](http://sass-lang.com/) | The stylesheet language used to produce CSS |
187
+ | [Normalize.css](https://necolas.github.io/normalize.css/) | A library to normalize CSS across browsers (similar to a CSS reset), version 3.x |
188
+
189
+ ### JavaScript
190
+
191
+ Workarea depends on a variety of JavaScript libraries, most notably the following:
192
+
193
+ | Project | Description |
194
+ | --- | --- |
195
+ | [lodash](https://lodash.com/) | JavaScript's missing standard library which provides cross-browser implementations of `map`, `reduce`, and similar functions, version 3.x |
196
+ | [jQuery](https://jquery.com/) | The de facto standard libarary for DOM manipulations and ajax, version 1.11.x |
197
+ | [jQuery&nbsp;UI](https://jqueryui.com/) | Extensible UI widget library, version 1.11.x |
198
+ | [jQuery&nbsp;Validation&nbsp;Plugin](http://jqueryvalidation.org/) | Library for client-side validation |
199
+ | [Feature.js](http://featurejs.com/) | Feature detection library, version 1.0.1 |
200
+ | [Teaspoon](https://github.com/modeset/teaspoon) | JavaScript test runner for Rails applications |
201
+ | [Mocha](https://mochajs.org/) | JavaScript testing framework |
202
+ | [Chai](http://chaijs.com/) | JavaScript assertion library |