spree_core 4.4.0 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (212) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/spree/option_values/find_available.rb +1 -1
  3. data/app/finders/spree/product_properties/find_available.rb +1 -1
  4. data/app/finders/spree/products/find.rb +21 -15
  5. data/app/finders/spree/taxons/find.rb +11 -8
  6. data/app/helpers/spree/base_helper.rb +14 -11
  7. data/app/helpers/spree/locale_helper.rb +6 -2
  8. data/app/helpers/spree/products_helper.rb +9 -4
  9. data/app/jobs/spree/variants/remove_from_incomplete_orders_job.rb +9 -0
  10. data/app/jobs/spree/variants/remove_line_item_job.rb +9 -0
  11. data/app/models/concerns/spree/calculated_adjustments.rb +1 -1
  12. data/app/models/concerns/spree/display_link.rb +17 -29
  13. data/app/models/concerns/spree/image_methods.rb +21 -9
  14. data/app/models/concerns/spree/metadata.rb +2 -2
  15. data/app/models/concerns/spree/product_scopes.rb +34 -28
  16. data/app/models/concerns/spree/translatable_resource.rb +25 -0
  17. data/app/models/concerns/spree/translatable_resource_scopes.rb +24 -0
  18. data/app/models/concerns/spree/translatable_resource_slug.rb +17 -0
  19. data/app/models/spree/address.rb +7 -1
  20. data/app/models/spree/asset/support/active_storage.rb +3 -2
  21. data/app/models/spree/asset.rb +3 -0
  22. data/app/models/spree/base.rb +1 -0
  23. data/app/models/spree/cms_page.rb +4 -0
  24. data/app/models/spree/cms_section.rb +12 -12
  25. data/app/models/spree/cms_section_image.rb +15 -0
  26. data/app/models/spree/cms_section_image_one.rb +4 -0
  27. data/app/models/spree/cms_section_image_three.rb +4 -0
  28. data/app/models/spree/cms_section_image_two.rb +4 -0
  29. data/app/models/spree/credit_card.rb +10 -4
  30. data/app/models/spree/customer_return.rb +3 -0
  31. data/app/models/spree/data_feed/google.rb +15 -0
  32. data/app/models/spree/data_feed.rb +40 -0
  33. data/app/models/spree/digital.rb +4 -0
  34. data/app/models/spree/digital_link.rb +7 -0
  35. data/app/models/spree/fulfilment_changer.rb +1 -1
  36. data/app/models/spree/gateway/bogus.rb +1 -1
  37. data/app/models/spree/icon.rb +5 -1
  38. data/app/models/spree/image/configuration/active_storage.rb +5 -1
  39. data/app/models/spree/image.rb +3 -3
  40. data/app/models/spree/inventory_unit.rb +5 -2
  41. data/app/models/spree/legacy_user.rb +1 -2
  42. data/app/models/spree/line_item.rb +4 -1
  43. data/app/models/spree/linkable/homepage.rb +3 -0
  44. data/app/models/spree/linkable/uri.rb +3 -0
  45. data/app/models/spree/log_entry.rb +9 -1
  46. data/app/models/spree/menu.rb +3 -0
  47. data/app/models/spree/menu_item.rb +7 -11
  48. data/app/models/spree/option_type.rb +8 -0
  49. data/app/models/spree/option_value.rb +9 -0
  50. data/app/models/spree/order/address_book.rb +1 -0
  51. data/app/models/spree/order.rb +12 -3
  52. data/app/models/spree/order_merger.rb +1 -1
  53. data/app/models/spree/payment/processing.rb +1 -1
  54. data/app/models/spree/payment.rb +7 -1
  55. data/app/models/spree/payment_capture_event.rb +4 -0
  56. data/app/models/spree/payment_method/store_credit.rb +1 -1
  57. data/app/models/spree/payment_method.rb +3 -0
  58. data/app/models/spree/payment_source.rb +10 -0
  59. data/app/models/spree/preference.rb +4 -0
  60. data/app/models/spree/price.rb +3 -0
  61. data/app/models/spree/product.rb +97 -24
  62. data/app/models/spree/product_property.rb +13 -3
  63. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  64. data/app/models/spree/promotion.rb +6 -0
  65. data/app/models/spree/promotion_rule.rb +1 -1
  66. data/app/models/spree/promotion_rule_user.rb +1 -1
  67. data/app/models/spree/property.rb +10 -1
  68. data/app/models/spree/prototype.rb +3 -0
  69. data/app/models/spree/refund.rb +8 -0
  70. data/app/models/spree/reimbursement.rb +3 -0
  71. data/app/models/spree/return_authorization.rb +3 -0
  72. data/app/models/spree/return_item.rb +4 -0
  73. data/app/models/spree/role.rb +1 -1
  74. data/app/models/spree/role_user.rb +1 -1
  75. data/app/models/spree/shipment.rb +8 -1
  76. data/app/models/spree/shipping_category.rb +3 -0
  77. data/app/models/spree/shipping_method.rb +6 -0
  78. data/app/models/spree/state_change.rb +1 -1
  79. data/app/models/spree/stock/availability_validator.rb +9 -3
  80. data/app/models/spree/stock/content_item.rb +1 -1
  81. data/app/models/spree/stock/quantifier.rb +1 -1
  82. data/app/models/spree/stock_item.rb +5 -0
  83. data/app/models/spree/stock_location.rb +19 -5
  84. data/app/models/spree/stock_movement.rb +4 -0
  85. data/app/models/spree/stock_transfer.rb +3 -0
  86. data/app/models/spree/store.rb +39 -15
  87. data/app/models/spree/store_credit.rb +4 -1
  88. data/app/models/spree/store_favicon_image.rb +17 -0
  89. data/app/models/spree/store_logo.rb +9 -0
  90. data/app/models/spree/store_mailer_logo.rb +13 -0
  91. data/app/models/spree/tax_category.rb +6 -0
  92. data/app/models/spree/tax_rate.rb +6 -1
  93. data/app/models/spree/taxon.rb +26 -7
  94. data/app/models/spree/taxon_image/configuration/active_storage.rb +5 -1
  95. data/app/models/spree/taxon_image.rb +3 -2
  96. data/app/models/spree/taxonomy.rb +8 -1
  97. data/app/models/spree/variant.rb +47 -21
  98. data/app/models/spree/wished_item.rb +4 -0
  99. data/app/models/spree/wishlist.rb +4 -1
  100. data/app/models/spree/zone.rb +3 -0
  101. data/app/services/spree/addresses/create.rb +1 -1
  102. data/app/services/spree/addresses/update.rb +7 -2
  103. data/app/services/spree/cart/remove_line_item.rb +1 -0
  104. data/app/services/spree/data_feeds/google/optional_attributes.rb +23 -0
  105. data/app/services/spree/data_feeds/google/optional_sub_attributes.rb +21 -0
  106. data/app/services/spree/data_feeds/google/products_list.rb +14 -0
  107. data/app/services/spree/data_feeds/google/required_attributes.rb +67 -0
  108. data/app/services/spree/data_feeds/google/rss.rb +107 -0
  109. data/app/services/spree/variants/remove_line_items.rb +15 -0
  110. data/app/sorters/spree/products/sort.rb +23 -0
  111. data/brakeman.ignore +326 -18
  112. data/config/initializers/friendly_id.rb +2 -0
  113. data/config/initializers/mobility.rb +18 -0
  114. data/config/locales/en.yml +6 -2
  115. data/config/routes.rb +43 -0
  116. data/db/migrate/20211201202851_update_linkable_resource_types.rb +10 -0
  117. data/db/migrate/20211203082008_add_settings_to_payment_methods.rb +11 -0
  118. data/db/migrate/20211229162122_disable_propagate_all_variants_by_default.rb +5 -0
  119. data/db/migrate/20220103082046_add_status_and_make_active_at_to_spree_products.rb +7 -0
  120. data/db/migrate/20220106230929_add_internal_note_to_spree_orders.rb +5 -0
  121. data/db/migrate/20220113052823_create_payment_sources.rb +22 -0
  122. data/db/migrate/20220117100333_add_make_active_at_to_spree_products.rb +17 -0
  123. data/db/migrate/20220120092821_add_metadata_to_spree_tax_rates.rb +13 -0
  124. data/db/migrate/20220201103922_add_first_name_and_last_name_to_spree_users.rb +9 -0
  125. data/db/migrate/20220222083546_add_barcode_to_spree_variants.rb +6 -0
  126. data/db/migrate/20220329113557_fix_cms_pages_unique_indexes.rb +8 -0
  127. data/db/migrate/20220613133029_add_metadata_to_spree_stock_items.rb +13 -0
  128. data/db/migrate/20220706112554_create_product_name_and_description_translations_for_mobility_table_backend.rb +27 -0
  129. data/db/migrate/20220715083542_create_spree_product_translations_for_mobility.rb +7 -0
  130. data/db/migrate/20220715120222_change_product_name_null_to_true.rb +5 -0
  131. data/db/migrate/20220718100743_create_spree_taxon_name_and_description_translations_for_mobility_table_backend.rb +27 -0
  132. data/db/migrate/20220718100948_change_taxon_name_null_to_true.rb +5 -0
  133. data/db/migrate/20220802070609_add_locale_to_friendly_id_slugs.rb +11 -0
  134. data/db/migrate/20220802073225_create_spree_product_slug_translations_for_mobility_table_backend.rb +5 -0
  135. data/db/migrate/20220804073928_transfer_data_to_translatable_tables.rb +66 -0
  136. data/db/migrate/20221215151408_add_selected_locale_to_spree_users.rb +8 -0
  137. data/db/migrate/20221219123957_add_deleted_at_to_product_translations.rb +6 -0
  138. data/db/migrate/20221220133432_add_uniqueness_constraint_to_product_translations.rb +5 -0
  139. data/db/migrate/20221229132350_create_spree_data_feed_settings.rb +14 -0
  140. data/db/migrate/20230103144439_create_option_type_translations.rb +26 -0
  141. data/db/migrate/20230103151034_create_option_value_translations.rb +26 -0
  142. data/db/migrate/20230109084253_create_product_property_translations.rb +25 -0
  143. data/db/migrate/20230109094907_transfer_options_data_to_translatable_tables.rb +58 -0
  144. data/db/migrate/20230109105943_create_property_translations.rb +26 -0
  145. data/db/migrate/20230109110840_transfer_property_data_to_translatable_tables.rb +59 -0
  146. data/db/migrate/20230110142344_backfill_friendly_id_slug_locale.rb +15 -0
  147. data/db/migrate/20230111121534_add_additional_taxon_translation_fields.rb +8 -0
  148. data/db/migrate/20230111122511_transfer_product_and_taxon_data_to_translatable_tables.rb +82 -0
  149. data/db/migrate/20230117115531_create_taxonomy_translations.rb +24 -0
  150. data/db/migrate/20230117120430_allow_null_taxonomy_name.rb +5 -0
  151. data/db/migrate/20230117121303_transfer_taxonomy_data_to_translatable_tables.rb +11 -0
  152. data/db/migrate/20230210142732_create_store_translations.rb +50 -0
  153. data/db/migrate/20230210142849_transfer_store_data_to_translatable_tables.rb +11 -0
  154. data/db/migrate/20230210230434_add_deleted_at_to_store_translations.rb +6 -0
  155. data/db/migrate/20230415155958_rename_data_feed_settings_table.rb +5 -0
  156. data/db/migrate/20230415160828_rename_data_feed_table_columns.rb +7 -0
  157. data/db/migrate/20230415161226_add_indexes_to_data_feeds_table.rb +5 -0
  158. data/db/migrate/20230512094803_rename_data_feeds_column_provider_to_type.rb +5 -0
  159. data/db/migrate/20230514162157_add_index_on_locale_and_permalink_to_spree_taxons.rb +5 -0
  160. data/lib/friendly_id/paranoia.rb +4 -0
  161. data/lib/generators/spree/dummy/dummy_generator.rb +13 -2
  162. data/lib/generators/spree/dummy/templates/package.json +12 -0
  163. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  164. data/lib/spree/core/configuration.rb +91 -0
  165. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  166. data/lib/spree/core/controller_helpers/currency.rb +7 -5
  167. data/lib/spree/core/controller_helpers/locale.rb +34 -8
  168. data/lib/spree/core/controller_helpers/order.rb +4 -2
  169. data/lib/spree/core/controller_helpers/search.rb +1 -1
  170. data/lib/spree/core/controller_helpers/store.rb +5 -3
  171. data/lib/spree/core/dependencies.rb +106 -0
  172. data/lib/spree/core/dependencies_helper.rb +19 -0
  173. data/lib/spree/core/engine.rb +53 -38
  174. data/{app/models/spree → lib/spree/core}/preferences/configuration.rb +3 -0
  175. data/{app/models/spree → lib/spree/core}/preferences/preferable.rb +3 -0
  176. data/lib/spree/core/product_duplicator.rb +1 -1
  177. data/lib/spree/core/product_filters.rb +7 -4
  178. data/lib/spree/core/search/base.rb +10 -6
  179. data/lib/spree/core/version.rb +1 -1
  180. data/lib/spree/core.rb +27 -5
  181. data/lib/spree/permitted_attributes.rb +9 -7
  182. data/lib/spree/testing_support/common_rake.rb +1 -0
  183. data/lib/spree/testing_support/factories/favicon_image_factory.rb +9 -0
  184. data/lib/spree/testing_support/factories/google_data_feed_factory.rb +8 -0
  185. data/lib/spree/testing_support/factories/icon_factory.rb +3 -1
  186. data/lib/spree/testing_support/factories/image_factory.rb +3 -1
  187. data/lib/spree/testing_support/factories/menu_item_factory.rb +1 -1
  188. data/lib/spree/testing_support/factories/order_factory.rb +2 -1
  189. data/lib/spree/testing_support/factories/product_factory.rb +12 -1
  190. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -0
  191. data/lib/spree/testing_support/factories/product_translation_factory.rb +6 -0
  192. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  193. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  194. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  196. data/lib/spree/testing_support/factories/stock_location_factory.rb +3 -2
  197. data/lib/spree/testing_support/factories/store_factory.rb +2 -1
  198. data/lib/spree/testing_support/factories/taxon_image_factory.rb +3 -1
  199. data/lib/spree/testing_support/factories/user_factory.rb +4 -0
  200. data/lib/spree/testing_support/factories/variant_factory.rb +8 -0
  201. data/lib/spree/translation_migrations.rb +40 -0
  202. data/lib/spree_core.rb +2 -1
  203. data/lib/tasks/core.rake +12 -0
  204. data/spree_core.gemspec +5 -3
  205. metadata +152 -52
  206. data/app/models/friendly_id/slug_decorator.rb +0 -9
  207. data/app/models/spree/app_configuration.rb +0 -86
  208. data/lib/friendly_id/slug_rails5_patch.rb +0 -11
  209. data/lib/spree/core/app_dependencies.rb +0 -126
  210. /data/{app/models/spree → lib/spree/core}/preferences/preferable_class_methods.rb +0 -0
  211. /data/{app/models/spree → lib/spree/core}/preferences/scoped_store.rb +0 -0
  212. /data/{app/models/spree → lib/spree/core}/preferences/store.rb +0 -0
data/config/routes.rb CHANGED
@@ -1 +1,44 @@
1
+ # direct method cannot be used inside engine routes
2
+ # see: https://github.com/rails/rails/issues/34872
3
+ Rails.application.routes.draw do
4
+ direct :cdn_image do |model, options|
5
+ if model.blob.service_name == 'cloudinary' && defined?(Cloudinary)
6
+ if model.class.method_defined?(:has_mvariation)
7
+ Cloudinary::Utils.cloudinary_url(model.blob.key,
8
+ width: model.variation.transformations[:resize_to_limit].first,
9
+ height: model.variation.transformations[:resize_to_limit].last,
10
+ crop: :fill
11
+ )
12
+ else
13
+ Cloudinary::Utils.cloudinary_url(model.blob.key)
14
+ end
15
+ elsif model.respond_to?(:signed_id)
16
+ route_for(
17
+ :rails_service_blob_proxy,
18
+ model.signed_id,
19
+ model.filename,
20
+ options.merge(
21
+ host: Spree.cdn_host || Rails.application.routes.default_url_options[:host],
22
+ port: Rails.application.routes.default_url_options[:port]
23
+ )
24
+ )
25
+ else
26
+ signed_blob_id = model.blob.signed_id
27
+ variation_key = model.variation.key
28
+ filename = model.blob.filename
29
+
30
+ route_for(
31
+ :rails_blob_representation_proxy,
32
+ signed_blob_id,
33
+ variation_key,
34
+ filename,
35
+ options.merge(
36
+ host: Spree.cdn_host || Rails.application.routes.default_url_options[:host],
37
+ port: Rails.application.routes.default_url_options[:port]
38
+ )
39
+ )
40
+ end
41
+ end
42
+ end
43
+
1
44
  Spree::Core::Engine.draw_routes
@@ -0,0 +1,10 @@
1
+ class UpdateLinkableResourceTypes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_column_default :spree_menu_items, :linked_resource_type, 'Spree::Linkable::Uri'
4
+
5
+ Spree::MenuItem.where(linked_resource_type: 'URL').update_all(linked_resource_type: 'Spree::Linkable::Uri')
6
+ Spree::CmsSection.where(linked_resource_type: 'URL').update_all(linked_resource_type: 'Spree::Linkable::Uri')
7
+ Spree::MenuItem.where(linked_resource_type: 'Home Page').update_all(linked_resource_type: 'Spree::Linkable::Homepage')
8
+ Spree::CmsSection.where(linked_resource_type: 'Home Page').update_all(linked_resource_type: 'Spree::Linkable::Homepage')
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class AddSettingsToPaymentMethods < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_table :spree_payment_methods do |t|
4
+ if t.respond_to? :jsonb
5
+ add_column :spree_payment_methods, :settings, :jsonb
6
+ else
7
+ add_column :spree_payment_methods, :settings, :json
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class DisablePropagateAllVariantsByDefault < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_column_default :spree_stock_locations, :propagate_all_variants, false
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddStatusAndMakeActiveAtToSpreeProducts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_products, :status, :string, null: false, default: 'draft'
4
+ add_index :spree_products, :status
5
+ add_index :spree_products, %i[status deleted_at]
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddInternalNoteToSpreeOrders < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_orders, :internal_note, :text
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ class CreatePaymentSources < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :spree_payment_sources do |t|
4
+ t.string :gateway_payment_profile_id
5
+ t.string :type, index: true
6
+
7
+ t.references :payment_method, index: true, foreign_key: { to_table: :spree_payment_methods }
8
+ t.references :user, index: true, foreign_key: { to_table: :spree_users }
9
+
10
+ if t.respond_to? :jsonb
11
+ t.jsonb :public_metadata
12
+ t.jsonb :private_metadata
13
+ else
14
+ t.json :public_metadata
15
+ t.json :private_metadata
16
+ end
17
+
18
+ t.index [:type, :gateway_payment_profile_id], unique: true, name: 'index_payment_sources_on_type_and_gateway_payment_profile_id'
19
+ t.timestamps
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ class AddMakeActiveAtToSpreeProducts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_products, :make_active_at, :datetime
4
+ add_index :spree_products, :make_active_at
5
+
6
+ Spree::Product.
7
+ where('discontinue_on IS NULL or discontinue_on > ?', Time.current).
8
+ where('available_on <= ?', Time.current).
9
+ where(status: 'draft').
10
+ update_all(status: 'active', updated_at: Time.current)
11
+
12
+ Spree::Product.
13
+ where('discontinue_on <= ?', Time.current).
14
+ where.not(status: 'archived').
15
+ update_all(status: 'archived', updated_at: Time.current)
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ class AddMetadataToSpreeTaxRates < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_table :spree_tax_rates do |t|
4
+ if t.respond_to? :jsonb
5
+ add_column :spree_tax_rates, :public_metadata, :jsonb
6
+ add_column :spree_tax_rates, :private_metadata, :jsonb
7
+ else
8
+ add_column :spree_tax_rates, :public_metadata, :json
9
+ add_column :spree_tax_rates, :private_metadata, :json
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ class AddFirstNameAndLastNameToSpreeUsers < ActiveRecord::Migration[5.2]
2
+ def change
3
+ if Spree.user_class.present?
4
+ users_table_name = Spree.user_class.table_name
5
+ add_column users_table_name, :first_name, :string unless column_exists?(users_table_name, :first_name)
6
+ add_column users_table_name, :last_name, :string unless column_exists?(users_table_name, :last_name)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class AddBarcodeToSpreeVariants < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_variants, :barcode, :string
4
+ add_index :spree_variants, :barcode
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ class FixCmsPagesUniqueIndexes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ remove_index :spree_cms_pages, [:slug, :store_id, :deleted_at]
4
+ remove_index :spree_cms_pages, [:slug, :store_id], unique: true
5
+
6
+ add_index :spree_cms_pages, [:slug, :store_id, :deleted_at], unique: true
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ class AddMetadataToSpreeStockItems < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_table :spree_stock_items do |t|
4
+ if t.respond_to? :jsonb
5
+ add_column :spree_stock_items, :public_metadata, :jsonb
6
+ add_column :spree_stock_items, :private_metadata, :jsonb
7
+ else
8
+ add_column :spree_stock_items, :public_metadata, :json
9
+ add_column :spree_stock_items, :private_metadata, :json
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ class CreateProductNameAndDescriptionTranslationsForMobilityTableBackend < ActiveRecord::Migration[6.1]
2
+ def change
3
+ # create translation table only if spree_globalize has not already created it
4
+ if ActiveRecord::Base.connection.table_exists? 'spree_product_translations'
5
+ # manually check for index since Rails if_exists does not always work correctly
6
+ if ActiveRecord::Migration.connection.index_exists?(:spree_product_translations, :spree_product_id)
7
+ remove_index :spree_product_translations, name: "index_spree_product_translations_on_spree_product_id", if_exists: true
8
+ end
9
+ else
10
+ create_table :spree_product_translations do |t|
11
+
12
+ # Translated attribute(s)
13
+ t.string :name
14
+ t.text :description
15
+
16
+ t.string :locale, null: false
17
+ t.references :spree_product, null: false, foreign_key: true, index: false
18
+
19
+ t.timestamps null: false
20
+ end
21
+
22
+ add_index :spree_product_translations, :locale, name: :index_spree_product_translations_on_locale
23
+ end
24
+
25
+ add_index :spree_product_translations, [:spree_product_id, :locale], name: :unique_product_id_per_locale, unique: true
26
+ end
27
+ end
@@ -0,0 +1,7 @@
1
+ class CreateSpreeProductTranslationsForMobility < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :spree_product_translations, :meta_description, :text, if_not_exists: true
4
+ add_column :spree_product_translations, :meta_keywords, :string, if_not_exists: true
5
+ add_column :spree_product_translations, :meta_title, :string, if_not_exists: true
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class ChangeProductNameNullToTrue < ActiveRecord::Migration[6.1]
2
+ def change
3
+ change_column_null :spree_products, :name, true
4
+ end
5
+ end
@@ -0,0 +1,27 @@
1
+ class CreateSpreeTaxonNameAndDescriptionTranslationsForMobilityTableBackend < ActiveRecord::Migration[6.1]
2
+ def change
3
+ # create translation table only if spree_globalize has not already created it
4
+ if ActiveRecord::Base.connection.table_exists? 'spree_taxon_translations'
5
+ # manually check for index since Rails if_exists does not always work correctly
6
+ if ActiveRecord::Migration.connection.index_exists?(:spree_taxon_translations, :spree_taxon_id)
7
+ # replacing this with index on spree_taxon_id and locale
8
+ remove_index :spree_taxon_translations, name: "index_spree_taxon_translations_on_spree_taxon_id", if_exists: true
9
+ end
10
+ else
11
+ create_table :spree_taxon_translations do |t|
12
+ # Translated attribute(s)
13
+ t.string :name
14
+ t.text :description
15
+
16
+ t.string :locale, null: false
17
+ t.references :spree_taxon, null: false, foreign_key: true, index: false
18
+
19
+ t.timestamps null: false
20
+ end
21
+
22
+ add_index :spree_taxon_translations, :locale, name: :index_spree_taxon_translations_on_locale
23
+ end
24
+
25
+ add_index :spree_taxon_translations, [:spree_taxon_id, :locale], name: :index_spree_taxon_translations_on_spree_taxon_id_and_locale, unique: true
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ class ChangeTaxonNameNullToTrue < ActiveRecord::Migration[6.1]
2
+ def change
3
+ change_column_null :spree_taxons, :name, true
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ class AddLocaleToFriendlyIdSlugs < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :friendly_id_slugs, :locale, :string, null: :false, after: :scope
4
+
5
+ remove_index :friendly_id_slugs, [:slug, :sluggable_type]
6
+ add_index :friendly_id_slugs, [:slug, :sluggable_type, :locale], length: { slug: 140, sluggable_type: 50, locale: 2 }
7
+ remove_index :friendly_id_slugs, [:slug, :sluggable_type, :scope]
8
+ add_index :friendly_id_slugs, [:slug, :sluggable_type, :scope, :locale], length: { slug: 70, sluggable_type: 50, scope: 70, locale: 2 }, unique: true, name: :index_friendly_id_slugs_unique
9
+ add_index :friendly_id_slugs, :locale
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class CreateSpreeProductSlugTranslationsForMobilityTableBackend < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :spree_product_translations, :slug, :string
4
+ end
5
+ end
@@ -0,0 +1,66 @@
1
+ class TransferDataToTranslatableTables < ActiveRecord::Migration[6.1]
2
+ DEFAULT_LOCALE = 'en'
3
+ PRODUCTS_TABLE = 'spree_products'
4
+ PRODUCT_TRANSLATIONS_TABLE = 'spree_product_translations'
5
+ TAXONS_TABLE = 'spree_taxons'
6
+ TAXON_TRANSLATIONS_TABLE = 'spree_taxon_translations'
7
+
8
+ def up
9
+ # Products
10
+ ActiveRecord::Base.connection.execute("
11
+ INSERT INTO #{PRODUCT_TRANSLATIONS_TABLE} (name, description, locale, spree_product_id, created_at, updated_at, meta_description, meta_keywords, meta_title, slug)
12
+ SELECT name, description, '#{DEFAULT_LOCALE}' as locale, id, created_at, updated_at, meta_description, meta_keywords, meta_title, slug FROM #{PRODUCTS_TABLE}
13
+ ")
14
+ ActiveRecord::Base.connection.execute("
15
+ UPDATE #{PRODUCTS_TABLE}
16
+ SET name=null, description=null, meta_description=null, meta_keywords=null, meta_title=null, slug=null;
17
+ ")
18
+ #Taxons
19
+ ActiveRecord::Base.connection.execute("
20
+ INSERT INTO #{TAXON_TRANSLATIONS_TABLE} (name, description, locale, spree_taxon_id, created_at, updated_at)
21
+ SELECT name, description, '#{DEFAULT_LOCALE}' as locale, id, created_at, updated_at FROM #{TAXONS_TABLE}
22
+ ")
23
+ ActiveRecord::Base.connection.execute("
24
+ UPDATE #{TAXONS_TABLE}
25
+ SET name=null, description=null
26
+ ")
27
+ end
28
+
29
+ def down
30
+ ActiveRecord::Base.connection.execute("
31
+ UPDATE #{PRODUCTS_TABLE} as products
32
+ SET (name,
33
+ description,
34
+ meta_description,
35
+ meta_keywords,
36
+ meta_title,
37
+ slug) =
38
+ (t_products.name,
39
+ t_products.description,
40
+ t_products.meta_description,
41
+ t_products.meta_keywords,
42
+ t_products.meta_title,
43
+ t_products.slug)
44
+ FROM #{PRODUCT_TRANSLATIONS_TABLE} AS t_products
45
+ WHERE t_products.spree_product_id = products.id
46
+ ")
47
+
48
+ ActiveRecord::Base.connection.execute("
49
+ TRUNCATE TABLE #{PRODUCT_TRANSLATIONS_TABLE}
50
+ ")
51
+
52
+ ActiveRecord::Base.connection.execute("
53
+ UPDATE #{TAXONS_TABLE} as taxons
54
+ SET (name,
55
+ description) =
56
+ (t_taxons.name,
57
+ t_taxons.description)
58
+ FROM #{TAXON_TRANSLATIONS_TABLE} AS t_taxons
59
+ WHERE t_taxons.spree_taxon_id = taxons.id
60
+ ")
61
+
62
+ ActiveRecord::Base.connection.execute("
63
+ TRUNCATE TABLE #{TAXON_TRANSLATIONS_TABLE}
64
+ ")
65
+ end
66
+ end
@@ -0,0 +1,8 @@
1
+ class AddSelectedLocaleToSpreeUsers < ActiveRecord::Migration[6.1]
2
+ def change
3
+ if Spree.user_class.present?
4
+ users_table_name = Spree.user_class.table_name
5
+ add_column users_table_name, :selected_locale, :string unless column_exists?(users_table_name, :selected_locale)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ class AddDeletedAtToProductTranslations < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :spree_product_translations, :deleted_at, :datetime
4
+ add_index :spree_product_translations, :deleted_at
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddUniquenessConstraintToProductTranslations < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_index :spree_product_translations, [:locale, :slug], unique: true, name: 'unique_slug_per_locale'
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ class CreateSpreeDataFeedSettings < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :spree_data_feed_settings do |t|
4
+ t.references :spree_store
5
+
6
+ t.string :name
7
+ t.string :provider
8
+ t.string :uuid, unique: true
9
+ t.boolean :enabled, default: true
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ class CreateOptionTypeTranslations < ActiveRecord::Migration[6.1]
2
+ def change
3
+ if ActiveRecord::Base.connection.table_exists? 'spree_option_type_translations'
4
+ # manually check for index since Rails if_exists does not always work correctly
5
+ if ActiveRecord::Migration.connection.index_exists?(:spree_option_type_translations, :spree_option_type_id)
6
+ remove_index :spree_option_type_translations, name: "index_spree_option_type_translations_on_spree_option_type_id", if_exists: true
7
+ end
8
+ else
9
+ create_table :spree_option_type_translations do |t|
10
+
11
+ # Translated attribute(s)
12
+ t.string :name
13
+ t.string :presentation
14
+
15
+ t.string :locale, null: false
16
+ t.references :spree_option_type, null: false, foreign_key: true, index: false
17
+
18
+ t.timestamps
19
+ end
20
+
21
+ add_index :spree_option_type_translations, :locale, name: :index_spree_option_type_translations_on_locale
22
+ end
23
+
24
+ add_index :spree_option_type_translations, [:spree_option_type_id, :locale], name: :unique_option_type_id_per_locale, unique: true
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ class CreateOptionValueTranslations < ActiveRecord::Migration[6.1]
2
+ def change
3
+ if ActiveRecord::Base.connection.table_exists? 'spree_option_value_translations'
4
+ # manually check for index since Rails if_exists does not always work correctly
5
+ if ActiveRecord::Migration.connection.index_exists?(:spree_option_value_translations, :spree_option_value_id)
6
+ remove_index :spree_option_value_translations, column: :spree_option_value_id, if_exists: true
7
+ end
8
+ else
9
+ create_table :spree_option_value_translations do |t|
10
+
11
+ # Translated attribute(s)
12
+ t.string :name
13
+ t.string :presentation
14
+
15
+ t.string :locale, null: false
16
+ t.references :spree_option_value, null: false, foreign_key: true, index: false
17
+
18
+ t.timestamps
19
+ end
20
+
21
+ add_index :spree_option_value_translations, :locale, name: :index_spree_option_value_translations_on_locale
22
+ end
23
+
24
+ add_index :spree_option_value_translations, [:spree_option_value_id, :locale], name: :unique_option_value_id_per_locale, unique: true
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ class CreateProductPropertyTranslations < ActiveRecord::Migration[6.1]
2
+ def change
3
+ if ActiveRecord::Base.connection.table_exists? 'spree_product_property_translations'
4
+ # manually check for index since Rails if_exists does not always work correctly
5
+ if ActiveRecord::Migration.connection.index_exists?(:spree_product_property_translations, :spree_product_property_id)
6
+ remove_index :spree_product_property_translations, column: :spree_product_property_id, if_exists: true
7
+ end
8
+ else
9
+ create_table :spree_product_property_translations do |t|
10
+ # Translated attribute(s)
11
+ t.string :value
12
+ t.string :filter_param
13
+
14
+ t.string :locale, null: false
15
+ t.references :spree_product_property, null: false, foreign_key: true, index: false
16
+
17
+ t.timestamps
18
+ end
19
+
20
+ add_index :spree_product_property_translations, :locale, name: :index_spree_product_property_translations_on_locale
21
+ end
22
+
23
+ add_index :spree_product_property_translations, [:spree_product_property_id, :locale], name: :unique_product_property_id_per_locale, unique: true
24
+ end
25
+ end
@@ -0,0 +1,58 @@
1
+ class TransferOptionsDataToTranslatableTables < ActiveRecord::Migration[6.1]
2
+ DEFAULT_LOCALE = 'en'
3
+
4
+ def up
5
+ # Only transfer data if translation tables are being newly created / no translations exist
6
+ # Otherwise, assume translation data is already in place from spree_globalize
7
+
8
+ # Option Types
9
+ if not Spree::OptionType::Translation.exists?
10
+ ActiveRecord::Base.connection.execute("
11
+ INSERT INTO spree_option_type_translations (name, presentation, locale, spree_option_type_id, created_at, updated_at)
12
+ SELECT name, presentation, '#{DEFAULT_LOCALE}', id, created_at, updated_at
13
+ FROM spree_option_types;
14
+ ")
15
+ ActiveRecord::Base.connection.execute("
16
+ UPDATE spree_option_types
17
+ SET name=null, presentation=null;
18
+ ")
19
+ end
20
+
21
+ # Option Values
22
+ if not Spree::OptionValue::Translation.exists?
23
+ ActiveRecord::Base.connection.execute("
24
+ INSERT INTO spree_option_value_translations (name, presentation, locale, spree_option_value_id, created_at, updated_at)
25
+ SELECT name, presentation, '#{DEFAULT_LOCALE}', id, created_at, updated_at
26
+ FROM spree_option_values;
27
+ ")
28
+ ActiveRecord::Base.connection.execute("
29
+ UPDATE spree_option_values
30
+ SET name=null, presentation=null;
31
+ ")
32
+ end
33
+ end
34
+
35
+ def down
36
+ # Option Types
37
+ ActiveRecord::Base.connection.execute("
38
+ UPDATE spree_option_types as option_types
39
+ SET (name, presentation) = (t_option_types.name, t_option_types.presentation)
40
+ FROM spree_option_type_translations AS t_option_types
41
+ WHERE t_option_types.spree_option_type_id = option_types.id;
42
+ ")
43
+ ActiveRecord::Base.connection.execute("
44
+ TRUNCATE TABLE spree_option_type_translations;
45
+ ")
46
+
47
+ # Option Values
48
+ ActiveRecord::Base.connection.execute("
49
+ UPDATE spree_option_values as option_values
50
+ SET (name, presentation) = (t_option_values.name, t_option_values.presentation)
51
+ FROM spree_option_value_translations AS t_option_values
52
+ WHERE t_option_values.spree_option_value_id = option_values.id;
53
+ ")
54
+ ActiveRecord::Base.connection.execute("
55
+ TRUNCATE TABLE spree_option_value_translations;
56
+ ")
57
+ end
58
+ end
@@ -0,0 +1,26 @@
1
+ class CreatePropertyTranslations < ActiveRecord::Migration[6.1]
2
+ def change
3
+ if ActiveRecord::Base.connection.table_exists?('spree_property_translations')
4
+ # manually check for index since Rails if_exists does not always work correctly
5
+ if ActiveRecord::Migration.connection.index_exists?(:spree_property_translations, :spree_property_id)
6
+ remove_index :spree_property_translations, column: :spree_property_id, if_exists: true
7
+ end
8
+ else
9
+ create_table :spree_property_translations do |t|
10
+ # Translated attribute(s)
11
+ t.string :name
12
+ t.string :presentation
13
+ t.string :filter_param
14
+
15
+ t.string :locale, null: false
16
+ t.references :spree_property, null: false, foreign_key: true, index: false
17
+
18
+ t.timestamps
19
+ end
20
+
21
+ add_index :spree_property_translations, :locale, name: :index_spree_property_translations_on_locale
22
+ end
23
+
24
+ add_index :spree_property_translations, [:spree_property_id, :locale], name: :unique_property_id_per_locale, unique: true
25
+ end
26
+ end
@@ -0,0 +1,59 @@
1
+ class TransferPropertyDataToTranslatableTables < ActiveRecord::Migration[6.1]
2
+ DEFAULT_LOCALE = 'en'
3
+
4
+ def up
5
+ # Properties
6
+ change_column_null :spree_properties, :presentation, true
7
+
8
+ if not Spree::Property::Translation.exists?
9
+ ActiveRecord::Base.connection.execute("
10
+ INSERT INTO spree_property_translations (name, presentation, filter_param, locale, spree_property_id, created_at, updated_at)
11
+ SELECT name, presentation, filter_param, '#{DEFAULT_LOCALE}', id, created_at, updated_at
12
+ FROM spree_properties;
13
+ ")
14
+ ActiveRecord::Base.connection.execute("
15
+ UPDATE spree_properties
16
+ SET name=null, presentation=null, filter_param=null;
17
+ ")
18
+ end
19
+
20
+ # Product Properties
21
+ if not Spree::ProductProperty::Translation.exists?
22
+ ActiveRecord::Base.connection.execute("
23
+ INSERT INTO spree_product_property_translations (value, filter_param, locale, spree_product_property_id, created_at, updated_at)
24
+ SELECT value, filter_param, '#{DEFAULT_LOCALE}', id, created_at, updated_at
25
+ FROM spree_product_properties;
26
+ ")
27
+ ActiveRecord::Base.connection.execute("
28
+ UPDATE spree_product_properties
29
+ SET value=null, filter_param=null;
30
+ ")
31
+ end
32
+ end
33
+
34
+ def down
35
+ # Properties
36
+ change_column_null :spree_properties, :presentation, false
37
+
38
+ ActiveRecord::Base.connection.execute("
39
+ UPDATE spree_properties AS properties
40
+ SET (name, presentation, filter_param) = (t_properties.name, t_properties.presentation, t_properties.filter_param)
41
+ FROM spree_property_translations AS t_properties
42
+ WHERE t_properties.spree_property_id = properties.id;
43
+ ")
44
+ ActiveRecord::Base.connection.execute("
45
+ TRUNCATE TABLE spree_property_translations;
46
+ ")
47
+
48
+ # Product Properties
49
+ ActiveRecord::Base.connection.execute("
50
+ UPDATE spree_product_properties AS product_properties
51
+ SET (value, filter_param) = (t_product_properties.value, t_product_properties.filter_param)
52
+ FROM spree_product_property_translations AS t_product_properties
53
+ WHERE t_product_properties.spree_product_property_id = product_properties.id;
54
+ ")
55
+ ActiveRecord::Base.connection.execute("
56
+ TRUNCATE TABLE spree_product_property_translations;
57
+ ")
58
+ end
59
+ end
@@ -0,0 +1,15 @@
1
+ class BackfillFriendlyIdSlugLocale < ActiveRecord::Migration[6.1]
2
+ DEFAULT_LOCALE = 'en'
3
+
4
+ def up
5
+ ActiveRecord::Base.connection.execute("
6
+ UPDATE friendly_id_slugs SET locale = '#{DEFAULT_LOCALE}'
7
+ ")
8
+ end
9
+
10
+ def down
11
+ ActiveRecord::Base.connection.execute("
12
+ UPDATE friendly_id_slugs SET locale = NULL
13
+ ")
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ class AddAdditionalTaxonTranslationFields < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :spree_taxon_translations, :meta_title, :string, if_not_exists: true
4
+ add_column :spree_taxon_translations, :meta_description, :string, if_not_exists: true
5
+ add_column :spree_taxon_translations, :meta_keywords, :string, if_not_exists: true
6
+ add_column :spree_taxon_translations, :permalink, :string, if_not_exists: true
7
+ end
8
+ end