solidus_frontend 1.2.3 → 1.3.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solidus_frontend might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/Rakefile +1 -1
- data/app/assets/javascripts/spree/frontend/checkout/address.js.coffee +0 -2
- data/app/assets/stylesheets/spree/frontend.css +1 -2
- data/app/assets/stylesheets/spree/frontend/_skeleton.scss +242 -0
- data/app/assets/stylesheets/spree/frontend/screen.css.scss +1 -0
- data/app/controllers/spree/checkout_controller.rb +93 -93
- data/app/controllers/spree/content_controller.rb +1 -1
- data/app/controllers/spree/orders_controller.rb +15 -16
- data/app/controllers/spree/products_controller.rb +19 -18
- data/app/controllers/spree/store_controller.rb +27 -27
- data/app/controllers/spree/taxons_controller.rb +1 -2
- data/app/models/spree/frontend_configuration.rb +1 -1
- data/app/views/spree/address/_form.html.erb +18 -12
- data/app/views/spree/orders/show.html.erb +2 -2
- data/app/views/spree/products/_cart_form.html.erb +5 -5
- data/app/views/spree/products/show.html.erb +1 -1
- data/app/views/spree/shared/_google_analytics.html.erb +1 -1
- data/app/views/spree/shared/_order_details.html.erb +12 -11
- data/app/views/spree/shared/_products.html.erb +2 -2
- data/config/initializers/assets.rb +8 -1
- data/config/initializers/canonical_rails.rb +1 -2
- data/config/routes.rb +17 -18
- data/lib/spree/frontend.rb +1 -0
- data/lib/spree/frontend/engine.rb +1 -9
- data/lib/spree/frontend/middleware/seo_assist.rb +3 -4
- data/lib/tasks/rake_util.rb +3 -6
- data/lib/tasks/taxon.rake +3 -3
- data/script/rails +0 -1
- data/solidus_frontend.gemspec +1 -0
- data/spec/controllers/controller_extension_spec.rb +15 -15
- data/spec/controllers/controller_helpers_spec.rb +1 -2
- data/spec/controllers/spree/checkout_controller_spec.rb +67 -115
- data/spec/controllers/spree/content_controller_spec.rb +1 -1
- data/spec/controllers/spree/current_order_tracking_spec.rb +7 -6
- data/spec/controllers/spree/home_controller_spec.rb +3 -3
- data/spec/controllers/spree/orders_controller_ability_spec.rb +17 -16
- data/spec/controllers/spree/orders_controller_spec.rb +9 -8
- data/spec/controllers/spree/orders_controller_transitions_spec.rb +5 -5
- data/spec/controllers/spree/products_controller_spec.rb +10 -11
- data/spec/controllers/spree/taxons_controller_spec.rb +5 -5
- data/spec/features/address_spec.rb +15 -15
- data/spec/features/automatic_promotion_adjustments_spec.rb +18 -18
- data/spec/features/caching/products_spec.rb +2 -2
- data/spec/features/caching/taxons_spec.rb +2 -2
- data/spec/features/cart_spec.rb +8 -6
- data/spec/features/checkout_spec.rb +49 -51
- data/spec/features/checkout_unshippable_spec.rb +4 -5
- data/spec/features/coupon_code_spec.rb +28 -30
- data/spec/features/currency_spec.rb +3 -3
- data/spec/features/free_shipping_promotions_spec.rb +17 -17
- data/spec/features/locale_spec.rb +33 -24
- data/spec/features/order_spec.rb +4 -4
- data/spec/features/products_spec.rb +12 -12
- data/spec/features/promotion_code_invalidation_spec.rb +1 -0
- data/spec/features/quantity_promotions_spec.rb +1 -1
- data/spec/features/taxons_spec.rb +16 -16
- data/spec/features/template_rendering_spec.rb +1 -2
- data/spec/helpers/base_helper_spec.rb +2 -2
- data/spec/spec_helper.rb +5 -5
- data/spec/support/shared_contexts/checkout_setup.rb +1 -0
- data/spec/support/shared_contexts/custom_products.rb +18 -17
- data/spec/support/shared_contexts/product_prototypes.rb +3 -5
- data/spec/views/spree/checkout/_summary_spec.rb +2 -2
- metadata +24 -9
@@ -1,7 +1,7 @@
|
|
1
1
|
module Spree
|
2
2
|
class OrdersController < Spree::StoreController
|
3
3
|
before_action :check_authorization
|
4
|
-
rescue_from ActiveRecord::RecordNotFound, :
|
4
|
+
rescue_from ActiveRecord::RecordNotFound, with: :render_404
|
5
5
|
helper 'spree/products', 'spree/orders'
|
6
6
|
|
7
7
|
respond_to :html
|
@@ -20,7 +20,7 @@ module Spree
|
|
20
20
|
if @order.contents.update_cart(order_params)
|
21
21
|
respond_with(@order) do |format|
|
22
22
|
format.html do
|
23
|
-
if params.
|
23
|
+
if params.key?(:checkout)
|
24
24
|
@order.next if @order.cart?
|
25
25
|
redirect_to checkout_state_path(@order.checkout_steps.first)
|
26
26
|
else
|
@@ -76,7 +76,7 @@ module Spree
|
|
76
76
|
|
77
77
|
def accurate_title
|
78
78
|
if @order && @order.completed?
|
79
|
-
Spree.t(:order_number, :
|
79
|
+
Spree.t(:order_number, number: @order.number)
|
80
80
|
else
|
81
81
|
Spree.t(:shopping_cart)
|
82
82
|
end
|
@@ -95,21 +95,20 @@ module Spree
|
|
95
95
|
|
96
96
|
private
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
end
|
98
|
+
def order_params
|
99
|
+
if params[:order]
|
100
|
+
params[:order].permit(*permitted_order_attributes)
|
101
|
+
else
|
102
|
+
{}
|
104
103
|
end
|
104
|
+
end
|
105
105
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
end
|
106
|
+
def assign_order
|
107
|
+
@order = current_order
|
108
|
+
unless @order
|
109
|
+
flash[:error] = Spree.t(:order_not_found)
|
110
|
+
redirect_to(root_path) && return
|
112
111
|
end
|
113
|
-
|
112
|
+
end
|
114
113
|
end
|
115
114
|
end
|
@@ -3,7 +3,7 @@ module Spree
|
|
3
3
|
before_action :load_product, only: :show
|
4
4
|
before_action :load_taxon, only: :index
|
5
5
|
|
6
|
-
rescue_from ActiveRecord::RecordNotFound, :
|
6
|
+
rescue_from ActiveRecord::RecordNotFound, with: :render_404
|
7
7
|
helper 'spree/taxons'
|
8
8
|
|
9
9
|
respond_to :html
|
@@ -15,31 +15,32 @@ module Spree
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def show
|
18
|
-
@variants = @product.variants_including_master.
|
18
|
+
@variants = @product.variants_including_master.with_prices(current_pricing_options).includes([:option_values, :images])
|
19
19
|
@product_properties = @product.product_properties.includes(:property)
|
20
20
|
@taxon = Spree::Taxon.find(params[:taxon_id]) if params[:taxon_id]
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
24
|
-
def accurate_title
|
25
|
-
if @product
|
26
|
-
@product.meta_title.blank? ? @product.name : @product.meta_title
|
27
|
-
else
|
28
|
-
super
|
29
|
-
end
|
30
|
-
end
|
31
24
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
38
|
-
@product = @products.friendly.find(params[:id])
|
25
|
+
def accurate_title
|
26
|
+
if @product
|
27
|
+
@product.meta_title.blank? ? @product.name : @product.meta_title
|
28
|
+
else
|
29
|
+
super
|
39
30
|
end
|
31
|
+
end
|
40
32
|
|
41
|
-
|
42
|
-
|
33
|
+
def load_product
|
34
|
+
if try_spree_current_user.try(:has_spree_role?, "admin")
|
35
|
+
@products = Product.with_deleted
|
36
|
+
else
|
37
|
+
@products = Product.available
|
43
38
|
end
|
39
|
+
@product = @products.friendly.find(params[:id])
|
40
|
+
end
|
41
|
+
|
42
|
+
def load_taxon
|
43
|
+
@taxon = Spree::Taxon.find(params[:taxon]) if params[:taxon].present?
|
44
|
+
end
|
44
45
|
end
|
45
46
|
end
|
@@ -1,48 +1,48 @@
|
|
1
1
|
module Spree
|
2
2
|
class StoreController < Spree::BaseController
|
3
|
+
include Spree::Core::ControllerHelpers::Pricing
|
3
4
|
include Spree::Core::ControllerHelpers::Order
|
4
5
|
|
5
6
|
skip_before_action :set_current_order, only: :cart_link
|
6
7
|
|
7
8
|
def unauthorized
|
8
|
-
render 'spree/shared/unauthorized', :
|
9
|
+
render 'spree/shared/unauthorized', layout: Spree::Config[:layout], status: 401
|
9
10
|
end
|
10
11
|
|
11
12
|
def cart_link
|
12
|
-
render :
|
13
|
+
render partial: 'spree/shared/link_to_cart'
|
13
14
|
fresh_when(simple_current_order)
|
14
15
|
end
|
15
16
|
|
16
17
|
private
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
19
|
+
# This method is placed here so that the CheckoutController
|
20
|
+
# and OrdersController can both reference it (or any other controller
|
21
|
+
# which needs it)
|
22
|
+
def apply_coupon_code
|
23
|
+
if params[:order] && params[:order][:coupon_code]
|
24
|
+
@order.coupon_code = params[:order][:coupon_code]
|
25
|
+
|
26
|
+
handler = PromotionHandler::Coupon.new(@order).apply
|
27
|
+
|
28
|
+
if handler.error.present?
|
29
|
+
flash.now[:error] = handler.error
|
30
|
+
respond_with(@order) { |format| format.html { render :edit } } && return
|
31
|
+
elsif handler.success
|
32
|
+
flash[:success] = handler.success
|
33
33
|
end
|
34
34
|
end
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
def config_locale
|
38
|
+
Spree::Frontend::Config[:locale]
|
39
|
+
end
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
def lock_order
|
42
|
+
OrderMutex.with_lock!(@order) { yield }
|
43
|
+
rescue Spree::OrderMutex::LockFailed
|
44
|
+
flash[:error] = Spree.t(:order_mutex_error)
|
45
|
+
redirect_to spree.cart_path
|
46
|
+
end
|
46
47
|
end
|
47
48
|
end
|
48
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Spree
|
2
2
|
class TaxonsController < Spree::StoreController
|
3
|
-
rescue_from ActiveRecord::RecordNotFound, :
|
3
|
+
rescue_from ActiveRecord::RecordNotFound, with: :render_404
|
4
4
|
helper 'spree/products'
|
5
5
|
|
6
6
|
respond_to :html
|
@@ -23,6 +23,5 @@ module Spree
|
|
23
23
|
super
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
26
|
end
|
28
27
|
end
|
@@ -39,19 +39,25 @@
|
|
39
39
|
<%= form.label :state, Spree.t(:state) %><span class='required' id=<%="#{address_id}state-required"%>>*</span><br/>
|
40
40
|
|
41
41
|
<span class="js-address-fields" style="display: none;">
|
42
|
-
<%=
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
42
|
+
<%=
|
43
|
+
form.collection_select(
|
44
|
+
:state_id, address.country.states, :id, :name,
|
45
|
+
{:include_blank => true},
|
46
|
+
{
|
47
|
+
class: have_states ? 'required' : '',
|
48
|
+
style: have_states ? '' : 'display: none;',
|
49
|
+
disabled: !have_states
|
50
|
+
})
|
51
|
+
%>
|
52
|
+
<%=
|
53
|
+
form.text_field(
|
54
|
+
:state_name,
|
55
|
+
class: !have_states ? 'required' : '',
|
56
|
+
style: have_states ? 'display: none;' : '',
|
57
|
+
disabled: have_states
|
58
|
+
)
|
59
|
+
%>
|
53
60
|
</span>
|
54
|
-
|
55
61
|
<noscript>
|
56
62
|
<%= form.text_field :state_name, :class => 'required' %>
|
57
63
|
</noscript>
|
@@ -13,8 +13,8 @@
|
|
13
13
|
<p data-hook="links">
|
14
14
|
<%= link_to Spree.t(:back_to_store), spree.root_path, :class => "button" %>
|
15
15
|
<% unless order_just_completed?(@order) %>
|
16
|
-
<% if try_spree_current_user && respond_to?(:
|
17
|
-
<%= link_to Spree.t(:my_account),
|
16
|
+
<% if try_spree_current_user && respond_to?(:account_path) %>
|
17
|
+
<%= link_to Spree.t(:my_account), spree.account_path, :class => "button" %>
|
18
18
|
<% end %>
|
19
19
|
<% end %>
|
20
20
|
</p>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<%= form_for :order, :url => populate_orders_path do |f| %>
|
2
2
|
<div id="inside-product-cart-form" data-hook="inside_product_cart_form" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
|
3
3
|
|
4
|
-
<% if @product.
|
4
|
+
<% if @product.variants_and_option_values_for(current_pricing_options).any? %>
|
5
5
|
<div id="product-variants" class="columns five alpha">
|
6
6
|
<h6 class="product-section-title"><%= Spree.t(:variants) %></h6>
|
7
7
|
<ul>
|
8
|
-
<% @product.
|
8
|
+
<% @product.variants_and_option_values_for(current_pricing_options).each_with_index do |variant, index| %>
|
9
9
|
<li>
|
10
|
-
<%= radio_button_tag "variant_id", variant.id, index == 0, 'data-price' => variant.
|
10
|
+
<%= radio_button_tag "variant_id", variant.id, index == 0, 'data-price' => variant.price_for(current_pricing_options) %>
|
11
11
|
<%= label_tag "variant_id_#{ variant.id }" do %>
|
12
12
|
<span class="variant-description">
|
13
13
|
<%= variant_options variant %>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
<%= hidden_field_tag "variant_id", @product.master.id %>
|
29
29
|
<% end %>
|
30
30
|
|
31
|
-
<% if @product.
|
31
|
+
<% if @product.price_for(current_pricing_options) and !@product.price.nil? %>
|
32
32
|
<div data-hook="product_price" class="columns five <% if !@product.has_variants? %> alpha <% else %> omega <% end %>">
|
33
33
|
|
34
34
|
<div id="product-price">
|
@@ -37,7 +37,7 @@
|
|
37
37
|
<span class="price selling" itemprop="price">
|
38
38
|
<%= display_price(@product) %>
|
39
39
|
</span>
|
40
|
-
<span itemprop="priceCurrency" content="<%=
|
40
|
+
<span itemprop="priceCurrency" content="<%= current_pricing_options.currency %>"></span>
|
41
41
|
</div>
|
42
42
|
|
43
43
|
<% if @product.master.can_supply? %>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
'revenue': '<%= @order.total %>', // Grand Total.
|
19
19
|
'shipping': '<%= @order.ship_total %>', // Shipping.
|
20
20
|
'tax': '<%= @order.tax_total %>', // Tax.
|
21
|
-
'currency': '<%=
|
21
|
+
'currency': '<%= @order.currency %>' // local currency code.
|
22
22
|
});
|
23
23
|
<% @order.line_items.each do |line_item| %>
|
24
24
|
ga('ecommerce:addItem', {
|
@@ -3,18 +3,18 @@
|
|
3
3
|
<% if order.has_step?("address") %>
|
4
4
|
|
5
5
|
<div class="columns alpha four" data-hook="order-bill-address">
|
6
|
-
<h6><%= Spree.t(:billing_address) %> <%= link_to "(#{Spree.t(
|
6
|
+
<h6><%= Spree.t(:billing_address) %> <%= link_to "(#{Spree.t('actions.edit')})", checkout_state_path(:address) unless order.completed? %></h6>
|
7
7
|
<%= render :partial => 'spree/shared/address', :locals => { :address => order.bill_address } %>
|
8
8
|
</div>
|
9
9
|
|
10
10
|
<% if order.has_step?("delivery") %>
|
11
11
|
<div class="columns alpha four" data-hook="order-ship-address">
|
12
|
-
<h6><%= Spree.t(:shipping_address) %> <%= link_to "(#{Spree.t(
|
12
|
+
<h6><%= Spree.t(:shipping_address) %> <%= link_to "(#{Spree.t('actions.edit')})", checkout_state_path(:address) unless order.completed? %></h6>
|
13
13
|
<%= render :partial => 'spree/shared/address', :locals => { :address => order.ship_address } %>
|
14
14
|
</div>
|
15
15
|
|
16
16
|
<div class="columns alpha four" data-hook="order-shipment">
|
17
|
-
<h6><%= Spree.t(:shipments) %> <%= link_to "(#{Spree.t(
|
17
|
+
<h6><%= Spree.t(:shipments) %> <%= link_to "(#{Spree.t('actions.edit')})", checkout_state_path(:delivery) unless order.completed? %></h6>
|
18
18
|
<div class="delivery">
|
19
19
|
<% order.shipments.each do |shipment| %>
|
20
20
|
<div>
|
@@ -28,15 +28,16 @@
|
|
28
28
|
<% end %>
|
29
29
|
<% end %>
|
30
30
|
|
31
|
-
|
32
|
-
<
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
<% if order.has_step?("payment") %>
|
32
|
+
<div class="columns omega four">
|
33
|
+
<h6><%= Spree.t(:payment_information) %> <%= link_to "(#{Spree.t('actions.edit')})", checkout_state_path(:payment) unless order.completed? %></h6>
|
34
|
+
<div class="payment-info">
|
35
|
+
<% order.payments.valid.each do |payment| %>
|
36
|
+
<%= render payment %><br/>
|
37
|
+
<% end %>
|
38
|
+
</div>
|
37
39
|
</div>
|
38
|
-
|
39
|
-
|
40
|
+
<% end %>
|
40
41
|
</div>
|
41
42
|
|
42
43
|
<hr />
|
@@ -26,13 +26,13 @@
|
|
26
26
|
<% products.each do |product| %>
|
27
27
|
<% url = spree.product_path(product, taxon_id: @taxon.try(:id)) %>
|
28
28
|
<li id="product_<%= product.id %>" class="columns three <%= cycle("alpha", "secondary", "", "omega secondary", name: "classes") %>" data-hook="products_list_item" itemscope itemtype="http://schema.org/Product">
|
29
|
-
<% cache(@taxon.present? ? [I18n.locale,
|
29
|
+
<% cache(@taxon.present? ? [I18n.locale, current_pricing_options, @taxon, product] : [I18n.locale, current_pricing_options, product]) do %>
|
30
30
|
<div class="product-image">
|
31
31
|
<%= link_to image_tag(product.display_image.attachment(:small), itemprop: "image"), url, itemprop: 'url' %>
|
32
32
|
</div>
|
33
33
|
<%= link_to truncate(product.name, length: 50), url, class: 'info', itemprop: "name", title: product.name %>
|
34
34
|
<span itemprop="offers" itemscope itemtype="http://schema.org/Offer">
|
35
|
-
<span class="price selling" itemprop="price"><%= display_price(product)
|
35
|
+
<span class="price selling" itemprop="price"><%= display_price(product) %></span>
|
36
36
|
</span>
|
37
37
|
<% end %>
|
38
38
|
</li>
|
@@ -1 +1,8 @@
|
|
1
|
-
Rails.application.config.assets.precompile += %w
|
1
|
+
Rails.application.config.assets.precompile += %w[
|
2
|
+
spree/frontend/all*
|
3
|
+
jquery.validate/localization/messages_*
|
4
|
+
favicon.ico
|
5
|
+
spree/frontend/cart.png
|
6
|
+
credit_cards/*
|
7
|
+
icons/delete.png
|
8
|
+
]
|
@@ -5,11 +5,10 @@ CanonicalRails.setup do |config|
|
|
5
5
|
#
|
6
6
|
# Acts as a whitelist for routes to have trailing slashes
|
7
7
|
|
8
|
-
config.collection_actions# = [:index]
|
8
|
+
config.collection_actions # = [:index]
|
9
9
|
|
10
10
|
# Parameter spamming can cause index dilution by creating seemingly different URLs with identical or near-identical content.
|
11
11
|
# Unless whitelisted, these parameters will be omitted
|
12
12
|
|
13
13
|
config.whitelisted_parameters = [:keywords, :page, :search, :taxon]
|
14
|
-
|
15
14
|
end
|
data/config/routes.rb
CHANGED
@@ -1,36 +1,35 @@
|
|
1
1
|
Spree::Core::Engine.add_routes do
|
2
|
+
root to: 'home#index'
|
2
3
|
|
3
|
-
|
4
|
+
resources :products, only: [:index, :show]
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
get '/locale/set', :to => 'locale#set'
|
6
|
+
get '/locale/set', to: 'locale#set'
|
8
7
|
|
9
8
|
# non-restful checkout stuff
|
10
|
-
patch '/checkout/update/:state', :
|
11
|
-
get '/checkout/:state', :
|
12
|
-
get '/checkout', :
|
9
|
+
patch '/checkout/update/:state', to: 'checkout#update', as: :update_checkout
|
10
|
+
get '/checkout/:state', to: 'checkout#edit', as: :checkout_state
|
11
|
+
get '/checkout', to: 'checkout#edit', as: :checkout
|
13
12
|
|
14
|
-
populate_redirect = redirect do |
|
13
|
+
populate_redirect = redirect do |_params, request|
|
15
14
|
request.flash[:error] = Spree.t(:populate_get_error)
|
16
15
|
request.referer || '/cart'
|
17
16
|
end
|
18
17
|
|
19
|
-
get '/orders/populate', :
|
18
|
+
get '/orders/populate', to: populate_redirect
|
20
19
|
get '/orders/:id/token/:token' => 'orders#show', :as => :token_order
|
21
20
|
|
22
|
-
resources :orders, :
|
23
|
-
post :populate, :
|
21
|
+
resources :orders, except: [:index, :new, :create, :destroy] do
|
22
|
+
post :populate, on: :collection
|
24
23
|
end
|
25
24
|
|
26
|
-
get '/cart', :
|
27
|
-
patch '/cart', :
|
28
|
-
put '/cart/empty', :
|
25
|
+
get '/cart', to: 'orders#edit', as: :cart
|
26
|
+
patch '/cart', to: 'orders#update', as: :update_cart
|
27
|
+
put '/cart/empty', to: 'orders#empty', as: :empty_cart
|
29
28
|
|
30
29
|
# route globbing for pretty nested taxon and product paths
|
31
|
-
get '/t/*id', :
|
30
|
+
get '/t/*id', to: 'taxons#show', as: :nested_taxons
|
32
31
|
|
33
|
-
get '/unauthorized', :
|
34
|
-
get '/content/cvv', :
|
35
|
-
get '/cart_link', :
|
32
|
+
get '/unauthorized', to: 'home#unauthorized', as: :unauthorized
|
33
|
+
get '/content/cvv', to: 'content#cvv', as: :cvv
|
34
|
+
get '/cart_link', to: 'store#cart_link', as: :cart_link
|
36
35
|
end
|