ba_spree 1.0.0 → 1.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 928297a415af2201eeb6d7efb51208009e83031c1fe49479353638547b476580
4
- data.tar.gz: 5c4596bb2a8ffd0de972ebde989ab76d06b257565bd786c12d0982508e51dcd6
3
+ metadata.gz: 82aeb70ed5e30afcc4c5849eb6daf41f9a311b649e9e3f86adb0ff519feee6c9
4
+ data.tar.gz: 771f95d599301938053a772c997baca793f9237451568b1072ed127be2770f17
5
5
  SHA512:
6
- metadata.gz: 327f8c3028bcbc0009959ef3c2d263e26e2303defd268fef9f7b5a62a62bdfc2d411cea9fb5d20862fd5ebc222e9fea9cac4071656ccf9a9dcbc89b27d8f704b
7
- data.tar.gz: d8585120e0e45e573af880c6eff9e2e4fe7ed9f283bf9033b795dbe0182a89f7968c89ee0ad977b7d812ead9164fc2a575d94ad2c9e614121d78b58f0e6607f6
6
+ metadata.gz: 1e15809db814b48a2211a17dce5ac0e3e2fcd6dd40aaf0dcf0d7a96f0c43664a71eb33ff718eded86546cef5a6384706a35bc0a2c1361eea5219e12c178720c2
7
+ data.tar.gz: 0a2c180bdf9a3e648affd0f56fe915f87a8ee7c2b790e30d04a80298fbfc52c4f907a511d30ecd0283330bc96e953abad0be333a0625d65e54263bcefa91b75f
@@ -2,6 +2,7 @@ module BaSpree
2
2
  module CheckoutControllerDecorator
3
3
  def self.prepended(base)
4
4
  base.before_action :filter_bill_address_when_use_shipping, only: [ :update ], if: -> { params[:state] == 'payment' }
5
+ base.before_action :ensure_line_item_prices_current, only: [ :edit, :update ]
5
6
  end
6
7
 
7
8
  protected
@@ -94,6 +95,20 @@ module BaSpree
94
95
  end
95
96
  end
96
97
 
98
+ # チェックアウトを放置している間に商品価格が変わっていたら、住所入力からやり直させる。
99
+ # address から次へ進むときに Spree が明細価格を再計算し、続く配送・支払ステップで
100
+ # 送料・税・支払金額が現在価格で作り直される。
101
+ # @see https://github.com/be-agile/giga-repeat/issues/1392
102
+ def ensure_line_item_prices_current
103
+ # 価格の再計算が走るのは address から次へ進むときだけなので、それより後の state だけ判定する
104
+ return unless %w[delivery payment confirm].include?(@order.state)
105
+ return unless @order.line_item_prices_stale?
106
+
107
+ @order.restart_checkout_flow
108
+ flash[:error] = Spree.t(:line_item_prices_changed)
109
+ redirect_to spree.checkout_state_path(@order.token, 'address')
110
+ end
111
+
97
112
  def filter_bill_address_when_use_shipping
98
113
  return unless params[:order]&.dig(:bill_address_attributes)
99
114
 
@@ -32,14 +32,8 @@ module Spree
32
32
  class ChildTaxonsSection < SimpleDelegator
33
33
  def cache_key
34
34
  child_taxon_ids = links.map(&:linkable_id)
35
- max_updated_at = links.filter_map(&:linkable).map(&:updated_at).max.to_i
36
- "spree/page_sections/child_taxons/#{child_taxon_ids.join('-')}-#{max_updated_at}"
37
- end
38
-
39
- # ActiveSupport::Cache は cache_key より先にこちらを見るため、
40
- # 委譲先の実装が使われないよう合わせて上書きする
41
- def cache_key_with_version
42
- cache_key
35
+ max_updated_at = links.map(&:linkable).map(&:updated_at).max.to_i
36
+ "#{child_taxon_ids.join('-')}-#{max_updated_at}"
43
37
  end
44
38
  end
45
39
 
@@ -0,0 +1,14 @@
1
+ module BaSpree
2
+ module LineItemDecorator
3
+ # 注文に写し取った price が、現在の販売価格(Spree::LineItem#update_price と同じ計算)とずれているか。
4
+ # 価格の再計算は address から次へ進むときにしか走らないため、チェックアウトを長期間放置した注文で
5
+ # 商品価格(予約割引の終了・価格改定)が変わったことを検知するのに使う。
6
+ # @see https://github.com/be-agile/giga-repeat/issues/1392
7
+ def price_stale?
8
+ context = Spree::Pricing::Context.from_order(variant, order, quantity: quantity)
9
+ variant.price_for(context).price_including_vat_for(tax_zone: tax_zone) != price
10
+ end
11
+ end
12
+ end
13
+
14
+ Spree::LineItem.prepend(BaSpree::LineItemDecorator)
@@ -89,6 +89,12 @@ module BaSpree
89
89
  # (cancel! 内の after_cancel が 'order.canceled' を publish 済みなので、ここは update のみ)
90
90
  publish_event('order.updated')
91
91
  end
92
+
93
+ # 現在の販売価格とずれている明細が1つでもあるか
94
+ # @see https://github.com/be-agile/giga-repeat/issues/1392
95
+ def line_item_prices_stale?
96
+ line_items.any?(&:price_stale?)
97
+ end
92
98
  end
93
99
  end
94
100
 
@@ -0,0 +1,13 @@
1
+ # payment 画面で請求先住所(bill_address)を新規入力して送信し、バリデーションで差し戻された
2
+ # とき、本家は bill_address が new_record? のため「配送先と同じ(use_shipping)」を再びチェック
3
+ # 済みにし、入力したフォームを hidden に戻してしまう。入力欄の直下に出したエラーも一緒に
4
+ # 隠れて、何が悪かったのか分からなくなる。
5
+ #
6
+ # 請求先住所にエラーがあるときは use_shipping を外し、フォームを開いたままにする。
7
+ # @see https://github.com/be-agile/giga-repeat/issues/1397
8
+ Deface::Override.new(
9
+ virtual_path: 'spree/checkout/_payment',
10
+ name: 'keep_bill_address_form_open_on_error',
11
+ replace: "erb[silent]:contains('use_shipping = ')",
12
+ text: "<% use_shipping = (@order.shipping_eq_billing_address? || @order.bill_address.nil? || @order.bill_address.new_record?) && @order.requires_ship_address? && (@order.bill_address.nil? || @order.bill_address.errors.empty?) %>"
13
+ )
@@ -1,5 +1,6 @@
1
1
  en:
2
2
  spree:
3
+ line_item_prices_changed: Some item prices have changed. Please review your order and proceed again.
3
4
  promotions: Promotions
4
5
  confirm_order: Confirm Order
5
6
  continue_without_logging_in: Continue without logging in
@@ -1,5 +1,6 @@
1
1
  ja:
2
2
  spree:
3
+ line_item_prices_changed: 商品の価格が変更されたため、注文内容をご確認のうえ再度お手続きください
3
4
  promotions: 販売促進
4
5
  confirm_order: 注文を確定する
5
6
  continue_without_logging_in: ログインせずに続ける
@@ -1,3 +1,3 @@
1
1
  module BaSpree
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/ba_spree.rb CHANGED
@@ -16,5 +16,25 @@ require 'spree_materials'
16
16
  # Spree::Calculator::FlatPercentOrderTotal を参照する。
17
17
  # @see https://github.com/be-agile/giga-repeat/issues/1307
18
18
  require 'spree_order_total_discount'
19
+ # @see https://github.com/be-agile/giga-repeat/issues/1400
20
+ require 'spree_common_shipping_method_splitter'
19
21
  require 'ba_spree/engine'
20
22
  require 'ba_spree/version'
23
+
24
+ module BaSpree
25
+ # ba_spree が束ねる engine の gem 名(ba_spree.gemspec の記載順)。
26
+ # 依存のうち be-agile org で公開している gem を engine とみなし、spree 本体や deface は除く。
27
+ def self.bundled_engine_names
28
+ Gem.loaded_specs.fetch('ba_spree').runtime_dependencies.map(&:name).select do |name|
29
+ Gem.loaded_specs[name]&.homepage&.start_with?('https://github.com/be-agile/')
30
+ end
31
+ end
32
+ end
33
+
34
+ # ba_spree.gemspec が依存する engine を、gemspec の記載順ですべて require する(上で require 済みのものは何も起きない)。
35
+ # Bundler.require は Gemfile に書かれた gem しか require しないため、`gem "ba_spree"` だけを書いた利用者の環境では
36
+ # ここで require しないと engine として登録されない。ba_spree より後にロードするので decorator は ba_spree の外側に重なる。
37
+ # giga-repeat でも Gemfile.basic の先頭の ba_spree がここで全て require するため、本番の engine のロード順も
38
+ # gemspec の記載順で決まる。engine の一覧を gemspec だけに持ち、ここや Gemfile との二重管理を避ける。
39
+ # @see https://github.com/be-agile/giga-repeat/issues/1403
40
+ BaSpree.bundled_engine_names.each { |name| require name }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ba_spree
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - be agile Co., Ltd.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-08-20 00:00:00.000000000 Z
11
+ date: 2026-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: spree_address_format_i18n
98
+ name: ba_spree_loyalty_points
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -109,7 +109,7 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: spree_zip_autocomplete
112
+ name: spree_materials
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
@@ -123,7 +123,7 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: ba_spree_bank_transfer
126
+ name: spree_order_total_discount
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: ba_spree_cash_on_delivery
140
+ name: ba_spree_google_analytics
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: spree_np_atobarai
154
+ name: spree_yahoo_ads
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -165,7 +165,7 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: spree_gmo_pg
168
+ name: spree_products_payment_methods
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
@@ -179,7 +179,7 @@ dependencies:
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
- name: spree_direct_debit
182
+ name: ba_spree_cash_on_delivery
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
@@ -193,7 +193,7 @@ dependencies:
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
- name: spree_custom_email
196
+ name: ba_spree_related_products
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - ">="
@@ -207,7 +207,7 @@ dependencies:
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
- name: ba_spree_loyalty_points
210
+ name: spree_np_atobarai
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - ">="
@@ -221,7 +221,7 @@ dependencies:
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
223
  - !ruby/object:Gem::Dependency
224
- name: spree_materials
224
+ name: spree_direct_debit
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - ">="
@@ -235,7 +235,7 @@ dependencies:
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
- name: spree_order_total_discount
238
+ name: spree_zip_autocomplete
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
241
  - - ">="
@@ -249,7 +249,7 @@ dependencies:
249
249
  - !ruby/object:Gem::Version
250
250
  version: '0'
251
251
  - !ruby/object:Gem::Dependency
252
- name: ba_spree_related_products
252
+ name: spree_address_format_i18n
253
253
  requirement: !ruby/object:Gem::Requirement
254
254
  requirements:
255
255
  - - ">="
@@ -263,7 +263,21 @@ dependencies:
263
263
  - !ruby/object:Gem::Version
264
264
  version: '0'
265
265
  - !ruby/object:Gem::Dependency
266
- name: spree_products_payment_methods
266
+ name: spree_custom_email
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: ba_spree_bank_transfer
267
281
  requirement: !ruby/object:Gem::Requirement
268
282
  requirements:
269
283
  - - ">="
@@ -361,7 +375,7 @@ dependencies:
361
375
  - !ruby/object:Gem::Version
362
376
  version: '0'
363
377
  - !ruby/object:Gem::Dependency
364
- name: ba_spree_google_analytics
378
+ name: spree_gmo_pg
365
379
  requirement: !ruby/object:Gem::Requirement
366
380
  requirements:
367
381
  - - ">="
@@ -375,7 +389,7 @@ dependencies:
375
389
  - !ruby/object:Gem::Version
376
390
  version: '0'
377
391
  - !ruby/object:Gem::Dependency
378
- name: spree_yahoo_ads
392
+ name: spree_common_shipping_method_splitter
379
393
  requirement: !ruby/object:Gem::Requirement
380
394
  requirements:
381
395
  - - ">="
@@ -443,6 +457,7 @@ files:
443
457
  - app/javascript/spree/admin/controllers/slug_form_controller.js
444
458
  - app/models/ba_spree/address_decorator.rb
445
459
  - app/models/ba_spree/adjustment_decorator.rb
460
+ - app/models/ba_spree/line_item_decorator.rb
446
461
  - app/models/ba_spree/order_decorator.rb
447
462
  - app/models/ba_spree/order_updater_decorator.rb
448
463
  - app/models/ba_spree/payment_method_decorator.rb
@@ -490,6 +505,7 @@ files:
490
505
  - app/overrides/fix_coupon_apply_button_layout.rb
491
506
  - app/overrides/hide_gift_cards_and_store_credits_from_account_nav.rb
492
507
  - app/overrides/hide_shipping_message_for_digital_only_orders.rb
508
+ - app/overrides/keep_bill_address_form_open_on_error.rb
493
509
  - app/overrides/localize_apply_button_text.rb
494
510
  - app/overrides/localize_newsletter_button_text.rb
495
511
  - app/overrides/replace_announcement_bar_text.rb