solidus_core 3.4.2 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/controllers/spree/base_controller.rb +0 -2
  4. data/app/helpers/spree/products_helper.rb +1 -1
  5. data/app/models/concerns/spree/active_storage_adapter.rb +0 -17
  6. data/app/models/concerns/spree/default_price.rb +0 -15
  7. data/app/models/concerns/spree/ransackable_attributes.rb +0 -21
  8. data/app/models/spree/adjustment.rb +0 -13
  9. data/app/models/spree/carton.rb +1 -1
  10. data/app/models/spree/fulfilment_changer.rb +2 -14
  11. data/app/models/spree/option_value.rb +2 -11
  12. data/app/models/spree/order.rb +23 -39
  13. data/app/models/spree/order_contents.rb +2 -2
  14. data/app/models/spree/order_merger.rb +2 -4
  15. data/app/models/spree/order_updater.rb +3 -30
  16. data/app/models/spree/payment.rb +5 -37
  17. data/app/models/spree/product/scopes.rb +0 -5
  18. data/app/models/spree/product.rb +3 -10
  19. data/app/models/spree/promotion/rules/item_total.rb +0 -11
  20. data/app/models/spree/promotion.rb +7 -30
  21. data/app/models/spree/promotion_rule.rb +0 -5
  22. data/app/models/spree/refund.rb +1 -1
  23. data/app/models/spree/taxon/paperclip_attachment.rb +1 -1
  24. data/app/models/spree/taxon.rb +2 -2
  25. data/app/models/spree/taxonomy.rb +1 -1
  26. data/app/models/spree/variant/price_selector.rb +1 -14
  27. data/app/models/spree/variant.rb +1 -17
  28. data/bin/rails +13 -0
  29. data/config/locales/en.yml +0 -1
  30. data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
  31. data/db/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
  32. data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +5 -0
  33. data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +6 -0
  34. data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +13 -0
  35. data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
  36. data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
  37. data/lib/generators/solidus/install/app_templates/frontend/none.rb +1 -2
  38. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -3
  39. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +2 -14
  40. data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
  41. data/lib/generators/solidus/install/install_generator.rb +59 -153
  42. data/lib/spree/app_configuration.rb +10 -82
  43. data/lib/spree/bus.rb +2 -11
  44. data/lib/spree/core/controller_helpers/auth.rb +0 -16
  45. data/lib/spree/core/engine.rb +11 -31
  46. data/lib/spree/core/importer/order.rb +1 -1
  47. data/lib/spree/core/validators/email.rb +0 -4
  48. data/lib/spree/core/version.rb +2 -2
  49. data/lib/spree/core.rb +0 -2
  50. data/lib/spree/migration_helpers.rb +3 -3
  51. data/lib/spree/permission_sets/configuration_display.rb +19 -1
  52. data/lib/spree/permission_sets/configuration_management.rb +18 -1
  53. data/lib/spree/permission_sets/dashboard_display.rb +5 -0
  54. data/lib/spree/permission_sets/default_customer.rb +29 -0
  55. data/lib/spree/permission_sets/order_display.rb +19 -0
  56. data/lib/spree/permission_sets/order_management.rb +18 -0
  57. data/lib/spree/permission_sets/product_display.rb +14 -0
  58. data/lib/spree/permission_sets/product_management.rb +16 -0
  59. data/lib/spree/permission_sets/promotion_display.rb +10 -0
  60. data/lib/spree/permission_sets/promotion_management.rb +10 -0
  61. data/lib/spree/permission_sets/restricted_stock_display.rb +5 -0
  62. data/lib/spree/permission_sets/restricted_stock_management.rb +5 -0
  63. data/lib/spree/permission_sets/stock_display.rb +4 -0
  64. data/lib/spree/permission_sets/stock_management.rb +4 -0
  65. data/lib/spree/permission_sets/super_user.rb +5 -0
  66. data/lib/spree/permission_sets/user_display.rb +4 -0
  67. data/lib/spree/permission_sets/user_management.rb +9 -0
  68. data/lib/spree/preferences/preferable_class_methods.rb +1 -25
  69. data/lib/spree/testing_support/common_rake.rb +5 -1
  70. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +4 -8
  71. data/lib/spree/testing_support/dummy_app.rb +1 -7
  72. data/lib/spree/testing_support/factories/address_factory.rb +0 -7
  73. data/lib/spree/testing_support/factories/adjustment_factory.rb +0 -11
  74. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
  75. data/lib/spree/testing_support/factories/calculator_factory.rb +0 -5
  76. data/lib/spree/testing_support/factories/carton_factory.rb +0 -8
  77. data/lib/spree/testing_support/factories/country_factory.rb +0 -5
  78. data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
  79. data/lib/spree/testing_support/factories/customer_return_factory.rb +0 -9
  80. data/lib/spree/testing_support/factories/image_factory.rb +0 -5
  81. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +0 -10
  82. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
  83. data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
  84. data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
  85. data/lib/spree/testing_support/factories/order_factory.rb +0 -12
  86. data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
  87. data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
  88. data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
  89. data/lib/spree/testing_support/factories/price_factory.rb +0 -7
  90. data/lib/spree/testing_support/factories/product_factory.rb +0 -11
  91. data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
  92. data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
  93. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -5
  94. data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
  95. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -8
  96. data/lib/spree/testing_support/factories/property_factory.rb +0 -5
  97. data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
  98. data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
  99. data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
  100. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
  101. data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
  102. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
  103. data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
  104. data/lib/spree/testing_support/factories/role_factory.rb +0 -5
  105. data/lib/spree/testing_support/factories/shipment_factory.rb +0 -10
  106. data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
  107. data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
  108. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
  109. data/lib/spree/testing_support/factories/state_factory.rb +0 -8
  110. data/lib/spree/testing_support/factories/stock_item_factory.rb +0 -8
  111. data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
  112. data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
  113. data/lib/spree/testing_support/factories/stock_package_factory.rb +0 -8
  114. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
  115. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
  116. data/lib/spree/testing_support/factories/store_credit_factory.rb +0 -9
  117. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
  118. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
  119. data/lib/spree/testing_support/factories/store_factory.rb +0 -5
  120. data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
  121. data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
  122. data/lib/spree/testing_support/factories/taxon_factory.rb +0 -7
  123. data/lib/spree/testing_support/factories/taxonomy_factory.rb +0 -5
  124. data/lib/spree/testing_support/factories/user_factory.rb +0 -9
  125. data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
  126. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
  127. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
  128. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
  129. data/lib/spree/testing_support/factories/zone_factory.rb +0 -8
  130. data/lib/spree/testing_support/factory_bot.rb +4 -28
  131. data/lib/spree/testing_support/sequences.rb +0 -5
  132. data/solidus_core.gemspec +3 -3
  133. metadata +48 -58
  134. data/app/subscribers/spree/mailer_subscriber.rb +0 -29
  135. data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +0 -54
  136. data/lib/generators/solidus/install/app_templates/frontend/classic.rb +0 -16
  137. data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +0 -13
  138. data/lib/spree/core/controller_helpers/current_host.rb +0 -19
  139. data/lib/spree/event/adapters/active_support_notifications.rb +0 -67
  140. data/lib/spree/event/configuration.rb +0 -25
  141. data/lib/spree/event/subscriber.rb +0 -86
  142. data/lib/spree/event/subscriber_registry.rb +0 -92
  143. data/lib/spree/event.rb +0 -119
  144. data/lib/spree/promotion/match_policies.rb +0 -2
  145. data/lib/spree/rails_compatibility.rb +0 -106
  146. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +0 -10
  147. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +0 -9
  148. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +0 -1
  149. data/lib/spree/testing_support/factories.rb +0 -11
  150. data/lib/spree/testing_support.rb +0 -36
  151. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +0 -18
  152. data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +0 -33
@@ -21,7 +21,6 @@ require "spree/core/search/base"
21
21
  require "spree/core/search/variant"
22
22
  require 'spree/preferences/configuration'
23
23
  require 'spree/core/environment'
24
- require 'spree/rails_compatibility'
25
24
 
26
25
  module Spree
27
26
  class AppConfiguration < Preferences::Configuration
@@ -61,27 +60,6 @@ module Spree
61
60
  # @return [Boolean] When false, customers must create an account to complete an order (default: +true+)
62
61
  preference :allow_guest_checkout, :boolean, default: true
63
62
 
64
- # @!attribute [rw] allow_promotions_any_match_policy
65
- # @return [Boolean] When false, admins cannot create promotions with an "any" match policy (default: +false+)
66
- # Create individual, separate promotions for each of your rules instead.
67
- preference :allow_promotions_any_match_policy, :boolean, default: false
68
- def allow_promotions_any_match_policy=(value)
69
- if value == true
70
- Spree::Deprecation.warn <<~MSG
71
- Solidus 4.0 will remove support for combining promotion rules with the "any" match policy.
72
-
73
- Instead, it's suggested to create individual, separate promotions for each of your current
74
- rules combined with the "any" policy. To automate this task, you can use the provided
75
- task:
76
-
77
- bin/rake solidus:split_promotions_with_any_match_policy
78
- MSG
79
- end
80
-
81
- preferences[:allow_promotions_any_match_policy] = value
82
- end
83
-
84
-
85
63
  # @!attribute [rw] guest_token_cookie_options
86
64
  # @return [Hash] Add additional guest_token cookie options here (ie. domain or path)
87
65
  preference :guest_token_cookie_options, :hash, default: {}
@@ -171,38 +149,6 @@ module Spree
171
149
  # @return [Regexp] Regex to be used in email validations, for example in Spree::EmailValidator
172
150
  preference :default_email_regexp, :regexp, default: URI::MailTo::EMAIL_REGEXP
173
151
 
174
- # @!attribute [rw] extra_taxon_validations
175
- # Use extra validations on Taxons in 3.4.0, but default to false so stores can
176
- # upgrade and then fix any now invalid Taxons before enabling.
177
- # @return [Boolean]
178
- versioned_preference :extra_taxon_validations, :boolean, initial_value: false, boundaries: { "3.4.0.dev" => true }
179
- def extra_taxon_validations=(value)
180
- Spree::Deprecation.warn <<~MSG
181
- Solidus will remove `Spree::Config.extra_taxon_validations` preference
182
- in the next major release and will always use the extra Taxon validations.
183
- Before upgrading to the next major, please fix any now invalid Taxons
184
- and then remove the preference definition in `config/initializers/spree.rb`.
185
- MSG
186
-
187
- preferences[:extra_taxon_validations] = value
188
- end
189
-
190
- # @!attribute [rw] extra_taxonomy_validations
191
- # Use extra validations on Taxonomies in 3.4.0, but default to false so stores can
192
- # upgrade and then fix any now invalid Taxonomies before enabling.
193
- # @return [Boolean]
194
- versioned_preference :extra_taxonomy_validations, :boolean, initial_value: false, boundaries: { "3.4.0.dev" => true }
195
- def extra_taxonomy_validations=(value)
196
- Spree::Deprecation.warn <<~MSG
197
- Solidus will remove `Spree::Config.extra_taxonomy_validations` preference
198
- in the next major release and will always use the extra Taxonomy validations.
199
- Before upgrading to the next major, please fix any now invalid Taxons
200
- and then remove the preference definition in `config/initializers/spree.rb`.
201
- MSG
202
-
203
- preferences[:extra_taxonomy_validations] = value
204
- end
205
-
206
152
  # @!attribute [rw] generate_api_key_for_all_roles
207
153
  # @return [Boolean] Allow generating api key automatically for user
208
154
  # at role_user creation for all roles. (default: +false+)
@@ -239,20 +185,6 @@ module Spree
239
185
  # entity expansion attacks.
240
186
  preference :log_entry_allow_aliases, :boolean, default: true
241
187
 
242
- # @!attribute [rw] mails_from
243
- # @return [String] Email address used as +From:+ field in transactional emails.
244
- # @deprecated Spree::Store#mail_from_address is used instead
245
- preference :mails_from, :string, default: 'solidus@example.com'
246
- def mails_from=(value)
247
- Spree::Deprecation.warn(<<~MSG) && preferences[:mail_from] = value
248
- Solidus doesn't use `Spree::Config.mails_from` preference and it'll
249
- removed on the next major release. Please, remove its definition in
250
- `config/initializers/spree.rb`. Use the `Spree::Store#mail_from_address`
251
- attribute for the default email address used as the 'From:' field in
252
- transactional emails.
253
- MSG
254
- end
255
-
256
188
  # @!attribute [rw] max_level_in_taxons_menu
257
189
  # @return [Integer] maximum nesting level in taxons menu (default: +1+)
258
190
  preference :max_level_in_taxons_menu, :integer, default: 1
@@ -347,14 +279,6 @@ module Spree
347
279
  # @return [] Track on_hand values for variants / products. (default: true)
348
280
  preference :track_inventory_levels, :boolean, default: true
349
281
 
350
- # @!attribute [rw] use_legacy_events
351
- # Before v3.2, Solidus used a custom pub/sub implementation based on
352
- # ActiveSupport::Notifications. Now, we internally use and recommend
353
- # [Omnes](https://github.com/nebulab/omnes). This preference allows falling
354
- # back to the old system.
355
- # @return [Boolean]
356
- versioned_preference :use_legacy_events, :boolean, initial_value: true, boundaries: { "3.2.0.alpha" => false }
357
-
358
282
  # Other configurations
359
283
 
360
284
  # Allows restricting what currencies will be available.
@@ -433,6 +357,14 @@ module Spree
433
357
  # with the same signature as Spree::OrderUpdateAttributes.
434
358
  class_name_attribute :order_update_attributes_class, default: 'Spree::OrderUpdateAttributes'
435
359
 
360
+ # Allows providing a different order recalculator.
361
+ # @!attribute [rw] order_recalculator_class
362
+ # @see Spree::OrderUpdater
363
+ # @return [Class] an object that conforms to the API of
364
+ # the standard order recalculator class
365
+ # Spree::OrderUpdater.
366
+ class_name_attribute :order_recalculator_class, default: 'Spree::OrderUpdater'
367
+
436
368
  # Allows providing your own Mailer for promotion code batch mailer.
437
369
  #
438
370
  # @!attribute [rw] promotion_code_batch_mailer_class
@@ -566,7 +498,7 @@ module Spree
566
498
  # @!attribute [rw] image_attachment_module
567
499
  # @return [Module] a module that can be included into Spree::Image to allow attachments
568
500
  # Enumerable of images adhering to the present_image_class interface
569
- class_name_attribute :image_attachment_module, default: Spree::RailsCompatibility.default_image_attachment_module
501
+ class_name_attribute :image_attachment_module, default: "Spree::Image::ActiveStorageAttachment"
570
502
 
571
503
  # @!attribute [rw] allowed_image_mime_types
572
504
  #
@@ -633,7 +565,7 @@ module Spree
633
565
  # @!attribute [rw] taxon_attachment_module
634
566
  # @return [Module] a module that can be included into Spree::Taxon to allow attachments
635
567
  # Enumerable of taxons adhering to the present_taxon_class interface
636
- class_name_attribute :taxon_attachment_module, default: Spree::RailsCompatibility.default_taxon_attachment_module
568
+ class_name_attribute :taxon_attachment_module, default: "Spree::Taxon::ActiveStorageAttachment"
637
569
 
638
570
  # Configures the absolute path that contains the Solidus engine
639
571
  # migrations. This will be checked at app boot to confirm that all Solidus
@@ -676,10 +608,6 @@ module Spree
676
608
  end
677
609
  end
678
610
 
679
- def events
680
- @events_configuration ||= Spree::Event::Configuration.new
681
- end
682
-
683
611
  def user_last_url_storer_rules
684
612
  @user_last_url_storer_rules ||= ::Spree::Core::ClassConstantizer::Set.new.tap do |set|
685
613
  set << 'Spree::UserLastUrlStorer::Rules::AuthenticationRule'
data/lib/spree/bus.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'omnes'
2
4
 
3
5
  module Spree
@@ -5,16 +7,5 @@ module Spree
5
7
  #
6
8
  # This is used for internal events, while host applications are also able to
7
9
  # use it.
8
- #
9
- # It has some modifications to support internal usage of the legacy event
10
- # system {see Spree::AppConfiguration#use_legacy_events}.
11
10
  Bus = Omnes::Bus.new
12
- def Bus.publish(event, **kwargs)
13
- if Spree::Config.use_legacy_events
14
- Spree::Event.fire(event, **kwargs)
15
- else
16
- # Override caller_location to point to the actual event publisher
17
- super(event, **kwargs, caller_location: caller_locations(1)[0])
18
- end
19
- end
20
11
  end
@@ -17,7 +17,6 @@ module Spree
17
17
 
18
18
  included do
19
19
  before_action :set_guest_token
20
- helper_method :try_spree_current_user
21
20
  helper_method :spree_current_user
22
21
 
23
22
  class_attribute :unauthorized_redirect
@@ -58,21 +57,6 @@ module Spree
58
57
  def spree_current_user
59
58
  defined?(super) ? super : nil
60
59
  end
61
-
62
- # proxy method to *possible* spree_current_user method
63
- # Authentication extensions (such as spree_auth_devise) are meant to provide spree_current_user
64
- def try_spree_current_user
65
- # This one will be defined by apps looking to hook into Spree
66
- # As per authentication_helpers.rb
67
- if respond_to?(:spree_current_user, true)
68
- spree_current_user
69
- # This one will be defined by Devise
70
- elsif respond_to?(:current_spree_user, true)
71
- current_spree_user
72
- end
73
- end
74
-
75
- deprecate try_spree_current_user: :spree_current_user, deprecator: Spree::Deprecation
76
60
  end
77
61
  end
78
62
  end
@@ -52,27 +52,17 @@ module Spree
52
52
 
53
53
  # Setup pub/sub
54
54
  initializer 'spree.core.pub_sub' do |app|
55
- if Spree::Config.use_legacy_events
56
- app.reloader.to_prepare do
57
- Spree::Event.activate_autoloadable_subscribers
58
- end
59
-
60
- app.reloader.before_class_unload do
61
- Spree::Event.deactivate_all_subscribers
62
- end
63
- else
64
- app.reloader.to_prepare do
65
- Spree::Bus.clear
66
-
67
- %i[
68
- order_finalized
69
- order_recalculated
70
- reimbursement_reimbursed
71
- reimbursement_errored
72
- ].each { |event_name| Spree::Bus.register(event_name) }
73
-
74
- Spree::OrderMailerSubscriber.new.subscribe_to(Spree::Bus)
75
- end
55
+ app.reloader.to_prepare do
56
+ Spree::Bus.clear
57
+
58
+ %i[
59
+ order_finalized
60
+ order_recalculated
61
+ reimbursement_reimbursed
62
+ reimbursement_errored
63
+ ].each { |event_name| Spree::Bus.register(event_name) }
64
+
65
+ Spree::OrderMailerSubscriber.new.subscribe_to(Spree::Bus)
76
66
  end
77
67
  end
78
68
 
@@ -97,16 +87,6 @@ module Spree
97
87
  Spree::UsersController.protect_from_forgery with: :exception
98
88
  end
99
89
  end
100
-
101
- config.after_initialize do
102
- if Spree::Config.use_legacy_events && !ENV['CI']
103
- Spree::Deprecation.warn <<~MSG
104
- Your Solidus store is using the legacy event system. You're
105
- encouraged to switch to the new event bus. After you're done, you
106
- can remove the `use_legacy_events` setting from `spree.rb`.
107
- MSG
108
- end
109
- end
110
90
  end
111
91
  end
112
92
  end
@@ -40,7 +40,7 @@ module Spree
40
40
  end
41
41
 
42
42
  # Really ensure that the order totals & states are correct
43
- order.updater.update
43
+ order.recalculate
44
44
  if shipments_attrs.present?
45
45
  order.shipments.each_with_index do |shipment, index|
46
46
  shipment.update_columns(cost: shipments_attrs[index][:cost].to_f) if shipments_attrs[index][:cost].present?
@@ -12,10 +12,6 @@ module Spree
12
12
  # end
13
13
  #
14
14
  class EmailValidator < ActiveModel::EachValidator
15
- EMAIL_REGEXP = URI::MailTo::EMAIL_REGEXP
16
- # Use Spree::Config.default_email_regexp instead
17
- deprecate_constant :EMAIL_REGEXP
18
-
19
15
  def validate_each(record, attribute, value)
20
16
  unless Spree::Config.default_email_regexp.match? value
21
17
  record.errors.add(attribute, :invalid, **{ value: value }.merge!(options))
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spree
4
- VERSION = "3.4.2"
4
+ VERSION = "4.1.0"
5
5
 
6
6
  def self.solidus_version
7
7
  VERSION
8
8
  end
9
9
 
10
10
  def self.previous_solidus_minor_version
11
- '3.3'
11
+ '4.0'
12
12
  end
13
13
 
14
14
  def self.solidus_gem_version
data/lib/spree/core.rb CHANGED
@@ -20,7 +20,6 @@ require 'ransack'
20
20
  require 'state_machines-activerecord'
21
21
 
22
22
  require 'spree/deprecation'
23
- require 'spree/rails_compatibility'
24
23
 
25
24
  # This is required because ActiveModel::Validations#invalid? conflicts with the
26
25
  # invalid state of a Payment. In the future this should be removed.
@@ -94,7 +93,6 @@ require 'spree/core/environment/promotions'
94
93
  require 'spree/core/environment'
95
94
  require 'spree/migrations'
96
95
  require 'spree/migration_helpers'
97
- require 'spree/event'
98
96
  require 'spree/bus'
99
97
  require 'spree/core/engine'
100
98
 
@@ -6,9 +6,9 @@ module Spree
6
6
  remove_index(table, column) if index_exists?(table, column)
7
7
  end
8
8
 
9
- def safe_add_index(table, column, options = {})
10
- if columns_exist?(table, column) && !index_exists?(table, column, options)
11
- add_index(table, column, options)
9
+ def safe_add_index(table, column, **options)
10
+ if columns_exist?(table, column) && !index_exists?(table, column, **options)
11
+ add_index(table, column, **options)
12
12
  end
13
13
  end
14
14
 
@@ -2,9 +2,27 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read-only permissions for e-commerce settings.
6
+ #
7
+ # Roles with this permission will be able to view information, also from the admin
8
+ # panel, about:
9
+ #
10
+ # - Tax categories
11
+ # - Tax rates
12
+ # - Zones
13
+ # - Countries
14
+ # - States
15
+ # - Payment methods
16
+ # - Taxonomies
17
+ # - Shipping methods
18
+ # - Shipping categories
19
+ # - Stock locations
20
+ # - Stock movements
21
+ # - Refund reasons
22
+ # - Reimbursement types
23
+ # - Return reasons
5
24
  class ConfigurationDisplay < PermissionSets::Base
6
25
  def activate!
7
- can [:edit, :admin], :general_settings
8
26
  can [:read, :admin], Spree::TaxCategory
9
27
  can [:read, :admin], Spree::TaxRate
10
28
  can [:read, :admin], Spree::Zone
@@ -2,9 +2,26 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read and write permissions for e-commerce settings.
6
+ #
7
+ # Roles with this permission set will have full control over:
8
+ #
9
+ # - Tax categories
10
+ # - Tax rates
11
+ # - Zones
12
+ # - Countries
13
+ # - States
14
+ # - Payment methods
15
+ # - Taxonomies
16
+ # - Shipping methods
17
+ # - Shipping categories
18
+ # - Stock locations
19
+ # - Stock movements
20
+ # - Refund reasons
21
+ # - Reimbursement types
22
+ # - Return reasons
5
23
  class ConfigurationManagement < PermissionSets::Base
6
24
  def activate!
7
- can :manage, :general_settings
8
25
  can :manage, Spree::TaxCategory
9
26
  can :manage, Spree::TaxRate
10
27
  can :manage, Spree::Zone
@@ -2,6 +2,11 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Permissions for viewing the admin dashboard.
6
+ #
7
+ # Roles with this permission set will be able to view the admin dashboard,
8
+ # which may or not contain sensitive information depending on
9
+ # customizations.
5
10
  class DashboardDisplay < PermissionSets::Base
6
11
  def activate!
7
12
  can [:admin, :home], :dashboards
@@ -2,6 +2,35 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Permissions for e-commerce customers.
6
+ #
7
+ # This permission set is always added to the `:default` role, which in turn
8
+ # is the default role for all users without any explicit roles.
9
+ #
10
+ # Permissions include reading and updating orders when the ability's user
11
+ # has been assigned as the order's user, unless the order is already
12
+ # completed. Same is true for guest checkout orders.
13
+ #
14
+ # It grants read-only permissions for the following resources typically used
15
+ # during a checkout process:
16
+ #
17
+ # - Zones
18
+ # - Countries
19
+ # - States
20
+ # - Taxons
21
+ # - Taxonomies
22
+ # - Products
23
+ # - Properties
24
+ # - Product properties
25
+ # - Variants
26
+ # - Option types
27
+ # - Option values
28
+ # - Stock items
29
+ # - Stock locations
30
+ #
31
+ # Abilities with this role can also create refund authorizations for orders
32
+ # with the same user, as well as reading and updating the user record and
33
+ # their associated cards.
5
34
  class DefaultCustomer < PermissionSets::Base
6
35
  def activate!
7
36
  can :read, Country
@@ -2,6 +2,25 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read permissions for orders.
6
+ #
7
+ # This permission set allows users to view all related information about
8
+ # orders, also from the admin panel, including:
9
+ #
10
+ # - Orders
11
+ # - Payments
12
+ # - Shipments
13
+ # - Adjustments
14
+ # - Line items
15
+ # - Return authorizations
16
+ # - Customer returns
17
+ # - Order cancellations
18
+ # - Reimbursements
19
+ # - Return items
20
+ # - Refunds
21
+ #
22
+ # However, it does not allow any modifications to be made to any of these
23
+ # resources.
5
24
  class OrderDisplay < PermissionSets::Base
6
25
  def activate!
7
26
  can [:read, :admin, :edit, :cart], Spree::Order
@@ -2,6 +2,24 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Full permissions for order management.
6
+ #
7
+ # This permission set grants full control over all order and related resources,
8
+ # including:
9
+ #
10
+ # - Orders
11
+ # - Payments
12
+ # - Shipments
13
+ # - Adjustments
14
+ # - Line items
15
+ # - Return authorizations
16
+ # - Customer returns
17
+ # - Order cancellations
18
+ # - Reimbursements
19
+ # - Return items
20
+ # - Refunds
21
+ #
22
+ # It also allows reading reimbursement types, but not modifying them.
5
23
  class OrderManagement < PermissionSets::Base
6
24
  def activate!
7
25
  can :read, Spree::ReimbursementType
@@ -2,6 +2,20 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read-only permissions for products.
6
+ #
7
+ # This permission set allows users to view all related information about
8
+ # products, also from the admin panel, including:
9
+ #
10
+ # - Products
11
+ # - Images
12
+ # - Variants
13
+ # - Option values
14
+ # - Product properties
15
+ # - Option types
16
+ # - Properties
17
+ # - Taxonomies
18
+ # - Taxons
5
19
  class ProductDisplay < PermissionSets::Base
6
20
  def activate!
7
21
  can [:read, :admin, :edit], Spree::Product
@@ -2,6 +2,22 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Full permissions for product management.
6
+ #
7
+ # This permission set grants full control over all product and related resources,
8
+ # including:
9
+ #
10
+ # - Products
11
+ # - Images
12
+ # - Variants
13
+ # - Option values
14
+ # - Product properties
15
+ # - Option types
16
+ # - Properties
17
+ # - Taxonomies
18
+ # - Taxons
19
+ # - Classifications
20
+ # - Prices
5
21
  class ProductManagement < PermissionSets::Base
6
22
  def activate!
7
23
  can :manage, Spree::Classification
@@ -2,6 +2,16 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read-only permissions for promotions.
6
+ #
7
+ # This permission set allows users to view all related information about
8
+ # promotions, also from the admin panel, including:
9
+ #
10
+ # - Promotions
11
+ # - Promotion rules
12
+ # - Promotion actions
13
+ # - Promotion categories
14
+ # - Promotion codes
5
15
  class PromotionDisplay < PermissionSets::Base
6
16
  def activate!
7
17
  can [:read, :admin, :edit], Spree::Promotion
@@ -2,6 +2,16 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Full permissions for promotion management.
6
+ #
7
+ # This permission set grants full control over all promotion and related resources,
8
+ # including:
9
+ #
10
+ # - Promotions
11
+ # - Promotion rules
12
+ # - Promotion actions
13
+ # - Promotion categories
14
+ # - Promotion codes
5
15
  class PromotionManagement < PermissionSets::Base
6
16
  def activate!
7
17
  can :manage, Spree::Promotion
@@ -2,6 +2,11 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read permissions for stock limited to allowed locations.
6
+ #
7
+ # This permission set allows users to view information about stock items and
8
+ # locations, both of them limited to locations they have access to.
9
+ # Permissions are also granted for the admin panel for items.
5
10
  class RestrictedStockDisplay < PermissionSets::Base
6
11
  def activate!
7
12
  can [:read, :admin], Spree::StockItem, stock_location_id: location_ids
@@ -2,6 +2,11 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Full permissions for stock management limited to allowed locations.
6
+ #
7
+ # This permission set grants full control over all stock items a user has
8
+ # access to their locations. Those locations are also readable by the
9
+ # corresponding ability.
5
10
  class RestrictedStockManagement < PermissionSets::Base
6
11
  def activate!
7
12
  can :manage, Spree::StockItem, stock_location_id: location_ids
@@ -2,6 +2,10 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read-only permissions for stock.
6
+ #
7
+ # This permission set allows users to view information about stock items
8
+ # (also from the admin panel) and stock locations.
5
9
  class StockDisplay < PermissionSets::Base
6
10
  def activate!
7
11
  can [:read, :admin], Spree::StockItem
@@ -2,6 +2,10 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Full permissions for stock management.
6
+ #
7
+ # This permission set grants full control over all stock items and read
8
+ # access to locations.
5
9
  class StockManagement < PermissionSets::Base
6
10
  def activate!
7
11
  can :manage, Spree::StockItem
@@ -2,6 +2,11 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Full permissions for store administration.
6
+ #
7
+ # This permission set is always added to users with the `:admin` role.
8
+ #
9
+ # It grants permission to perform any read or write action on any resource.
5
10
  class SuperUser < PermissionSets::Base
6
11
  def activate!
7
12
  can :manage, :all
@@ -2,6 +2,10 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Read-only permissions for users, roles and store credits.
6
+ #
7
+ # This permission set allows users to view all related information about
8
+ # users, roles and store credits, also from the admin panel.
5
9
  class UserDisplay < PermissionSets::Base
6
10
  def activate!
7
11
  can [:read, :admin, :edit, :addresses, :orders, :items], Spree.user_class
@@ -2,6 +2,15 @@
2
2
 
3
3
  module Spree
4
4
  module PermissionSets
5
+ # Full permissions for user management.
6
+ #
7
+ # This permission set grants full control over all user and
8
+ # related resources, including:
9
+ #
10
+ # - Users
11
+ # - Store credits
12
+ # - Roles
13
+ # - API keys
5
14
  class UserManagement < PermissionSets::Base
6
15
  def activate!
7
16
  can [:admin, :read, :create, :update, :save_in_address_book, :remove_from_address_book, :addresses, :orders, :items], Spree.user_class