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,10 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Images Flow
|
3
|
-
excerpt: A diagram to illustrate how images (product images, content assets) flow into the system and how they are modified and presented to end users.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Images Flow
|
7
|
-
|
8
|
-
The following diagram illustrates how images (product images, content assets) flow into the system and how they are modified and presented to end users.
|
9
|
-
|
10
|
-
![Images Diagram](images/images.svg "View Larger")
|
@@ -1,104 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Index Storefront Search Documents
|
3
|
-
excerpt: This document provides procedures developers can use to manually index Storefront search documents.
|
4
|
-
---
|
5
|
-
|
6
|
-
Index Storefront Search Documents
|
7
|
-
================================================================================
|
8
|
-
|
9
|
-
This document provides procedures developers can use to manually index Storefront search documents.
|
10
|
-
|
11
|
-
These procedures are for _manually_ indexing search documents. However, most search indexing is _automatic_, as explained in [Search, Indexing](searching.html#indexing_7).
|
12
|
-
See also [Storefront Search Features, Indexing](storefront-search-features.html#indexing_12) for an overview of Storefront search document creation and indexing.
|
13
|
-
|
14
|
-
|
15
|
-
Index All Storefront Search Documents
|
16
|
-
--------------------------------------------------------------------------------
|
17
|
-
|
18
|
-
Workarea's `search.rake` Rakefile provides a task for (re)indexing all Storefront search documents.
|
19
|
-
|
20
|
-
Index all Storefront search documents from a shell session within the environment:
|
21
|
-
|
22
|
-
```bash
|
23
|
-
$ bin/rails workarea:search_index:storefront
|
24
|
-
```
|
25
|
-
|
26
|
-
Index all Storefront search documents within Ruby:
|
27
|
-
|
28
|
-
```ruby
|
29
|
-
Rake::Task['workarea:search_index:storefront'].invoke
|
30
|
-
```
|
31
|
-
|
32
|
-
The procedures above index documents _inline_ (i.e. in the foreground).
|
33
|
-
Alternatively, set the environment variable `INLINE` to `false` before executing the task to perform the indexing with Sidekiq workers (i.e. in the background):
|
34
|
-
|
35
|
-
```bash
|
36
|
-
$ INLINE=false bin/rails workarea:search_index:all
|
37
|
-
```
|
38
|
-
|
39
|
-
|
40
|
-
Index Specific Storefront Search Documents
|
41
|
-
--------------------------------------------------------------------------------
|
42
|
-
|
43
|
-
In some cases, you may need to index only specific Storefront search documents.
|
44
|
-
The procedure for this varies for product and non-product search documents.
|
45
|
-
|
46
|
-
|
47
|
-
### Non-Product Documents
|
48
|
-
|
49
|
-
For non-product search documents (e.g. categories, pages, searches), initialize a Storefront search model and call `#save` to index the resulting search document.
|
50
|
-
|
51
|
-
```ruby
|
52
|
-
catalog_category = Workarea::Catalog::Category.first
|
53
|
-
Search::Storefront::Category.new(catalog_category).save
|
54
|
-
```
|
55
|
-
|
56
|
-
See [Storefront Search Features, Search Models](storefront-search-features.html#search-models_13) for an explanation of Storefront search models.
|
57
|
-
|
58
|
-
|
59
|
-
### Product Documents
|
60
|
-
|
61
|
-
For product search documents, don't use a search model directly.
|
62
|
-
Use any of the following API calls, which create the search model instances for you.
|
63
|
-
(See [Workers](workers.html) for more details regarding the `perform` and `perform_async` methods.)
|
64
|
-
|
65
|
-
* `Workarea::IndexProduct.perform(product)`
|
66
|
-
* `Workarea::IndexProduct#perform(id)`
|
67
|
-
* `Workarea::IndexProduct#perform_async(id)`
|
68
|
-
* `Workarea::BulkIndexProducts.perform_by_models(products)`
|
69
|
-
* `Workarea::BulkIndexProducts.perform(ids)`
|
70
|
-
* `Workarea::BulkIndexProducts#perform(ids)`
|
71
|
-
* `Workarea::BulkIndexProducts#perform_async(ids)`
|
72
|
-
|
73
|
-
For example, index one product:
|
74
|
-
|
75
|
-
```ruby
|
76
|
-
catalog_product = Workarea::Catalog::Product.first
|
77
|
-
Workarea::IndexProduct.perform(catalog_product)
|
78
|
-
```
|
79
|
-
|
80
|
-
Or, enqueue a background job to index 5 products in bulk (using only a single request to Elasticsearch):
|
81
|
-
|
82
|
-
```ruby
|
83
|
-
catalog_product_ids = Workarea::Catalog::Product.all.pluck('id').first(5)
|
84
|
-
# => ["71C098FFD9", "9A7160EBF0", "2702316B04", "06C6FC0827", "0FA514641B"]
|
85
|
-
Workarea::BulkIndexProducts.new.perform_async(catalog_product_ids)
|
86
|
-
```
|
87
|
-
|
88
|
-
Each of the API calls above provides two additional functions, which is why these calls are used instead of creating search models directly.
|
89
|
-
|
90
|
-
First, calling any of the above methods sets `:last_indexed_at` on each of the affected models in MongoDB.
|
91
|
-
Among other things, this timestamp is used by workers responsible for keeping indexes fresh.
|
92
|
-
|
93
|
-
Second, for each product passed in, these methods create a collection of _product entries_ to represent the document within the Storefront search indexes.
|
94
|
-
The product entries collection (an instance of `Search::ProductEntries` is a collection of search models, each of which produce a search document to be indexed.
|
95
|
-
|
96
|
-
This allows more or fewer search documents to be indexed for each product.
|
97
|
-
For example, with [Workarea Browse Option](https://github.com/workarea-commerce/workarea-browse-option) installed, a single MongoDB document may be represented by multiple search documents in each search index (e.g. one for each color of the product).
|
98
|
-
In contrast, with [Workarea Package Products](https://github.com/workarea-commerce/workarea-package-products) installed, the child products of a package are not indexed at all (they produce an empty product entries collection).
|
99
|
-
|
100
|
-
The product entries abstraction also allows a different search model to be used conditionally.
|
101
|
-
For example, Workarea Browse Option extends product entries to use a different search model for those products that "browse by option".
|
102
|
-
This search model uses only variants of the given option (e.g. blue) to construct the search model.
|
103
|
-
Similarly, Workarea Package Products uses a different search model for "package" products.
|
104
|
-
This search model includes details from the package's "child" products, which themselves are not indexed.
|
@@ -1,46 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Infrastructure
|
3
|
-
excerpt: An overview of the required pieces of infrastructure for hosting Workarea.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Infrastructure
|
7
|
-
|
8
|
-
This will be a brief overview of what you'll need to host a Workarea app on your own. Workarea is a hefty application which can be complex to run efficiently, so we recommend our [Workarea Commerce Cloud hosting](https://www.workarea.com/pages/commerce-cloud) for merchants who want to focus on their unique business problems.
|
9
|
-
|
10
|
-
## Application
|
11
|
-
|
12
|
-
### Web
|
13
|
-
|
14
|
-
Workarea ships with a [default Puma configuration](https://github.com/workarea-commerce/workarea/blob/master/core/lib/workarea/configuration/puma.rb) out-of-the-box, which is the application server we recommend. Workarea is known to work with [Passenger](https://www.phusionpassenger.com), and will probably work with most any application server that supports Rails.
|
15
|
-
|
16
|
-
### Sidekiq
|
17
|
-
|
18
|
-
Workarea depends on [Sidekiq](https://sidekiq.org) for performing background work, so you'll need to have a Sidekiq daemon running along with the application server. Workarea will automatically configure Sidekiq based on its own configuration.
|
19
|
-
|
20
|
-
## Databases
|
21
|
-
|
22
|
-
### MongoDB
|
23
|
-
|
24
|
-
Workarea uses on [MongoDB](https://www.mongodb.com), so you'll need a production-grade replica set. Currently, the latest version of Workarea supports MongoDB v4.0.x.
|
25
|
-
|
26
|
-
### Elasticsearch
|
27
|
-
|
28
|
-
Workarea uses [Elasticsearch](https://www.elastic.co/products/elasticsearch) for large portions of functionality. You'll want a production-grade cluster running version v5.6.x.
|
29
|
-
|
30
|
-
### Redis
|
31
|
-
|
32
|
-
Workarea uses [Redis](https://redis.io) for the Sidekiq queue, cache, Rack::Attack, and more. Note that while only one instance of Redis is _required_, we recommend running two. The first would be for persistent data like the Sidekiq queue or recommendations. The second is for ephemeral data like cache.
|
33
|
-
|
34
|
-
## Miscellaneous
|
35
|
-
|
36
|
-
### Assets
|
37
|
-
|
38
|
-
Currently, Workarea depends on [Amazon's S3](https://aws.amazon.com/s3/) to back its asset storage. You'll need at least one bucket setup to run Workarea. An optional second (called the "integration" bucket in the code) can be configured for integrating with other systems, like flat-file exports, image imports, etc.
|
39
|
-
|
40
|
-
### Geolocation
|
41
|
-
|
42
|
-
Workarea provides a number of geography-based features. For these features to function, you have two options. The first (very slow) way is to configure the [Geocoder gem](https://github.com/alexreisner/geocoder) that Workarea uses to look up request location by IP address. The second, preferred way is to integrate an upstream proxy like [nginx](http://nginx.org) to lookup geography data based on IP address and add headers, which the Workarea application will read. See [the ngx_http_geoip_module](http://nginx.org/en/docs/http/ngx_http_geoip_module.html) for an example.
|
43
|
-
|
44
|
-
### Compliance
|
45
|
-
|
46
|
-
This is just dropping you a note that the Workarea application is written to be compliant with PCI-DSS requirements. Workarea Commerce Cloud hosting provides a complete top-to-bottom certified, tier 1, PCI-DSS environment. This is recommended for all merchants.
|
@@ -1,61 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Installing
|
3
|
-
created_at: 2019/05/29
|
4
|
-
excerpt: A guide on the Workarea install script.
|
5
|
-
---
|
6
|
-
|
7
|
-
# Installing
|
8
|
-
|
9
|
-
Workarea is a large Rails engine that requires a few things out of a Rails app it's installed into. This guide will walk you through the details of running `bin/rails generate workarea:install` so you know what changes are being made and why.
|
10
|
-
|
11
|
-
### `application.rb`
|
12
|
-
|
13
|
-
First, this will require the Workarea gems in your `config/application.rb` file. This is done to ensure Workarea can control the environment your application is run in for the purposes of testing and rake tasks.
|
14
|
-
|
15
|
-
### `routes.rb`
|
16
|
-
|
17
|
-
The install generator will mount the three main engines that workarea is built on within your `config/routes.rb` file.
|
18
|
-
|
19
|
-
```ruby
|
20
|
-
Rails.application.routes.draw do
|
21
|
-
mount Workarea::Core::Engine => '/'
|
22
|
-
mount Workarea::Admin::Engine => '/admin', as: 'admin'
|
23
|
-
mount Workarea::Storefront::Engine => '/', as: 'storefront'
|
24
|
-
end
|
25
|
-
```
|
26
|
-
|
27
|
-
### `workarea.rb`
|
28
|
-
|
29
|
-
An initializer will be created at `config/initializers/workarea.rb`. This serves that the main location for modifying configuration for Workarea. The generator will add some default information based on the name of your application such as `site_name`, `host`, `email_from`, and `email_to`. These serve as critical pieces of information for Workarea to know in order to start the application. Be sure to address the `TODO`s in the file and add the correct production information before deploying to a live environment.
|
30
|
-
|
31
|
-
### `development.rb`
|
32
|
-
|
33
|
-
Workarea relies on [Sidekiq](https://github.com/mperham/sidekiq) for running background jobs. For development, the install generator will add the following line of code to your `config/environments/development.rb` to alleviate the need for sidekiq to be running while in development.
|
34
|
-
|
35
|
-
```ruby
|
36
|
-
require 'sidekiq/testing/inline'
|
37
|
-
```
|
38
|
-
|
39
|
-
This tells sidekiq to run workers in process while working locally.
|
40
|
-
|
41
|
-
### `puma.rb`
|
42
|
-
|
43
|
-
Workarea provides puma configuration out of the box, and the install generator will replace the default rails-generated `config/puma.rb` with the following:
|
44
|
-
|
45
|
-
```ruby
|
46
|
-
require 'workarea/configuration/puma'
|
47
|
-
Workarea::Configuration::Puma.load(self)
|
48
|
-
```
|
49
|
-
This configuration class allows for customizing the puma configuration through environment variables, eliminating the need to add custom configuration files for each environment.
|
50
|
-
|
51
|
-
### `test_helper.rb`
|
52
|
-
|
53
|
-
Workarea provides robust [testing configuration](testing.html) for consistent and easy testing. The install generator will add `require workarea/test_help.rb` to your existing `test/test_helper.rb` file.
|
54
|
-
|
55
|
-
### `favicon.ico`
|
56
|
-
|
57
|
-
Workarea provides [favicon support](favicon-support.html) through content assets within the admin UI. As a result, the install generator removes the `public/favicon.ico` file generated with a new rails application so that it does not interfere with that functionality.
|
58
|
-
|
59
|
-
### `seeds.rb`
|
60
|
-
|
61
|
-
Workarea provides a large set of [seed data](seeds.html) to get your application started. The install generator adds the `db/seeds.rb` file so that you can run seeds like any other rails application.
|
@@ -1,124 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Integrate a Payment Gateway
|
3
|
-
excerpt: Workarea uses the ActiveMerchant gem for integration with payment gateways. This gem consolidates gateway functionalities under a common interface.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Integrate a Payment Gateway
|
7
|
-
|
8
|
-
Workarea uses the ActiveMerchant gem for integration with payment gateways. This gem consolidates gateway functionalities under a common interface.
|
9
|
-
|
10
|
-
**Note:** Different gateways offer different functionality under different names!
|
11
|
-
|
12
|
-
Because of the variance in payment gateways, you will probably need to tailor your installation to the gateway. Fortunately, Workarea consolidates gateway knowledge into the `Workarea::Payment::StoreCreditCard` class. This class is responsible for representing a credit card on the gateway. On that class is a single method the system uses to save it on the gateway (get a token to use to reference the card from now on).
|
13
|
-
|
14
|
-
**Note:** The Workarea platform out-of-the-box requires a gateway that supports tokenization! This is done for security. Please ensure your gateway supports this functionality.
|
15
|
-
|
16
|
-
Here is the out of the box implementation of saving the card on the gateway, presented for reference. The `#save!` method is called when the system needs to persist a credit card to be referenced later.
|
17
|
-
|
18
|
-
workarea-core/app/models/workarea/payment/store\_credit\_card.rb :
|
19
|
-
|
20
|
-
```
|
21
|
-
module Workarea
|
22
|
-
class Payment
|
23
|
-
class StoreCreditCard
|
24
|
-
include CreditCardOperation
|
25
|
-
|
26
|
-
def initialize(credit_card, options = {})
|
27
|
-
@credit_card = credit_card
|
28
|
-
@options = options
|
29
|
-
end
|
30
|
-
|
31
|
-
def perform!
|
32
|
-
return true if @credit_card.token.present?
|
33
|
-
|
34
|
-
response = handle_active_merchant_errors do
|
35
|
-
gateway.store(@credit_card.to_active_merchant)
|
36
|
-
end
|
37
|
-
|
38
|
-
@credit_card.token = response.params['billingid']
|
39
|
-
end
|
40
|
-
|
41
|
-
def save!
|
42
|
-
perform!
|
43
|
-
@credit_card.save
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
```
|
49
|
-
|
50
|
-
Error handling for all communication to the gateway is consolidated within a single module, and then included for all operations to ensure consistent handling of possible errors. You see this in action with the call to `#handle_active_merchant_errors` above. The full implmentation is below for reference.
|
51
|
-
|
52
|
-
workarea-core/app/models/workarea/payment/credit\_card\_operation.rb :
|
53
|
-
|
54
|
-
```
|
55
|
-
module Workarea
|
56
|
-
class Payment
|
57
|
-
module CreditCardOperation
|
58
|
-
def handle_active_merchant_errors
|
59
|
-
begin
|
60
|
-
yield
|
61
|
-
rescue ActiveMerchant::ResponseError => error
|
62
|
-
error.response
|
63
|
-
rescue ActiveMerchant::ActiveMerchantError,
|
64
|
-
ActiveMerchant::ConnectionError => error
|
65
|
-
ActiveMerchant::Billing::Response.new(false, nil)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def gateway
|
70
|
-
Workarea.config.gateways.credit_card
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
```
|
76
|
-
|
77
|
-
After customizing these classes, you may need to customize how this token is used with the gateway. There are a number of places for this:
|
78
|
-
|
79
|
-
- `Workarea::Payment::Authorize::CreditCard`
|
80
|
-
- `Workarea::Payment::Capture::CreditCard`
|
81
|
-
- `Workarea::Payment::Purchase::CreditCard`
|
82
|
-
- `Workarea::Payment::Refund::CreditCard`
|
83
|
-
|
84
|
-
Each of these responds to the `#complete!` method, which should implement performing the respective operation on the gateway. Out of the box implementation for purchase:
|
85
|
-
|
86
|
-
workarea-core/app/models/workarea/purchase/credit\_card.rb :
|
87
|
-
|
88
|
-
```
|
89
|
-
module Workarea
|
90
|
-
class Payment
|
91
|
-
module Purchase
|
92
|
-
class CreditCard
|
93
|
-
include OperationImplementation
|
94
|
-
include CreditCardOperation
|
95
|
-
|
96
|
-
def complete!
|
97
|
-
# Some gateways will tokenize in the same request as the auth/capture.
|
98
|
-
# If that is the case for the gateway you are implementing, omit the
|
99
|
-
# following line, and save the token on the tender after doing the
|
100
|
-
# gateway authorization.
|
101
|
-
return unless StoreCreditCard.new(tender, options).save!
|
102
|
-
|
103
|
-
transaction.response = handle_active_merchant_errors do
|
104
|
-
gateway.purchase(
|
105
|
-
transaction.amount.cents,
|
106
|
-
tender.to_active_merchant
|
107
|
-
)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def cancel!
|
112
|
-
return unless transaction.success?
|
113
|
-
|
114
|
-
transaction.cancellation = handle_active_merchant_errors do
|
115
|
-
gateway.void(transaction.response.params['authorization'])
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
```
|
123
|
-
|
124
|
-
|
@@ -1,35 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Integrate a Web Analytics Provider
|
3
|
-
excerpt: Workarea analytics adapters are responsible for registering callbacks for events and in turn sending the correctly formatted data and events to the third party.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Integrate a Web Analytics Provider
|
7
|
-
|
8
|
-
[Workarea analytics](analytics-overview.html) adapters are responsible for registering callbacks for events and in turn sending the correctly formatted data and events to the third party.
|
9
|
-
|
10
|
-
## Example Adapter
|
11
|
-
|
12
|
-
The easiest way to understand how an adapter is implemented is to look at an example. The Workarea platform includes an official Google Analytics plugin, which acts as a Workarea analytics adapter for Google Analytics. Unpack the gem to view its source.
|
13
|
-
|
14
|
-
```bash
|
15
|
-
gem unpack workarea-google_analytics
|
16
|
-
```
|
17
|
-
|
18
|
-
## Adapter Template
|
19
|
-
|
20
|
-
Below is a commented template for an analytics adapter.
|
21
|
-
|
22
|
-
```javascript
|
23
|
-
// pass a function that will be invoked by the analtyics framework
|
24
|
-
WORKAREA.analytics.registerAdapter('myNewAdapter', function () {
|
25
|
-
// private methods may be included here
|
26
|
-
// return a hash of callbacks for analytics events
|
27
|
-
return {
|
28
|
-
'pageView': function () { /* pageView calls do not have a payload */ },
|
29
|
-
'categoryView': function (payload) { /* send payload */ },
|
30
|
-
'searchResultsView': function (payload) { /* send payload */ }
|
31
|
-
// ...
|
32
|
-
};
|
33
|
-
});
|
34
|
-
```
|
35
|
-
|
@@ -1,88 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Integrate an Inventory Management System
|
3
|
-
excerpt: Procedures for integrating Workarea with an external inventory system of record
|
4
|
-
---
|
5
|
-
|
6
|
-
Integrate an Inventory Management System
|
7
|
-
======================================================================
|
8
|
-
|
9
|
-
Workarea provides an inventory system that satisfies the needs of many retailers.
|
10
|
-
However, some retailers prefer to manage their inventory in another system, usually an enterprise resource planner (ERP).
|
11
|
-
|
12
|
-
In this case, you will need to integrate Workarea with the external system to keep their inventory data in sync, which is the subject of this document.
|
13
|
-
To integrate inventory from an ERP, you must routinely update Workarea's inventory SKUs with data from the authoritative inventory system, specifically the fields `:available` and `:backordered`.
|
14
|
-
Furthermore, you may need to report to the external system any changes that Workarea makes to these fields, which are recorded in inventory transactions.
|
15
|
-
|
16
|
-
This document additionally provides general advice for integrating Workarea with another system (of any type).
|
17
|
-
|
18
|
-
|
19
|
-
Update Inventory SKUs within Workarea
|
20
|
-
----------------------------------------------------------------------
|
21
|
-
|
22
|
-
Within Workarea, each item's inventory is represented by an inventory SKU, which is identified by the item's SKU.
|
23
|
-
( See [Inventory: Inventory SKUs](inventory.html#inventory-skus_2). )
|
24
|
-
Several administrable fields, primarily the integer fields `:available` and `:backordered`, represent the "raw" inventory data tracked by Workarea.
|
25
|
-
( See [Inventory: Administrable Fields & Policies](inventory.html#administrable-fields-amp-policies_3). )
|
26
|
-
|
27
|
-
You must design a strategy for keeping these fields in sync with the corresponding data from the external inventory system.
|
28
|
-
__Maintaining accurate values for these fields is the core of this integration.__
|
29
|
-
Refer to "General Tips for System Integration" below for further advice on this matter.
|
30
|
-
|
31
|
-
|
32
|
-
Report Workarea's Inventory Transactions
|
33
|
-
----------------------------------------------------------------------
|
34
|
-
|
35
|
-
Workarea also makes its own changes to the inventory SKU values `:available` and `:backordered` when shoppers place and cancel orders.
|
36
|
-
( See [Inventory: Purchasing, Capturing & Releasing Inventory](inventory.html#purchasing-capturing-amp-releasing-inventory_14). )
|
37
|
-
You therefore may need to report these changes to the system you are integrating.
|
38
|
-
( This may not be necessary if the external system manages these changes, perhaps during fulfillment rather than at the point of sale. )
|
39
|
-
|
40
|
-
Whenever Workarea captures and frees inventory in this manner, it records details of the changes as an `Inventory::Transaction` specific to the order.
|
41
|
-
Each inventory transaction is related to an order via its `:order_id` field.
|
42
|
-
Whenever Workarea performs a capture, rollbak, or restock operation on inventory, its affects are recorded on the inventory transaction document, and its `:updated_at` timestamp is refreshed.
|
43
|
-
Additionally, you can query whether a transaction's inventory has been captured by examining its boolean `:captured` field.
|
44
|
-
|
45
|
-
Inventory transactions are indexed by `:updated_at` and `:captured`, facilitating queries for "captured transactions updated after _date_":
|
46
|
-
|
47
|
-
```ruby
|
48
|
-
# find inventory transactions updated after Midnight
|
49
|
-
|
50
|
-
Workarea::Inventory::Transaction.where(
|
51
|
-
:updated_at.gt => Time.current.beginning_of_day,
|
52
|
-
captured: true
|
53
|
-
)
|
54
|
-
```
|
55
|
-
|
56
|
-
You can use such a query to fetch the transactions that were updated since your last such query, enabling you to prepare ad-hoc reports to send to the partnering system.
|
57
|
-
Each inventory transaction embeds a collection of `Inventory::TransactionItem` documents, one document per corresponding `Order::Item`.
|
58
|
-
Each transaction item has the fields `:sku`, `:available`, and `:backordered`, where `:available` and `:backordered` indicate the number of units captured.
|
59
|
-
You or the ERP can fetch and share this data routinely to keep the external system in sync with Workarea's inventory changes.
|
60
|
-
|
61
|
-
|
62
|
-
General Tips for System Integration
|
63
|
-
----------------------------------------------------------------------
|
64
|
-
|
65
|
-
Until Workarea provides general-purpose documentation for system integration, a brief summary of the process is described here.
|
66
|
-
|
67
|
-
|
68
|
-
### Determine Responsibilities
|
69
|
-
|
70
|
-
An integration involves two systems and two teams, so you must determine who is responsible for what.
|
71
|
-
Work with the partnering team to determine the following:
|
72
|
-
|
73
|
-
* Who is pushing or pulling data?
|
74
|
-
* According to what schedule or in response to what events?
|
75
|
-
* Who is responsible for transforming the data to/from the opposing data format?
|
76
|
-
* When updating, are you updating all the records, or only those that have changed since the last update?
|
77
|
-
* And who is responsible for determining which records have changed since the last update?
|
78
|
-
|
79
|
-
|
80
|
-
### Build the Integration
|
81
|
-
|
82
|
-
Next, build the parts of the integration for which you are responsible.
|
83
|
-
Tools for this within the Workarea system include:
|
84
|
-
|
85
|
-
* [Admin API](https://plugins.workarea.com/plugins/api-admin)
|
86
|
-
* [Callbacks workers](workers.html#callbacks-worker_7)
|
87
|
-
* [Scheduled workers](workers.html#sidekiq-cron-job_5)
|
88
|
-
* [Data file scheduling](https://plugins.workarea.com/plugins/data-file-scheduling)
|
@@ -1,59 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Integrating with Other Software
|
3
|
-
excerpt: Overview of a developer's options for integrating Workarea with third-party software.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Integrating with Other Software
|
7
|
-
|
8
|
-
Integrating with other systems is one of the toughest parts of a large-scale ecommerce site build. Whether it's an ESP, a crusty old mainframe system, or a homegrown CRM, Workarea has many options to help. Picking between these depends on the needs, capabilities, and people of the system you're integrating with, so below you'll find the major options outlined.
|
9
|
-
|
10
|
-
## Plugins
|
11
|
-
|
12
|
-
The easiest option for integration is a plugin already built by the Workarea team or the community. A typical install means adding the gem to the project's `Gemfile` and configuring some credentials. You'll want to check the README on the plugin for details.
|
13
|
-
|
14
|
-
To see a list of available open-source integration plugins, check out the Workarea [Github repositories](https://github.com/workarea-commerce). For more info on how plugins work (including how to write your own), see the [plugins overview](plugins-overview.html).
|
15
|
-
|
16
|
-
## API
|
17
|
-
|
18
|
-
The admin API offers the minimum amount of work on the Workarea side for the integration. Through the API, you can get and/or update all the major resources in the Workarea system. This is a great option if you have the cooperation of developers on the other end - they can write calls to the API as needed.
|
19
|
-
|
20
|
-
See the [API overview](api-overview.html) for more info, or jump into the deep end with [the API documentation](https://demo.workarea.com/api/docs).
|
21
|
-
|
22
|
-
## Webhooks
|
23
|
-
|
24
|
-
Webhooks are an option where Workarea will call out to a provided URL with a payload when a particular event (e.g. an order gets placed or a customer account is created) occurs. The payload will contain data related to the event. This is nearer to real-time than the other out-of-the-box options. Like API integration, choosing webhooks is good when you have the cooperation of developers on the other end. Someone will have to setup the desired events/URLs in the admin.
|
25
|
-
|
26
|
-
See the [Webhooks plugin](https://github.com/workarea-commerce/workarea-webhooks) for more info.
|
27
|
-
|
28
|
-
## Scheduled Data Files
|
29
|
-
|
30
|
-
Scheduling data file transfers is a more old-fashioned, but still automated option for integration. Great for overnight batched integrations with older systems that will need to ingest CSV files and the like. An administrator can specify what they want to import or export, how often and when. It supports S3, SFTP, or local file system as data stores.
|
31
|
-
|
32
|
-
See the [Data File Scheduling plugin](https://github.com/workarea-commerce/workarea-data-file-scheduling) for more info.
|
33
|
-
|
34
|
-
## Admin Import/Export
|
35
|
-
|
36
|
-
All the major index pages in the admin (people, orders, products, etc) are available to import and export in multiple formats from the admin interface. The links appear in the workflow bar in the bottom left of those screens. The downside to this option is that everything must be completely manual.
|
37
|
-
|
38
|
-
![Import/Export Screenshot](images/import-export-screenshot.png)
|
39
|
-
|
40
|
-
## Custom Code
|
41
|
-
|
42
|
-
The most manual, developer-involved option for integration with third party software is to write the code manually. Obviously this the most expensive/time-consuming of the options. The advantage however, is the integration can be built completely bespoke to the merchant's needs.
|
43
|
-
|
44
|
-
|
45
|
-
### Scheduled Workers
|
46
|
-
|
47
|
-
Scheduled workers are good for working in batches, for example exporting orders every hour. Workarea includes a gem for scheduling Sidekiq jobs called [sidekiq-cron](https://github.com/ondrejbartas/sidekiq-cron). As a super admin, you'll be able to monitor the status of these jobs in the Sidekiq admin at `/admin/sidekiq/cron`.
|
48
|
-
|
49
|
-
See the [Sidekiq Cron Job section](workers.html#sidekiq-cron-job_5) of the [workers article](workers.html).
|
50
|
-
|
51
|
-
### Callbacks Workers
|
52
|
-
|
53
|
-
Another good asynchronous option is callbacks workers. Workarea adds an extension to Sidekiq worker functionality to allow automatically enqueueing Sidekiq workers based on customizable callbacks in models. This is good for doing individual calls to external systems as the events in Workarea happen. For example, when an email signup is created, run a Sidekiq worker to add that email to an ESP.
|
54
|
-
|
55
|
-
See the [Sidekiq Callbacks section](workers.html#sidekiq-callbacks_11) of the [workers article](workers.html).
|
56
|
-
|
57
|
-
### Inline
|
58
|
-
|
59
|
-
This is least preferred option of all for this task, due to its fragility. It puts the stability of Workarea at the mercy of the other system. The basic idea is adding in the calls to the external software inline with the Workarea code. Examples would be putting calls to fraud checks in checkout controllers, or "real-time" inventory calls from product detail pages. The pattern you'll use to do this is called "decoration", you can read more about it in [our decorators article](decoration.html).
|