solidus_core 3.1.9 → 3.2.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- 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/default_price.rb +28 -4
- 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/price_selector.rb +1 -18
- data/app/models/spree/variant.rb +2 -2
- 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 -253
- 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.rb +0 -5
- data/lib/spree/preferences/preferable_class_methods.rb +3 -3
- 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
|
@@ -762,10 +762,6 @@ en:
|
|
762
762
|
not_saved:
|
763
763
|
one: '1 error prohibited this %{resource} from being saved:'
|
764
764
|
other: "%{count} errors prohibited this %{resource} from being saved:"
|
765
|
-
number:
|
766
|
-
percentage:
|
767
|
-
format:
|
768
|
-
precision: 1
|
769
765
|
spree:
|
770
766
|
abbreviation: Abbreviation
|
771
767
|
accept: Accept
|
@@ -870,6 +866,10 @@ en:
|
|
870
866
|
new_price: New Price
|
871
867
|
new:
|
872
868
|
new_price: New Price
|
869
|
+
master_variant_table:
|
870
|
+
master_variant: Master Variant Prices
|
871
|
+
table:
|
872
|
+
variant_pricing: Variant Prices
|
873
873
|
promotions:
|
874
874
|
actions:
|
875
875
|
calculator_label: Calculated by
|
@@ -1002,9 +1002,11 @@ en:
|
|
1002
1002
|
edit_variant: Edit Variant
|
1003
1003
|
form:
|
1004
1004
|
dimensions: Dimensions
|
1005
|
+
options: Options
|
1005
1006
|
pricing: Pricing
|
1006
1007
|
pricing_hint: These values are populated from the product details page and
|
1007
1008
|
can be overridden below
|
1009
|
+
properties: Properties
|
1008
1010
|
use_product_tax_category: Use Product Tax Category
|
1009
1011
|
new:
|
1010
1012
|
new_variant: New Variant
|
@@ -1176,257 +1178,10 @@ en:
|
|
1176
1178
|
country_based: Country Based
|
1177
1179
|
country_name: Name
|
1178
1180
|
country_names:
|
1179
|
-
AD: Andorra
|
1180
|
-
AE: United Arab Emirates
|
1181
|
-
AF: Afghanistan
|
1182
|
-
AG: Antigua and Barbuda
|
1183
|
-
AI: Anguilla
|
1184
|
-
AL: Albania
|
1185
|
-
AM: Armenia
|
1186
|
-
AO: Angola
|
1187
|
-
AQ: Antarctica
|
1188
|
-
AR: Argentina
|
1189
|
-
AS: American Samoa
|
1190
|
-
AT: Austria
|
1191
|
-
AU: Australia
|
1192
|
-
AW: Aruba
|
1193
|
-
AX: Åland Islands
|
1194
|
-
AZ: Azerbaijan
|
1195
|
-
BA: Bosnia and Herzegovina
|
1196
|
-
BB: Barbados
|
1197
|
-
BD: Bangladesh
|
1198
|
-
BE: Belgium
|
1199
|
-
BF: Burkina Faso
|
1200
|
-
BG: Bulgaria
|
1201
|
-
BH: Bahrain
|
1202
|
-
BI: Burundi
|
1203
|
-
BJ: Benin
|
1204
|
-
BL: Saint Barthélemy
|
1205
|
-
BM: Bermuda
|
1206
|
-
BN: Brunei Darussalam
|
1207
|
-
BO: Bolivia, Plurinational State of
|
1208
|
-
BQ: Bonaire, Sint Eustatius and Saba
|
1209
|
-
BR: Brazil
|
1210
|
-
BS: Bahamas
|
1211
|
-
BT: Bhutan
|
1212
|
-
BV: Bouvet Island
|
1213
|
-
BW: Botswana
|
1214
|
-
BY: Belarus
|
1215
|
-
BZ: Belize
|
1216
1181
|
CA: Canada
|
1217
|
-
CC: Cocos (Keeling) Islands
|
1218
|
-
CD: Congo, The Democratic Republic of the
|
1219
|
-
CF: Central African Republic
|
1220
|
-
CG: Congo
|
1221
|
-
CH: Switzerland
|
1222
|
-
CI: Côte d'Ivoire
|
1223
|
-
CK: Cook Islands
|
1224
|
-
CL: Chile
|
1225
|
-
CM: Cameroon
|
1226
|
-
CN: China
|
1227
|
-
CO: Colombia
|
1228
|
-
CR: Costa Rica
|
1229
|
-
CU: Cuba
|
1230
|
-
CV: Cabo Verde
|
1231
|
-
CW: Curaçao
|
1232
|
-
CX: Christmas Island
|
1233
|
-
CY: Cyprus
|
1234
|
-
CZ: Czechia
|
1235
|
-
DE: Germany
|
1236
|
-
DJ: Djibouti
|
1237
|
-
DK: Denmark
|
1238
|
-
DM: Dominica
|
1239
|
-
DO: Dominican Republic
|
1240
|
-
DZ: Algeria
|
1241
|
-
EC: Ecuador
|
1242
|
-
EE: Estonia
|
1243
|
-
EG: Egypt
|
1244
|
-
EH: Western Sahara
|
1245
|
-
ER: Eritrea
|
1246
|
-
ES: Spain
|
1247
|
-
ET: Ethiopia
|
1248
|
-
FI: Finland
|
1249
|
-
FJ: Fiji
|
1250
|
-
FK: Falkland Islands (Malvinas)
|
1251
|
-
FM: Micronesia, Federated States of
|
1252
|
-
FO: Faroe Islands
|
1253
|
-
FR: France
|
1254
1182
|
FRA: France
|
1255
|
-
GA: Gabon
|
1256
|
-
GB: United Kingdom
|
1257
|
-
GD: Grenada
|
1258
|
-
GE: Georgia
|
1259
|
-
GF: French Guiana
|
1260
|
-
GG: Guernsey
|
1261
|
-
GH: Ghana
|
1262
|
-
GI: Gibraltar
|
1263
|
-
GL: Greenland
|
1264
|
-
GM: Gambia
|
1265
|
-
GN: Guinea
|
1266
|
-
GP: Guadeloupe
|
1267
|
-
GQ: Equatorial Guinea
|
1268
|
-
GR: Greece
|
1269
|
-
GS: South Georgia and the South Sandwich Islands
|
1270
|
-
GT: Guatemala
|
1271
|
-
GU: Guam
|
1272
|
-
GW: Guinea-Bissau
|
1273
|
-
GY: Guyana
|
1274
|
-
HK: Hong Kong
|
1275
|
-
HM: Heard Island and McDonald Islands
|
1276
|
-
HN: Honduras
|
1277
|
-
HR: Croatia
|
1278
|
-
HT: Haiti
|
1279
|
-
HU: Hungary
|
1280
|
-
ID: Indonesia
|
1281
|
-
IE: Ireland
|
1282
|
-
IL: Israel
|
1283
|
-
IM: Isle of Man
|
1284
|
-
IN: India
|
1285
|
-
IO: British Indian Ocean Territory
|
1286
|
-
IQ: Iraq
|
1287
|
-
IR: Iran, Islamic Republic of
|
1288
|
-
IS: Iceland
|
1289
|
-
IT: Italy
|
1290
1183
|
ITA: Italy
|
1291
|
-
JE: Jersey
|
1292
|
-
JM: Jamaica
|
1293
|
-
JO: Jordan
|
1294
|
-
JP: Japan
|
1295
|
-
KE: Kenya
|
1296
|
-
KG: Kyrgyzstan
|
1297
|
-
KH: Cambodia
|
1298
|
-
KI: Kiribati
|
1299
|
-
KM: Comoros
|
1300
|
-
KN: Saint Kitts and Nevis
|
1301
|
-
KP: Korea, Democratic People's Republic of
|
1302
|
-
KR: Korea, Republic of
|
1303
|
-
KW: Kuwait
|
1304
|
-
KY: Cayman Islands
|
1305
|
-
KZ: Kazakhstan
|
1306
|
-
LA: Lao People's Democratic Republic
|
1307
|
-
LB: Lebanon
|
1308
|
-
LC: Saint Lucia
|
1309
|
-
LI: Liechtenstein
|
1310
|
-
LK: Sri Lanka
|
1311
|
-
LR: Liberia
|
1312
|
-
LS: Lesotho
|
1313
|
-
LT: Lithuania
|
1314
|
-
LU: Luxembourg
|
1315
|
-
LV: Latvia
|
1316
|
-
LY: Libya
|
1317
|
-
MA: Morocco
|
1318
|
-
MC: Monaco
|
1319
|
-
MD: Moldova, Republic of
|
1320
|
-
ME: Montenegro
|
1321
|
-
MF: Saint Martin (French part)
|
1322
|
-
MG: Madagascar
|
1323
|
-
MH: Marshall Islands
|
1324
|
-
MK: North Macedonia
|
1325
|
-
ML: Mali
|
1326
|
-
MM: Myanmar
|
1327
|
-
MN: Mongolia
|
1328
|
-
MO: Macao
|
1329
|
-
MP: Northern Mariana Islands
|
1330
|
-
MQ: Martinique
|
1331
|
-
MR: Mauritania
|
1332
|
-
MS: Montserrat
|
1333
|
-
MT: Malta
|
1334
|
-
MU: Mauritius
|
1335
|
-
MV: Maldives
|
1336
|
-
MW: Malawi
|
1337
|
-
MX: Mexico
|
1338
|
-
MY: Malaysia
|
1339
|
-
MZ: Mozambique
|
1340
|
-
NA: Namibia
|
1341
|
-
NC: New Caledonia
|
1342
|
-
NE: Niger
|
1343
|
-
NF: Norfolk Island
|
1344
|
-
NG: Nigeria
|
1345
|
-
NI: Nicaragua
|
1346
|
-
NL: Netherlands
|
1347
|
-
'NO': Norway
|
1348
|
-
NP: Nepal
|
1349
|
-
NR: Nauru
|
1350
|
-
NU: Niue
|
1351
|
-
NZ: New Zealand
|
1352
|
-
OM: Oman
|
1353
|
-
PA: Panama
|
1354
|
-
PE: Peru
|
1355
|
-
PF: French Polynesia
|
1356
|
-
PG: Papua New Guinea
|
1357
|
-
PH: Philippines
|
1358
|
-
PK: Pakistan
|
1359
|
-
PL: Poland
|
1360
|
-
PM: Saint Pierre and Miquelon
|
1361
|
-
PN: Pitcairn
|
1362
|
-
PR: Puerto Rico
|
1363
|
-
PS: Palestine, State of
|
1364
|
-
PT: Portugal
|
1365
|
-
PW: Palau
|
1366
|
-
PY: Paraguay
|
1367
|
-
QA: Qatar
|
1368
|
-
RE: Réunion
|
1369
|
-
RO: Romania
|
1370
|
-
RS: Serbia
|
1371
|
-
RU: Russia
|
1372
|
-
RW: Rwanda
|
1373
|
-
SA: Saudi Arabia
|
1374
|
-
SB: Solomon Islands
|
1375
|
-
SC: Seychelles
|
1376
|
-
SD: Sudan
|
1377
|
-
SE: Sweden
|
1378
|
-
SG: Singapore
|
1379
|
-
SH: Saint Helena, Ascension and Tristan da Cunha
|
1380
|
-
SI: Slovenia
|
1381
|
-
SJ: Svalbard and Jan Mayen
|
1382
|
-
SK: Slovakia
|
1383
|
-
SL: Sierra Leone
|
1384
|
-
SM: San Marino
|
1385
|
-
SN: Senegal
|
1386
|
-
SO: Somalia
|
1387
|
-
SR: Suriname
|
1388
|
-
SS: South Sudan
|
1389
|
-
ST: Sao Tome and Principe
|
1390
|
-
SV: El Salvador
|
1391
|
-
SX: Sint Maarten (Dutch part)
|
1392
|
-
SY: Syrian Arab Republic
|
1393
|
-
SZ: Eswatini
|
1394
|
-
TC: Turks and Caicos Islands
|
1395
|
-
TD: Chad
|
1396
|
-
TF: French Southern Territories
|
1397
|
-
TG: Togo
|
1398
|
-
TH: Thailand
|
1399
|
-
TJ: Tajikistan
|
1400
|
-
TK: Tokelau
|
1401
|
-
TL: Timor-Leste
|
1402
|
-
TM: Turkmenistan
|
1403
|
-
TN: Tunisia
|
1404
|
-
TO: Tonga
|
1405
|
-
TR: Turkey
|
1406
|
-
TT: Trinidad and Tobago
|
1407
|
-
TV: Tuvalu
|
1408
|
-
TW: Taiwan
|
1409
|
-
TZ: Tanzania, United Republic of
|
1410
|
-
UA: Ukraine
|
1411
|
-
UG: Uganda
|
1412
|
-
UM: United States Minor Outlying Islands
|
1413
1184
|
US: United States of America
|
1414
|
-
UY: Uruguay
|
1415
|
-
UZ: Uzbekistan
|
1416
|
-
VA: Holy See (Vatican City State)
|
1417
|
-
VC: Saint Vincent and the Grenadines
|
1418
|
-
VE: Venezuela, Bolivarian Republic of
|
1419
|
-
VG: Virgin Islands, British
|
1420
|
-
VI: Virgin Islands, U.S.
|
1421
|
-
VN: Vietnam
|
1422
|
-
VU: Vanuatu
|
1423
|
-
WF: Wallis and Futuna
|
1424
|
-
WS: Samoa
|
1425
|
-
YE: Yemen
|
1426
|
-
YT: Mayotte
|
1427
|
-
ZA: South Africa
|
1428
|
-
ZM: Zambia
|
1429
|
-
ZW: Zimbabwe
|
1430
1185
|
coupon: Coupon
|
1431
1186
|
coupon_code: Coupon code
|
1432
1187
|
coupon_code_already_applied: The coupon code has already been applied to this
|
@@ -2501,7 +2256,6 @@ en:
|
|
2501
2256
|
value: Value
|
2502
2257
|
variant: Variant
|
2503
2258
|
variant_placeholder: Choose a Variant
|
2504
|
-
variant_pricing: Variant Pricing
|
2505
2259
|
variant_properties: Variant Properties
|
2506
2260
|
variant_search: Variant Search
|
2507
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
|