solidus_frontend 2.0.3 → 2.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_frontend might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a591e9eca8f2ad1af78d06df64f1fb92f0dbdd2
4
- data.tar.gz: 863b02f73442a2bc21e8d1013795ce016192b091
3
+ metadata.gz: 91994caf4d6589e096b79944e9c1b85b4c3471a9
4
+ data.tar.gz: '0242813eada0aef5639393066debcd46ced896cb'
5
5
  SHA512:
6
- metadata.gz: ccb8362c714272e32fe20b7ea0777c29e20a61b790bfefbec1dd626855aa7653228053919ba60234ebe2953890c3954a7e2cd3ccc36d45d15ec65d95a8857dfb
7
- data.tar.gz: '09b911642991cf16896b1e3722382560724a51a72031d0880c1b3f9bad568509cc41e083694d59279c6f820a78ef65d07eb4db855dfaef0a05cca30b75fe0158'
6
+ metadata.gz: 0345a11808be7289c09ba4224f44bd4dd44f659117883ee775d2f394a52defcf5c95584cbba9505eeb9944504d7ec32508f464c65ddc7496412d1469da5a218c
7
+ data.tar.gz: fc78552d2b109388cf8b4924a018b43633ee3ab3a3768e22070f789eebd428cf3d67178a8914a164d9186589a09a9e1831352f51ad8f25c3f4bc6f6399b5609f
@@ -7,6 +7,3 @@
7
7
  Spree.disableSaveOnClick = ->
8
8
  ($ 'form.edit_order').submit ->
9
9
  ($ this).find(':submit, :image').attr('disabled', true).removeClass('primary').addClass 'disabled'
10
-
11
- Spree.ready ($) ->
12
- Spree.Checkout = {}
@@ -1,4 +1,4 @@
1
- $ ->
1
+ Spree.ready ($) ->
2
2
  if $('#checkout_form_address').is('*')
3
3
  # Hidden by default to support browsers with javascript disabled
4
4
  $('.js-address-fields').show()
@@ -29,12 +29,11 @@ Spree.ready ($) ->
29
29
  ($ '#payment_method_' + @value).show() if @checked
30
30
  )
31
31
 
32
- ($ document).on('click', '#cvv_link', (event) ->
32
+ ($ '#cvv_link').on 'click', (event) ->
33
33
  windowName = 'cvv_info'
34
34
  windowOptions = 'left=20,top=20,width=500,height=500,toolbar=0,resizable=0,scrollbars=1'
35
35
  window.open(($ this).attr('href'), windowName, windowOptions)
36
36
  event.preventDefault()
37
- )
38
37
 
39
38
  # Activate already checked payment method if form is re-rendered
40
39
  # i.e. if user enters invalid data
@@ -1,8 +1,8 @@
1
- $ ->
1
+ Spree.ready ($) ->
2
2
  Spree.addImageHandlers = ->
3
3
  thumbnails = ($ '#product-images ul.thumbnails')
4
4
  ($ '#main-image').data 'selectedThumb', ($ '#main-image img').attr('src')
5
- thumbnails.find('li').eq(0).addClass 'selected'
5
+ thumbnails.find('li').eq(0).addClass 'selected' unless thumbnails.find('li.selected').length
6
6
  thumbnails.find('a').on 'click', (event) ->
7
7
  ($ '#main-image').data 'selectedThumb', ($ event.currentTarget).attr('href')
8
8
  ($ '#main-image').data 'selectedThumbId', ($ event.currentTarget).parent().attr('id')
@@ -17,7 +17,7 @@ module Spree
17
17
  before_action :check_authorization
18
18
  before_action :apply_coupon_code
19
19
 
20
- before_action :setup_for_current_state
20
+ before_action :setup_for_current_state, only: [:edit, :update]
21
21
 
22
22
  helper 'spree/orders'
23
23
 
@@ -18,10 +18,11 @@ module Spree
18
18
 
19
19
  def update
20
20
  if @order.contents.update_cart(order_params)
21
+ @order.next if params.key?(:checkout) && @order.cart?
22
+
21
23
  respond_with(@order) do |format|
22
24
  format.html do
23
25
  if params.key?(:checkout)
24
- @order.next if @order.cart?
25
26
  redirect_to checkout_state_path(@order.checkout_steps.first)
26
27
  else
27
28
  redirect_to cart_path
@@ -41,27 +42,30 @@ module Spree
41
42
 
42
43
  # Adds a new item to the order (creating a new order if none already exists)
43
44
  def populate
44
- order = current_order(create_order_if_necessary: true)
45
+ @order = current_order(create_order_if_necessary: true)
45
46
  variant = Spree::Variant.find(params[:variant_id])
46
47
  quantity = params[:quantity].to_i
47
48
 
48
49
  # 2,147,483,647 is crazy. See issue https://github.com/spree/spree/issues/2695.
49
- if quantity.between?(1, 2_147_483_647)
50
- begin
51
- order.contents.add(variant, quantity)
52
- rescue ActiveRecord::RecordInvalid => e
53
- error = e.record.errors.full_messages.join(", ")
54
- end
55
- else
56
- error = Spree.t(:please_enter_reasonable_quantity)
50
+ if !quantity.between?(1, 2_147_483_647)
51
+ @order.errors.add(:base, Spree.t(:please_enter_reasonable_quantity))
57
52
  end
58
53
 
59
- if error
60
- flash[:error] = error
61
- redirect_back_or_default(spree.root_path)
62
- else
63
- respond_with(order) do |format|
64
- format.html { redirect_to cart_path }
54
+ begin
55
+ @line_item = @order.contents.add(variant, quantity)
56
+ rescue ActiveRecord::RecordInvalid => e
57
+ @order.errors.add(:base, e.record.errors.full_messages.join(", "))
58
+ end
59
+
60
+ respond_with(@order) do |format|
61
+ format.html do
62
+ if @order.errors.any?
63
+ flash[:error] = @order.errors.full_messages.join(", ")
64
+ redirect_back_or_default(spree.root_path)
65
+ return
66
+ else
67
+ redirect_to cart_path
68
+ end
65
69
  end
66
70
  end
67
71
  end
@@ -2,34 +2,43 @@
2
2
  <div class="inner" data-hook=<%="#{address_type}_inner" %>>
3
3
  <p class="field" id=<%="#{address_id}firstname" %>>
4
4
  <%= form.label :firstname, Spree.t(:first_name) %><span class="required">*</span><br />
5
- <%= form.text_field :firstname, :class => 'required' %>
5
+ <%= form.text_field :firstname, class: 'required', autocomplete: address_type + ' given-name' %>
6
6
  </p>
7
+
7
8
  <p class="field" id=<%="#{address_id}lastname" %>>
8
9
  <%= form.label :lastname, Spree.t(:last_name) %><span class="required">*</span><br />
9
- <%= form.text_field :lastname, :class => 'required' %>
10
+ <%= form.text_field :lastname, autocomplete: address_type + ' family-name' %>
10
11
  </p>
12
+
11
13
  <% if Spree::Config[:company] %>
12
14
  <p class="field" id=<%="#{address_id}company" %>>
13
15
  <%= form.label :company, Spree.t(:company) %><br />
14
- <%= form.text_field :company %>
16
+ <%= form.text_field :company, autocomplete: address_type + ' organization' %>
15
17
  </p>
16
18
  <% end %>
19
+
17
20
  <p class="field" id=<%="#{address_id}address1" %>>
18
21
  <%= form.label :address1, Spree.t(:street_address) %><span class="required">*</span><br />
19
- <%= form.text_field :address1, :class => 'required' %>
22
+ <%= form.text_field :address1, class: 'required', autocomplete: address_type + ' address-line1' %>
20
23
  </p>
24
+
21
25
  <p class="field" id=<%="#{address_id}address2" %>>
22
26
  <%= form.label :address2, Spree.t(:street_address_2) %><br />
23
- <%= form.text_field :address2 %>
27
+ <%= form.text_field :address2, autocomplete: address_type + ' address-line2' %>
24
28
  </p>
29
+
25
30
  <p class="field" id=<%="#{address_id}city" %>>
26
31
  <%= form.label :city, Spree.t(:city) %><span class="required">*</span><br />
27
- <%= form.text_field :city, :class => 'required' %>
32
+ <%= form.text_field :city, class: 'required', autocomplete: address_type + ' address-level2' %>
28
33
  </p>
34
+
29
35
  <p class="field" id=<%="#{address_id}country" %>>
30
36
  <%= form.label :country_id, Spree.t(:country) %><span class="required">*</span><br />
31
37
  <span id=<%="#{address_id}country-selection" %>>
32
- <%= form.collection_select :country_id, available_countries, :id, :name, {}, {:class => 'required'} %>
38
+ <%= form.collection_select :country_id, available_countries, :id, :name, {},
39
+ class: 'required',
40
+ autocomplete: address_type + ' country-name'
41
+ %>
33
42
  </span>
34
43
  </p>
35
44
 
@@ -46,7 +55,8 @@
46
55
  {
47
56
  class: have_states ? 'required' : '',
48
57
  style: have_states ? '' : 'display: none;',
49
- disabled: !have_states
58
+ disabled: !have_states,
59
+ autocomplete: address_type + ' address-level1'
50
60
  })
51
61
  %>
52
62
  <%=
@@ -54,28 +64,31 @@
54
64
  :state_name,
55
65
  class: !have_states ? 'required' : '',
56
66
  style: have_states ? 'display: none;' : '',
57
- disabled: have_states
67
+ disabled: have_states,
68
+ autocomplete: address_type + ' address-level1'
58
69
  )
59
70
  %>
60
71
  </span>
61
72
  <noscript>
62
- <%= form.text_field :state_name, :class => 'required' %>
73
+ <%= form.text_field :state_name, :class => 'required', autocomplete: address_type + ' address-level1' %>
63
74
  </noscript>
64
75
  </p>
65
76
  <% end %>
66
77
 
67
78
  <p class="field" id=<%="#{address_id}zipcode" %>>
68
79
  <%= form.label :zipcode, Spree.t(:zip) %><% if address.require_zipcode? %><span class="required">*</span><% end %><br />
69
- <%= form.text_field :zipcode, :class => "#{'required' if address.require_zipcode?}" %>
80
+ <%= form.text_field :zipcode, class: "#{'required' if address.require_zipcode?}", autocomplete: address_type + ' postal-code' %>
70
81
  </p>
82
+
71
83
  <p class="field" id=<%="#{address_id}phone" %>>
72
84
  <%= form.label :phone, Spree.t(:phone) %><% if address.require_phone? %><span class="required">*</span><% end %><br />
73
- <%= form.phone_field :phone, :class => "#{'required' if address.require_phone?}" %>
85
+ <%= form.phone_field :phone, class: "#{'required' if address.require_phone?}", autocomplete: address_type + ' home tel' %>
74
86
  </p>
87
+
75
88
  <% if Spree::Config[:alternative_shipping_phone] %>
76
89
  <p class="field" id=<%="#{address_id}altphone" %>>
77
90
  <%= form.label :alternative_phone, Spree.t(:alternative_phone) %><br />
78
- <%= form.phone_field :alternative_phone %>
91
+ <%= form.phone_field :alternative_phone, autocomplete: address_type + ' tel' %>
79
92
  </p>
80
93
  <% end %>
81
94
  </div>
@@ -32,6 +32,5 @@
32
32
 
33
33
  </div>
34
34
 
35
- <%= render :partial => 'spree/shared/google_analytics' %>
36
35
  </body>
37
36
  </html>
@@ -29,7 +29,7 @@
29
29
  <% end %>
30
30
 
31
31
  <% if @product.price_for(current_pricing_options) and !@product.price.nil? %>
32
- <div data-hook="product_price" class="columns five <% if !@product.has_variants? %> alpha <% else %> omega <% end %>">
32
+ <div data-hook="product_price" class="columns five <%= !@product.has_variants? ? 'alpha' : 'omega' %>">
33
33
 
34
34
  <div id="product-price">
35
35
  <h6 class="product-section-title"><%= Spree.t(:price) %></h6>
@@ -12,12 +12,15 @@ Gem::Specification.new do |s|
12
12
  s.author = 'Solidus Team'
13
13
  s.email = 'contact@solidus.io'
14
14
  s.homepage = 'http://solidus.io/'
15
- s.rubyforge_project = 'solidus_frontend'
15
+ s.license = 'BSD-3-Clause'
16
16
 
17
17
  s.files = `git ls-files`.split("\n")
18
18
  s.require_path = 'lib'
19
19
  s.requirements << 'none'
20
20
 
21
+ s.required_ruby_version = '>= 2.2.2'
22
+ s.required_rubygems_version = '>= 1.8.23'
23
+
21
24
  s.add_dependency 'solidus_api', s.version
22
25
  s.add_dependency 'solidus_core', s.version
23
26
 
@@ -81,9 +81,9 @@ describe Spree::CheckoutController, type: :controller do
81
81
  }
82
82
  end
83
83
 
84
- let!(:payment_method) { create(:payment_method) }
85
84
  before do
86
85
  # Must have *a* shipping method and a payment method so updating from address works
86
+ allow(order).to receive_messages available_payment_methods: [stub_model(Spree::PaymentMethod)]
87
87
  allow(order).to receive_messages ensure_available_shipping_rates: true
88
88
  order.line_items << FactoryGirl.create(:line_item)
89
89
  end
@@ -218,53 +218,6 @@ describe Spree::CheckoutController, type: :controller do
218
218
  end
219
219
  end
220
220
 
221
- context "when in the payment state" do
222
- let(:order) { create(:order_with_line_items) }
223
- let(:payment_method) { create(:credit_card_payment_method) }
224
-
225
- let(:params) do
226
- {
227
- state: 'payment',
228
- order: {
229
- payments_attributes: [
230
- {
231
- payment_method_id: payment_method.id.to_s,
232
- source_attributes: attributes_for(:credit_card)
233
- }
234
- ]
235
- }
236
- }
237
- end
238
-
239
- before do
240
- order.update_attributes! user: user
241
- 3.times { order.next! } # should put us in the payment state
242
- end
243
-
244
- context 'with a permitted payment method' do
245
- it 'sets the payment amount' do
246
- post :update, params: params
247
- order.reload
248
- expect(order.state).to eq('confirm')
249
- expect(order.payments.size).to eq(1)
250
- expect(order.payments.first.amount).to eq(order.total)
251
- end
252
- end
253
-
254
- context 'with an unpermitted payment method' do
255
- before { payment_method.update!(display_on: "back_end") }
256
-
257
- it 'sets the payment amount' do
258
- expect {
259
- post :update, params: params
260
- }.to raise_error(ActiveRecord::RecordNotFound)
261
-
262
- expect(order.state).to eq('payment')
263
- expect(order.payments).to be_empty
264
- end
265
- end
266
- end
267
-
268
221
  context "when in the confirm state" do
269
222
  before do
270
223
  order.update_attributes! user: user
@@ -18,7 +18,12 @@ describe Spree::OrdersController, type: :controller do
18
18
  it "should create a new order when none specified" do
19
19
  post :populate
20
20
  expect(cookies.signed[:guest_token]).not_to be_blank
21
- expect(Spree::Order.find_by_guest_token(cookies.signed[:guest_token])).to be_persisted
21
+
22
+ order_by_token = Spree::Order.find_by_guest_token(cookies.signed[:guest_token])
23
+ assigned_order = assigns[:order]
24
+
25
+ expect(assigned_order).to eq order_by_token
26
+ expect(assigned_order).to be_persisted
22
27
  end
23
28
 
24
29
  context "with Variant" do
@@ -85,6 +90,13 @@ describe Spree::OrdersController, type: :controller do
85
90
  put :update, session: { order_id: 1 }
86
91
  expect(response).to redirect_to(spree.cart_path)
87
92
  end
93
+
94
+ it "should advance the order if :checkout button is pressed" do
95
+ allow(order).to receive(:update_attributes).and_return true
96
+ expect(order).to receive(:next)
97
+ put :update, { checkout: true }, { order_id: 1 }
98
+ expect(response).to redirect_to checkout_state_path('address')
99
+ end
88
100
  end
89
101
  end
90
102
 
@@ -77,9 +77,9 @@ describe "Checkout", type: :feature, inaccessible: true do
77
77
 
78
78
  # Regression test for https://github.com/spree/spree/issues/2694 and https://github.com/spree/spree/issues/4117
79
79
  context "doesn't allow bad credit card numbers" do
80
- let!(:payment_method) { create(:credit_card_payment_method) }
81
80
  before(:each) do
82
81
  order = OrderWalkthrough.up_to(:delivery)
82
+ allow(order).to receive_messages(available_payment_methods: [create(:credit_card_payment_method)])
83
83
 
84
84
  user = create(:user)
85
85
  order.user = user
@@ -180,8 +180,7 @@ describe "Checkout", type: :feature, inaccessible: true do
180
180
  end
181
181
 
182
182
  context "user has payment sources", js: true do
183
- before { Spree::PaymentMethod.all.each(&:really_destroy!) }
184
- let!(:bogus) { create(:credit_card_payment_method) }
183
+ let(:bogus) { create(:credit_card_payment_method) }
185
184
  let(:user) { create(:user) }
186
185
 
187
186
  let!(:credit_card) do
@@ -190,6 +189,7 @@ describe "Checkout", type: :feature, inaccessible: true do
190
189
 
191
190
  before do
192
191
  order = OrderWalkthrough.up_to(:delivery)
192
+ allow(order).to receive_messages(available_payment_methods: [bogus])
193
193
 
194
194
  allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
195
195
  allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
@@ -15,15 +15,14 @@ describe "Free shipping promotions", type: :feature, js: true do
15
15
  let!(:payment_method) { create(:check_payment_method) }
16
16
  let!(:product) { create(:product, name: "RoR Mug", price: 20) }
17
17
  let!(:promotion) do
18
- promotion = Spree::Promotion.create!(name: "Free Shipping",
19
- starts_at: 1.day.ago,
20
- expires_at: 1.day.from_now)
21
-
22
- action = Spree::Promotion::Actions::FreeShipping.new
23
- action.promotion = promotion
24
- action.save
25
-
26
- promotion.reload # so that promotion.actions is available
18
+ create(
19
+ :promotion,
20
+ apply_automatically: true,
21
+ promotion_actions: [Spree::Promotion::Actions::FreeShipping.new],
22
+ name: "Free Shipping",
23
+ starts_at: 1.day.ago,
24
+ expires_at: 1.day.from_now,
25
+ )
27
26
  end
28
27
 
29
28
  context "free shipping promotion automatically applied" do
@@ -40,7 +40,7 @@ describe 'setting locale', type: :feature do
40
40
  visit '/checkout/address'
41
41
  find('.form-buttons input[type=submit]').click
42
42
 
43
- %w(firstname lastname address1 city).each do |attr|
43
+ %w(firstname address1 city).each do |attr|
44
44
  expect(find(".field#b#{attr} label.error")).to have_text(message)
45
45
  end
46
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_frontend
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.1.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Solidus Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-12 00:00:00.000000000 Z
11
+ date: 2016-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solidus_api
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.3
19
+ version: 2.1.0.beta1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.3
26
+ version: 2.1.0.beta1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: solidus_core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.3
33
+ version: 2.1.0.beta1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 2.0.3
40
+ version: 2.1.0.beta1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: canonical-rails
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -212,7 +212,6 @@ files:
212
212
  - app/views/spree/shared/_address.html.erb
213
213
  - app/views/spree/shared/_filters.html.erb
214
214
  - app/views/spree/shared/_footer.html.erb
215
- - app/views/spree/shared/_google_analytics.html.erb
216
215
  - app/views/spree/shared/_head.html.erb
217
216
  - app/views/spree/shared/_header.html.erb
218
217
  - app/views/spree/shared/_link_to_cart.html.erb
@@ -274,7 +273,6 @@ files:
274
273
  - spec/spec_helper.rb
275
274
  - spec/support/shared_contexts/checkout_setup.rb
276
275
  - spec/support/shared_contexts/custom_products.rb
277
- - spec/support/shared_contexts/product_prototypes.rb
278
276
  - spec/views/spree/checkout/_summary_spec.rb
279
277
  - vendor/assets/javascripts/jquery.validate/additional-methods.min.js
280
278
  - vendor/assets/javascripts/jquery.validate/jquery.validate.min.js
@@ -327,7 +325,8 @@ files:
327
325
  - vendor/assets/javascripts/jquery.validate/localization/methods_nl.js
328
326
  - vendor/assets/javascripts/jquery.validate/localization/methods_pt.js
329
327
  homepage: http://solidus.io/
330
- licenses: []
328
+ licenses:
329
+ - BSD-3-Clause
331
330
  metadata: {}
332
331
  post_install_message:
333
332
  rdoc_options: []
@@ -337,16 +336,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
337
336
  requirements:
338
337
  - - ">="
339
338
  - !ruby/object:Gem::Version
340
- version: 2.1.0
339
+ version: 2.2.2
341
340
  required_rubygems_version: !ruby/object:Gem::Requirement
342
341
  requirements:
343
342
  - - ">="
344
343
  - !ruby/object:Gem::Version
345
- version: '0'
344
+ version: 1.8.23
346
345
  requirements:
347
346
  - none
348
- rubyforge_project: solidus_frontend
349
- rubygems_version: 2.6.11
347
+ rubyforge_project:
348
+ rubygems_version: 2.5.2
350
349
  signing_key:
351
350
  specification_version: 4
352
351
  summary: Cart and storefront for the Solidus e-commerce project.
@@ -1,36 +0,0 @@
1
- <% if tracker = Spree::Tracker.current %>
2
- <script>
3
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
4
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
5
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
6
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
7
-
8
- ga('create', '<%= tracker.analytics_id %>', 'auto');
9
- ga('require', 'displayfeatures');
10
- ga('send', 'pageview');
11
-
12
- <% if @order && order_just_completed?(@order) %>
13
- <%# more info: https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce %>
14
- ga('require', 'ecommerce', 'ecommerce.js');
15
- ga('ecommerce:addTransaction', {
16
- 'id': '<%= j @order.number %>', // Transaction ID. Required.
17
- 'affiliation': '<%= current_store.name %>', // Affiliation or store name.
18
- 'revenue': '<%= @order.total %>', // Grand Total.
19
- 'shipping': '<%= @order.ship_total %>', // Shipping.
20
- 'tax': '<%= @order.tax_total %>', // Tax.
21
- 'currency': '<%= @order.currency %>' // local currency code.
22
- });
23
- <% @order.line_items.each do |line_item| %>
24
- ga('ecommerce:addItem', {
25
- 'id': '<%= j @order.number %>', // Transaction ID. Required.
26
- 'name': '<%= j line_item.variant.product.name %>', // Product name. Required.
27
- 'sku': '<%= j (line_item.variant.sku || line_item.variant_id) %>', // SKU/code.
28
- 'category': '', // Category or variation.
29
- 'price': '<%= line_item.price %>', // Unit price.
30
- 'quantity': '<%= line_item.quantity %>' // Quantity.
31
- });
32
- <% end %>
33
- ga('ecommerce:send');
34
- <% end %>
35
- </script>
36
- <% end %>
@@ -1,28 +0,0 @@
1
- shared_context "product prototype" do
2
- def build_option_type_with_values(name, values)
3
- ot = FactoryGirl.create(:option_type, name: name)
4
- values.each do |val|
5
- ot.option_values.create(name: val.downcase, presentation: val)
6
- end
7
- ot
8
- end
9
-
10
- let(:product_attributes) do
11
- # FactoryGirl.attributes_for is un-deprecated!
12
- # https://github.com/thoughtbot/factory_girl/issues/274#issuecomment-3592054
13
- FactoryGirl.attributes_for(:base_product)
14
- end
15
-
16
- let(:prototype) do
17
- size = build_option_type_with_values("size", %w(Small Medium Large))
18
- FactoryGirl.create(:prototype, name: "Size", option_types: [size])
19
- end
20
-
21
- let(:option_values_hash) do
22
- hash = {}
23
- prototype.option_types.each do |i|
24
- hash[i.id.to_s] = i.option_value_ids
25
- end
26
- hash
27
- end
28
- end