workarea 3.4.16 → 3.4.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +81 -0
- metadata +10 -579
- data/docs/Gemfile +0 -8
- data/docs/Gemfile.lock +0 -130
- data/docs/bin/middleman +0 -29
- data/docs/config.rb +0 -87
- data/docs/config.ru +0 -7
- data/docs/data/articles.yml +0 -157
- data/docs/package.json +0 -15
- data/docs/source/404.html.erb +0 -13
- data/docs/source/articles/access-routes-in-javascript.html.md +0 -33
- data/docs/source/articles/add-a-content-area.html.md +0 -169
- data/docs/source/articles/add-a-content-block-type.html.md +0 -334
- data/docs/source/articles/add-a-report.html.md +0 -202
- data/docs/source/articles/add-css-through-the-admin-ui.html.md +0 -30
- data/docs/source/articles/add-javascript-through-a-manifest.html.md +0 -367
- data/docs/source/articles/add-javascript-through-a-view.html.md +0 -80
- data/docs/source/articles/add-javascript-through-the-admin-ui.html.md +0 -30
- data/docs/source/articles/add-metrics.html.md +0 -58
- data/docs/source/articles/add-or-replace-a-pricing-calculator.html.md +0 -150
- data/docs/source/articles/add-remove-or-change-a-mongoid-validation.html.md +0 -147
- data/docs/source/articles/add-remove-or-change-a-product-template.html.md +0 -142
- data/docs/source/articles/add-remove-sort-and-group-storefront-search-filters.html.md +0 -483
- data/docs/source/articles/add-stylesheets-through-a-manifest.html.md +0 -276
- data/docs/source/articles/add-system-content.html.md +0 -138
- data/docs/source/articles/analytics-overview.html.md +0 -51
- data/docs/source/articles/analyze-storefront-search-results.html.md +0 -261
- data/docs/source/articles/api-overview.html.md +0 -35
- data/docs/source/articles/appending.html.md +0 -506
- data/docs/source/articles/application-document.html.md +0 -88
- data/docs/source/articles/automated-javascript-testing.html.md +0 -162
- data/docs/source/articles/b2b-overview.html.md +0 -64
- data/docs/source/articles/browser-and-device-support.html.md +0 -47
- data/docs/source/articles/change-product-placeholder-image.html.md +0 -39
- data/docs/source/articles/change-storefront-search-results.html.md +0 -283
- data/docs/source/articles/change-the-storefront-product-pricing-ui.html.md +0 -348
- data/docs/source/articles/change-the-storefront-search-filters-ui.html.md +0 -103
- data/docs/source/articles/checkout.html.md +0 -479
- data/docs/source/articles/commerce-model.html.md +0 -164
- data/docs/source/articles/configuration-for-hosting.html.md +0 -106
- data/docs/source/articles/configuration.html.md +0 -406
- data/docs/source/articles/configure-a-payment-gateway.html.md +0 -58
- data/docs/source/articles/configure-asset-storage.html.md +0 -29
- data/docs/source/articles/configure-asset-types.html.md +0 -18
- data/docs/source/articles/configure-contact-form-subjects-list.html.md +0 -24
- data/docs/source/articles/configure-imageoptim.html.md +0 -23
- data/docs/source/articles/configure-locales.html.md +0 -45
- data/docs/source/articles/configure-logins-and-authentication.html.md +0 -42
- data/docs/source/articles/configure-low-inventory-threshold.html.md +0 -26
- data/docs/source/articles/configure-product-image-sizes-and-processing.html.md +0 -28
- data/docs/source/articles/content.html.md +0 -554
- data/docs/source/articles/contentable.html.md +0 -41
- data/docs/source/articles/contribute-code.html.md +0 -69
- data/docs/source/articles/contribute-documentation.html.md +0 -60
- data/docs/source/articles/create-a-custom-discount.html.md +0 -234
- data/docs/source/articles/create-a-new-app.html.md +0 -131
- data/docs/source/articles/create-a-plugin.html.md +0 -19
- data/docs/source/articles/create-a-style-guide.html.md +0 -71
- data/docs/source/articles/create-a-theme.html.md +0 -134
- data/docs/source/articles/css-architectural-overview.html.md +0 -89
- data/docs/source/articles/customize-a-helper.html.md +0 -91
- data/docs/source/articles/decoration.html.md +0 -415
- data/docs/source/articles/define-and-configure-inventory-policies.html.md +0 -107
- data/docs/source/articles/documentation-style-guide.html.md +0 -48
- data/docs/source/articles/documentation.html.md +0 -54
- data/docs/source/articles/domain-modeling.html.md +0 -82
- data/docs/source/articles/error-pages.html.md.erb +0 -95
- data/docs/source/articles/extension-overview.html.md +0 -152
- data/docs/source/articles/favicon-support.html.md +0 -112
- data/docs/source/articles/feature-spec-helper-stylesheet.html.md +0 -25
- data/docs/source/articles/featurejs-and-feature-spec-helper.html.md +0 -20
- data/docs/source/articles/help-and-support.html.md +0 -34
- data/docs/source/articles/html-fragment-caching.html.md +0 -46
- data/docs/source/articles/http-caching.html.md +0 -43
- data/docs/source/articles/i18n.html.md +0 -35
- data/docs/source/articles/images-flow.html.md +0 -10
- data/docs/source/articles/index-storefront-search-documents.html.md +0 -104
- data/docs/source/articles/infrastructure.html.md +0 -46
- data/docs/source/articles/installing.html.md +0 -61
- data/docs/source/articles/integrate-a-payment-gateway.html.md +0 -124
- data/docs/source/articles/integrate-a-web-analytics-provider.html.md +0 -35
- data/docs/source/articles/integrate-an-inventory-management-system.html.md +0 -88
- data/docs/source/articles/integrating-with-other-software.html.md +0 -59
- data/docs/source/articles/inventory.html.md +0 -352
- data/docs/source/articles/javascript-coding-standards.html.md +0 -30
- data/docs/source/articles/javascript-modules.html.md +0 -174
- data/docs/source/articles/javascript-overview.html.md +0 -62
- data/docs/source/articles/javascript-reference-documentation.html.md +0 -51
- data/docs/source/articles/javascript-templates.html.md +0 -52
- data/docs/source/articles/low-level-caching.html.md +0 -25
- data/docs/source/articles/maintain-a-plugin.html.md +0 -12
- data/docs/source/articles/maintenance-policy.html.md +0 -79
- data/docs/source/articles/navigable.html.md +0 -51
- data/docs/source/articles/navigating-the-code.html.md +0 -149
- data/docs/source/articles/navigation.html.md +0 -386
- data/docs/source/articles/order-life-cycle.html.md +0 -546
- data/docs/source/articles/order-pricing.html.md +0 -389
- data/docs/source/articles/orders-and-items.html.md +0 -210
- data/docs/source/articles/orders.html.md +0 -66
- data/docs/source/articles/overriding.html.md +0 -155
- data/docs/source/articles/overview.html.md +0 -43
- data/docs/source/articles/plugins-overview.html.md +0 -12
- data/docs/source/articles/prerequisites-and-dependencies.html.md +0 -202
- data/docs/source/articles/products.html.md.erb +0 -1270
- data/docs/source/articles/progressive-web-application-support.html.md +0 -148
- data/docs/source/articles/rails-asset-manifests.html.md +0 -33
- data/docs/source/articles/rails-asset-view-helpers.html.md +0 -25
- data/docs/source/articles/reading-data.html.md +0 -10
- data/docs/source/articles/releasable.html.md +0 -37
- data/docs/source/articles/report-a-bug.html.md +0 -75
- data/docs/source/articles/ruby-coding-standards.html.md +0 -10
- data/docs/source/articles/run-sidekiq-in-a-local-environment.html.md +0 -40
- data/docs/source/articles/searching.html.md +0 -1005
- data/docs/source/articles/security-policy.html.md +0 -42
- data/docs/source/articles/seeds.html.md +0 -345
- data/docs/source/articles/shipping.html.md +0 -756
- data/docs/source/articles/sort-and-exclude-product-options.html.md +0 -47
- data/docs/source/articles/storefront-search-features.html.md +0 -568
- data/docs/source/articles/storefront-searches.html.md +0 -126
- data/docs/source/articles/style-guides.html.md +0 -21
- data/docs/source/articles/stylesheet-coding-standards.html.md +0 -24
- data/docs/source/articles/stylesheets-overview.html.md +0 -67
- data/docs/source/articles/swappable-list-data-structure.html.md +0 -81
- data/docs/source/articles/system-emails.html.md +0 -102
- data/docs/source/articles/taggable.html.md +0 -8
- data/docs/source/articles/test-a-credit-card-transaction.html.md +0 -16
- data/docs/source/articles/test-if-a-plugin-is-installed.html.md +0 -34
- data/docs/source/articles/testing.html.md +0 -914
- data/docs/source/articles/themes-overview.html.md +0 -155
- data/docs/source/articles/translate-administrable-content.html.md +0 -14
- data/docs/source/articles/translate-javascript-content.html.md +0 -16
- data/docs/source/articles/translate-or-customize-message-content.html.md +0 -29
- data/docs/source/articles/translate-or-customize-static-content.html.md +0 -30
- data/docs/source/articles/use-an-existing-workarea-app.html.md +0 -108
- data/docs/source/articles/view-models.html.md +0 -509
- data/docs/source/articles/views.html.md +0 -14
- data/docs/source/articles/workers.html.md +0 -613
- data/docs/source/articles/writing-data.html.md +0 -10
- data/docs/source/cli.html.md +0 -163
- data/docs/source/favicon.ico +0 -0
- data/docs/source/images/3-variants-1-option.png +0 -0
- data/docs/source/images/3-variants-3-options.png +0 -0
- data/docs/source/images/3-years-primary-image.png +0 -0
- data/docs/source/images/404-storefront-error-page.png +0 -0
- data/docs/source/images/404-system-content-admin.png +0 -0
- data/docs/source/images/404.jpg +0 -0
- data/docs/source/images/5-years-primary-image.png +0 -0
- data/docs/source/images/activity-dashboard.png +0 -0
- data/docs/source/images/activity-for-object.png +0 -0
- data/docs/source/images/activity-ui.png +0 -0
- data/docs/source/images/adding-captioned-image-block-custom-icon.png +0 -0
- data/docs/source/images/adding-captioned-image-block-default-icon.png +0 -0
- data/docs/source/images/admin-alerts-ui.png +0 -0
- data/docs/source/images/admin-category-range-filters.png +0 -0
- data/docs/source/images/admin-for-3-column-hero.png +0 -0
- data/docs/source/images/admin-help-index.png +0 -0
- data/docs/source/images/admin-help-ui.png +0 -0
- data/docs/source/images/admin-javascript.png +0 -0
- data/docs/source/images/admin-notification-for-deactivated-discount.png +0 -0
- data/docs/source/images/admin-notifications-ui.png +0 -0
- data/docs/source/images/admin-product-show-page.png +0 -0
- data/docs/source/images/admin-products-index-page.png +0 -0
- data/docs/source/images/admin-range-filters.png +0 -0
- data/docs/source/images/admin-style-guides-navigation.png +0 -0
- data/docs/source/images/after-re-seeding.png +0 -0
- data/docs/source/images/after-seeding-localhost-3000.png +0 -0
- data/docs/source/images/after-seeding.png +0 -0
- data/docs/source/images/arrow.svg +0 -1
- data/docs/source/images/arrow_white.svg +0 -1
- data/docs/source/images/aws-resource-map.png +0 -0
- data/docs/source/images/backordered-until-output-on-inventory-sku-card.png +0 -0
- data/docs/source/images/before-seeding-localhost-3000.png +0 -0
- data/docs/source/images/before-seeding.png +0 -0
- data/docs/source/images/browsing-workarea-versions-on-the-web.png +0 -0
- data/docs/source/images/bulk-asset-upload-on-assets-index-page.png +0 -0
- data/docs/source/images/bulk-asset-upload-while-editing-content.png +0 -0
- data/docs/source/images/bundle-show-workarea-core.png +0 -0
- data/docs/source/images/bundle-show-workarea.png +0 -0
- data/docs/source/images/calendar-for-backordered-until-field.png +0 -0
- data/docs/source/images/captioned-image-block-in-storefront.png +0 -0
- data/docs/source/images/captioned-image-content-block-storefront-component-style-guide.png +0 -0
- data/docs/source/images/cart-system-content-in-admin.png +0 -0
- data/docs/source/images/cart-system-content-in-storefront.png +0 -0
- data/docs/source/images/checkout-addresses-guest.png +0 -0
- data/docs/source/images/checkout-addresses-user.png +0 -0
- data/docs/source/images/checkout-confirmation.png +0 -0
- data/docs/source/images/checkout-flow-0.png +0 -0
- data/docs/source/images/checkout-flow-1.png +0 -0
- data/docs/source/images/checkout-flow-2.png +0 -0
- data/docs/source/images/checkout-flow-3.png +0 -0
- data/docs/source/images/checkout-flow-4.png +0 -0
- data/docs/source/images/checkout-payment-guest.png +0 -0
- data/docs/source/images/checkout-payment-user.png +0 -0
- data/docs/source/images/checkout-shipping.png +0 -0
- data/docs/source/images/color-picker-component-admin-style-guide.png +0 -0
- data/docs/source/images/color-picker-component-on-content-editing-screen.png +0 -0
- data/docs/source/images/commerce-model-carts-orders.png +0 -0
- data/docs/source/images/commerce-model-order-pricing.png +0 -0
- data/docs/source/images/commerce-model.png +0 -0
- data/docs/source/images/configuring-an-index-pattern-in-kibana.png +0 -0
- data/docs/source/images/content-block-presets.png +0 -0
- data/docs/source/images/content-search-customization.png +0 -0
- data/docs/source/images/country-with-region-data-in-address-form.png +0 -0
- data/docs/source/images/country-without-region-data-in-address-form.png +0 -0
- data/docs/source/images/create-content-block-preset-ui.png +0 -0
- data/docs/source/images/credit-card-icons.png +0 -0
- data/docs/source/images/css-added-through-admin.png +0 -0
- data/docs/source/images/css-admin-ui.png +0 -0
- data/docs/source/images/current-configuration-shown-in-admin-settings.png +0 -0
- data/docs/source/images/customer-impersonation-in-admin.png +0 -0
- data/docs/source/images/customer-impersonation-in-store-front.png +0 -0
- data/docs/source/images/date-filter-same-day.png +0 -0
- data/docs/source/images/developer-toolbar-in-store-front.png +0 -0
- data/docs/source/images/discounts-sorted-by-most-redeemed.png +0 -0
- data/docs/source/images/edit-help-article.png +0 -0
- data/docs/source/images/editing-content-for-search-customization.png +0 -0
- data/docs/source/images/editing-dynamic-captioned-image-block.png +0 -0
- data/docs/source/images/editing-product-fields-in-the-admin.png +0 -0
- data/docs/source/images/editing-search-system-content.png +0 -0
- data/docs/source/images/editing-static-captioned-image-block-custom-icon.png +0 -0
- data/docs/source/images/editing-static-captioned-image-block-default-icon.png +0 -0
- data/docs/source/images/external.svg +0 -1
- data/docs/source/images/favicon_16.png +0 -0
- data/docs/source/images/favicon_180.png +0 -0
- data/docs/source/images/favicon_32.png +0 -0
- data/docs/source/images/filters-all.png +0 -0
- data/docs/source/images/filters-control.png +0 -0
- data/docs/source/images/filters-custom.png +0 -0
- data/docs/source/images/filters-groups.png +0 -0
- data/docs/source/images/filters-material.png +0 -0
- data/docs/source/images/filters-omitted.png +0 -0
- data/docs/source/images/filters-pinned.png +0 -0
- data/docs/source/images/filters-range.png +0 -0
- data/docs/source/images/filters-sorted.png +0 -0
- data/docs/source/images/filters-wrapping-to-second-line-in-admin.png +0 -0
- data/docs/source/images/generic-product-template-images-no-options-selected.png +0 -0
- data/docs/source/images/generic-product-template-images-options-selected.png +0 -0
- data/docs/source/images/generic-template.png +0 -0
- data/docs/source/images/hosting.svg +0 -1
- data/docs/source/images/image-group-content-block-in-storefront.png +0 -0
- data/docs/source/images/images.svg +0 -1
- data/docs/source/images/import-export-screenshot.png +0 -0
- data/docs/source/images/invalid-display.png +0 -0
- data/docs/source/images/itcss.png +0 -0
- data/docs/source/images/kibana-dev-tools-console.png +0 -0
- data/docs/source/images/layout-content-admin-with-2-areas.png +0 -0
- data/docs/source/images/layout-content-admin-with-3-areas.png +0 -0
- data/docs/source/images/link-to-search-system-content.png +0 -0
- data/docs/source/images/logo.svg +0 -1
- data/docs/source/images/menu.svg +0 -2
- data/docs/source/images/mongo-replica-set.svg +0 -1
- data/docs/source/images/multi-column-hero-blocks.png +0 -0
- data/docs/source/images/option-selects-product-template-images-options-selected.png +0 -0
- data/docs/source/images/option-selects-template.png +0 -0
- data/docs/source/images/option-thumbnails-template.png +0 -0
- data/docs/source/images/order-item-total-price-diagram.png +0 -0
- data/docs/source/images/order-pricing-cart-example.png +0 -0
- data/docs/source/images/order-pricing-example-adjustments.png +0 -0
- data/docs/source/images/order-pricing-example-totals.png +0 -0
- data/docs/source/images/order-pricing-placed-order-example.png +0 -0
- data/docs/source/images/order-shipping-total-diagram.png +0 -0
- data/docs/source/images/order-show-with-multiple-tenders.png +0 -0
- data/docs/source/images/order-subtotal-price-diagram.png +0 -0
- data/docs/source/images/order-tax-total-diagram.png +0 -0
- data/docs/source/images/order-total-price-diagram.png +0 -0
- data/docs/source/images/order-total-value-diagram.png +0 -0
- data/docs/source/images/orders-dashboard-links.png +0 -0
- data/docs/source/images/oval.svg +0 -1
- data/docs/source/images/payment-icon-storefront-style-guide.png +0 -0
- data/docs/source/images/people-dashboard-links.png +0 -0
- data/docs/source/images/price-adjustments-diagram.png +0 -0
- data/docs/source/images/price-display-no-options.png +0 -0
- data/docs/source/images/price-display-options-selected.png +0 -0
- data/docs/source/images/pricing-calculators-diagram.png +0 -0
- data/docs/source/images/product-list-content-block-admin.png +0 -0
- data/docs/source/images/product-list-content-block-in-store-front.png +0 -0
- data/docs/source/images/promo-products-excluded-autocomplete-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-featured-category-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-recommendations-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-search-category-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-search-results-after.png +0 -0
- data/docs/source/images/promo-products-included-autocomplete-results-before.png +0 -0
- data/docs/source/images/promo-products-included-featured-category-results-before.png +0 -0
- data/docs/source/images/promo-products-included-recommendations-results-before.png +0 -0
- data/docs/source/images/promo-products-included-search-category-results-before.png +0 -0
- data/docs/source/images/promo-products-included-search-results-before.png +0 -0
- data/docs/source/images/rails-version-constraint.png +0 -0
- data/docs/source/images/re-enable-discount.png +0 -0
- data/docs/source/images/reading-data.svg +0 -1
- data/docs/source/images/readme-hero.png +0 -0
- data/docs/source/images/redesigned-customized-sort-for-search-results.png +0 -0
- data/docs/source/images/reviews-summary-above-share-buttons.png +0 -0
- data/docs/source/images/reviews-summary-below-product-name.png +0 -0
- data/docs/source/images/reviews-summary-below-share-buttons.png +0 -0
- data/docs/source/images/reviews-summary-removed.png +0 -0
- data/docs/source/images/rsa-fingerprint-for-stash.png +0 -0
- data/docs/source/images/ruby-version-constraint.png +0 -0
- data/docs/source/images/script-tag-added-through-admin.png +0 -0
- data/docs/source/images/search-analysis-admin-alternate-rendering.png +0 -0
- data/docs/source/images/search-analysis-admin.png +0 -0
- data/docs/source/images/search-quality-report.png +0 -0
- data/docs/source/images/search.svg +0 -1
- data/docs/source/images/searching-for-cart-system-content-in-admin.png +0 -0
- data/docs/source/images/searching-for-layout-system-content-in-admin.png +0 -0
- data/docs/source/images/seeded-admin.png +0 -0
- data/docs/source/images/seeds-from-plugins.png +0 -0
- data/docs/source/images/seo-metadata-automation-ui.png +0 -0
- data/docs/source/images/show-password-button.png +0 -0
- data/docs/source/images/storefront-autocomplete.png +0 -0
- data/docs/source/images/storefront-category-summary-content-block.png +0 -0
- data/docs/source/images/storefront-category.png +0 -0
- data/docs/source/images/storefront-product-after-overriding.png +0 -0
- data/docs/source/images/storefront-product-before-overriding.png +0 -0
- data/docs/source/images/storefront-product-browse-page.png +0 -0
- data/docs/source/images/storefront-product-recommendations.png +0 -0
- data/docs/source/images/storefront-product-show-page.png +0 -0
- data/docs/source/images/storefront-requests-and-search-requests.png +0 -0
- data/docs/source/images/storefront-search-request-handling.png +0 -0
- data/docs/source/images/storefront-search-response-creation.png +0 -0
- data/docs/source/images/storefront-search.png +0 -0
- data/docs/source/images/storefront-style-guides-navigation.png +0 -0
- data/docs/source/images/styles.css +0 -3
- data/docs/source/images/tax-categories-ui.png +0 -0
- data/docs/source/images/tax-rates-ui.png +0 -0
- data/docs/source/images/unpurchasable-product.png +0 -0
- data/docs/source/images/url-redirects-filtering.png +0 -0
- data/docs/source/images/utility-nav-area-in-admin.png +0 -0
- data/docs/source/images/utility-nav-area-in-storefront.png +0 -0
- data/docs/source/images/validation-message-in-storefront.png +0 -0
- data/docs/source/images/view-model-interface.png +0 -0
- data/docs/source/images/viewing-workarea-version-in-source.png +0 -0
- data/docs/source/images/workarea.svg +0 -1
- data/docs/source/images/worst-performing-searches-on-results-customization-page.png +0 -0
- data/docs/source/images/writing-data.svg +0 -1
- data/docs/source/index.html.erb +0 -166
- data/docs/source/javascripts/jquery.js +0 -2
- data/docs/source/javascripts/lunr.js +0 -7
- data/docs/source/javascripts/site.js +0 -299
- data/docs/source/javascripts/vendor/highlight.pack.js +0 -2
- data/docs/source/layouts/article.erb +0 -106
- data/docs/source/layouts/bare.erb +0 -46
- data/docs/source/layouts/layout.erb +0 -43
- data/docs/source/release-notes/workarea-3-0-0.html.md +0 -146
- data/docs/source/release-notes/workarea-3-0-1.html.md +0 -161
- data/docs/source/release-notes/workarea-3-0-10.html.md +0 -39
- data/docs/source/release-notes/workarea-3-0-11.html.md +0 -277
- data/docs/source/release-notes/workarea-3-0-12.html.md +0 -14
- data/docs/source/release-notes/workarea-3-0-13.html.md +0 -153
- data/docs/source/release-notes/workarea-3-0-14.html.md +0 -93
- data/docs/source/release-notes/workarea-3-0-15.html.md +0 -107
- data/docs/source/release-notes/workarea-3-0-16.html.md +0 -36
- data/docs/source/release-notes/workarea-3-0-17.html.md +0 -141
- data/docs/source/release-notes/workarea-3-0-18.html.md +0 -123
- data/docs/source/release-notes/workarea-3-0-19.html.md +0 -160
- data/docs/source/release-notes/workarea-3-0-2.html.md +0 -222
- data/docs/source/release-notes/workarea-3-0-20.html.md +0 -95
- data/docs/source/release-notes/workarea-3-0-21.html.md +0 -168
- data/docs/source/release-notes/workarea-3-0-22.html.md +0 -268
- data/docs/source/release-notes/workarea-3-0-23.html.md +0 -173
- data/docs/source/release-notes/workarea-3-0-24.html.md +0 -19
- data/docs/source/release-notes/workarea-3-0-25.html.md +0 -26
- data/docs/source/release-notes/workarea-3-0-26.html.md +0 -199
- data/docs/source/release-notes/workarea-3-0-27.html.md +0 -113
- data/docs/source/release-notes/workarea-3-0-28.html.md +0 -39
- data/docs/source/release-notes/workarea-3-0-29.html.md +0 -73
- data/docs/source/release-notes/workarea-3-0-3.html.md +0 -35
- data/docs/source/release-notes/workarea-3-0-30.html.md +0 -186
- data/docs/source/release-notes/workarea-3-0-31.html.md +0 -125
- data/docs/source/release-notes/workarea-3-0-32.html.md +0 -73
- data/docs/source/release-notes/workarea-3-0-33.html.md +0 -137
- data/docs/source/release-notes/workarea-3-0-34.html.md +0 -203
- data/docs/source/release-notes/workarea-3-0-35.html.md +0 -205
- data/docs/source/release-notes/workarea-3-0-36.html.md +0 -105
- data/docs/source/release-notes/workarea-3-0-37.html.md +0 -144
- data/docs/source/release-notes/workarea-3-0-38.html.md +0 -73
- data/docs/source/release-notes/workarea-3-0-39.html.md +0 -77
- data/docs/source/release-notes/workarea-3-0-4.html.md +0 -14
- data/docs/source/release-notes/workarea-3-0-40.html.md +0 -130
- data/docs/source/release-notes/workarea-3-0-41.html.md +0 -70
- data/docs/source/release-notes/workarea-3-0-42.html.md +0 -52
- data/docs/source/release-notes/workarea-3-0-43.html.md +0 -72
- data/docs/source/release-notes/workarea-3-0-44.html.md +0 -93
- data/docs/source/release-notes/workarea-3-0-45.html.md +0 -61
- data/docs/source/release-notes/workarea-3-0-46.html.md +0 -171
- data/docs/source/release-notes/workarea-3-0-47.html.md +0 -130
- data/docs/source/release-notes/workarea-3-0-48.html.md +0 -160
- data/docs/source/release-notes/workarea-3-0-49.html.md +0 -28
- data/docs/source/release-notes/workarea-3-0-5.html.md +0 -225
- data/docs/source/release-notes/workarea-3-0-50.html.md +0 -74
- data/docs/source/release-notes/workarea-3-0-51.html.md +0 -61
- data/docs/source/release-notes/workarea-3-0-52.html.md +0 -76
- data/docs/source/release-notes/workarea-3-0-53.html.md +0 -126
- data/docs/source/release-notes/workarea-3-0-54.html.md +0 -112
- data/docs/source/release-notes/workarea-3-0-55.html.md +0 -105
- data/docs/source/release-notes/workarea-3-0-56.html.md +0 -56
- data/docs/source/release-notes/workarea-3-0-57.html.md +0 -82
- data/docs/source/release-notes/workarea-3-0-58.html.md +0 -153
- data/docs/source/release-notes/workarea-3-0-59.html.md +0 -78
- data/docs/source/release-notes/workarea-3-0-6.html.md +0 -165
- data/docs/source/release-notes/workarea-3-0-60.html.md +0 -43
- data/docs/source/release-notes/workarea-3-0-61.html.md +0 -46
- data/docs/source/release-notes/workarea-3-0-62.html.md +0 -23
- data/docs/source/release-notes/workarea-3-0-63.html.md +0 -25
- data/docs/source/release-notes/workarea-3-0-64.html.md +0 -25
- data/docs/source/release-notes/workarea-3-0-65.html.md +0 -37
- data/docs/source/release-notes/workarea-3-0-7.html.md +0 -207
- data/docs/source/release-notes/workarea-3-0-8.html.md +0 -337
- data/docs/source/release-notes/workarea-3-0-9.html.md +0 -196
- data/docs/source/release-notes/workarea-3-1-0.html.md +0 -414
- data/docs/source/release-notes/workarea-3-1-1.html.md +0 -139
- data/docs/source/release-notes/workarea-3-1-10.html.md +0 -19
- data/docs/source/release-notes/workarea-3-1-11.html.md +0 -27
- data/docs/source/release-notes/workarea-3-1-12.html.md +0 -216
- data/docs/source/release-notes/workarea-3-1-13.html.md +0 -113
- data/docs/source/release-notes/workarea-3-1-14.html.md +0 -39
- data/docs/source/release-notes/workarea-3-1-15.html.md +0 -107
- data/docs/source/release-notes/workarea-3-1-16.html.md +0 -188
- data/docs/source/release-notes/workarea-3-1-17.html.md +0 -141
- data/docs/source/release-notes/workarea-3-1-18.html.md +0 -73
- data/docs/source/release-notes/workarea-3-1-19.html.md +0 -137
- data/docs/source/release-notes/workarea-3-1-2.html.md +0 -55
- data/docs/source/release-notes/workarea-3-1-20.html.md +0 -203
- data/docs/source/release-notes/workarea-3-1-21.html.md +0 -205
- data/docs/source/release-notes/workarea-3-1-22.html.md +0 -121
- data/docs/source/release-notes/workarea-3-1-23.html.md +0 -144
- data/docs/source/release-notes/workarea-3-1-24.html.md +0 -94
- data/docs/source/release-notes/workarea-3-1-25.html.md +0 -77
- data/docs/source/release-notes/workarea-3-1-26.html.md +0 -130
- data/docs/source/release-notes/workarea-3-1-27.html.md +0 -70
- data/docs/source/release-notes/workarea-3-1-28.html.md +0 -52
- data/docs/source/release-notes/workarea-3-1-29.html.md +0 -44
- data/docs/source/release-notes/workarea-3-1-3.html.md +0 -185
- data/docs/source/release-notes/workarea-3-1-30.html.md +0 -72
- data/docs/source/release-notes/workarea-3-1-31.html.md +0 -93
- data/docs/source/release-notes/workarea-3-1-32.html.md +0 -61
- data/docs/source/release-notes/workarea-3-1-33.html.md +0 -171
- data/docs/source/release-notes/workarea-3-1-34.html.md +0 -130
- data/docs/source/release-notes/workarea-3-1-35.html.md +0 -179
- data/docs/source/release-notes/workarea-3-1-36.html.md +0 -28
- data/docs/source/release-notes/workarea-3-1-37.html.md +0 -74
- data/docs/source/release-notes/workarea-3-1-38.html.md +0 -61
- data/docs/source/release-notes/workarea-3-1-39.html.md +0 -96
- data/docs/source/release-notes/workarea-3-1-4.html.md +0 -148
- data/docs/source/release-notes/workarea-3-1-40.html.md +0 -126
- data/docs/source/release-notes/workarea-3-1-41.html.md +0 -128
- data/docs/source/release-notes/workarea-3-1-42.html.md +0 -105
- data/docs/source/release-notes/workarea-3-1-43.html.md +0 -37
- data/docs/source/release-notes/workarea-3-1-44.html.md +0 -82
- data/docs/source/release-notes/workarea-3-1-45.html.md +0 -153
- data/docs/source/release-notes/workarea-3-1-46.html.md +0 -91
- data/docs/source/release-notes/workarea-3-1-47.html.md +0 -65
- data/docs/source/release-notes/workarea-3-1-48.html.md +0 -46
- data/docs/source/release-notes/workarea-3-1-49.html.md +0 -23
- data/docs/source/release-notes/workarea-3-1-5.html.md +0 -169
- data/docs/source/release-notes/workarea-3-1-50.html.md +0 -42
- data/docs/source/release-notes/workarea-3-1-51.html.md +0 -25
- data/docs/source/release-notes/workarea-3-1-52.html.md +0 -57
- data/docs/source/release-notes/workarea-3-1-6.html.md +0 -117
- data/docs/source/release-notes/workarea-3-1-7.html.md +0 -176
- data/docs/source/release-notes/workarea-3-1-8.html.md +0 -283
- data/docs/source/release-notes/workarea-3-1-9.html.md +0 -212
- data/docs/source/release-notes/workarea-3-2-0.html.md +0 -1705
- data/docs/source/release-notes/workarea-3-2-1.html.md +0 -216
- data/docs/source/release-notes/workarea-3-2-10.html.md +0 -237
- data/docs/source/release-notes/workarea-3-2-11.html.md +0 -121
- data/docs/source/release-notes/workarea-3-2-12.html.md +0 -145
- data/docs/source/release-notes/workarea-3-2-13.html.md +0 -138
- data/docs/source/release-notes/workarea-3-2-14.html.md +0 -77
- data/docs/source/release-notes/workarea-3-2-15.html.md +0 -130
- data/docs/source/release-notes/workarea-3-2-16.html.md +0 -111
- data/docs/source/release-notes/workarea-3-2-17.html.md +0 -52
- data/docs/source/release-notes/workarea-3-2-18.html.md +0 -44
- data/docs/source/release-notes/workarea-3-2-19.html.md +0 -72
- data/docs/source/release-notes/workarea-3-2-2.html.md +0 -145
- data/docs/source/release-notes/workarea-3-2-20.html.md +0 -93
- data/docs/source/release-notes/workarea-3-2-21.html.md +0 -61
- data/docs/source/release-notes/workarea-3-2-22.html.md +0 -154
- data/docs/source/release-notes/workarea-3-2-23.html.md +0 -130
- data/docs/source/release-notes/workarea-3-2-24.html.md +0 -200
- data/docs/source/release-notes/workarea-3-2-25.html.md +0 -28
- data/docs/source/release-notes/workarea-3-2-26.html.md +0 -94
- data/docs/source/release-notes/workarea-3-2-27.html.md +0 -61
- data/docs/source/release-notes/workarea-3-2-28.html.md +0 -96
- data/docs/source/release-notes/workarea-3-2-29.html.md +0 -126
- data/docs/source/release-notes/workarea-3-2-30.html.md +0 -112
- data/docs/source/release-notes/workarea-3-2-31.html.md +0 -105
- data/docs/source/release-notes/workarea-3-2-32.html.md +0 -56
- data/docs/source/release-notes/workarea-3-2-33.html.md +0 -82
- data/docs/source/release-notes/workarea-3-2-34.html.md +0 -153
- data/docs/source/release-notes/workarea-3-2-35.html.md +0 -91
- data/docs/source/release-notes/workarea-3-2-36.html.md +0 -118
- data/docs/source/release-notes/workarea-3-2-37.html.md +0 -46
- data/docs/source/release-notes/workarea-3-2-38.html.md +0 -23
- data/docs/source/release-notes/workarea-3-2-39.html.md +0 -42
- data/docs/source/release-notes/workarea-3-2-4.html.md +0 -109
- data/docs/source/release-notes/workarea-3-2-40.html.md +0 -25
- data/docs/source/release-notes/workarea-3-2-41.html.md +0 -90
- data/docs/source/release-notes/workarea-3-2-5.html.md +0 -186
- data/docs/source/release-notes/workarea-3-2-6.html.md +0 -173
- data/docs/source/release-notes/workarea-3-2-7.html.md +0 -89
- data/docs/source/release-notes/workarea-3-2-8.html.md +0 -137
- data/docs/source/release-notes/workarea-3-2-9.html.md +0 -219
- data/docs/source/release-notes/workarea-3-3-0.html.md +0 -1272
- data/docs/source/release-notes/workarea-3-3-1.html.md +0 -324
- data/docs/source/release-notes/workarea-3-3-10.html.md +0 -69
- data/docs/source/release-notes/workarea-3-3-11.html.md +0 -72
- data/docs/source/release-notes/workarea-3-3-12.html.md +0 -136
- data/docs/source/release-notes/workarea-3-3-13.html.md +0 -61
- data/docs/source/release-notes/workarea-3-3-14.html.md +0 -196
- data/docs/source/release-notes/workarea-3-3-15.html.md +0 -167
- data/docs/source/release-notes/workarea-3-3-16.html.md +0 -234
- data/docs/source/release-notes/workarea-3-3-17.html.md +0 -82
- data/docs/source/release-notes/workarea-3-3-18.html.md +0 -165
- data/docs/source/release-notes/workarea-3-3-19.html.md +0 -106
- data/docs/source/release-notes/workarea-3-3-2.html.md +0 -72
- data/docs/source/release-notes/workarea-3-3-20.html.md +0 -116
- data/docs/source/release-notes/workarea-3-3-21.html.md +0 -228
- data/docs/source/release-notes/workarea-3-3-22.html.md +0 -125
- data/docs/source/release-notes/workarea-3-3-23.html.md +0 -154
- data/docs/source/release-notes/workarea-3-3-24.html.md +0 -70
- data/docs/source/release-notes/workarea-3-3-25.html.md +0 -114
- data/docs/source/release-notes/workarea-3-3-26.html.md +0 -260
- data/docs/source/release-notes/workarea-3-3-27.html.md +0 -138
- data/docs/source/release-notes/workarea-3-3-28.html.md +0 -147
- data/docs/source/release-notes/workarea-3-3-29.html.md +0 -63
- data/docs/source/release-notes/workarea-3-3-3.html.md +0 -153
- data/docs/source/release-notes/workarea-3-3-30.html.md +0 -102
- data/docs/source/release-notes/workarea-3-3-31.html.md +0 -57
- data/docs/source/release-notes/workarea-3-3-32.html.md +0 -44
- data/docs/source/release-notes/workarea-3-3-33.html.md +0 -114
- data/docs/source/release-notes/workarea-3-3-34.html.md +0 -29
- data/docs/source/release-notes/workarea-3-3-4.html.md +0 -332
- data/docs/source/release-notes/workarea-3-3-5.html.md +0 -242
- data/docs/source/release-notes/workarea-3-3-6.html.md +0 -100
- data/docs/source/release-notes/workarea-3-3-7.html.md +0 -148
- data/docs/source/release-notes/workarea-3-3-8.html.md +0 -163
- data/docs/source/release-notes/workarea-3-3-9.html.md +0 -93
- data/docs/source/release-notes/workarea-3-4-0.html.md +0 -580
- data/docs/source/release-notes/workarea-3-4-1.html.md +0 -150
- data/docs/source/release-notes/workarea-3-4-10.html.md +0 -72
- data/docs/source/release-notes/workarea-3-4-11.html.md +0 -60
- data/docs/source/release-notes/workarea-3-4-12.html.md +0 -155
- data/docs/source/release-notes/workarea-3-4-15.html.md +0 -100
- data/docs/source/release-notes/workarea-3-4-16.html.md +0 -88
- data/docs/source/release-notes/workarea-3-4-2.html.md +0 -188
- data/docs/source/release-notes/workarea-3-4-3.html.md +0 -136
- data/docs/source/release-notes/workarea-3-4-4.html.md +0 -114
- data/docs/source/release-notes/workarea-3-4-5.html.md +0 -275
- data/docs/source/release-notes/workarea-3-4-6.html.md +0 -169
- data/docs/source/release-notes/workarea-3-4-7.html.md +0 -162
- data/docs/source/release-notes/workarea-3-4-8.html.md +0 -95
- data/docs/source/release-notes/workarea-3-4-9.html.md +0 -135
- data/docs/source/release-notes.html.md +0 -261
- data/docs/source/search.html.erb +0 -34
- data/docs/source/shared/_header.erb +0 -61
- data/docs/source/shared/_svgs.erb +0 -17
- data/docs/source/style_guide/index.html.erb +0 -382
- data/docs/source/stylesheets/_base.scss +0 -125
- data/docs/source/stylesheets/_components.scss +0 -669
- data/docs/source/stylesheets/_helpers.scss +0 -10
- data/docs/source/stylesheets/_opinions.scss +0 -42
- data/docs/source/stylesheets/_settings.scss +0 -56
- data/docs/source/stylesheets/_typography.scss +0 -119
- data/docs/source/stylesheets/site.css.scss +0 -14
- data/docs/source/stylesheets/vendor/_avalanche.scss +0 -328
- data/docs/source/stylesheets/vendor/_normalize.scss +0 -341
- data/docs/source/stylesheets/vendor/highlight/_tomorrow_night_blue.scss +0 -75
- data/docs/source/upgrade-guides/workarea-3-4-0.html.md +0 -152
- data/docs/source/upgrade-guides.html.md +0 -18
- data/docs/workarea_renderer.rb +0 -8
- data/docs/yarn.lock +0 -2522
@@ -1,82 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Domain Modeling
|
3
|
-
excerpt: Here are a few key concepts related to domain modeling and how they are applied within the platform.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Domain Modeling
|
7
|
-
|
8
|
-
Here are a few key concepts related to domain modeling and how they are applied within the platform.
|
9
|
-
|
10
|
-
**Note:** It's important to keep in mind these are guidelines, and are not followed completely or religiously. Instead, think of them as heuristics when reading the code or extending elements of the platform.
|
11
|
-
|
12
|
-
## Bounded Contexts
|
13
|
-
|
14
|
-
With large domains (ecommerce is certainly one of these), it becomes difficult to track the intricacies of how models relate to one another. Therefore, Workarea separates these models into different contexts as a way to break down the bigger picture into more manageable pieces. Each context addresses a single problem or set of problems within the larger system. This technique reduces coupling along domain lines and allows functionality to change independently.
|
15
|
-
|
16
|
-
To see this in Workarea, look at how the `app/models` directory in Workarea Core is divided. Each subdirectory is a bounded context, such as the following:
|
17
|
-
|
18
|
-
- `Catalog`
|
19
|
-
- `Content`
|
20
|
-
- `Fulfillment`
|
21
|
-
- `Inventory`
|
22
|
-
- `Navigation`
|
23
|
-
- `Order`
|
24
|
-
- `Payment`
|
25
|
-
- `Pricing`
|
26
|
-
- `Recommendation`
|
27
|
-
- `Shipping`
|
28
|
-
- `Tax`
|
29
|
-
- `User`
|
30
|
-
|
31
|
-
### Orders Example
|
32
|
-
|
33
|
-
From a customer's perspective, an "order" might contain the following elements:
|
34
|
-
|
35
|
-
- Products
|
36
|
-
- Prices
|
37
|
-
- Shipping method
|
38
|
-
- Credit card
|
39
|
-
|
40
|
-
By handling these problems separately, the code/modeling/logic for each is much simpler and less coupled. For instance, logic around what shipping methods are available has no coupling to putting together the pricing for the order, even though shipping methods will always have and depend on a price.
|
41
|
-
|
42
|
-
However, to present the order to the customer, Workarea pulls:
|
43
|
-
|
44
|
-
- Some products from the `Catalog::Product` class
|
45
|
-
- Pricing for the order items from the `Pricing` engine
|
46
|
-
- Available shipping methods from the `Shipping::Method` class
|
47
|
-
- A credit card from the `Payment`
|
48
|
-
|
49
|
-
This is the responsibility of the view model layer (and one of the reasons it exists).
|
50
|
-
|
51
|
-
### Pricing Example
|
52
|
-
|
53
|
-
In another example, pricing from a business user's perspective probably includes several elements:
|
54
|
-
|
55
|
-
- SKU price
|
56
|
-
- Discounts
|
57
|
-
- Shipping costs
|
58
|
-
- Taxes
|
59
|
-
|
60
|
-
This can get quite complicated, so it is effective to break the problem apart:
|
61
|
-
|
62
|
-
- SKU price - stored and calculated in the `Pricing` engine
|
63
|
-
- Discounts - stored and calculated in the `Pricing` engine
|
64
|
-
- Shipping costs - stored and calculated by the `Shipping` module and totalled by the `Pricing` engine
|
65
|
-
- Taxes - rates are stored calculated by the `Tax` module, but applied by the `Pricing` engine
|
66
|
-
|
67
|
-
This design makes it much easier to swap out how shipping or taxes are determined. These can be significant problems in their own right, and many implementations use third parties for these purposes.
|
68
|
-
|
69
|
-
## Shared Models
|
70
|
-
|
71
|
-
There are some things that the contexts share. Changing these classes may/will require cooperation from a potentially broad range of classes, so it's a risky move.
|
72
|
-
|
73
|
-
Examples of classes that are shared include:
|
74
|
-
|
75
|
-
- `Address` - generically models an address
|
76
|
-
- `PriceAdjustment` - represents an adjustment to price, used for tracking/calculating prices
|
77
|
-
- `Region` and `Country` - models countries and subdivisions of countries
|
78
|
-
- `ShippingOption` - models a shipping method selectable or selected by a user
|
79
|
-
|
80
|
-
So `PriceAdjustment` is used by the `Pricing` engine to create the pricing on the `Order`, `Shipping::Shipment`, etc.
|
81
|
-
|
82
|
-
|
@@ -1,95 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Error Pages
|
3
|
-
excerpt: Workarea Storefront provides an errors controller through which it routes all 404 and 500 errors, and an errors view, which it conditionally renders for HTML responses in place of the static 404 and 500 error pages provided by Rails.[1] Storefront err
|
4
|
-
---
|
5
|
-
|
6
|
-
# Error Pages
|
7
|
-
|
8
|
-
Workarea Storefront provides an errors controller through which it routes all 404 and 500 errors, and an errors view, which it conditionally renders for HTML responses in place of the static 404 and 500 error pages provided by Rails.<sup><a href="#notes" id="note-1-context">[1]</a></sup> Storefront error pages provide several advantages over the Rails defaults.
|
9
|
-
|
10
|
-
- Each error page renders with administrable system content, specific to the error type (404 or 500)
|
11
|
-
- The error pages use the Storefront layout, providing a consistent look and feel, as well as global functionality such as search and navigation
|
12
|
-
- The errors view is a standard Workarea view, which you can [override](overriding.html) to extend as necessary
|
13
|
-
|
14
|
-
For these reasons, **Workarea 3.3 changes error page rendering to _always_ use Workarea error pages instead of the Rails defaults**.
|
15
|
-
|
16
|
-
## Use Workarea Error Pages
|
17
|
-
|
18
|
-
To use the Storefront errors view with administrable content in place of the default Rails error pages, ensure [system contents](content.html#system-content) with the following names exist within each environment:
|
19
|
-
|
20
|
-
- `'Not Found'` for 404 pages
|
21
|
-
- `'Internal Server Error'` for 500 pages
|
22
|
-
|
23
|
-
(Since Workarea 3.3, the errors controller creates these contents on demand, so it isn't necessary to create them in advance. However, you should create them if the retailer would like to customize the content for these pages.)
|
24
|
-
|
25
|
-
The default customer service pages [seeds](seeds.html) create these system contents within development environments. For all other environments, create these contents through any Ruby interface to which you have access (e.g. Rails console/runner/task). Refer to the example in Listing 1.
|
26
|
-
|
27
|
-
<!-- <figure id="listing-1">
|
28
|
-
<figcaption>
|
29
|
-
<p>Listing 1: Excerpt from <i>workarea-core-3.2.4/app/seeds/workarea/customer_service_pages_seeds.rb</i></p>
|
30
|
-
</figcaption> -->
|
31
|
-
|
32
|
-
Listing 1: Excerpt from _workarea-core-3.2.4/app/seeds/workarea/customer\_service\_pages\_seeds.rb_
|
33
|
-
|
34
|
-
```ruby
|
35
|
-
module Workarea
|
36
|
-
class CustomerServicePagesSeeds
|
37
|
-
def perform
|
38
|
-
puts 'Adding auxiliary pages...'
|
39
|
-
|
40
|
-
<var># …</var>
|
41
|
-
|
42
|
-
internal_error_page = Content.for('Internal Server Error')
|
43
|
-
internal_error_page.save!
|
44
|
-
|
45
|
-
not_found_content = Content.for('Not Found')
|
46
|
-
not_found_content.blocks.build(
|
47
|
-
type: :html,
|
48
|
-
data: {
|
49
|
-
html: '<p>Try searching or <a href="/">start at the home page</a>.</p>'
|
50
|
-
}
|
51
|
-
)
|
52
|
-
not_found_content.save!
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
```
|
57
|
-
<!-- </figure> -->
|
58
|
-
|
59
|
-
Next, edit the content for these pages within each environment and view the results.
|
60
|
-
|
61
|
-
<figure id="figure-1">
|
62
|
-
<figcaption>
|
63
|
-
<p>Figure 1: Administration of the 404 system content</p>
|
64
|
-
</figcaption>
|
65
|
-
<p><%= image_tag "images/404-system-content-admin.png", alt: "The admin for 404 system content" %></p>
|
66
|
-
</figure><figure id="figure-2">
|
67
|
-
<figcaption>
|
68
|
-
<p>Figure 2: A Storefront 404 error page in a development environment</p>
|
69
|
-
</figcaption>
|
70
|
-
<p><%= image_tag "images/404-storefront-error-page.png", alt: "A 404 page in the Storefront" %></p>
|
71
|
-
</figure>
|
72
|
-
|
73
|
-
## View Production Error Pages in Development
|
74
|
-
|
75
|
-
By default, Rails responds to an error in development with a debugging page. To view production error pages in development, you must change this behavior. Modify your application’s development configuration as shown in the following patch:
|
76
|
-
|
77
|
-
```
|
78
|
-
--- config/environments/development.rb.old 2018-03-20 15:37:21.000000000 -0400
|
79
|
-
+++ config/environments/development.rb 2018-03-20 15:37:04.000000000 -0400
|
80
|
-
@@ -14,7 +14,7 @@
|
81
|
-
config.eager_load = false
|
82
|
-
|
83
|
-
# Show full error reports.
|
84
|
-
- config.consider_all_requests_local = true
|
85
|
-
+ config.consider_all_requests_local = false
|
86
|
-
|
87
|
-
# Enable/disable caching. By default caching is disabled.
|
88
|
-
if Rails.root.join('tmp/caching-dev.txt').exist?
|
89
|
-
```
|
90
|
-
|
91
|
-
After changing your configuration, restart the application.
|
92
|
-
|
93
|
-
## Notes
|
94
|
-
|
95
|
-
[1] Specifically, the paths `'/404'` and `'/500'` (regardless of HTTP method) are routed to the `not_found` and `internal` actions of the `Storefront::ErrorsController`, each of which conditionally renders the _workarea/storefront/errors/show.html.haml_ view.
|
@@ -1,152 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Extension
|
3
|
-
excerpt: Extension is the process of adding, modifying, or even removing Workarea platform functionality from within a Workarea application or plugin. Workarea plugins extend the platform in ways that are re-usable across applications, while individual applica
|
4
|
-
---
|
5
|
-
|
6
|
-
# Extension
|
7
|
-
|
8
|
-
<dfn>Extension</dfn> is the process of adding, modifying, or even removing Workarea platform functionality from within a Workarea application or plugin. Workarea plugins extend the platform in ways that are re-usable across applications, while individual applications extend the platform further to meet the specific needs of a retailer or other stakeholders. While administration allows for platform customization through a UI, extension allows for deeper customization via code changes.
|
9
|
-
|
10
|
-
The code changes performed for extension may conflict with the platform's own code changes between versions. When upgrading to a new version of Workarea, application and plugin developers must resolve these conflicts. Developers must therefore consider the long term cost of extension. Another concern is the initial implementation cost of an extension.
|
11
|
-
|
12
|
-
This document provides an overview of extension techniques for easier comparison, while other guides describe various techniques in greater detail.
|
13
|
-
|
14
|
-
## Augmentation
|
15
|
-
|
16
|
-
One form of extension is simple <dfn>augmentation</dfn>—adding new code within the Workarea namespace. For example, your application may require a calendar of events. Such a feature is entirely new and does not overlap with any existing platform functionality. However, to provide consistent user and developer experiences, it makes sense to add your new code (such as models, views, and controllers) within the Workarea namespace. It also makes sense to leverage Workarea patterns, such as the use of additional object types (e.g. view models, workers), and to follow Workarea conventions (e.g. file naming and structuring).
|
17
|
-
|
18
|
-
## Domain-Specific Extension
|
19
|
-
|
20
|
-
Workarea provides various _designed_ points of extension that employ conventions, inheritance, DSLs, and other techniques to reduce cost during the initial implementation, and potentially at upgrade time. These techniques are domain-specific, so within this documentation, I cover each where that particular domain aspect is covered. Examples of these extension points are listed below. <sup><a href="#notes" id="note-1-context">[1]</a></sup>
|
21
|
-
|
22
|
-
- Catalog customizations
|
23
|
-
- [Content block types](add-a-content-block-type.html)
|
24
|
-
- [Discount types](create-a-custom-discount.html)
|
25
|
-
- Inventory policies
|
26
|
-
- [Payment gateways](integrate-a-payment-gateway.html)
|
27
|
-
- [Pricing calculators](customize-pricing.html)
|
28
|
-
- Product templates
|
29
|
-
- Seeds
|
30
|
-
- Shipping carriers
|
31
|
-
- Storefront search middlewares
|
32
|
-
|
33
|
-
## Generic Extension
|
34
|
-
|
35
|
-
Workarea also provides generic extension techniques that apply across domain boundaries and allow for extensions beyond those specifically designed into the platform.
|
36
|
-
|
37
|
-
### Configuration
|
38
|
-
|
39
|
-
[Configuration](configuration.html) allows developers to customize specific programmatic values in Ruby and JavaScript.
|
40
|
-
|
41
|
-
#### Summary
|
42
|
-
|
43
|
-
- Allows applications and plugins to customize configuration values defined by the core platform and plugins
|
44
|
-
- Allows plugins to define their own configuration values to be customized by applications and other plugins
|
45
|
-
- Applications and plugins write configuration code within their own Ruby and JavaScript configuration files
|
46
|
-
- Configuration can affect any aspect of the platform, from the number of products to show in a content block to the list of calculators used to calculate pricing
|
47
|
-
|
48
|
-
#### Limitations
|
49
|
-
|
50
|
-
- Configuration is limited to specific values defined as configurable by the core platform and plugins
|
51
|
-
- Most configuration values are simple values (often integers) or collections/lists of those values
|
52
|
-
|
53
|
-
#### Test Considerations
|
54
|
-
|
55
|
-
- The scope/reach of a configuration tends to be limited, however, configuration may break tests or create the need for new tests
|
56
|
-
- After configuring your app or plugin, write new tests or decorate existing tests as necessary
|
57
|
-
|
58
|
-
#### Upgrade Considerations
|
59
|
-
|
60
|
-
- When Workarea makes configuration changes between versions, those changes are generally applied seamlessly to your application or plugin when you upgrade your Workarea version
|
61
|
-
- However, if Workarea has changed any config values that you have replaced with your own, you will need to apply those changes manually if necessary
|
62
|
-
- When customizing config values that represent collections, mutate the collection (prepend, append, delete member, etc) rather than replacing it to ensure Workarea's changes to the collection are applied when upgrading
|
63
|
-
- For example, if adding a product template, append your custom value to the existing list of templates instead of replacing the entire list
|
64
|
-
|
65
|
-
### Decoration
|
66
|
-
|
67
|
-
[Decoration](decoration.html) allows developers to customize Ruby classes.
|
68
|
-
|
69
|
-
#### Summary
|
70
|
-
|
71
|
-
- Allows applications and plugins to customize Ruby classes defined by the core platform and plugins
|
72
|
-
- Within these customizations, developers may add new instance and class methods, modify existing instance and class methods (with access to the pre-customized implementation via `super`), and execute class macros or other code as if inside the original class definition
|
73
|
-
- Decoration allows for extensive customization of Ruby code, going far beyond the extension points designed into the platform
|
74
|
-
- Because test cases are Ruby classes, decoration also allows for customization of the test suite
|
75
|
-
|
76
|
-
#### Limitations
|
77
|
-
|
78
|
-
- Decoration allows for the customization of Ruby classes only—modules are not supported at this time
|
79
|
-
- Decoration cannot be used to customize code written using other language or file types (such as JavaScript and other UI code)
|
80
|
-
|
81
|
-
#### Test Considerations
|
82
|
-
|
83
|
-
- Decoration is likely to break existing tests or create the need for additional tests
|
84
|
-
- When using decoration to customize functionality, write new tests or decorate existing tests as necessary
|
85
|
-
|
86
|
-
#### Upgrade Considerations
|
87
|
-
|
88
|
-
- When Workarea changes Ruby code between versions, those changes are generally applied seamlessly to your application or plugin when you upgrade your Workarea version
|
89
|
-
- However, if Workarea has changed methods you have replaced with your own implementations, you will need to apply those changes manually if necessary
|
90
|
-
- When decorating classes, change only the aspects of the class necessary for your requirements, and use `super` to maintain original method implementations where possible
|
91
|
-
|
92
|
-
### Appending
|
93
|
-
|
94
|
-
[Appending](appending.html) allows developers to inject their own views and assets into existing user interfaces.
|
95
|
-
|
96
|
-
#### Summary
|
97
|
-
|
98
|
-
- Allows plugins and applications to render their own (new) partials within existing platform views at designated positions
|
99
|
-
- Allows plugins and applications to include their own (new) assets within existing platform asset manifests
|
100
|
-
- Plugins and apps create their own partials and assets, and assign these to platform append points within an initializer or other configuration file
|
101
|
-
|
102
|
-
#### Limitations
|
103
|
-
|
104
|
-
- This technique is limited in scope/reach as it allows only for the injection of new UI code
|
105
|
-
- Appending generally provides little control over position and display
|
106
|
-
- New code may be injected into only the designated append points provided by the platform
|
107
|
-
- There are no formal APIs to remove files from append points or re-order files within append points
|
108
|
-
- Without also leveraging overriding, you cannot change the position of an append point within a view
|
109
|
-
|
110
|
-
#### Test Considerations
|
111
|
-
|
112
|
-
- Appending is likely to break existing tests or create the need for additional tests
|
113
|
-
- When appending files, write new tests or decorate existing tests as necessary
|
114
|
-
|
115
|
-
#### Upgrade Considerations
|
116
|
-
|
117
|
-
- Appending is a simple way of introducing new code into the platform and therefore has few upgrade concerns
|
118
|
-
- Unlike other extension techniques, appending is not used to customize existing code; it therefore avoids many of the concerns affecting other extension techniques
|
119
|
-
|
120
|
-
### Overriding
|
121
|
-
|
122
|
-
[Overriding](overriding.html) allows developers to replace user interface files such as views and assets with their own customized copies of the files.
|
123
|
-
|
124
|
-
#### Summary
|
125
|
-
|
126
|
-
- Allows applications (and in rare cases, plugins) to completely replace existing platform views and assets
|
127
|
-
- Applications copy the views and assets into their own source and customize the files as needed
|
128
|
-
- Overriding allows developers to completely replace all HTML and assets served by the application, allowing UI customization that goes far beyond any specifically designed extension points
|
129
|
-
|
130
|
-
#### Limitations
|
131
|
-
|
132
|
-
- Overriding affects only views, layouts, partials, and files served by the asset pipeline (UI customization)
|
133
|
-
- Except in rare cases, plugins should not use overrides (see [Overriding](overriding.html) for more on this)
|
134
|
-
|
135
|
-
#### Test Considerations
|
136
|
-
|
137
|
-
- Overriding is likely to break existing tests or create the need for additional tests
|
138
|
-
- When overriding, write new tests or decorate existing tests as necessary
|
139
|
-
|
140
|
-
#### Upgrade Considerations
|
141
|
-
|
142
|
-
- Overriding completely replaces platform files with your own copies
|
143
|
-
- When Workarea changes views and assets between versions, these changes will not appear in your application if you are overriding the affected files
|
144
|
-
- You must apply these changes manually to your own copies of the files
|
145
|
-
- While overriding is necessary for UI customization, try to override only the files necessary for your requirements
|
146
|
-
- Where possible, use appending instead of overriding to reduce upgrade cost
|
147
|
-
|
148
|
-
## Notes
|
149
|
-
|
150
|
-
[1] Much of the domain-specific documentation is still forthcoming. I will continue to cross reference these extension points as coverage is added.
|
151
|
-
|
152
|
-
|
@@ -1,112 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Favicon Support
|
3
|
-
excerpt: Learn how Workarea manages favicons and how they are output in your application
|
4
|
-
---
|
5
|
-
|
6
|
-
# Favicon Support
|
7
|
-
|
8
|
-
Favicons are a collection of images used by browsers and mobile devices to visually represent a site within their user interfaces. Due to the variation between browsers and mobile devices, favicons are typically supplied in a variety of sizes and via a number of delivery methods.
|
9
|
-
|
10
|
-
Suffice it to say that long passed are the days of simply dropping a `favicon.ico` file in your site's root directory.
|
11
|
-
|
12
|
-
The good news is that Workarea provides a way to set and automate the creation and linking of these assets without developer intervention through the Admin.
|
13
|
-
|
14
|
-
## Setting an asset as a favicon
|
15
|
-
|
16
|
-
Within the Admin, a user may use an Asset's <em>tags</em> field to denote that the Asset should be used as a favicon.
|
17
|
-
|
18
|
-
<!-- TODO v3.4 mention the visual indicator -->
|
19
|
-
|
20
|
-
For a single Asset to be used as the site's favicon the Admin user may simply add the `favicon` tag to the chosen Asset. Once this is done, the platform will create, output, and link all necessary files automatically.
|
21
|
-
|
22
|
-
For more granular control over each generated favicon, an Admin user may apply tags to the chosen Asset in the following format: `favicon-SIZE`. For example, if the chosen Asset does not scale well and is visually unintelligible when scaled down to 16 pixels (the smallest required favicon size), the user may choose another, smaller Asset to replace this size by applying the `favicon-16x16` tag to the Asset.
|
23
|
-
|
24
|
-
The majority of the generated favicons will be of type `.png`, though a fallback `favicon.ico` file is still generated for canonical posterity and for use with older browsers. To manually override this icon, a user may simply denote an Asset as the `.ico` fallback by applying the `favicon-ico` tag to the Asset. Since tagging supports multiple, comma-delimited values, an Asset can carry more than one favicon tag at a time.
|
25
|
-
|
26
|
-
<!-- TODO v3.4 mention the favicon placeholder fallback -->
|
27
|
-
|
28
|
-
It should be noted that favicons are intended to be square images.
|
29
|
-
|
30
|
-
## Favicon asset and manifest automation
|
31
|
-
|
32
|
-
The markup necessary for rendering the generated favicons is added to each Storefront layout via methods found within `Workarea::Storefront::FaviconsHelper`. This helper renders the `workarea/storefront/favicons/tags` partial, where the following is generated:
|
33
|
-
|
34
|
-
<!-- TODO v3.4 remove web manifest? -->
|
35
|
-
|
36
|
-
* A link to a 180x180 pixel Apple Touch icon
|
37
|
-
* A link to a 32x32 pixel .png icon
|
38
|
-
* A link to a 16x16 pixel .ico icon
|
39
|
-
* A link to a web manifest file
|
40
|
-
* A meta tag providing the URL to a browserconfig file
|
41
|
-
* A meta tag to specify the tile color for use in the Microsoft Windows Metro UI
|
42
|
-
* A meta tag to specify the color of the browser's "theme", a feature available on some devices
|
43
|
-
|
44
|
-
The color-specific settings are output as the aforementioned meta tags in addition to appearing as entries within the web manifest and browserconfig files. These settings are configurable via:
|
45
|
-
|
46
|
-
```ruby
|
47
|
-
Workarea.config.web_manifest.tile_color
|
48
|
-
Workarea.config.web_manifest.theme_color
|
49
|
-
```
|
50
|
-
|
51
|
-
URLs for each linked icon are provided by the following `FaviconsHelper` methods:
|
52
|
-
|
53
|
-
* `Workarea::Storefront::FaviconsHelper#favicons_path` generates a URL to a dynamically sized `.png` file
|
54
|
-
* `Workarea::Storefront::FaviconsHelper#favicon_path` generates a URL to the `favicon.ico` file
|
55
|
-
|
56
|
-
Each favicon is dynamically generated on demand using Dragonfly. The following custom dragonfly processors defined within `core/config/initializers/07_dragonfly.rb`:
|
57
|
-
|
58
|
-
* `:favicon` handles the resizing of a file to the passed size.
|
59
|
-
* `:favicon_ico` handles the conversion to the `.ico` format.
|
60
|
-
|
61
|
-
<!-- TODO v3.4 remove below -->
|
62
|
-
Lastly, if there is no Asset tagged as a favicon, the system will not generate any of the above.
|
63
|
-
|
64
|
-
## Favicon URLs
|
65
|
-
|
66
|
-
Storefront routes are provided to handle requests for an icon of a particular size and the `favicon.ico` file itself. These routes are:
|
67
|
-
|
68
|
-
* `dynamic_favicon` which takes no parameters, returning the `favicon.ico` and serving the file from `https://domain.com/favicon.ico`
|
69
|
-
* `dynamic_favicons` which takes a size parameter, returns a `.png` version and serving the file from, for example, `https://domain.com/favicons/32x32.png` if the requested size parameter is set to `32x32`.
|
70
|
-
|
71
|
-
Both of these routes are Dragonfly endpoints which handle the favicon rendering within `Workarea::AssetEndpoints::Favicons`. This class has two methods to match the provided routes:
|
72
|
-
|
73
|
-
* `result` handles the dynamic_favicons request, restricting sizes to those defined within `Workarea.config.favicon_allowed_sizes`, preventing DDOS attacks that may try to request many varying sizes at once.
|
74
|
-
* `ico` handles the generation of the `favicon.ico` file by finding the appropriate Asset and running it through the `:favicon_ico` Dragonfly processor.
|
75
|
-
|
76
|
-
## The Web Manifest
|
77
|
-
|
78
|
-
<!-- TODO v3.4 explain repurposing for PWA apps -->
|
79
|
-
|
80
|
-
The rendered favicon tags in the layout link each page to a web manifest.
|
81
|
-
|
82
|
-
A web manifest is a file that can inform devices how to style particular elements of the client UI when accessing the site. In addition to favicon settings, it provides further configuration for theme coloring and other basic meta information for the site. Further information can be found on the following sites:
|
83
|
-
|
84
|
-
* [https://developer.mozilla.org/en-US/docs/Web/Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest)
|
85
|
-
* [https://developers.google.com/web/fundamentals/web-app-manifest/](https://developers.google.com/web/fundamentals/web-app-manifest/)
|
86
|
-
|
87
|
-
The Workarea platform automatically generates this file from `Storefront::PagesController#web_manifest` via a route which serves the file from `https://domain.com/site.webmanifest`. The file itself is in JSON format and lives at `storefront/pages/web_manifest.json.jbuilder` in the views directory and will be cached by Rack cache.
|
88
|
-
|
89
|
-
This template contains a mix of favicon images and configuration values to provide a basic web manifest which can be expanded upon to suit your client's needs. Out of the box it provides:
|
90
|
-
|
91
|
-
* **name** using `Workarea.config.site_name`
|
92
|
-
* **short_name** also using `Workarea.config.site_name`
|
93
|
-
* **icons** containing
|
94
|
-
* a 192x192 `.png` icon
|
95
|
-
* a 512x512 `.png` icon
|
96
|
-
* **theme_color** using `Workarea.config.web_manifest.theme_color`
|
97
|
-
* **background_color** using `Workarea.config.web_manifest.background_color`
|
98
|
-
* **start_url** using `'/?utm_source=homescreen'`
|
99
|
-
* **display** using `Workarea.config.web_manifest.display_mode`
|
100
|
-
|
101
|
-
## Browserconfig
|
102
|
-
|
103
|
-
The rendered favicon tags in the layout also link each page to a browserconfig file.
|
104
|
-
|
105
|
-
A browserconfig file informs Microsoft Windows devices on how they should present and style their UI elements when accessing the site. This file is similar to the web manifest in many regards. The main difference is that this file is in XML format.
|
106
|
-
|
107
|
-
Like the web manifest, the Workarea platform automatically generates this file from `Storefront::PagesController#browser_config` via a route which serves the file from `https://domain.com/browserconfig.xml`. The file itself is in XML format and lives at `storefront/pages/browser_config.xml.builder` in the views directory and will be cached by Rack cache.
|
108
|
-
|
109
|
-
Also like the web manifest, this template contains a mix of favicon iamges and configuration values which can further be expanded upon to suit your client's needs. By default it offers:
|
110
|
-
|
111
|
-
* **square150x150logo** which is dynamically generated
|
112
|
-
* **TileColor** defined by `Workarea.config.web_manifest.tile_color`, for use in the Windows Metro UI
|
@@ -1,25 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Feature Test Helper Stylesheet
|
3
|
-
excerpt: 'In a test environment, the application stylesheet manifest includes the following style rules:'
|
4
|
-
---
|
5
|
-
|
6
|
-
# Feature Test Helper Stylesheet
|
7
|
-
|
8
|
-
In a test environment, the application stylesheet manifest includes the following style rules:
|
9
|
-
|
10
|
-
```
|
11
|
-
/**
|
12
|
-
* "Disable" transitions and animations in the test environment
|
13
|
-
*/
|
14
|
-
|
15
|
-
* {
|
16
|
-
transition: none !important;
|
17
|
-
animation: none !important;
|
18
|
-
}
|
19
|
-
```
|
20
|
-
|
21
|
-
These rules effectively disable CSS transitions and animations in the test environment.
|
22
|
-
|
23
|
-
Workarea applies these styles to allow for more reliable full stack automated tests. If you are not running any of Workarea's tests, you may remove this code if you prefer.
|
24
|
-
|
25
|
-
|
@@ -1,20 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Feature.js & Feature Test Helper
|
3
|
-
excerpt: Feature.js provides browser feature detection for developers. It is loaded in its entirety in the Storefront's head manifest. Out of the box it provides JavaScript methods and root HTML element classes that represent which features are available to th
|
4
|
-
---
|
5
|
-
|
6
|
-
# Feature.js & Feature Test Helper
|
7
|
-
|
8
|
-
## Feature.js
|
9
|
-
|
10
|
-
[Feature.js](http://featurejs.com) provides browser feature detection for developers. It is loaded in its entirety in the Storefront's head manifest. Out of the box it provides JavaScript methods and root HTML element classes that represent which features are available to the developer to program against.
|
11
|
-
|
12
|
-
## Feature Test Helper
|
13
|
-
|
14
|
-
After Feature.js does all that hard work to set up the features above, Workarea's feature test helper file works equally hard (at least I like to think so) to undo a portion of it. However, it only does this if the Rails environment is `test`.
|
15
|
-
|
16
|
-
Some styles, particularly CSS animations and transitions, interfere with full stack testing and make it difficult to write reliable tests. Workarea therefore applies additional styles in the test environment to effectively disable all animations and transitions.
|
17
|
-
|
18
|
-
However, Feature.js is not aware of this and still reports those features as supported. The feature test helper updates the class values on the html element to report animations and transitions as not supported overwrites the corresponding properties on the `Feature.js` object to do the same.
|
19
|
-
|
20
|
-
|
@@ -1,34 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Help & Support
|
3
|
-
excerpt: In addition to these guides, Workarea provides the following resources for help and support.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Help & Support
|
7
|
-
|
8
|
-
In addition to these guides, Workarea provides the following resources for help and support.
|
9
|
-
|
10
|
-
## Slack
|
11
|
-
|
12
|
-
Workarea has a public Slack, where we hang out, mostly during EST business hours. [Signup and chat with us!](https://workarea-community.slack.com)
|
13
|
-
|
14
|
-
Use Slack to:
|
15
|
-
|
16
|
-
- Read and post announcements about new Workarea releases, plugins, and documentation (from the core team and the community)
|
17
|
-
- Report bugs or inquire if certain behavior is a bug
|
18
|
-
- Ask the community about or share known solutions to problems to reduce implementation time
|
19
|
-
- Ask the community how to use a feature or how it's expected to work
|
20
|
-
- Ask the community about what to learn or how to learn, or suggest resource to others to learn more about Workarea and its dependencies
|
21
|
-
|
22
|
-
## Workarea Support
|
23
|
-
|
24
|
-
The Workarea Support team provides support and training services to merchants and partners. Visit [https://support.workarea.com] (https://support.workarea.com) to open an issue or contact us for support.
|
25
|
-
|
26
|
-
### Submit an Incident Report
|
27
|
-
Go to [https://support.workarea.com] (https://support.workarea.com) and submit an [Incident Report] (https://jira.tools.weblinc.com/servicedesk/customer/portal/16/create/248) detailing the observed issue. Provide as much detail as possible (screen shots, error codes, steps to reproduce, etc.) to reduce the need to further diagnose and resolve more quickly.
|
28
|
-
|
29
|
-
Please include your Solution Partner primary contact on all incidents and requests, so communication can be facilitated as needed.
|
30
|
-
|
31
|
-
Alternatively, email [support@workarea.com] (mailto:support@workarea.com) and include your priority in the subject of the email.
|
32
|
-
|
33
|
-
### After Hours Escalation
|
34
|
-
To escalate the issue after Hours of Support, call __[+1 (215) 398-7814] (tel:+1-215-398-7814)__ and leave a message for on-call support and request a call back.
|
@@ -1,46 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: HTML Fragment Caching
|
3
|
-
excerpt: After HTTP caching The next level of caching happens in the Rails views. The Workarea system does this fragment caching in the conventional Rails way, so if you've worked with caching on Rails systems before this will be familar to you.
|
4
|
-
---
|
5
|
-
|
6
|
-
# HTML Fragment Caching
|
7
|
-
|
8
|
-
After [HTTP caching](http-caching.html) The next level of caching happens in the Rails views. The Workarea system does this fragment caching in the conventional Rails way, so if you've worked with caching on Rails systems before this will be familiar to you.
|
9
|
-
|
10
|
-
storefront/app/views/workarea/storefront/categories/show.html.haml:
|
11
|
-
|
12
|
-
```
|
13
|
-
- cache "#{@category.cache_key}/head", expires_in: Workarea.config.cache_expirations.categories_fragment_cache do
|
14
|
-
= append_partial('admin.category_head', category: @category)
|
15
|
-
|
16
|
-
- if @category.first_page?
|
17
|
-
%link{ href: category_url(@category), rel: 'canonical' }
|
18
|
-
- unless @category.last_page?
|
19
|
-
%link{ href: url_for(page: @category.next_page, only_path: false), rel: 'next' }
|
20
|
-
- unless @category.first_page?
|
21
|
-
%link{ href: url_for(page: @category.prev_page, only_path: false), rel: 'prev' }
|
22
|
-
- unless @category.meta_keywords.blank?
|
23
|
-
%meta{ name: :keywords, content: @category.meta_keywords }
|
24
|
-
- unless @category.meta_description.blank?
|
25
|
-
%meta{ name: :description, content: @category.meta_description }
|
26
|
-
|
27
|
-
%meta{ property: 'og:url', content: url_for(only_path: false) }
|
28
|
-
%meta{ property: 'og:title', content: page_title }
|
29
|
-
%meta{ property: 'og:type', content: 'website' }
|
30
|
-
%meta{ property: 'og:image', content: image_path('workarea/storefront/logo.png') }
|
31
|
-
%meta{ property: 'og:image:secure_url', content: image_path('workarea/storefront/logo.png') }
|
32
|
-
```
|
33
|
-
|
34
|
-
In the Rails views, a chunk of HTML is wrapped in a `cache` block. When that `cache` block is hit, Rails fetches the key from the cache store and returns the value. If the key doesn't exist or is expired, the code in the `cache` block will be run, and the result is saved in the cache store. Examples of fragment caches include:
|
35
|
-
|
36
|
-
- Primary navigation menus
|
37
|
-
- Secondary navigation menus
|
38
|
-
- Product summaries (shown on browse pages and recommendations)
|
39
|
-
- Browse results
|
40
|
-
|
41
|
-
When defining any fragment caches, keep in mind cache expiration. The simplest way to handle this is to use the updated\_at timestamp of the correlating model to ensure this cache will be expired when the model is updated.
|
42
|
-
|
43
|
-
## Resources on Fragment Caching
|
44
|
-
|
45
|
-
- [Rails Guide: Fragment Caching](http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching)
|
46
|
-
- [Heroku: Fragment Caching](https://devcenter.heroku.com/articles/caching-strategies#fragment-caching)
|
@@ -1,43 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: HTTP Caching
|
3
|
-
excerpt: All major content, browse, and search pages are cached for a short and configurable duration by an HTTP cache. This allows the system to serve a large number of requests in a short period of time.
|
4
|
-
---
|
5
|
-
|
6
|
-
# HTTP Caching
|
7
|
-
|
8
|
-
All major content, browse, and search pages are cached for a short and configurable duration by an HTTP cache. This allows the system to serve a large number of requests in a short period of time.
|
9
|
-
|
10
|
-
storefront/app/controllers/workarea/storefront/pages\_controller.rb:
|
11
|
-
|
12
|
-
```
|
13
|
-
module Workarea
|
14
|
-
class Storefront::PagesController < Storefront::ApplicationController
|
15
|
-
before_filter :cache_page
|
16
|
-
# ...
|
17
|
-
end
|
18
|
-
end
|
19
|
-
```
|
20
|
-
|
21
|
-
Controller/actions which enable this include:
|
22
|
-
|
23
|
-
- `Workarea::Storefront::CategoriesController#show`
|
24
|
-
- `Workarea::Storefront::PagesController#show`
|
25
|
-
- `Workarea::Storefront::PagesController#home_page`
|
26
|
-
- `Workarea::Storefront::ProductsController#show`
|
27
|
-
- `Workarea::Storefront::SearchesController#show`
|
28
|
-
|
29
|
-
This creates a major complication for any data on the page with user or session specific. Examples include login status, cart count, and personalized product recommendations. Workarea solves this problem by loading this content asynchronously via Javascript. Make sure you review any customized functionality to ensure you won't be caching pages with session-specific data.
|
30
|
-
|
31
|
-
**Note:** [Rack::Cache](http://rtomayko.github.io/rack-cache/) is a simple way to achieve the caching advantage explained above without the configuration and hosting burden of a more robust HTTP cache like [Varnish](https://www.varnish-cache.org).
|
32
|
-
|
33
|
-
## Customizing the Rack::Cache Key
|
34
|
-
|
35
|
-
There are scenarios where it becomes necessary to vary `Rack::Cache` entries, like geolocated content blocks or segmentation-based navigation. In these cases, Workarea provides a relatively straight-forward way to add to the cache key. Refer to [the documentation in the code for Workarea::Cache::Varies](https://github.com/workarea-commerce/workarea/blob/master/core/lib/workarea/cache.rb) for more information.
|
36
|
-
|
37
|
-
**Note:** Using `Workarea::Cache::Varies` can have a _very_ adverse affect on application performance, and is not encouraged. Make sure this is what you need, and feel free to reach out on [Slack](https://workarea-community.slack.com) to see if there may be a better way to achieve your goals.
|
38
|
-
|
39
|
-
## Resources on HTTP Caching
|
40
|
-
|
41
|
-
- [W3 Spec](http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html)
|
42
|
-
- [Web Fundamentals: HTTP caching](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en)
|
43
|
-
- [HTTP Caching in Ruby with Rails](https://devcenter.heroku.com/articles/http-caching-ruby-rails)
|
@@ -1,35 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: I18n
|
3
|
-
excerpt: Internationalization/localization features in Workarea allow for translation/customization of static content (including message content and JavaScript content) and translation of administrable content.
|
4
|
-
---
|
5
|
-
|
6
|
-
# I18n
|
7
|
-
|
8
|
-
Internationalization/localization features in Workarea allow for [translation/customization of static content](translate-or-customize-static-content.html) (including [message content](translate-or-customize-message-content.html) and [JavaScript content](translate-javascript-content.html)) and [translation of administrable content](translate-administrable-content.html).
|
9
|
-
|
10
|
-
**Note:** Internationalization/localization in Workarea relies heavily on [Rails I18n](http://guides.rubyonrails.org/i18n.html) and [Mongoid Localization](https://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/#localized-fields). The preceding links provide excellent explanations of those features, so they are recommended reading.
|
11
|
-
|
12
|
-
## Customizing Text
|
13
|
-
|
14
|
-
Rails I18n features are useful even if your app has only a single locale. Use I18n to customize static text strings, such as [the content of success, failure, and warning messages](translate-or-customize-message-content.html).
|
15
|
-
|
16
|
-
## Translating Text
|
17
|
-
|
18
|
-
Of course, your app may also use multiple locales to provide [static content translations](translate-or-customize-static-content.html) and [translation of administrable content](translate-administrable-content.html).
|
19
|
-
|
20
|
-
To use multiple locales, start by [configuring locales](configure-locales.html).
|
21
|
-
|
22
|
-
## Determining the Current Locale
|
23
|
-
|
24
|
-
Workarea determines the current locale by looking for a locale prefix in the request URL.
|
25
|
-
|
26
|
-
Given an app with en (default), es, and de locales, the following table demonstrates how each URL maps to a locale.
|
27
|
-
|
28
|
-
| URL | Locale |
|
29
|
-
| --- | --- |
|
30
|
-
| http://example.com/categories/sale | en (default) |
|
31
|
-
| http://example.com/en/categories/sale | en |
|
32
|
-
| http://example.com/es/categories/sale | es |
|
33
|
-
| http://example.com/de/categories/sale | de |
|
34
|
-
|
35
|
-
|