solidus_frontend 1.2.3 → 1.3.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.

Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/spree/frontend/checkout/address.js.coffee +0 -2
  5. data/app/assets/stylesheets/spree/frontend.css +1 -2
  6. data/app/assets/stylesheets/spree/frontend/_skeleton.scss +242 -0
  7. data/app/assets/stylesheets/spree/frontend/screen.css.scss +1 -0
  8. data/app/controllers/spree/checkout_controller.rb +93 -93
  9. data/app/controllers/spree/content_controller.rb +1 -1
  10. data/app/controllers/spree/orders_controller.rb +15 -16
  11. data/app/controllers/spree/products_controller.rb +19 -18
  12. data/app/controllers/spree/store_controller.rb +27 -27
  13. data/app/controllers/spree/taxons_controller.rb +1 -2
  14. data/app/models/spree/frontend_configuration.rb +1 -1
  15. data/app/views/spree/address/_form.html.erb +18 -12
  16. data/app/views/spree/orders/show.html.erb +2 -2
  17. data/app/views/spree/products/_cart_form.html.erb +5 -5
  18. data/app/views/spree/products/show.html.erb +1 -1
  19. data/app/views/spree/shared/_google_analytics.html.erb +1 -1
  20. data/app/views/spree/shared/_order_details.html.erb +12 -11
  21. data/app/views/spree/shared/_products.html.erb +2 -2
  22. data/config/initializers/assets.rb +8 -1
  23. data/config/initializers/canonical_rails.rb +1 -2
  24. data/config/routes.rb +17 -18
  25. data/lib/spree/frontend.rb +1 -0
  26. data/lib/spree/frontend/engine.rb +1 -9
  27. data/lib/spree/frontend/middleware/seo_assist.rb +3 -4
  28. data/lib/tasks/rake_util.rb +3 -6
  29. data/lib/tasks/taxon.rake +3 -3
  30. data/script/rails +0 -1
  31. data/solidus_frontend.gemspec +1 -0
  32. data/spec/controllers/controller_extension_spec.rb +15 -15
  33. data/spec/controllers/controller_helpers_spec.rb +1 -2
  34. data/spec/controllers/spree/checkout_controller_spec.rb +67 -115
  35. data/spec/controllers/spree/content_controller_spec.rb +1 -1
  36. data/spec/controllers/spree/current_order_tracking_spec.rb +7 -6
  37. data/spec/controllers/spree/home_controller_spec.rb +3 -3
  38. data/spec/controllers/spree/orders_controller_ability_spec.rb +17 -16
  39. data/spec/controllers/spree/orders_controller_spec.rb +9 -8
  40. data/spec/controllers/spree/orders_controller_transitions_spec.rb +5 -5
  41. data/spec/controllers/spree/products_controller_spec.rb +10 -11
  42. data/spec/controllers/spree/taxons_controller_spec.rb +5 -5
  43. data/spec/features/address_spec.rb +15 -15
  44. data/spec/features/automatic_promotion_adjustments_spec.rb +18 -18
  45. data/spec/features/caching/products_spec.rb +2 -2
  46. data/spec/features/caching/taxons_spec.rb +2 -2
  47. data/spec/features/cart_spec.rb +8 -6
  48. data/spec/features/checkout_spec.rb +49 -51
  49. data/spec/features/checkout_unshippable_spec.rb +4 -5
  50. data/spec/features/coupon_code_spec.rb +28 -30
  51. data/spec/features/currency_spec.rb +3 -3
  52. data/spec/features/free_shipping_promotions_spec.rb +17 -17
  53. data/spec/features/locale_spec.rb +33 -24
  54. data/spec/features/order_spec.rb +4 -4
  55. data/spec/features/products_spec.rb +12 -12
  56. data/spec/features/promotion_code_invalidation_spec.rb +1 -0
  57. data/spec/features/quantity_promotions_spec.rb +1 -1
  58. data/spec/features/taxons_spec.rb +16 -16
  59. data/spec/features/template_rendering_spec.rb +1 -2
  60. data/spec/helpers/base_helper_spec.rb +2 -2
  61. data/spec/spec_helper.rb +5 -5
  62. data/spec/support/shared_contexts/checkout_setup.rb +1 -0
  63. data/spec/support/shared_contexts/custom_products.rb +18 -17
  64. data/spec/support/shared_contexts/product_prototypes.rb +3 -5
  65. data/spec/views/spree/checkout/_summary_spec.rb +2 -2
  66. metadata +24 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e875f120357aaa10f87a6402b432178994b778de
4
- data.tar.gz: ff5d741b59b823fefcc6b9957b129674684bf128
3
+ metadata.gz: 557f1380ace494c533f71574c8e3c20d2ebcac9d
4
+ data.tar.gz: 4ad6870c05f6b1fd2cd8efa05010aff5be01b8ec
5
5
  SHA512:
6
- metadata.gz: c5b686c9cd37c5ac17ba25f99e703378fa83331ad211bc70b6dfd01384fb4f27458e6a167412c007c34783b4c460f857f19c36d8e8b18f99fa7bac46c0ad71ff
7
- data.tar.gz: 7ee3ed72eb625df00e3ae44128d0afab3479e6986794f6236a8be78d87304fc2b81b99ffbfa8db2e72522ae5c288ea222157fe8f197979922b2fd36a8c4bc580
6
+ metadata.gz: f00ccf8be0e5d04a794867da361945679a1e0983cac928f998ed36354e5a41ca15dc3ed2ea6ebf71f7f6e4515ec9ac2229f52f86e01554a162a56ad1f05dd132
7
+ data.tar.gz: 0f6ad8ca6f6526e1525326ae87574d15352ad99aa7eb344a11fa5908db7b60b012626c381c4d66148af4cb4865467e48f38165617e2044d534edcc181d83f77f
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- eval(File.read(File.dirname(__FILE__) + '/../common_spree_dependencies.rb'))
1
+ eval_gemfile File.expand_path('../../common_spree_dependencies.rb', __FILE__)
2
2
 
3
- gem 'solidus_core', :path => '../core'
4
- gem 'solidus_api', :path => '../api'
3
+ gem 'solidus_core', path: '../core'
4
+ gem 'solidus_api', path: '../api'
5
5
 
6
6
  gemspec
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'spree/testing_support/common_rake'
6
6
 
7
7
  RSpec::Core::RakeTask.new
8
8
 
9
- task :default => :spec
9
+ task default: :spec
10
10
 
11
11
  desc "Generates a dummy app for testing"
12
12
  task :test_app do
@@ -52,7 +52,6 @@ $ ->
52
52
  else
53
53
  stateSelect.removeClass('required')
54
54
  stateSpanRequired.hide()
55
- stateSelect.removeClass('hidden')
56
55
  stateInput.removeClass('required')
57
56
  else
58
57
  stateSelect.hide().prop 'disabled', true
@@ -66,7 +65,6 @@ $ ->
66
65
  stateInput.removeClass('required')
67
66
  statePara.toggle(!!statesRequired)
68
67
  stateInput.prop('disabled', !statesRequired)
69
- stateInput.removeClass('hidden')
70
68
  stateSelect.removeClass('required')
71
69
 
72
70
  $('#bcountry select').change ->
@@ -1,6 +1,5 @@
1
1
  /*
2
- * This is a manifest file that includes stylesheets for spree_frontend
2
+ * This is a manifest file that includes stylesheets for spree_frontend
3
3
  *= require normalize
4
- *= require skeleton
5
4
  *= require spree/frontend/screen
6
5
  */
@@ -0,0 +1,242 @@
1
+ /*
2
+ * Skeleton V1.2
3
+ * Copyright 2011, Dave Gamache
4
+ * www.getskeleton.com
5
+ * Free to use under the MIT license.
6
+ * http://www.opensource.org/licenses/mit-license.php
7
+ * 6/20/2012
8
+ */
9
+
10
+
11
+ /* Table of Contents
12
+ ==================================================
13
+ #Base 960 Grid
14
+ #Tablet (Portrait)
15
+ #Mobile (Portrait)
16
+ #Mobile (Landscape)
17
+ #Clearing */
18
+
19
+
20
+
21
+ /* #Base 960 Grid
22
+ ================================================== */
23
+
24
+ .container { position: relative; width: 960px; margin: 0 auto; padding: 0; }
25
+ .container .column,
26
+ .container .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; }
27
+ .row { margin-bottom: 20px; }
28
+
29
+ /* Nested Column Classes */
30
+ .column.alpha, .columns.alpha { margin-left: 0; }
31
+ .column.omega, .columns.omega { margin-right: 0; }
32
+
33
+ /* Base Grid */
34
+ .container .one.column,
35
+ .container .one.columns { width: 40px; }
36
+ .container .two.columns { width: 100px; }
37
+ .container .three.columns { width: 160px; }
38
+ .container .four.columns { width: 220px; }
39
+ .container .five.columns { width: 280px; }
40
+ .container .six.columns { width: 340px; }
41
+ .container .seven.columns { width: 400px; }
42
+ .container .eight.columns { width: 460px; }
43
+ .container .nine.columns { width: 520px; }
44
+ .container .ten.columns { width: 580px; }
45
+ .container .eleven.columns { width: 640px; }
46
+ .container .twelve.columns { width: 700px; }
47
+ .container .thirteen.columns { width: 760px; }
48
+ .container .fourteen.columns { width: 820px; }
49
+ .container .fifteen.columns { width: 880px; }
50
+ .container .sixteen.columns { width: 940px; }
51
+
52
+ .container .one-third.column { width: 300px; }
53
+ .container .two-thirds.column { width: 620px; }
54
+
55
+ /* Offsets */
56
+ .container .offset-by-one { padding-left: 60px; }
57
+ .container .offset-by-two { padding-left: 120px; }
58
+ .container .offset-by-three { padding-left: 180px; }
59
+ .container .offset-by-four { padding-left: 240px; }
60
+ .container .offset-by-five { padding-left: 300px; }
61
+ .container .offset-by-six { padding-left: 360px; }
62
+ .container .offset-by-seven { padding-left: 420px; }
63
+ .container .offset-by-eight { padding-left: 480px; }
64
+ .container .offset-by-nine { padding-left: 540px; }
65
+ .container .offset-by-ten { padding-left: 600px; }
66
+ .container .offset-by-eleven { padding-left: 660px; }
67
+ .container .offset-by-twelve { padding-left: 720px; }
68
+ .container .offset-by-thirteen { padding-left: 780px; }
69
+ .container .offset-by-fourteen { padding-left: 840px; }
70
+ .container .offset-by-fifteen { padding-left: 900px; }
71
+
72
+
73
+
74
+ /* #Tablet (Portrait)
75
+ ================================================== */
76
+
77
+ /* Note: Design for a width of 768px */
78
+
79
+ @media only screen and (min-width: 768px) and (max-width: 959px) {
80
+ .container { width: 768px; }
81
+ .container .column,
82
+ .container .columns { margin-left: 10px; margin-right: 10px; }
83
+ .column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; }
84
+ .column.omega, .columns.omega { margin-right: 0; margin-left: 10px; }
85
+ .alpha.omega { margin-left: 0; margin-right: 0; }
86
+
87
+ .container .one.column,
88
+ .container .one.columns { width: 28px; }
89
+ .container .two.columns { width: 76px; }
90
+ .container .three.columns { width: 124px; }
91
+ .container .four.columns { width: 172px; }
92
+ .container .five.columns { width: 220px; }
93
+ .container .six.columns { width: 268px; }
94
+ .container .seven.columns { width: 316px; }
95
+ .container .eight.columns { width: 364px; }
96
+ .container .nine.columns { width: 412px; }
97
+ .container .ten.columns { width: 460px; }
98
+ .container .eleven.columns { width: 508px; }
99
+ .container .twelve.columns { width: 556px; }
100
+ .container .thirteen.columns { width: 604px; }
101
+ .container .fourteen.columns { width: 652px; }
102
+ .container .fifteen.columns { width: 700px; }
103
+ .container .sixteen.columns { width: 748px; }
104
+
105
+ .container .one-third.column { width: 236px; }
106
+ .container .two-thirds.column { width: 492px; }
107
+
108
+ /* Offsets */
109
+ .container .offset-by-one { padding-left: 48px; }
110
+ .container .offset-by-two { padding-left: 96px; }
111
+ .container .offset-by-three { padding-left: 144px; }
112
+ .container .offset-by-four { padding-left: 192px; }
113
+ .container .offset-by-five { padding-left: 240px; }
114
+ .container .offset-by-six { padding-left: 288px; }
115
+ .container .offset-by-seven { padding-left: 336px; }
116
+ .container .offset-by-eight { padding-left: 384px; }
117
+ .container .offset-by-nine { padding-left: 432px; }
118
+ .container .offset-by-ten { padding-left: 480px; }
119
+ .container .offset-by-eleven { padding-left: 528px; }
120
+ .container .offset-by-twelve { padding-left: 576px; }
121
+ .container .offset-by-thirteen { padding-left: 624px; }
122
+ .container .offset-by-fourteen { padding-left: 672px; }
123
+ .container .offset-by-fifteen { padding-left: 720px; }
124
+ }
125
+
126
+
127
+ /* #Mobile (Portrait)
128
+ ================================================== */
129
+
130
+ /* Note: Design for a width of 320px */
131
+
132
+ @media only screen and (max-width: 767px) {
133
+ .container { width: 300px; }
134
+ .container .columns,
135
+ .container .column { margin: 0; }
136
+
137
+ .container .one.column,
138
+ .container .one.columns,
139
+ .container .two.columns,
140
+ .container .three.columns,
141
+ .container .four.columns,
142
+ .container .five.columns,
143
+ .container .six.columns,
144
+ .container .seven.columns,
145
+ .container .eight.columns,
146
+ .container .nine.columns,
147
+ .container .ten.columns,
148
+ .container .eleven.columns,
149
+ .container .twelve.columns,
150
+ .container .thirteen.columns,
151
+ .container .fourteen.columns,
152
+ .container .fifteen.columns,
153
+ .container .sixteen.columns,
154
+ .container .one-third.column,
155
+ .container .two-thirds.column { width: 300px; }
156
+
157
+ /* Offsets */
158
+ .container .offset-by-one,
159
+ .container .offset-by-two,
160
+ .container .offset-by-three,
161
+ .container .offset-by-four,
162
+ .container .offset-by-five,
163
+ .container .offset-by-six,
164
+ .container .offset-by-seven,
165
+ .container .offset-by-eight,
166
+ .container .offset-by-nine,
167
+ .container .offset-by-ten,
168
+ .container .offset-by-eleven,
169
+ .container .offset-by-twelve,
170
+ .container .offset-by-thirteen,
171
+ .container .offset-by-fourteen,
172
+ .container .offset-by-fifteen { padding-left: 0; }
173
+
174
+ }
175
+
176
+
177
+ /* #Mobile (Landscape)
178
+ ================================================== */
179
+
180
+ /* Note: Design for a width of 480px */
181
+
182
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
183
+ .container { width: 420px; }
184
+ .container .columns,
185
+ .container .column { margin: 0; }
186
+
187
+ .container .one.column,
188
+ .container .one.columns,
189
+ .container .two.columns,
190
+ .container .three.columns,
191
+ .container .four.columns,
192
+ .container .five.columns,
193
+ .container .six.columns,
194
+ .container .seven.columns,
195
+ .container .eight.columns,
196
+ .container .nine.columns,
197
+ .container .ten.columns,
198
+ .container .eleven.columns,
199
+ .container .twelve.columns,
200
+ .container .thirteen.columns,
201
+ .container .fourteen.columns,
202
+ .container .fifteen.columns,
203
+ .container .sixteen.columns,
204
+ .container .one-third.column,
205
+ .container .two-thirds.column { width: 420px; }
206
+ }
207
+
208
+
209
+ /* #Clearing
210
+ ================================================== */
211
+
212
+ /* Self Clearing Goodness */
213
+ .container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; }
214
+
215
+ /* Use clearfix class on parent to clear nested columns,
216
+ or wrap each row of columns in a <div class="row"> */
217
+ .clearfix:before,
218
+ .clearfix:after,
219
+ .row:before,
220
+ .row:after {
221
+ content: '\0020';
222
+ display: block;
223
+ overflow: hidden;
224
+ visibility: hidden;
225
+ width: 0;
226
+ height: 0; }
227
+ .row:after,
228
+ .clearfix:after {
229
+ clear: both; }
230
+ .row,
231
+ .clearfix {
232
+ zoom: 1; }
233
+
234
+ /* You can also use a <br class="clear" /> to clear columns */
235
+ .clear {
236
+ clear: both;
237
+ display: block;
238
+ overflow: hidden;
239
+ visibility: hidden;
240
+ width: 0;
241
+ height: 0;
242
+ }
@@ -4,6 +4,7 @@
4
4
  //= depend_on_asset "fontawesome-webfont.svg"
5
5
  //= depend_on_asset "spree/frontend/cart.png"
6
6
 
7
+ @import 'spree/frontend/skeleton';
7
8
  @import 'spree/frontend/variables';
8
9
  @import 'font-awesome';
9
10
 
@@ -2,7 +2,7 @@ module Spree
2
2
  # This is somewhat contrary to standard REST convention since there is not
3
3
  # actually a Checkout object. There's enough distinct logic specific to
4
4
  # checkout which has nothing to do with updating an order that this approach
5
- # is waranted.
5
+ # is warranted.
6
6
  class CheckoutController < Spree::StoreController
7
7
  before_filter :load_order
8
8
  around_filter :lock_order
@@ -21,7 +21,7 @@ module Spree
21
21
 
22
22
  helper 'spree/orders'
23
23
 
24
- rescue_from Spree::Core::GatewayError, :with => :rescue_from_spree_gateway_error
24
+ rescue_from Spree::Core::GatewayError, with: :rescue_from_spree_gateway_error
25
25
 
26
26
  # Updates the order and advances to the next state (when possible.)
27
27
  def update
@@ -34,7 +34,7 @@ module Spree
34
34
  end
35
35
  if !success
36
36
  flash[:error] = @order.errors.full_messages.join("\n")
37
- redirect_to checkout_state_path(@order.state) and return
37
+ redirect_to(checkout_state_path(@order.state)) && return
38
38
  end
39
39
 
40
40
  if @order.completed?
@@ -52,124 +52,124 @@ module Spree
52
52
 
53
53
  private
54
54
 
55
- def update_params
56
- if update_params = massaged_params[:order]
57
- update_params.permit(permitted_checkout_attributes)
58
- else
59
- # We current allow update requests without any parameters in them.
60
- {}
61
- end
55
+ def update_params
56
+ if update_params = massaged_params[:order]
57
+ update_params.permit(permitted_checkout_attributes)
58
+ else
59
+ # We current allow update requests without any parameters in them.
60
+ {}
62
61
  end
62
+ end
63
63
 
64
- def massaged_params
65
- massaged_params = params.deep_dup
66
-
67
- move_payment_source_into_payments_attributes(massaged_params)
68
- move_existing_card_into_payments_attributes(massaged_params)
69
- set_payment_parameters_amount(massaged_params, @order)
64
+ def massaged_params
65
+ massaged_params = params.deep_dup
70
66
 
71
- massaged_params
72
- end
67
+ move_payment_source_into_payments_attributes(massaged_params)
68
+ move_existing_card_into_payments_attributes(massaged_params)
69
+ set_payment_parameters_amount(massaged_params, @order)
73
70
 
74
- def ensure_valid_state
75
- unless skip_state_validation?
76
- if (params[:state] && !@order.has_checkout_step?(params[:state])) ||
77
- (!params[:state] && !@order.has_checkout_step?(@order.state))
78
- @order.state = 'cart'
79
- redirect_to checkout_state_path(@order.checkout_steps.first)
80
- end
81
- end
71
+ massaged_params
72
+ end
82
73
 
83
- # Fix for https://github.com/spree/spree/issues/4117
84
- # If confirmation of payment fails, redirect back to payment screen
85
- if params[:state] == "confirm" && @order.payment_required? && @order.payments.valid.empty?
86
- flash.keep
87
- redirect_to checkout_state_path("payment")
74
+ def ensure_valid_state
75
+ unless skip_state_validation?
76
+ if (params[:state] && !@order.has_checkout_step?(params[:state])) ||
77
+ (!params[:state] && !@order.has_checkout_step?(@order.state))
78
+ @order.state = 'cart'
79
+ redirect_to checkout_state_path(@order.checkout_steps.first)
88
80
  end
89
81
  end
90
82
 
91
- # Should be overriden if you have areas of your checkout that don't match
92
- # up to a step within checkout_steps, such as a registration step
93
- def skip_state_validation?
94
- false
83
+ # Fix for https://github.com/spree/spree/issues/4117
84
+ # If confirmation of payment fails, redirect back to payment screen
85
+ if params[:state] == "confirm" && @order.payment_required? && @order.payments.valid.empty?
86
+ flash.keep
87
+ redirect_to checkout_state_path("payment")
95
88
  end
89
+ end
96
90
 
97
- def load_order
98
- @order = current_order
99
- redirect_to spree.cart_path and return unless @order
100
- end
91
+ # Should be overriden if you have areas of your checkout that don't match
92
+ # up to a step within checkout_steps, such as a registration step
93
+ def skip_state_validation?
94
+ false
95
+ end
101
96
 
102
- def set_state_if_present
103
- if params[:state]
104
- redirect_to checkout_state_path(@order.state) if @order.can_go_to_state?(params[:state]) && !skip_state_validation?
105
- @order.state = params[:state]
106
- end
107
- end
97
+ def load_order
98
+ @order = current_order
99
+ redirect_to(spree.cart_path) && return unless @order
100
+ end
108
101
 
109
- def ensure_checkout_allowed
110
- unless @order.checkout_allowed?
111
- redirect_to spree.cart_path
112
- end
102
+ def set_state_if_present
103
+ if params[:state]
104
+ redirect_to checkout_state_path(@order.state) if @order.can_go_to_state?(params[:state]) && !skip_state_validation?
105
+ @order.state = params[:state]
113
106
  end
107
+ end
114
108
 
115
- def ensure_order_not_completed
116
- redirect_to spree.cart_path if @order.completed?
109
+ def ensure_checkout_allowed
110
+ unless @order.checkout_allowed?
111
+ redirect_to spree.cart_path
117
112
  end
113
+ end
118
114
 
119
- def ensure_sufficient_stock_lines
120
- if @order.insufficient_stock_lines.present?
121
- flash[:error] = Spree.t(:inventory_error_flash_for_insufficient_quantity)
122
- redirect_to spree.cart_path
123
- end
124
- end
115
+ def ensure_order_not_completed
116
+ redirect_to spree.cart_path if @order.completed?
117
+ end
125
118
 
126
- # Provides a route to redirect after order completion
127
- def completion_route
128
- spree.order_path(@order)
119
+ def ensure_sufficient_stock_lines
120
+ if @order.insufficient_stock_lines.present?
121
+ flash[:error] = Spree.t(:inventory_error_flash_for_insufficient_quantity)
122
+ redirect_to spree.cart_path
129
123
  end
124
+ end
130
125
 
131
- def setup_for_current_state
132
- method_name = :"before_#{@order.state}"
133
- send(method_name) if respond_to?(method_name, true)
134
- end
126
+ # Provides a route to redirect after order completion
127
+ def completion_route
128
+ spree.order_path(@order)
129
+ end
135
130
 
136
- def before_address
137
- # if the user has a default address, a callback takes care of setting
138
- # that; but if he doesn't, we need to build an empty one here
139
- default = {country_id: Country.default.id}
140
- @order.build_bill_address(default) unless @order.bill_address
141
- @order.build_ship_address(default) if @order.checkout_steps.include?('delivery') && !@order.ship_address
142
- end
131
+ def setup_for_current_state
132
+ method_name = :"before_#{@order.state}"
133
+ send(method_name) if respond_to?(method_name, true)
134
+ end
143
135
 
144
- def before_delivery
145
- return if params[:order].present?
136
+ def before_address
137
+ # if the user has a default address, a callback takes care of setting
138
+ # that; but if he doesn't, we need to build an empty one here
139
+ default = { country_id: Country.default.id }
140
+ @order.build_bill_address(default) unless @order.bill_address
141
+ @order.build_ship_address(default) if @order.checkout_steps.include?('delivery') && !@order.ship_address
142
+ end
146
143
 
147
- packages = @order.shipments.map { |s| s.to_package }
148
- @differentiator = Spree::Stock::Differentiator.new(@order, packages)
149
- end
144
+ def before_delivery
145
+ return if params[:order].present?
150
146
 
151
- def before_payment
152
- if @order.checkout_steps.include? "delivery"
153
- packages = @order.shipments.map { |s| s.to_package }
154
- @differentiator = Spree::Stock::Differentiator.new(@order, packages)
155
- @differentiator.missing.each do |variant, quantity|
156
- @order.contents.remove(variant, quantity)
157
- end
158
- end
147
+ packages = @order.shipments.map(&:to_package)
148
+ @differentiator = Spree::Stock::Differentiator.new(@order, packages)
149
+ end
159
150
 
160
- if try_spree_current_user && try_spree_current_user.respond_to?(:payment_sources)
161
- @payment_sources = try_spree_current_user.payment_sources
151
+ def before_payment
152
+ if @order.checkout_steps.include? "delivery"
153
+ packages = @order.shipments.map(&:to_package)
154
+ @differentiator = Spree::Stock::Differentiator.new(@order, packages)
155
+ @differentiator.missing.each do |variant, quantity|
156
+ @order.contents.remove(variant, quantity)
162
157
  end
163
158
  end
164
159
 
165
- def rescue_from_spree_gateway_error(exception)
166
- flash.now[:error] = Spree.t(:spree_gateway_error_flash_for_checkout)
167
- @order.errors.add(:base, exception.message)
168
- render :edit
160
+ if try_spree_current_user && try_spree_current_user.respond_to?(:payment_sources)
161
+ @payment_sources = try_spree_current_user.payment_sources
169
162
  end
163
+ end
170
164
 
171
- def check_authorization
172
- authorize!(:edit, current_order, cookies.signed[:guest_token])
173
- end
165
+ def rescue_from_spree_gateway_error(exception)
166
+ flash.now[:error] = Spree.t(:spree_gateway_error_flash_for_checkout)
167
+ @order.errors.add(:base, exception.message)
168
+ render :edit
169
+ end
170
+
171
+ def check_authorization
172
+ authorize!(:edit, current_order, cookies.signed[:guest_token])
173
+ end
174
174
  end
175
175
  end