solidus_core 3.1.8 → 3.2.0.alpha
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/products_helper.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +23 -10
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
- data/app/models/concerns/spree/user_address_book.rb +11 -1
- data/app/models/spree/adjustment.rb +1 -0
- data/app/models/spree/carton.rb +1 -1
- data/app/models/spree/option_value.rb +9 -0
- data/app/models/spree/order.rb +68 -29
- data/app/models/spree/order_contents.rb +2 -1
- data/app/models/spree/order_inventory.rb +1 -1
- data/app/models/spree/order_merger.rb +2 -2
- data/app/models/spree/order_taxation.rb +6 -4
- data/app/models/spree/order_updater.rb +4 -3
- data/app/models/spree/payment_method.rb +11 -0
- data/app/models/spree/price.rb +1 -1
- data/app/models/spree/product/scopes.rb +21 -3
- data/app/models/spree/product.rb +1 -1
- data/app/models/spree/promotion/actions/create_adjustment.rb +4 -0
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -6
- data/app/models/spree/promotion/rules/product.rb +20 -8
- data/app/models/spree/promotion/rules/store.rb +4 -0
- data/app/models/spree/promotion/rules/taxon.rb +4 -0
- data/app/models/spree/promotion/rules/user.rb +4 -0
- data/app/models/spree/promotion.rb +34 -23
- data/app/models/spree/promotion_action.rb +4 -0
- data/app/models/spree/promotion_code.rb +8 -4
- data/app/models/spree/promotion_handler/cart.rb +26 -6
- data/app/models/spree/promotion_rule.rb +5 -0
- data/app/models/spree/reimbursement.rb +2 -2
- data/app/models/spree/return_item.rb +1 -2
- data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
- data/app/models/spree/stock/quantifier.rb +12 -8
- data/app/models/spree/stock/simple_coordinator.rb +2 -1
- data/app/models/spree/tax/item_tax.rb +3 -2
- data/app/models/spree/tax/order_tax.rb +3 -1
- data/app/models/spree/tax/tax_location.rb +4 -7
- data/app/models/spree/tax_rate.rb +2 -0
- data/app/models/spree/variant.rb +1 -1
- data/app/subscribers/spree/mailer_subscriber.rb +4 -0
- data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
- data/config/locales/en.yml +7 -249
- data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
- data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +20 -0
- data/lib/generators/solidus/install/install_generator/bundler_context.rb +97 -0
- data/lib/generators/solidus/install/install_generator/install_frontend.rb +50 -0
- data/lib/generators/solidus/install/install_generator/support_solidus_frontend_extraction.rb +48 -0
- data/lib/generators/solidus/install/install_generator.rb +56 -49
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +6 -16
- data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
- data/lib/spree/app_configuration.rb +29 -3
- data/lib/spree/bus.rb +20 -0
- data/lib/spree/core/controller_helpers/auth.rb +9 -1
- data/lib/spree/core/controller_helpers/current_host.rb +1 -3
- data/lib/spree/core/controller_helpers/order.rb +10 -10
- data/lib/spree/core/controller_helpers/search.rb +1 -1
- data/lib/spree/core/engine.rb +33 -8
- data/lib/spree/core/state_machines/order.rb +1 -1
- data/lib/spree/core/stock_configuration.rb +18 -0
- data/lib/spree/core/validators/email.rb +3 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +20 -0
- data/lib/spree/event/subscriber_registry.rb +4 -6
- data/lib/spree/event.rb +1 -1
- data/lib/spree/migrations.rb +1 -1
- data/lib/spree/permission_sets/default_customer.rb +8 -1
- data/lib/spree/permitted_attributes.rb +4 -4
- data/lib/spree/preferences/configuration.rb +34 -12
- data/lib/spree/preferences/preferable_class_methods.rb +1 -1
- data/lib/spree/preferences/preference_differentiator.rb +2 -1
- data/lib/spree/preferences/static_model_preferences.rb +0 -2
- data/lib/spree/rails_compatibility.rb +99 -0
- data/lib/spree/testing_support/bus_helpers.rb +101 -0
- data/lib/spree/testing_support/common_rake.rb +47 -19
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +1 -1
- data/lib/spree/testing_support/dummy_app.rb +6 -2
- data/lib/spree/testing_support/factories/address_factory.rb +7 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +8 -4
- data/lib/spree/testing_support/factories/product_factory.rb +4 -1
- data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -4
- data/lib/spree/testing_support/factory_bot.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +5 -4
- data/lib/spree/testing_support/silence_deprecations.rb +9 -0
- data/lib/tasks/payment_method.rake +29 -0
- data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +2 -2
- data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +33 -0
- data/solidus_core.gemspec +6 -2
- metadata +71 -26
- data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
- data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
data/config/locales/en.yml
CHANGED
|
@@ -365,7 +365,7 @@ en:
|
|
|
365
365
|
amount_authorized: Amount Authorized
|
|
366
366
|
amount_credited: Amount Credited
|
|
367
367
|
amount_used: Amount Used
|
|
368
|
-
category_id:
|
|
368
|
+
category_id: Category
|
|
369
369
|
created_at: Issued On
|
|
370
370
|
created_by_id: Created By
|
|
371
371
|
invalidated_at: Invalidated
|
|
@@ -866,6 +866,10 @@ en:
|
|
|
866
866
|
new_price: New Price
|
|
867
867
|
new:
|
|
868
868
|
new_price: New Price
|
|
869
|
+
master_variant_table:
|
|
870
|
+
master_variant: Master Variant Prices
|
|
871
|
+
table:
|
|
872
|
+
variant_pricing: Variant Prices
|
|
869
873
|
promotions:
|
|
870
874
|
actions:
|
|
871
875
|
calculator_label: Calculated by
|
|
@@ -998,9 +1002,11 @@ en:
|
|
|
998
1002
|
edit_variant: Edit Variant
|
|
999
1003
|
form:
|
|
1000
1004
|
dimensions: Dimensions
|
|
1005
|
+
options: Options
|
|
1001
1006
|
pricing: Pricing
|
|
1002
1007
|
pricing_hint: These values are populated from the product details page and
|
|
1003
1008
|
can be overridden below
|
|
1009
|
+
properties: Properties
|
|
1004
1010
|
use_product_tax_category: Use Product Tax Category
|
|
1005
1011
|
new:
|
|
1006
1012
|
new_variant: New Variant
|
|
@@ -1172,257 +1178,10 @@ en:
|
|
|
1172
1178
|
country_based: Country Based
|
|
1173
1179
|
country_name: Name
|
|
1174
1180
|
country_names:
|
|
1175
|
-
AD: Andorra
|
|
1176
|
-
AE: United Arab Emirates
|
|
1177
|
-
AF: Afghanistan
|
|
1178
|
-
AG: Antigua and Barbuda
|
|
1179
|
-
AI: Anguilla
|
|
1180
|
-
AL: Albania
|
|
1181
|
-
AM: Armenia
|
|
1182
|
-
AO: Angola
|
|
1183
|
-
AQ: Antarctica
|
|
1184
|
-
AR: Argentina
|
|
1185
|
-
AS: American Samoa
|
|
1186
|
-
AT: Austria
|
|
1187
|
-
AU: Australia
|
|
1188
|
-
AW: Aruba
|
|
1189
|
-
AX: Åland Islands
|
|
1190
|
-
AZ: Azerbaijan
|
|
1191
|
-
BA: Bosnia and Herzegovina
|
|
1192
|
-
BB: Barbados
|
|
1193
|
-
BD: Bangladesh
|
|
1194
|
-
BE: Belgium
|
|
1195
|
-
BF: Burkina Faso
|
|
1196
|
-
BG: Bulgaria
|
|
1197
|
-
BH: Bahrain
|
|
1198
|
-
BI: Burundi
|
|
1199
|
-
BJ: Benin
|
|
1200
|
-
BL: Saint Barthélemy
|
|
1201
|
-
BM: Bermuda
|
|
1202
|
-
BN: Brunei Darussalam
|
|
1203
|
-
BO: Bolivia, Plurinational State of
|
|
1204
|
-
BQ: Bonaire, Sint Eustatius and Saba
|
|
1205
|
-
BR: Brazil
|
|
1206
|
-
BS: Bahamas
|
|
1207
|
-
BT: Bhutan
|
|
1208
|
-
BV: Bouvet Island
|
|
1209
|
-
BW: Botswana
|
|
1210
|
-
BY: Belarus
|
|
1211
|
-
BZ: Belize
|
|
1212
1181
|
CA: Canada
|
|
1213
|
-
CC: Cocos (Keeling) Islands
|
|
1214
|
-
CD: Congo, The Democratic Republic of the
|
|
1215
|
-
CF: Central African Republic
|
|
1216
|
-
CG: Congo
|
|
1217
|
-
CH: Switzerland
|
|
1218
|
-
CI: Côte d'Ivoire
|
|
1219
|
-
CK: Cook Islands
|
|
1220
|
-
CL: Chile
|
|
1221
|
-
CM: Cameroon
|
|
1222
|
-
CN: China
|
|
1223
|
-
CO: Colombia
|
|
1224
|
-
CR: Costa Rica
|
|
1225
|
-
CU: Cuba
|
|
1226
|
-
CV: Cabo Verde
|
|
1227
|
-
CW: Curaçao
|
|
1228
|
-
CX: Christmas Island
|
|
1229
|
-
CY: Cyprus
|
|
1230
|
-
CZ: Czechia
|
|
1231
|
-
DE: Germany
|
|
1232
|
-
DJ: Djibouti
|
|
1233
|
-
DK: Denmark
|
|
1234
|
-
DM: Dominica
|
|
1235
|
-
DO: Dominican Republic
|
|
1236
|
-
DZ: Algeria
|
|
1237
|
-
EC: Ecuador
|
|
1238
|
-
EE: Estonia
|
|
1239
|
-
EG: Egypt
|
|
1240
|
-
EH: Western Sahara
|
|
1241
|
-
ER: Eritrea
|
|
1242
|
-
ES: Spain
|
|
1243
|
-
ET: Ethiopia
|
|
1244
|
-
FI: Finland
|
|
1245
|
-
FJ: Fiji
|
|
1246
|
-
FK: Falkland Islands (Malvinas)
|
|
1247
|
-
FM: Micronesia, Federated States of
|
|
1248
|
-
FO: Faroe Islands
|
|
1249
|
-
FR: France
|
|
1250
1182
|
FRA: France
|
|
1251
|
-
GA: Gabon
|
|
1252
|
-
GB: United Kingdom
|
|
1253
|
-
GD: Grenada
|
|
1254
|
-
GE: Georgia
|
|
1255
|
-
GF: French Guiana
|
|
1256
|
-
GG: Guernsey
|
|
1257
|
-
GH: Ghana
|
|
1258
|
-
GI: Gibraltar
|
|
1259
|
-
GL: Greenland
|
|
1260
|
-
GM: Gambia
|
|
1261
|
-
GN: Guinea
|
|
1262
|
-
GP: Guadeloupe
|
|
1263
|
-
GQ: Equatorial Guinea
|
|
1264
|
-
GR: Greece
|
|
1265
|
-
GS: South Georgia and the South Sandwich Islands
|
|
1266
|
-
GT: Guatemala
|
|
1267
|
-
GU: Guam
|
|
1268
|
-
GW: Guinea-Bissau
|
|
1269
|
-
GY: Guyana
|
|
1270
|
-
HK: Hong Kong
|
|
1271
|
-
HM: Heard Island and McDonald Islands
|
|
1272
|
-
HN: Honduras
|
|
1273
|
-
HR: Croatia
|
|
1274
|
-
HT: Haiti
|
|
1275
|
-
HU: Hungary
|
|
1276
|
-
ID: Indonesia
|
|
1277
|
-
IE: Ireland
|
|
1278
|
-
IL: Israel
|
|
1279
|
-
IM: Isle of Man
|
|
1280
|
-
IN: India
|
|
1281
|
-
IO: British Indian Ocean Territory
|
|
1282
|
-
IQ: Iraq
|
|
1283
|
-
IR: Iran, Islamic Republic of
|
|
1284
|
-
IS: Iceland
|
|
1285
|
-
IT: Italy
|
|
1286
1183
|
ITA: Italy
|
|
1287
|
-
JE: Jersey
|
|
1288
|
-
JM: Jamaica
|
|
1289
|
-
JO: Jordan
|
|
1290
|
-
JP: Japan
|
|
1291
|
-
KE: Kenya
|
|
1292
|
-
KG: Kyrgyzstan
|
|
1293
|
-
KH: Cambodia
|
|
1294
|
-
KI: Kiribati
|
|
1295
|
-
KM: Comoros
|
|
1296
|
-
KN: Saint Kitts and Nevis
|
|
1297
|
-
KP: Korea, Democratic People's Republic of
|
|
1298
|
-
KR: Korea, Republic of
|
|
1299
|
-
KW: Kuwait
|
|
1300
|
-
KY: Cayman Islands
|
|
1301
|
-
KZ: Kazakhstan
|
|
1302
|
-
LA: Lao People's Democratic Republic
|
|
1303
|
-
LB: Lebanon
|
|
1304
|
-
LC: Saint Lucia
|
|
1305
|
-
LI: Liechtenstein
|
|
1306
|
-
LK: Sri Lanka
|
|
1307
|
-
LR: Liberia
|
|
1308
|
-
LS: Lesotho
|
|
1309
|
-
LT: Lithuania
|
|
1310
|
-
LU: Luxembourg
|
|
1311
|
-
LV: Latvia
|
|
1312
|
-
LY: Libya
|
|
1313
|
-
MA: Morocco
|
|
1314
|
-
MC: Monaco
|
|
1315
|
-
MD: Moldova, Republic of
|
|
1316
|
-
ME: Montenegro
|
|
1317
|
-
MF: Saint Martin (French part)
|
|
1318
|
-
MG: Madagascar
|
|
1319
|
-
MH: Marshall Islands
|
|
1320
|
-
MK: North Macedonia
|
|
1321
|
-
ML: Mali
|
|
1322
|
-
MM: Myanmar
|
|
1323
|
-
MN: Mongolia
|
|
1324
|
-
MO: Macao
|
|
1325
|
-
MP: Northern Mariana Islands
|
|
1326
|
-
MQ: Martinique
|
|
1327
|
-
MR: Mauritania
|
|
1328
|
-
MS: Montserrat
|
|
1329
|
-
MT: Malta
|
|
1330
|
-
MU: Mauritius
|
|
1331
|
-
MV: Maldives
|
|
1332
|
-
MW: Malawi
|
|
1333
|
-
MX: Mexico
|
|
1334
|
-
MY: Malaysia
|
|
1335
|
-
MZ: Mozambique
|
|
1336
|
-
NA: Namibia
|
|
1337
|
-
NC: New Caledonia
|
|
1338
|
-
NE: Niger
|
|
1339
|
-
NF: Norfolk Island
|
|
1340
|
-
NG: Nigeria
|
|
1341
|
-
NI: Nicaragua
|
|
1342
|
-
NL: Netherlands
|
|
1343
|
-
'NO': Norway
|
|
1344
|
-
NP: Nepal
|
|
1345
|
-
NR: Nauru
|
|
1346
|
-
NU: Niue
|
|
1347
|
-
NZ: New Zealand
|
|
1348
|
-
OM: Oman
|
|
1349
|
-
PA: Panama
|
|
1350
|
-
PE: Peru
|
|
1351
|
-
PF: French Polynesia
|
|
1352
|
-
PG: Papua New Guinea
|
|
1353
|
-
PH: Philippines
|
|
1354
|
-
PK: Pakistan
|
|
1355
|
-
PL: Poland
|
|
1356
|
-
PM: Saint Pierre and Miquelon
|
|
1357
|
-
PN: Pitcairn
|
|
1358
|
-
PR: Puerto Rico
|
|
1359
|
-
PS: Palestine, State of
|
|
1360
|
-
PT: Portugal
|
|
1361
|
-
PW: Palau
|
|
1362
|
-
PY: Paraguay
|
|
1363
|
-
QA: Qatar
|
|
1364
|
-
RE: Réunion
|
|
1365
|
-
RO: Romania
|
|
1366
|
-
RS: Serbia
|
|
1367
|
-
RU: Russia
|
|
1368
|
-
RW: Rwanda
|
|
1369
|
-
SA: Saudi Arabia
|
|
1370
|
-
SB: Solomon Islands
|
|
1371
|
-
SC: Seychelles
|
|
1372
|
-
SD: Sudan
|
|
1373
|
-
SE: Sweden
|
|
1374
|
-
SG: Singapore
|
|
1375
|
-
SH: Saint Helena, Ascension and Tristan da Cunha
|
|
1376
|
-
SI: Slovenia
|
|
1377
|
-
SJ: Svalbard and Jan Mayen
|
|
1378
|
-
SK: Slovakia
|
|
1379
|
-
SL: Sierra Leone
|
|
1380
|
-
SM: San Marino
|
|
1381
|
-
SN: Senegal
|
|
1382
|
-
SO: Somalia
|
|
1383
|
-
SR: Suriname
|
|
1384
|
-
SS: South Sudan
|
|
1385
|
-
ST: Sao Tome and Principe
|
|
1386
|
-
SV: El Salvador
|
|
1387
|
-
SX: Sint Maarten (Dutch part)
|
|
1388
|
-
SY: Syrian Arab Republic
|
|
1389
|
-
SZ: Eswatini
|
|
1390
|
-
TC: Turks and Caicos Islands
|
|
1391
|
-
TD: Chad
|
|
1392
|
-
TF: French Southern Territories
|
|
1393
|
-
TG: Togo
|
|
1394
|
-
TH: Thailand
|
|
1395
|
-
TJ: Tajikistan
|
|
1396
|
-
TK: Tokelau
|
|
1397
|
-
TL: Timor-Leste
|
|
1398
|
-
TM: Turkmenistan
|
|
1399
|
-
TN: Tunisia
|
|
1400
|
-
TO: Tonga
|
|
1401
|
-
TR: Turkey
|
|
1402
|
-
TT: Trinidad and Tobago
|
|
1403
|
-
TV: Tuvalu
|
|
1404
|
-
TW: Taiwan
|
|
1405
|
-
TZ: Tanzania, United Republic of
|
|
1406
|
-
UA: Ukraine
|
|
1407
|
-
UG: Uganda
|
|
1408
|
-
UM: United States Minor Outlying Islands
|
|
1409
1184
|
US: United States of America
|
|
1410
|
-
UY: Uruguay
|
|
1411
|
-
UZ: Uzbekistan
|
|
1412
|
-
VA: Holy See (Vatican City State)
|
|
1413
|
-
VC: Saint Vincent and the Grenadines
|
|
1414
|
-
VE: Venezuela, Bolivarian Republic of
|
|
1415
|
-
VG: Virgin Islands, British
|
|
1416
|
-
VI: Virgin Islands, U.S.
|
|
1417
|
-
VN: Vietnam
|
|
1418
|
-
VU: Vanuatu
|
|
1419
|
-
WF: Wallis and Futuna
|
|
1420
|
-
WS: Samoa
|
|
1421
|
-
YE: Yemen
|
|
1422
|
-
YT: Mayotte
|
|
1423
|
-
ZA: South Africa
|
|
1424
|
-
ZM: Zambia
|
|
1425
|
-
ZW: Zimbabwe
|
|
1426
1185
|
coupon: Coupon
|
|
1427
1186
|
coupon_code: Coupon code
|
|
1428
1187
|
coupon_code_already_applied: The coupon code has already been applied to this
|
|
@@ -2497,7 +2256,6 @@ en:
|
|
|
2497
2256
|
value: Value
|
|
2498
2257
|
variant: Variant
|
|
2499
2258
|
variant_placeholder: Choose a Variant
|
|
2500
|
-
variant_pricing: Variant Pricing
|
|
2501
2259
|
variant_properties: Variant Properties
|
|
2502
2260
|
variant_search: Variant Search
|
|
2503
2261
|
variant_search_placeholder: SKU or Option Value
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class SetPromotionsWithAnyPolicyToAllIfPossible < ActiveRecord::Migration[5.2]
|
|
4
|
+
def up
|
|
5
|
+
Spree::Promotion.where(match_policy: :any).includes(:promotion_rules).all.each do |promotion|
|
|
6
|
+
if promotion.promotion_rules.length <= 1
|
|
7
|
+
promotion.update!(match_policy: :all)
|
|
8
|
+
else
|
|
9
|
+
raise StandardError, <<~MSG
|
|
10
|
+
You have promotions with a match policy of any and more than one rule. Please
|
|
11
|
+
run `bundle exec rake solidus:split_promotions_with_any_match_policy`.
|
|
12
|
+
MSG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def down
|
|
18
|
+
# No-Op
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solidus
|
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
|
5
|
+
# Bundler context during the install process.
|
|
6
|
+
#
|
|
7
|
+
# This class gives access to information about the bundler context in which
|
|
8
|
+
# the install generator is run. I.e., which solidus components are present
|
|
9
|
+
# in the user's Gemfile. It also allows modifying the Gemfile to add or
|
|
10
|
+
# remove gems.
|
|
11
|
+
#
|
|
12
|
+
# @api private
|
|
13
|
+
class BundlerContext
|
|
14
|
+
# Write and remove into and from a Gemfile
|
|
15
|
+
#
|
|
16
|
+
# This custom injector fixes support for path, git and custom sources,
|
|
17
|
+
# which is missing in bundler's upstream injector for a dependency fetched
|
|
18
|
+
# with `Bundled.locked_gems.dependencies`.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
class InjectorWithPathSupport < Bundler::Injector
|
|
22
|
+
private def build_gem_lines(conservative_versioning)
|
|
23
|
+
@deps.map do |d|
|
|
24
|
+
name = d.name.dump
|
|
25
|
+
is_local = d.source.instance_of?(Bundler::Source::Path)
|
|
26
|
+
is_git = d.source.instance_of?(Bundler::Source::Git)
|
|
27
|
+
|
|
28
|
+
requirement = if is_local
|
|
29
|
+
", path: \"#{d.source.path}\""
|
|
30
|
+
elsif is_git
|
|
31
|
+
", git: \"#{d.git}\"".yield_self { |g| d.ref ? g + ", ref: \"#{d.ref}\"" : g }
|
|
32
|
+
elsif conservative_versioning
|
|
33
|
+
", \"#{conservative_version(@definition.specs[d.name][0])}\""
|
|
34
|
+
else
|
|
35
|
+
", #{d.requirement.as_list.map(&:dump).join(", ")}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
source = ", :source => \"#{d.source.remotes.join(",")}\"" unless is_local || is_git || d.source.nil?
|
|
39
|
+
|
|
40
|
+
%(gem #{name}#{requirement}#{source})
|
|
41
|
+
end.join("\n")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
attr_reader :dependencies, :injector
|
|
46
|
+
|
|
47
|
+
def self.bundle_cleanly(&block)
|
|
48
|
+
Bundler.respond_to?(:with_unbundled_env) ? Bundler.with_unbundled_env(&block) : Bundler.with_clean_env(&block)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def initialize
|
|
52
|
+
@dependencies = Bundler.locked_gems.dependencies
|
|
53
|
+
@injector = InjectorWithPathSupport
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def solidus_in_gemfile?
|
|
57
|
+
!solidus_dependency.nil?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def component_in_gemfile?(name)
|
|
61
|
+
!@dependencies["solidus_#{name}"].nil?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def break_down_components(components)
|
|
65
|
+
raise <<~MSG unless solidus_in_gemfile?
|
|
66
|
+
solidus meta gem needs to be present in the Gemfile to build the component dependency
|
|
67
|
+
MSG
|
|
68
|
+
|
|
69
|
+
@injector.inject(
|
|
70
|
+
components.map { |component| dependency_for_component(component) }
|
|
71
|
+
)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def remove(*args, **kwargs, &block)
|
|
75
|
+
@injector.remove(*args, **kwargs, &block)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
def dependency_for_component(component)
|
|
81
|
+
Bundler::Dependency.new(
|
|
82
|
+
"solidus_#{component}",
|
|
83
|
+
solidus_dependency.requirement,
|
|
84
|
+
{
|
|
85
|
+
"source" => solidus_dependency.source,
|
|
86
|
+
"git" => solidus_dependency.source.try(:uri),
|
|
87
|
+
"ref" => solidus_dependency.source.try(:ref)
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def solidus_dependency
|
|
93
|
+
@dependencies['solidus']
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solidus
|
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
|
5
|
+
class InstallFrontend
|
|
6
|
+
attr_reader :bundler_context,
|
|
7
|
+
:generator_context
|
|
8
|
+
|
|
9
|
+
def initialize(bundler_context:, generator_context:)
|
|
10
|
+
@bundler_context = bundler_context
|
|
11
|
+
@generator_context = generator_context
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def call(frontend, installer_adds_auth:)
|
|
15
|
+
case frontend
|
|
16
|
+
when 'solidus_frontend'
|
|
17
|
+
install_solidus_frontend
|
|
18
|
+
when 'solidus_starter_frontend'
|
|
19
|
+
install_solidus_starter_frontend(installer_adds_auth)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def install_solidus_frontend
|
|
26
|
+
unless @bundler_context.component_in_gemfile?(:frontend)
|
|
27
|
+
BundlerContext.bundle_cleanly do
|
|
28
|
+
`bundle add solidus_frontend`
|
|
29
|
+
`bundle install`
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
@generator_context.generate('solidus_frontend:install')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def install_solidus_starter_frontend(installer_adds_auth)
|
|
37
|
+
@bundler_context.remove(['solidus_frontend']) if @bundler_context.component_in_gemfile?(:frontend)
|
|
38
|
+
|
|
39
|
+
# TODO: Move installation of solidus_auth_devise to the
|
|
40
|
+
# solidus_starter_frontend template
|
|
41
|
+
BundlerContext.bundle_cleanly { `bundle add solidus_auth_devise` } unless auth_present?(installer_adds_auth)
|
|
42
|
+
`LOCATION="https://raw.githubusercontent.com/solidusio/solidus_starter_frontend/main/template.rb" bin/rails app:template`
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def auth_present?(installer_adds_auth)
|
|
46
|
+
installer_adds_auth || @bundler_context.component_in_gemfile?(:auth_devise)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solidus
|
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
|
5
|
+
# Helper for extracting solidus_frontend from solidus meta-gem
|
|
6
|
+
#
|
|
7
|
+
# We're recommending users use newer solidus_starter_frontend. However,
|
|
8
|
+
# we're still shipping solidus_frontend as part of the solidus meta-gem. The
|
|
9
|
+
# reason is that we don't want users updating previous versions to see its
|
|
10
|
+
# storefront gone suddenly.
|
|
11
|
+
#
|
|
12
|
+
# In future solidus releases, solidus_frontend won't be a component anymore.
|
|
13
|
+
# However, until that happens:
|
|
14
|
+
#
|
|
15
|
+
# - For users of the new frontend, we need to prevent pulling
|
|
16
|
+
# solidus_frontend.
|
|
17
|
+
# - For users of the legacy frontend, we need to prevent Bundler from
|
|
18
|
+
# resolving it from the mono-repo while it's still there.
|
|
19
|
+
#
|
|
20
|
+
# This class is a needed companion during the deprecation
|
|
21
|
+
# path. It'll modify the user's Gemfile, breaking the solidus gem down into
|
|
22
|
+
# its components but solidus_frontend.
|
|
23
|
+
class SupportSolidusFrontendExtraction
|
|
24
|
+
attr_reader :bundler_context
|
|
25
|
+
|
|
26
|
+
def initialize(bundler_context:)
|
|
27
|
+
@bundler_context = bundler_context
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def call
|
|
31
|
+
return unless needs_to_break_down_solidus_meta_gem?
|
|
32
|
+
|
|
33
|
+
break_down_solidus_meta_gem
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def break_down_solidus_meta_gem
|
|
39
|
+
@bundler_context.break_down_components(%w[core backend api sample])
|
|
40
|
+
@bundler_context.remove(['solidus'])
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def needs_to_break_down_solidus_meta_gem?
|
|
44
|
+
@bundler_context.solidus_in_gemfile?
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -2,16 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
require 'rails/generators'
|
|
4
4
|
require 'rails/version'
|
|
5
|
+
require_relative 'install_generator/bundler_context'
|
|
6
|
+
require_relative 'install_generator/support_solidus_frontend_extraction'
|
|
7
|
+
require_relative 'install_generator/install_frontend'
|
|
5
8
|
|
|
6
9
|
module Solidus
|
|
7
10
|
# @private
|
|
8
11
|
class InstallGenerator < Rails::Generators::Base
|
|
9
12
|
CORE_MOUNT_ROUTE = "mount Spree::Core::Engine"
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
LEGACY_FRONTEND = 'solidus_frontend'
|
|
15
|
+
DEFAULT_FRONTEND = 'solidus_starter_frontend'
|
|
16
|
+
FRONTENDS = [
|
|
17
|
+
DEFAULT_FRONTEND,
|
|
18
|
+
LEGACY_FRONTEND,
|
|
19
|
+
'none'
|
|
20
|
+
].freeze
|
|
15
21
|
|
|
16
22
|
class_option :migrate, type: :boolean, default: true, banner: 'Run Solidus migrations'
|
|
17
23
|
class_option :seed, type: :boolean, default: true, banner: 'Load seed data (migrations must be run)'
|
|
@@ -24,11 +30,11 @@ module Solidus
|
|
|
24
30
|
class_option :lib_name, type: :string, default: 'spree'
|
|
25
31
|
class_option :with_authentication, type: :boolean, default: true
|
|
26
32
|
class_option :enforce_available_locales, type: :boolean, default: nil
|
|
27
|
-
class_option :
|
|
33
|
+
class_option :frontend,
|
|
28
34
|
type: :string,
|
|
29
|
-
enum:
|
|
30
|
-
default:
|
|
31
|
-
desc: "Indicates which
|
|
35
|
+
enum: FRONTENDS,
|
|
36
|
+
default: nil,
|
|
37
|
+
desc: "Indicates which frontend to install."
|
|
32
38
|
|
|
33
39
|
def self.source_paths
|
|
34
40
|
paths = superclass.source_paths
|
|
@@ -84,16 +90,10 @@ module Solidus
|
|
|
84
90
|
empty_directory 'app/assets/images'
|
|
85
91
|
|
|
86
92
|
%w{javascripts stylesheets images}.each do |path|
|
|
87
|
-
empty_directory "vendor/assets/#{path}/spree/
|
|
88
|
-
empty_directory "vendor/assets/#{path}/spree/backend" if defined? Spree::Backend || Rails.env.test?
|
|
93
|
+
empty_directory "vendor/assets/#{path}/spree/backend" if defined?(Spree::Backend) || Rails.env.test?
|
|
89
94
|
end
|
|
90
95
|
|
|
91
|
-
if defined?
|
|
92
|
-
template "vendor/assets/javascripts/spree/frontend/all.js"
|
|
93
|
-
template "vendor/assets/stylesheets/spree/frontend/all.css"
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
if defined? Spree::Backend || Rails.env.test?
|
|
96
|
+
if defined?(Spree::Backend) || Rails.env.test?
|
|
97
97
|
template "vendor/assets/javascripts/spree/backend/all.js"
|
|
98
98
|
template "vendor/assets/stylesheets/spree/backend/all.css"
|
|
99
99
|
end
|
|
@@ -104,17 +104,6 @@ module Solidus
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def configure_application
|
|
107
|
-
application <<-RUBY
|
|
108
|
-
# Load application's model / class decorators
|
|
109
|
-
initializer 'spree.decorators' do |app|
|
|
110
|
-
config.to_prepare do
|
|
111
|
-
Dir.glob(Rails.root.join('app/**/*_decorator*.rb')) do |path|
|
|
112
|
-
require_dependency(path)
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
RUBY
|
|
117
|
-
|
|
118
107
|
if !options[:enforce_available_locales].nil?
|
|
119
108
|
application <<-RUBY
|
|
120
109
|
# Prevent this deprecation message: https://github.com/svenfuchs/i18n/commit/3b6e56e
|
|
@@ -133,6 +122,9 @@ module Solidus
|
|
|
133
122
|
Solidus has a default authentication extension that uses Devise.
|
|
134
123
|
You can find more info at https://github.com/solidusio/solidus_auth_devise.
|
|
135
124
|
|
|
125
|
+
Regardless of what you answer here, it'll be installed if you choose
|
|
126
|
+
solidus_starter_frontend as your storefront in a later step.
|
|
127
|
+
|
|
136
128
|
Would you like to install it? (Y/n)"))
|
|
137
129
|
|
|
138
130
|
@plugins_to_be_installed << 'solidus_auth_devise'
|
|
@@ -140,25 +132,6 @@ module Solidus
|
|
|
140
132
|
end
|
|
141
133
|
end
|
|
142
134
|
|
|
143
|
-
def install_payment_method
|
|
144
|
-
name = options[:payment_method]
|
|
145
|
-
|
|
146
|
-
unless options[:auto_accept]
|
|
147
|
-
available_names = PAYMENT_METHODS.keys
|
|
148
|
-
|
|
149
|
-
name = ask("
|
|
150
|
-
You can select a payment method to be included in the installation process.
|
|
151
|
-
Please select a payment method name:", limited_to: available_names, default: available_names.first)
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
gem_name = PAYMENT_METHODS.fetch(name)
|
|
155
|
-
|
|
156
|
-
if gem_name
|
|
157
|
-
@plugins_to_be_installed << gem_name
|
|
158
|
-
@plugin_generators_to_run << "#{gem_name}:install"
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
135
|
def include_seed_data
|
|
163
136
|
append_file "db/seeds.rb", <<-RUBY.strip_heredoc
|
|
164
137
|
|
|
@@ -182,7 +155,7 @@ module Solidus
|
|
|
182
155
|
gem plugin_name
|
|
183
156
|
end
|
|
184
157
|
|
|
185
|
-
bundle_cleanly{ run "bundle install" } if @plugins_to_be_installed.any?
|
|
158
|
+
BundlerContext.bundle_cleanly { run "bundle install" } if @plugins_to_be_installed.any?
|
|
186
159
|
run "spring stop" if defined?(Spring)
|
|
187
160
|
|
|
188
161
|
@plugin_generators_to_run.each do |plugin_generator_name|
|
|
@@ -190,6 +163,22 @@ module Solidus
|
|
|
190
163
|
end
|
|
191
164
|
end
|
|
192
165
|
|
|
166
|
+
def install_frontend
|
|
167
|
+
return if options[:frontend] == 'none'
|
|
168
|
+
|
|
169
|
+
bundler_context = BundlerContext.new
|
|
170
|
+
|
|
171
|
+
frontend = detect_frontend_to_install(bundler_context)
|
|
172
|
+
|
|
173
|
+
support_solidus_frontend_extraction(bundler_context) unless frontend == LEGACY_FRONTEND
|
|
174
|
+
|
|
175
|
+
say_status :installing, frontend
|
|
176
|
+
|
|
177
|
+
InstallFrontend.
|
|
178
|
+
new(bundler_context: bundler_context, generator_context: self).
|
|
179
|
+
call(frontend, installer_adds_auth: @plugins_to_be_installed.include?('solidus_auth_devise'))
|
|
180
|
+
end
|
|
181
|
+
|
|
193
182
|
def run_migrations
|
|
194
183
|
if @run_migrations
|
|
195
184
|
say_status :running, "migrations"
|
|
@@ -258,8 +247,26 @@ module Solidus
|
|
|
258
247
|
|
|
259
248
|
private
|
|
260
249
|
|
|
261
|
-
def
|
|
262
|
-
|
|
250
|
+
def detect_frontend_to_install(bundler_context)
|
|
251
|
+
ENV['FRONTEND'] ||
|
|
252
|
+
options[:frontend] ||
|
|
253
|
+
(bundler_context.component_in_gemfile?(:frontend) && LEGACY_FRONTEND) ||
|
|
254
|
+
(options[:auto_accept] && DEFAULT_FRONTEND) ||
|
|
255
|
+
ask(<<~MSG.indent(8), limited_to: FRONTENDS, default: DEFAULT_FRONTEND)
|
|
256
|
+
|
|
257
|
+
Which frontend would you like to use? solidus_starter_frontend is
|
|
258
|
+
recommended. However, some extensions are still only compatible with
|
|
259
|
+
the now deprecated solidus_frontend.
|
|
260
|
+
|
|
261
|
+
MSG
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
def support_solidus_frontend_extraction(bundler_context)
|
|
265
|
+
say_status "break down", "solidus"
|
|
266
|
+
|
|
267
|
+
SupportSolidusFrontendExtraction.
|
|
268
|
+
new(bundler_context: bundler_context).
|
|
269
|
+
call
|
|
263
270
|
end
|
|
264
271
|
end
|
|
265
272
|
end
|