spree_core 3.4.6 → 3.5.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/app/assets/javascripts/spree.js.coffee +1 -1
- data/app/helpers/spree/base_helper.rb +4 -0
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/user_methods.rb +21 -4
- data/app/models/concerns/spree/user_reporting.rb +2 -2
- data/app/models/spree/address.rb +6 -12
- data/app/models/spree/adjustable/adjustments_updater.rb +2 -1
- data/app/models/spree/country.rb +2 -1
- data/app/models/spree/line_item.rb +8 -2
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/order.rb +8 -6
- data/app/models/spree/order/checkout.rb +1 -0
- data/app/models/spree/order_contents.rb +20 -12
- data/app/models/spree/order_inventory.rb +24 -12
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/preferences/preferable.rb +1 -1
- data/app/models/spree/product/scopes.rb +1 -1
- data/app/models/spree/promotion.rb +15 -1
- data/app/models/spree/promotion/rules/option_value.rb +13 -5
- data/app/models/spree/promotion/rules/product.rb +2 -1
- data/app/models/spree/promotion/rules/taxon.rb +3 -1
- data/app/models/spree/promotion_action_line_item.rb +3 -0
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +52 -0
- data/app/models/spree/refund.rb +1 -1
- data/app/models/spree/reimbursement.rb +1 -1
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +7 -18
- data/app/models/spree/reimbursement_performer.rb +3 -7
- data/app/models/spree/reimbursement_type/original_payment.rb +2 -2
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +3 -7
- data/app/models/spree/reimbursement_type/store_credit.rb +2 -10
- data/app/models/spree/shipment.rb +10 -4
- data/app/models/spree/stock/availability_validator.rb +1 -1
- data/app/models/spree/stock/packer.rb +1 -1
- data/app/models/spree/stock/splitter/backordered.rb +5 -7
- data/app/models/spree/stock/splitter/base.rb +1 -0
- data/app/models/spree/stock/splitter/shipping_category.rb +9 -16
- data/app/models/spree/stock/splitter/weight.rb +18 -20
- data/app/models/spree/stock_transfer.rb +2 -1
- data/app/models/spree/store_credit_category.rb +13 -0
- data/app/models/spree/taxon.rb +7 -0
- data/app/models/spree/variant.rb +1 -1
- data/app/validators/email_validator.rb +7 -0
- data/config/locales/en.yml +18 -27
- data/db/default/spree/states.rb +9 -27
- data/db/migrate/20150128032538_remove_environment_from_tracker.rb +2 -0
- data/db/migrate/20171004223836_remove_icon_from_taxons.rb +8 -0
- data/db/migrate/20180222133746_add_unique_index_on_spree_promotions_code.rb +6 -0
- data/lib/generators/spree/dummy_model/dummy_model_generator.rb +23 -0
- data/lib/generators/spree/dummy_model/templates/migration.rb.tt +10 -0
- data/lib/generators/spree/dummy_model/templates/model.rb.tt +6 -0
- data/lib/spree/core/controller_helpers/auth.rb +1 -1
- data/lib/spree/core/controller_helpers/common.rb +4 -0
- data/lib/spree/core/controller_helpers/order.rb +6 -5
- data/lib/spree/core/engine.rb +10 -10
- data/lib/spree/core/environment_extension.rb +3 -0
- data/lib/spree/core/importer/order.rb +1 -1
- data/lib/spree/core/validators/email.rb +1 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +1 -5
- data/lib/spree/permitted_attributes.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +16 -13
- data/lib/spree/testing_support/common_rake.rb +4 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +7 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
- data/spree_core.gemspec +1 -1
- data/vendor/assets/javascripts/jsuri.js +458 -2
- metadata +13 -7
- data/app/models/spree/tracker.rb +0 -25
- data/lib/spree/testing_support/factories/tracker_factory.rb +0 -7
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
|
5
5
|
has_many :stock_movements, as: :originator
|
6
6
|
|
7
|
-
belongs_to :source_location, class_name: 'StockLocation'
|
7
|
+
belongs_to :source_location, class_name: 'StockLocation', optional: true
|
8
8
|
belongs_to :destination_location, class_name: 'StockLocation'
|
9
9
|
|
10
10
|
validates :number, uniqueness: true
|
@@ -36,6 +36,7 @@ module Spree
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
# receive inventory from external vendor
|
39
40
|
def receive(destination_location, variants)
|
40
41
|
transfer(nil, destination_location, variants)
|
41
42
|
end
|
@@ -2,6 +2,8 @@ module Spree
|
|
2
2
|
class StoreCreditCategory < Spree::Base
|
3
3
|
validates :name, presence: true
|
4
4
|
|
5
|
+
before_destroy :validate_not_used
|
6
|
+
|
5
7
|
GIFT_CARD_CATEGORY_NAME = 'Gift Card'.freeze
|
6
8
|
DEFAULT_NON_EXPIRING_TYPES = [GIFT_CARD_CATEGORY_NAME]
|
7
9
|
|
@@ -13,6 +15,17 @@ module Spree
|
|
13
15
|
DEFAULT_NON_EXPIRING_TYPES | Spree::Config[:non_expiring_credit_types]
|
14
16
|
end
|
15
17
|
|
18
|
+
def store_credit_category_used?
|
19
|
+
Spree::StoreCredit.exists?(category_id: id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def validate_not_used
|
23
|
+
if store_credit_category_used?
|
24
|
+
errors.add(:base, :cannot_destroy_if_used_in_store_credit)
|
25
|
+
throw(:abort)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
16
29
|
class << self
|
17
30
|
def default_reimbursement_category(_options = {})
|
18
31
|
Spree::StoreCreditCategory.first
|
data/app/models/spree/taxon.rb
CHANGED
@@ -21,6 +21,7 @@ module Spree
|
|
21
21
|
|
22
22
|
validates :name, presence: true, uniqueness: { scope: [:parent_id, :taxonomy_id], allow_blank: true }
|
23
23
|
validates :permalink, uniqueness: { case_sensitive: false }
|
24
|
+
validate :check_for_root, on: :create
|
24
25
|
with_options length: { maximum: 255 }, allow_blank: true do
|
25
26
|
validates :meta_keywords
|
26
27
|
validates :meta_description
|
@@ -93,5 +94,11 @@ module Spree
|
|
93
94
|
# Have taxonomy touch happen in #touch_ancestors_and_taxonomy rather than association option in order for imports to override.
|
94
95
|
taxonomy.try!(:touch)
|
95
96
|
end
|
97
|
+
|
98
|
+
def check_for_root
|
99
|
+
if taxonomy.try(:root).present? && parent_id == nil
|
100
|
+
errors.add(:root_conflict, 'this taxonomy already has a root taxon')
|
101
|
+
end
|
102
|
+
end
|
96
103
|
end
|
97
104
|
end
|
data/app/models/spree/variant.rb
CHANGED
@@ -67,7 +67,7 @@ module Spree
|
|
67
67
|
|
68
68
|
scope :not_deleted, -> { where("#{Variant.quoted_table_name}.deleted_at IS NULL") }
|
69
69
|
|
70
|
-
scope :for_currency_and_available_price_amount, ->(currency) do
|
70
|
+
scope :for_currency_and_available_price_amount, ->(currency = nil) do
|
71
71
|
currency ||= Spree::Config[:currency]
|
72
72
|
joins(:prices).where('spree_prices.currency = ?', currency).where('spree_prices.amount IS NOT NULL').distinct
|
73
73
|
end
|
data/config/locales/en.yml
CHANGED
@@ -92,6 +92,7 @@ en:
|
|
92
92
|
description: Description
|
93
93
|
event_name: Event Name
|
94
94
|
expires_at: Expires At
|
95
|
+
generate_code: Generate coupon code
|
95
96
|
name: Name
|
96
97
|
path: Path
|
97
98
|
starts_at: Starts At
|
@@ -350,6 +351,10 @@ en:
|
|
350
351
|
greater_than_zero_restrict_delete: is greater than zero. Can not delete store credit.
|
351
352
|
amount_authorized:
|
352
353
|
exceeds_total_credits: Exceeds total credits.
|
354
|
+
spree/store_credit_category:
|
355
|
+
attributes:
|
356
|
+
base:
|
357
|
+
cannot_destroy_if_used_in_store_credit: Cannot delete store credit categories once they are used in store credit.
|
353
358
|
spree/variant:
|
354
359
|
attributes:
|
355
360
|
base:
|
@@ -507,18 +512,9 @@ en:
|
|
507
512
|
all_adjustments_opened: All adjustments successfully opened!
|
508
513
|
all_departments: All departments
|
509
514
|
all_items_have_been_returned: All items have been returned
|
510
|
-
already_signed_up_for_analytics: You have already signed up for Spree Analytics
|
511
515
|
alt_text: Alternative Text
|
512
516
|
alternative_phone: Alternative Phone
|
513
517
|
amount: Amount
|
514
|
-
analytics_desc_header_1: Spree Analytics
|
515
|
-
analytics_desc_header_2: Live analytics integrated into your Spree dashboard
|
516
|
-
analytics_desc_list_1: Get live sales information as it happens
|
517
|
-
analytics_desc_list_2: Requires only a free Spree account to activate
|
518
|
-
analytics_desc_list_3: Absolutely no code to install
|
519
|
-
analytics_desc_list_4: It's completely free!
|
520
|
-
analytics_engine: Analytics Engine
|
521
|
-
analytics_trackers: Analytics Trackers
|
522
518
|
and: and
|
523
519
|
approve: approve
|
524
520
|
approver: Approver
|
@@ -605,7 +601,6 @@ en:
|
|
605
601
|
continue_shopping: Continue shopping
|
606
602
|
cost_currency: Cost Currency
|
607
603
|
cost_price: Cost Price
|
608
|
-
could_not_connect_to_jirafe: Could not connect to Jirafe to sync data. This will be automatically retried later.
|
609
604
|
could_not_create_customer_return: Could not create customer return
|
610
605
|
could_not_create_stock_movement: There was a problem saving this stock movement. Please try again.
|
611
606
|
count_on_hand: Count On Hand
|
@@ -655,16 +650,6 @@ en:
|
|
655
650
|
customer_search: Customer Search
|
656
651
|
cut: Cut
|
657
652
|
cvv_response: CVV Response
|
658
|
-
dash:
|
659
|
-
jirafe:
|
660
|
-
app_id: App ID
|
661
|
-
app_token: App Token
|
662
|
-
currently_unavailable: Jirafe is currently unavailable. Spree will automatically connect to Jirafe once it is available.
|
663
|
-
explanation: The fields below may already be populated if you chose to register with Jirafe from the admin dashboard.
|
664
|
-
header: Jirafe Analytics Settings
|
665
|
-
site_id: Site ID
|
666
|
-
token: Token
|
667
|
-
jirafe_settings_updated: Jirafe Settings have been updated.
|
668
653
|
date: Date
|
669
654
|
date_completed: Date Completed
|
670
655
|
date_picker:
|
@@ -773,8 +758,7 @@ en:
|
|
773
758
|
gateway_error: Gateway Error
|
774
759
|
general: General
|
775
760
|
general_settings: General Settings
|
776
|
-
|
777
|
-
google_analytics_id: Analytics ID
|
761
|
+
generate_code: Generate coupon code
|
778
762
|
guest_checkout: Guest Checkout
|
779
763
|
guest_user_account: Checkout as a Guest
|
780
764
|
has_no_shipped_units: has no shipped units
|
@@ -838,7 +822,6 @@ en:
|
|
838
822
|
items_in_rmas: Items in Return Authorizations
|
839
823
|
items_to_be_reimbursed: Items to be reimbursed
|
840
824
|
items_reimbursed: Items reimbursed
|
841
|
-
jirafe: Jirafe
|
842
825
|
join_slack: Join Slack
|
843
826
|
last_name: Last Name
|
844
827
|
last_name_begins_with: Last Name Begins With
|
@@ -868,6 +851,7 @@ en:
|
|
868
851
|
manual_intervention_required: Manual intervention required
|
869
852
|
manage_variants: Manage Variants
|
870
853
|
master_price: Master Price
|
854
|
+
master_sku: Master SKU
|
871
855
|
match_choices:
|
872
856
|
all: All
|
873
857
|
none: None
|
@@ -953,10 +937,10 @@ en:
|
|
953
937
|
notice_messages:
|
954
938
|
product_cloned: Product has been cloned
|
955
939
|
product_deleted: Product has been deleted
|
956
|
-
product_not_cloned: Product could not be cloned
|
957
|
-
product_not_deleted: Product could not be deleted
|
940
|
+
product_not_cloned: "Product could not be cloned. Reason: %{error}"
|
941
|
+
product_not_deleted: "Product could not be deleted. Reason: %{error}"
|
958
942
|
variant_deleted: Variant has been deleted
|
959
|
-
variant_not_deleted: Variant could not be deleted
|
943
|
+
variant_not_deleted: "Variant could not be deleted. Reason: %{error}"
|
960
944
|
num_orders: "# Orders"
|
961
945
|
number: Number
|
962
946
|
on_hand: On Hand
|
@@ -1065,6 +1049,7 @@ en:
|
|
1065
1049
|
pre_tax_total: Pre-Tax Total
|
1066
1050
|
preferred_reimbursement_type: Preferred Reimbursement Type
|
1067
1051
|
presentation: Presentation
|
1052
|
+
preview_product: Preview Product
|
1068
1053
|
previous: Previous
|
1069
1054
|
previous_state_missing: "n/a"
|
1070
1055
|
price: Price
|
@@ -1088,6 +1073,8 @@ en:
|
|
1088
1073
|
products: Products
|
1089
1074
|
promotion: Promotion
|
1090
1075
|
promotionable: Promotable
|
1076
|
+
promotion_cloned: Promotion has been cloned
|
1077
|
+
promotion_not_cloned: "Promotion has not been cloned. Reason: %{error}"
|
1091
1078
|
promotion_action: Promotion Action
|
1092
1079
|
promotion_action_types:
|
1093
1080
|
create_adjustment:
|
@@ -1392,6 +1379,7 @@ en:
|
|
1392
1379
|
unable_to_delete: Unable to delete store credit
|
1393
1380
|
unable_to_fund: Unable to pay for order using store credits
|
1394
1381
|
unable_to_update: Unable to update store credit
|
1382
|
+
store_credits: Store Credits
|
1395
1383
|
store_credit_categories: Store Credit Categories
|
1396
1384
|
store_credit_payment_method:
|
1397
1385
|
unable_to_void: "Unable to void code: %{auth_code}"
|
@@ -1404,6 +1392,10 @@ en:
|
|
1404
1392
|
unable_to_find_for_action: "Could not find store credit for auth code: %{auth_code} for action: %{action}"
|
1405
1393
|
user_has_no_store_credits: "User does not have any available store credit"
|
1406
1394
|
select_one_store_credit: "Select store credit to go towards remaining balance"
|
1395
|
+
store_default: Default store
|
1396
|
+
store_set_default_button: Set as default
|
1397
|
+
store_not_set_as_default: Couldn't set store %{store} as a default store
|
1398
|
+
store_set_as_default: Store %{store} is now a default store
|
1407
1399
|
street_address: Street Address
|
1408
1400
|
street_address_2: Street Address (cont'd)
|
1409
1401
|
subtotal: Subtotal
|
@@ -1412,7 +1404,6 @@ en:
|
|
1412
1404
|
successfully_created: ! '%{resource} has been successfully created!'
|
1413
1405
|
successfully_refunded: ! '%{resource} has been successfully refunded!'
|
1414
1406
|
successfully_removed: ! '%{resource} has been successfully removed!'
|
1415
|
-
successfully_signed_up_for_analytics: Successfully signed up for Spree Analytics
|
1416
1407
|
successfully_updated: ! '%{resource} has been successfully updated!'
|
1417
1408
|
summary: Summary
|
1418
1409
|
tax: Tax
|
data/db/default/spree/states.rb
CHANGED
@@ -1,29 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
abbr = connection.quote subregion.code
|
11
|
-
country_id = connection.quote country.id
|
12
|
-
|
13
|
-
state_inserts << [name, abbr, country_id].join(", ")
|
14
|
-
end
|
1
|
+
Spree::Country.where(states_required: true).each do |country|
|
2
|
+
carmen_country = Carmen::Country.named(country.name)
|
3
|
+
next if !carmen_country
|
4
|
+
carmen_country.subregions.each do |subregion|
|
5
|
+
country.states.where(
|
6
|
+
name: subregion.name,
|
7
|
+
abbr: subregion.code,
|
8
|
+
country_id: country.id
|
9
|
+
).first_or_create
|
15
10
|
end
|
16
|
-
|
17
|
-
state_inserts.map { |x| "(#{x})" }
|
18
|
-
end
|
19
|
-
|
20
|
-
columns = ["name", "abbr", "country_id"].map do |column|
|
21
|
-
connection.quote_column_name column
|
22
|
-
end.join(', ')
|
23
|
-
|
24
|
-
state_values.call.each_slice(500) do |state_values_batch|
|
25
|
-
connection.execute <<-SQL
|
26
|
-
INSERT INTO spree_states (#{columns})
|
27
|
-
VALUES #{state_values_batch.join(", ")};
|
28
|
-
SQL
|
29
11
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class RemoveIconFromTaxons < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
remove_column :spree_taxons, :icon_file_name
|
4
|
+
remove_column :spree_taxons, :icon_content_type
|
5
|
+
remove_column :spree_taxons, :icon_file_size
|
6
|
+
remove_column :spree_taxons, :icon_updated_at
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Spree
|
2
|
+
class DummyModelGenerator < Rails::Generators::NamedBase
|
3
|
+
include Rails::Generators::ResourceHelpers
|
4
|
+
include Rails::Generators::Migration
|
5
|
+
|
6
|
+
desc 'Set up Dummy Model which is used for tests'
|
7
|
+
|
8
|
+
def self.source_paths
|
9
|
+
paths = superclass.source_paths
|
10
|
+
paths << File.expand_path('../templates', __FILE__)
|
11
|
+
paths.flatten
|
12
|
+
end
|
13
|
+
|
14
|
+
def generate
|
15
|
+
migration_template 'migration.rb.tt', 'db/migrate/create_spree_dummy_models.rb'
|
16
|
+
template 'model.rb.tt', 'app/models/spree/dummy_model.rb'
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.next_migration_number(dirname)
|
20
|
+
format('%.3d', (current_migration_number(dirname) + 1))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -41,6 +41,10 @@ module Spree
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def render_404(_exception = nil)
|
44
|
+
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
45
|
+
#render_404 will be removed in Spree 3.6
|
46
|
+
You should switch to 404 handled by rails
|
47
|
+
EOS
|
44
48
|
respond_to do |type|
|
45
49
|
type.html { render status: :not_found, file: "#{::Rails.root}/public/404", formats: [:html], layout: nil }
|
46
50
|
type.all { head :not_found }
|
@@ -29,19 +29,20 @@ module Spree
|
|
29
29
|
def current_order(options = {})
|
30
30
|
options[:create_order_if_necessary] ||= false
|
31
31
|
|
32
|
-
|
32
|
+
if @current_order
|
33
|
+
@current_order.last_ip_address = ip_address
|
34
|
+
return @current_order
|
35
|
+
end
|
33
36
|
|
34
37
|
@current_order = find_order_by_token_or_user(options, true)
|
35
38
|
|
36
39
|
if options[:create_order_if_necessary] && (@current_order.nil? || @current_order.completed?)
|
37
40
|
@current_order = Spree::Order.create!(current_order_params)
|
38
41
|
@current_order.associate_user! try_spree_current_user if try_spree_current_user
|
39
|
-
end
|
40
|
-
|
41
|
-
if @current_order
|
42
42
|
@current_order.last_ip_address = ip_address
|
43
|
-
return @current_order
|
44
43
|
end
|
44
|
+
|
45
|
+
@current_order
|
45
46
|
end
|
46
47
|
|
47
48
|
def associate_user
|
data/lib/spree/core/engine.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
module Spree
|
2
2
|
module Core
|
3
3
|
class Engine < ::Rails::Engine
|
4
|
+
Environment = Struct.new(:calculators, :preferences, :payment_methods, :adjusters, :stock_splitters, :promotions)
|
5
|
+
SpreeCalculators = Struct.new(:shipping_methods, :tax_rates, :promotion_actions_create_adjustments, :promotion_actions_create_item_adjustments)
|
6
|
+
PromoEnvironment = Struct.new(:rules, :actions)
|
4
7
|
isolate_namespace Spree
|
5
8
|
engine_name 'spree'
|
6
9
|
|
@@ -9,8 +12,8 @@ module Spree
|
|
9
12
|
end
|
10
13
|
|
11
14
|
initializer 'spree.environment', before: :load_config_initializers do |app|
|
12
|
-
app.config.spree = Spree::
|
13
|
-
Spree::Config = app.config.spree.preferences
|
15
|
+
app.config.spree = Environment.new(SpreeCalculators.new, Spree::AppConfiguration.new)
|
16
|
+
Spree::Config = app.config.spree.preferences
|
14
17
|
end
|
15
18
|
|
16
19
|
initializer 'spree.register.calculators' do |app|
|
@@ -27,7 +30,7 @@ module Spree
|
|
27
30
|
]
|
28
31
|
end
|
29
32
|
|
30
|
-
initializer 'spree.register.stock_splitters' do |app|
|
33
|
+
initializer 'spree.register.stock_splitters', before: :load_config_initializers do |app|
|
31
34
|
app.config.spree.stock_splitters = [
|
32
35
|
Spree::Stock::Splitter::ShippingCategory,
|
33
36
|
Spree::Stock::Splitter::Backordered
|
@@ -53,13 +56,11 @@ module Spree
|
|
53
56
|
# We need to define promotions rules here so extensions and existing apps
|
54
57
|
# can add their custom classes on their initializer files
|
55
58
|
initializer 'spree.promo.environment' do |app|
|
56
|
-
app.config.spree.
|
57
|
-
app.config.spree.promotions = Spree::Promo::Environment.new
|
59
|
+
app.config.spree.promotions = PromoEnvironment.new
|
58
60
|
app.config.spree.promotions.rules = []
|
59
61
|
end
|
60
62
|
|
61
63
|
initializer 'spree.promo.register.promotion.calculators' do |app|
|
62
|
-
app.config.spree.calculators.add_class('promotion_actions_create_adjustments')
|
63
64
|
app.config.spree.calculators.promotion_actions_create_adjustments = [
|
64
65
|
Spree::Calculator::FlatPercentItemTotal,
|
65
66
|
Spree::Calculator::FlatRate,
|
@@ -68,7 +69,6 @@ module Spree
|
|
68
69
|
Spree::Calculator::TieredFlatRate
|
69
70
|
]
|
70
71
|
|
71
|
-
app.config.spree.calculators.add_class('promotion_actions_create_item_adjustments')
|
72
72
|
app.config.spree.calculators.promotion_actions_create_item_adjustments = [
|
73
73
|
Spree::Calculator::PercentOnLineItem,
|
74
74
|
Spree::Calculator::FlatRate,
|
@@ -116,12 +116,12 @@ module Spree
|
|
116
116
|
end
|
117
117
|
|
118
118
|
config.to_prepare do
|
119
|
-
#
|
120
|
-
I18n.load_path
|
119
|
+
# Load spree locales before decorators
|
120
|
+
I18n.load_path += Dir.glob(
|
121
121
|
File.join(
|
122
122
|
File.dirname(__FILE__), '../../../config/locales', '*.{rb,yml}'
|
123
123
|
)
|
124
|
-
)
|
124
|
+
)
|
125
125
|
|
126
126
|
# Load application's model / class decorators
|
127
127
|
Dir.glob(File.join(File.dirname(__FILE__), '../../../app/**/*_decorator*.rb')) do |c|
|