spree_core 5.4.0.beta6 → 5.4.0.beta8
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 +4 -4
- data/app/helpers/spree/base_helper.rb +5 -7
- data/app/jobs/spree/payments/handle_webhook_job.rb +22 -0
- data/app/mailers/spree/base_mailer.rb +1 -1
- data/app/models/concerns/spree/user_methods.rb +16 -0
- data/app/models/spree/allowed_origin.rb +44 -0
- data/app/models/spree/asset.rb +121 -3
- data/app/models/spree/cart_promotion.rb +7 -0
- data/app/models/spree/checkout/default_requirements.rb +51 -0
- data/app/models/spree/checkout/registry.rb +112 -0
- data/app/models/spree/checkout/requirement.rb +49 -0
- data/app/models/spree/checkout/requirements.rb +56 -0
- data/app/models/spree/checkout/step.rb +52 -0
- data/app/models/spree/image/configuration/active_storage.rb +2 -14
- data/app/models/spree/image.rb +2 -78
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +3 -3
- data/app/models/spree/order/checkout.rb +18 -0
- data/app/models/spree/order.rb +3 -0
- data/app/models/spree/order_promotion.rb +2 -0
- data/app/models/spree/payment_method.rb +34 -0
- data/app/models/spree/payment_session.rb +18 -0
- data/app/models/spree/product.rb +45 -34
- data/app/models/spree/shipment.rb +1 -0
- data/app/models/spree/store.rb +32 -0
- data/app/models/spree/variant.rb +21 -12
- data/app/services/spree/cart/create.rb +3 -30
- data/app/services/spree/carts/complete.rb +46 -0
- data/app/services/spree/carts/create.rb +32 -0
- data/app/services/spree/carts/update.rb +115 -0
- data/app/services/spree/{cart → carts}/upsert_items.rb +19 -23
- data/app/services/spree/payments/handle_webhook.rb +58 -0
- data/app/services/spree/seeds/all.rb +1 -0
- data/app/services/spree/seeds/allowed_origins.rb +14 -0
- data/app/views/spree/shared/_mailer_logo.html.erb +1 -1
- data/config/locales/en.yml +23 -2
- data/db/migrate/20260315000000_create_spree_allowed_origins.rb +14 -0
- data/db/migrate/20260315100000_add_product_media_support.rb +21 -0
- data/lib/spree/core/configuration.rb +3 -0
- data/lib/spree/core/dependencies.rb +4 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +1 -0
- data/lib/spree/permitted_attributes.rb +5 -1
- data/lib/spree/testing_support/factories/allowed_origin_factory.rb +8 -0
- data/lib/spree/testing_support/factories/asset_factory.rb +6 -9
- data/lib/spree/testing_support/factories/image_factory.rb +3 -1
- data/lib/spree/testing_support/factories/order_factory.rb +3 -0
- data/lib/tasks/images.rake +11 -11
- data/lib/tasks/products.rake +4 -2
- metadata +21 -6
- data/app/services/spree/orders/update.rb +0 -121
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.4.0.
|
|
4
|
+
version: 5.4.0.beta8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sean Schofield
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2026-03-
|
|
13
|
+
date: 2026-03-16 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: i18n-tasks
|
|
@@ -840,6 +840,7 @@ files:
|
|
|
840
840
|
- app/jobs/spree/images/save_from_url_job.rb
|
|
841
841
|
- app/jobs/spree/imports/create_rows_job.rb
|
|
842
842
|
- app/jobs/spree/imports/process_rows_job.rb
|
|
843
|
+
- app/jobs/spree/payments/handle_webhook_job.rb
|
|
843
844
|
- app/jobs/spree/products/auto_match_taxons_job.rb
|
|
844
845
|
- app/jobs/spree/products/refresh_metrics_job.rb
|
|
845
846
|
- app/jobs/spree/products/touch_taxons_job.rb
|
|
@@ -898,6 +899,7 @@ files:
|
|
|
898
899
|
- app/models/spree/adjustable/adjustments_updater.rb
|
|
899
900
|
- app/models/spree/adjustable/promotion_accumulator.rb
|
|
900
901
|
- app/models/spree/adjustment.rb
|
|
902
|
+
- app/models/spree/allowed_origin.rb
|
|
901
903
|
- app/models/spree/api_key.rb
|
|
902
904
|
- app/models/spree/asset.rb
|
|
903
905
|
- app/models/spree/asset/support/active_storage.rb
|
|
@@ -921,7 +923,13 @@ files:
|
|
|
921
923
|
- app/models/spree/calculator/shipping/price_sack.rb
|
|
922
924
|
- app/models/spree/calculator/tiered_flat_rate.rb
|
|
923
925
|
- app/models/spree/calculator/tiered_percent.rb
|
|
926
|
+
- app/models/spree/cart_promotion.rb
|
|
924
927
|
- app/models/spree/category.rb
|
|
928
|
+
- app/models/spree/checkout/default_requirements.rb
|
|
929
|
+
- app/models/spree/checkout/registry.rb
|
|
930
|
+
- app/models/spree/checkout/requirement.rb
|
|
931
|
+
- app/models/spree/checkout/requirements.rb
|
|
932
|
+
- app/models/spree/checkout/step.rb
|
|
925
933
|
- app/models/spree/classification.rb
|
|
926
934
|
- app/models/spree/country.rb
|
|
927
935
|
- app/models/spree/coupon_code.rb
|
|
@@ -1201,7 +1209,10 @@ files:
|
|
|
1201
1209
|
- app/services/spree/cart/remove_out_of_stock_items.rb
|
|
1202
1210
|
- app/services/spree/cart/set_quantity.rb
|
|
1203
1211
|
- app/services/spree/cart/update.rb
|
|
1204
|
-
- app/services/spree/
|
|
1212
|
+
- app/services/spree/carts/complete.rb
|
|
1213
|
+
- app/services/spree/carts/create.rb
|
|
1214
|
+
- app/services/spree/carts/update.rb
|
|
1215
|
+
- app/services/spree/carts/upsert_items.rb
|
|
1205
1216
|
- app/services/spree/checkout/add_store_credit.rb
|
|
1206
1217
|
- app/services/spree/checkout/advance.rb
|
|
1207
1218
|
- app/services/spree/checkout/complete.rb
|
|
@@ -1233,9 +1244,9 @@ files:
|
|
|
1233
1244
|
- app/services/spree/orders/approve.rb
|
|
1234
1245
|
- app/services/spree/orders/cancel.rb
|
|
1235
1246
|
- app/services/spree/orders/create_user_account.rb
|
|
1236
|
-
- app/services/spree/orders/update.rb
|
|
1237
1247
|
- app/services/spree/orders/update_contact_information.rb
|
|
1238
1248
|
- app/services/spree/payments/create.rb
|
|
1249
|
+
- app/services/spree/payments/handle_webhook.rb
|
|
1239
1250
|
- app/services/spree/products/auto_match_taxons.rb
|
|
1240
1251
|
- app/services/spree/products/duplicator.rb
|
|
1241
1252
|
- app/services/spree/products/prepare_nested_attributes.rb
|
|
@@ -1243,6 +1254,7 @@ files:
|
|
|
1243
1254
|
- app/services/spree/sample_data/loader.rb
|
|
1244
1255
|
- app/services/spree/seeds/admin_user.rb
|
|
1245
1256
|
- app/services/spree/seeds/all.rb
|
|
1257
|
+
- app/services/spree/seeds/allowed_origins.rb
|
|
1246
1258
|
- app/services/spree/seeds/api_keys.rb
|
|
1247
1259
|
- app/services/spree/seeds/countries.rb
|
|
1248
1260
|
- app/services/spree/seeds/default_reimbursement_types.rb
|
|
@@ -1435,6 +1447,8 @@ files:
|
|
|
1435
1447
|
- db/migrate/20260220000000_create_spree_markets.rb
|
|
1436
1448
|
- db/migrate/20260226000000_add_locale_to_spree_orders.rb
|
|
1437
1449
|
- db/migrate/20260226100000_add_token_digest_to_spree_api_keys.rb
|
|
1450
|
+
- db/migrate/20260315000000_create_spree_allowed_origins.rb
|
|
1451
|
+
- db/migrate/20260315100000_add_product_media_support.rb
|
|
1438
1452
|
- db/sample_data/customers.csv
|
|
1439
1453
|
- db/sample_data/metafield_definitions.rb
|
|
1440
1454
|
- db/sample_data/orders.rb
|
|
@@ -1520,6 +1534,7 @@ files:
|
|
|
1520
1534
|
- lib/spree/testing_support/factories.rb
|
|
1521
1535
|
- lib/spree/testing_support/factories/address_factory.rb
|
|
1522
1536
|
- lib/spree/testing_support/factories/adjustment_factory.rb
|
|
1537
|
+
- lib/spree/testing_support/factories/allowed_origin_factory.rb
|
|
1523
1538
|
- lib/spree/testing_support/factories/api_key_factory.rb
|
|
1524
1539
|
- lib/spree/testing_support/factories/asset_factory.rb
|
|
1525
1540
|
- lib/spree/testing_support/factories/calculator_factory.rb
|
|
@@ -1656,9 +1671,9 @@ licenses:
|
|
|
1656
1671
|
- BSD-3-Clause
|
|
1657
1672
|
metadata:
|
|
1658
1673
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
|
1659
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.
|
|
1674
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.beta8
|
|
1660
1675
|
documentation_uri: https://docs.spreecommerce.org/
|
|
1661
|
-
source_code_uri: https://github.com/spree/spree/tree/v5.4.0.
|
|
1676
|
+
source_code_uri: https://github.com/spree/spree/tree/v5.4.0.beta8
|
|
1662
1677
|
post_install_message:
|
|
1663
1678
|
rdoc_options: []
|
|
1664
1679
|
require_paths:
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module Orders
|
|
3
|
-
# Core order update service with modern conventions:
|
|
4
|
-
# - Flat parameter structure (no wrapping in "order" key)
|
|
5
|
-
# - snake_case field names without "_attributes" suffix
|
|
6
|
-
# - Automatic state management based on what's being updated
|
|
7
|
-
# - Support for line_items with prefixed variant IDs
|
|
8
|
-
#
|
|
9
|
-
# @example Update order with line items
|
|
10
|
-
# Spree::Orders::Update.call(
|
|
11
|
-
# order: order,
|
|
12
|
-
# params: {
|
|
13
|
-
# email: "customer@example.com",
|
|
14
|
-
# line_items: [
|
|
15
|
-
# { variant_id: "variant_123", quantity: 2 },
|
|
16
|
-
# { variant_id: "variant_456", quantity: 1 }
|
|
17
|
-
# ],
|
|
18
|
-
# ship_address: {
|
|
19
|
-
# firstname: "John",
|
|
20
|
-
# lastname: "Doe",
|
|
21
|
-
# address1: "123 Main St",
|
|
22
|
-
# city: "New York",
|
|
23
|
-
# zipcode: "10001",
|
|
24
|
-
# country_iso: "US",
|
|
25
|
-
# state_abbr: "NY"
|
|
26
|
-
# }
|
|
27
|
-
# }
|
|
28
|
-
# )
|
|
29
|
-
#
|
|
30
|
-
class Update
|
|
31
|
-
prepend Spree::ServiceModule::Base
|
|
32
|
-
|
|
33
|
-
def call(order:, params:)
|
|
34
|
-
@order = order
|
|
35
|
-
@params = params.to_h.deep_symbolize_keys
|
|
36
|
-
|
|
37
|
-
ApplicationRecord.transaction do
|
|
38
|
-
assign_order_attributes
|
|
39
|
-
assign_address(:ship_address)
|
|
40
|
-
assign_address(:bill_address)
|
|
41
|
-
|
|
42
|
-
order.save!
|
|
43
|
-
|
|
44
|
-
process_line_items
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
success(order.reload)
|
|
48
|
-
rescue ActiveRecord::RecordNotFound
|
|
49
|
-
raise
|
|
50
|
-
rescue ActiveRecord::RecordInvalid => e
|
|
51
|
-
failure(order, e.record.errors.full_messages.to_sentence)
|
|
52
|
-
rescue StandardError => e
|
|
53
|
-
failure(order, e.message)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
private
|
|
57
|
-
|
|
58
|
-
attr_reader :order, :params
|
|
59
|
-
|
|
60
|
-
def assign_order_attributes
|
|
61
|
-
order.email = params[:email] if params[:email].present?
|
|
62
|
-
order.special_instructions = params[:special_instructions] if params.key?(:special_instructions)
|
|
63
|
-
order.currency = params[:currency].upcase if params[:currency].present?
|
|
64
|
-
order.locale = params[:locale] if params[:locale].present?
|
|
65
|
-
order.metadata = order.metadata.merge(params[:metadata].to_h) if params[:metadata].present?
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def assign_address(address_type)
|
|
69
|
-
address_id_param = params[:"#{address_type}_id"]
|
|
70
|
-
address_params = params[address_type]
|
|
71
|
-
|
|
72
|
-
# Priority 1: Direct address ID reference (ship_address_id / bill_address_id)
|
|
73
|
-
if address_id_param.present?
|
|
74
|
-
address_id = resolve_address_id(address_id_param)
|
|
75
|
-
order.public_send(:"#{address_type}_id=", address_id) if address_id
|
|
76
|
-
return
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Priority 2: Nested address params (ship_address / bill_address)
|
|
80
|
-
return unless address_params.is_a?(Hash)
|
|
81
|
-
|
|
82
|
-
if address_params[:id].present?
|
|
83
|
-
# Using existing address by ID within nested params
|
|
84
|
-
address_id = resolve_address_id(address_params[:id])
|
|
85
|
-
order.public_send(:"#{address_type}_id=", address_id) if address_id
|
|
86
|
-
else
|
|
87
|
-
# Creating/updating address with provided attributes
|
|
88
|
-
revert_to_address_state if order.has_checkout_step?('address')
|
|
89
|
-
order.public_send(:"#{address_type}_attributes=", address_params)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def process_line_items
|
|
94
|
-
return unless params[:line_items].is_a?(Array)
|
|
95
|
-
|
|
96
|
-
result = Spree.cart_upsert_items_service.call(
|
|
97
|
-
order: order,
|
|
98
|
-
line_items: params[:line_items]
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
raise StandardError, result.error.to_s if result.failure?
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Translate prefixed ID to internal id
|
|
105
|
-
def resolve_address_id(prefixed_id)
|
|
106
|
-
return unless order.user
|
|
107
|
-
|
|
108
|
-
decoded = Spree::Address.decode_prefixed_id(prefixed_id)
|
|
109
|
-
decoded ? order.user.addresses.find_by(id: decoded)&.id : nil
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Revert order state to 'address' when address changes
|
|
113
|
-
# This ensures shipments are recreated when transitioning back to delivery
|
|
114
|
-
def revert_to_address_state
|
|
115
|
-
return if ['cart', 'address'].include?(order.state)
|
|
116
|
-
|
|
117
|
-
order.state = 'address'
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|