spree_core 2.2.14 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/{spree.js.coffee → spree.js.coffee.erb} +11 -2
- data/app/controllers/spree/base_controller.rb +1 -0
- data/app/helpers/spree/base_helper.rb +5 -6
- data/app/helpers/spree/orders_helper.rb +4 -0
- data/app/helpers/spree/products_helper.rb +8 -7
- data/app/mailers/spree/base_mailer.rb +2 -2
- data/app/mailers/spree/order_mailer.rb +2 -2
- data/app/mailers/spree/shipment_mailer.rb +1 -1
- data/app/mailers/spree/test_mailer.rb +1 -1
- data/app/models/spree/ability.rb +15 -16
- data/app/models/spree/address.rb +3 -6
- data/app/models/spree/adjustment.rb +2 -2
- data/app/models/spree/alert.rb +1 -1
- data/app/models/spree/app_configuration.rb +17 -20
- data/app/models/spree/asset.rb +2 -2
- data/app/models/spree/base.rb +9 -0
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/calculator/flat_rate.rb +1 -1
- data/app/models/spree/calculator/flexi_rate.rb +1 -1
- data/app/models/spree/calculator/price_sack.rb +1 -3
- data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
- data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
- data/app/models/spree/calculator/shipping/per_item.rb +1 -1
- data/app/models/spree/calculator/shipping/price_sack.rb +1 -3
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/configuration.rb +1 -1
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +8 -12
- data/app/models/spree/gateway.rb +0 -3
- data/app/models/spree/gateway/bogus.rb +2 -3
- data/app/models/spree/image.rb +3 -1
- data/app/models/spree/inventory_unit.rb +5 -6
- data/app/models/spree/item_adjustments.rb +3 -4
- data/app/models/spree/legacy_user.rb +1 -1
- data/app/models/spree/line_item.rb +6 -13
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +1 -3
- data/app/models/spree/order.rb +52 -70
- data/app/models/spree/order/checkout.rb +17 -10
- data/app/models/spree/order/currency_updater.rb +1 -1
- data/app/models/spree/order_contents.rb +7 -4
- data/app/models/spree/order_populator.rb +1 -1
- data/app/models/spree/order_updater.rb +8 -21
- data/app/models/spree/payment.rb +26 -12
- data/app/models/spree/payment/processing.rb +5 -16
- data/app/models/spree/payment_capture_event.rb +1 -1
- data/app/models/spree/payment_method.rb +2 -2
- data/app/models/spree/payment_method/check.rb +0 -2
- data/app/models/spree/preference.rb +1 -31
- data/app/models/spree/preferences/configuration.rb +2 -6
- data/app/models/spree/preferences/preferable.rb +46 -74
- data/app/models/spree/preferences/preferable_class_methods.rb +11 -46
- data/app/models/spree/preferences/scoped_store.rb +33 -0
- data/app/models/spree/preferences/store.rb +8 -7
- data/app/models/spree/price.rb +1 -3
- data/app/models/spree/product.rb +59 -87
- data/app/models/spree/product/scopes.rb +22 -13
- data/app/models/spree/product_option_type.rb +1 -1
- data/app/models/spree/product_property.rb +1 -3
- data/app/models/spree/product_scope/scopes.rb +1 -1
- data/app/models/spree/promotion.rb +4 -5
- data/app/models/spree/promotion/actions/create_adjustment.rb +11 -2
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +19 -2
- data/app/models/spree/promotion/actions/create_line_items.rb +2 -12
- data/app/models/spree/promotion/rules/user.rb +5 -1
- data/app/models/spree/promotion_action.rb +1 -1
- data/app/models/spree/promotion_action_line_item.rb +1 -1
- data/app/models/spree/promotion_handler/cart.rb +2 -14
- data/app/models/spree/promotion_handler/coupon.rb +3 -13
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/property.rb +1 -3
- data/app/models/spree/prototype.rb +1 -1
- data/app/models/spree/return_authorization.rb +4 -10
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/shipment.rb +1 -9
- data/app/models/spree/shipping_category.rb +3 -3
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_rate.rb +3 -3
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/stock/availability_validator.rb +7 -3
- data/app/models/spree/stock/package.rb +0 -23
- data/app/models/spree/stock/splitter/backordered.rb +1 -1
- data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
- data/app/models/spree/stock/splitter/weight.rb +1 -1
- data/app/models/spree/stock_item.rb +7 -10
- data/app/models/spree/stock_location.rb +2 -6
- data/app/models/spree/stock_movement.rb +1 -3
- data/app/models/spree/stock_transfer.rb +1 -3
- data/app/models/spree/store.rb +33 -0
- data/app/models/spree/tax_category.rb +2 -2
- data/app/models/spree/tax_rate.rb +21 -52
- data/app/models/spree/taxon.rb +9 -8
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/tracker.rb +1 -1
- data/app/models/spree/variant.rb +13 -15
- data/app/models/spree/variant/scopes.rb +1 -1
- data/app/models/spree/zone.rb +22 -22
- data/app/models/spree/zone_member.rb +2 -2
- data/config/initializers/user_class_extensions.rb +0 -8
- data/config/locales/en.yml +7 -42
- data/db/default/spree/countries.rb +2 -3
- data/db/default/spree/stores.rb +9 -0
- data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
- data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -5
- data/db/migrate/20130807024302_rename_adjustment_fields.rb +5 -2
- data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +1 -1
- data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +8 -0
- data/db/migrate/20140227112348_add_preference_store_to_everything.rb +8 -0
- data/db/migrate/20140309023735_migrate_old_preferences.rb +23 -0
- data/db/migrate/20140309024355_create_spree_stores.rb +25 -0
- data/db/migrate/20140309033438_create_store_from_preferences.rb +30 -0
- data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +6 -0
- data/db/migrate/20140331100557_add_additional_store_fields.rb +8 -0
- data/db/migrate/20140410141842_add_many_missing_indexes.rb +18 -0
- data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +66 -0
- data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +1 -1
- data/db/migrate/20140518174634_add_token_to_spree_orders.rb +5 -0
- data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +29 -0
- data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +5 -3
- data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +6 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -0
- data/lib/generators/spree/dummy/templates/initializers/devise.rb +3 -0
- data/lib/generators/spree/dummy/templates/rails/routes.rb +0 -1
- data/lib/generators/spree/install/install_generator.rb +8 -17
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +2 -2
- data/lib/spree/core.rb +13 -9
- data/lib/spree/core/calculated_adjustments.rb +1 -1
- data/lib/spree/core/controller_helpers/auth.rb +27 -18
- data/lib/spree/core/controller_helpers/common.rb +2 -2
- data/lib/spree/core/controller_helpers/order.rb +15 -24
- data/lib/spree/core/controller_helpers/store.rb +19 -0
- data/lib/spree/core/delegate_belongs_to.rb +2 -2
- data/lib/spree/core/engine.rb +0 -10
- data/lib/spree/core/importer.rb +1 -0
- data/lib/spree/core/importer/order.rb +16 -44
- data/lib/spree/core/importer/product.rb +62 -0
- data/lib/spree/core/product_filters.rb +0 -4
- data/lib/spree/core/routes.rb +4 -6
- data/lib/spree/core/validators/email.rb +23 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +1 -169
- data/lib/spree/permitted_attributes.rb +6 -4
- data/lib/spree/testing_support/authorization_helpers.rb +23 -21
- data/lib/spree/testing_support/capybara_ext.rb +11 -21
- data/lib/spree/testing_support/common_rake.rb +3 -1
- data/lib/spree/testing_support/controller_requests.rb +0 -2
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
- data/lib/spree/testing_support/factories/line_item_factory.rb +4 -1
- data/lib/spree/testing_support/factories/order_factory.rb +5 -4
- data/lib/spree/testing_support/factories/product_factory.rb +0 -4
- data/lib/spree/testing_support/factories/promotion_factory.rb +5 -7
- data/lib/spree/testing_support/factories/shipment_factory.rb +0 -1
- data/lib/spree/testing_support/factories/stock_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_factory.rb +8 -0
- data/lib/spree/testing_support/preferences.rb +3 -3
- data/lib/tasks/core.rake +2 -2
- metadata +48 -39
- data/app/models/spree/stock/order_counter.rb +0 -55
- data/app/models/spree/tokenized_permission.rb +0 -6
- data/app/views/spree/shared/_routes.html.erb +0 -13
- data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +0 -10
- data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
- data/lib/spree/core/adjustment_source.rb +0 -26
- data/lib/spree/core/mail_interceptor.rb +0 -22
- data/lib/spree/core/mail_method.rb +0 -27
- data/lib/spree/core/mail_settings.rb +0 -55
- data/lib/spree/core/ransackable_attributes.rb +0 -15
- data/lib/spree/core/token_resource.rb +0 -27
@@ -1,55 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module Stock
|
3
|
-
class OrderCounter
|
4
|
-
attr_reader :order
|
5
|
-
|
6
|
-
def initialize(order)
|
7
|
-
@order = order
|
8
|
-
@ordered_counts = count_line_items
|
9
|
-
@assigned_counts = count_inventory_units
|
10
|
-
end
|
11
|
-
|
12
|
-
def variants
|
13
|
-
@ordered_counts.keys
|
14
|
-
end
|
15
|
-
|
16
|
-
def variants_with_remaining
|
17
|
-
variants.select { |variant| remaining(variant) > 0 }
|
18
|
-
end
|
19
|
-
|
20
|
-
def remaining?
|
21
|
-
not variants_with_remaining.empty?
|
22
|
-
end
|
23
|
-
|
24
|
-
def ordered(variant)
|
25
|
-
@ordered_counts[variant]
|
26
|
-
end
|
27
|
-
|
28
|
-
def assigned(variant)
|
29
|
-
@assigned_counts[variant]
|
30
|
-
end
|
31
|
-
|
32
|
-
def remaining(variant)
|
33
|
-
@ordered_counts[variant] - @assigned_counts[variant]
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
def count_line_items
|
38
|
-
counts = Hash.new(0)
|
39
|
-
order.line_items.each do |line_item|
|
40
|
-
counts[line_item.variant] += line_item.quantity
|
41
|
-
end
|
42
|
-
counts
|
43
|
-
end
|
44
|
-
|
45
|
-
def count_inventory_units
|
46
|
-
counts = Hash.new(0)
|
47
|
-
order.inventory_units.each do |inventory_unit|
|
48
|
-
counts[inventory_unit.variant] += 1
|
49
|
-
end
|
50
|
-
counts
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
@@ -1,13 +0,0 @@
|
|
1
|
-
<script>
|
2
|
-
if (Spree === undefined) {
|
3
|
-
var Spree = {};
|
4
|
-
}
|
5
|
-
if (Spree.routes == undefined) {
|
6
|
-
Spree.routes = {};
|
7
|
-
}
|
8
|
-
Spree.routes.states_search = "<%= spree.api_states_path(:format => 'json') %>";
|
9
|
-
Spree.routes.apply_coupon_code = function(order_id) {
|
10
|
-
return "<%= spree.api_orders_path %>/" + order_id + "/apply_coupon_code";
|
11
|
-
}
|
12
|
-
Spree.routes.root = "<%= spree.root_url if spree.respond_to? :root_url %>";
|
13
|
-
</script>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
class AddDefaultToShipmentCost < ActiveRecord::Migration
|
2
|
-
def up
|
3
|
-
change_column :spree_shipments, :cost, :decimal, precision: 10, scale: 2, default: 0.0
|
4
|
-
Spree::Shipment.where(cost: nil).update_all(cost: 0)
|
5
|
-
end
|
6
|
-
|
7
|
-
def down
|
8
|
-
change_column :spree_shipments, :cost, :decimal, precision: 10, scale: 2
|
9
|
-
end
|
10
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module Core
|
3
|
-
module AdjustmentSource
|
4
|
-
def self.included(klass)
|
5
|
-
klass.class_eval do
|
6
|
-
def deals_with_adjustments_for_deleted_source
|
7
|
-
adjustment_scope = self.adjustments.includes(:order).references(:spree_orders)
|
8
|
-
|
9
|
-
# For incomplete orders, remove the adjustment completely.
|
10
|
-
adjustment_scope.where("spree_orders.completed_at IS NULL").destroy_all
|
11
|
-
|
12
|
-
# For complete orders, the source will be invalid.
|
13
|
-
# Therefore we nullify the source_id, leaving the adjustment in place.
|
14
|
-
# This would mean that the order's total is not altered at all.
|
15
|
-
adjustment_scope.where("spree_orders.completed_at IS NOT NULL").each do |adjustment|
|
16
|
-
adjustment.update_columns(
|
17
|
-
source_id: nil,
|
18
|
-
updated_at: Time.now,
|
19
|
-
)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# Allows us to intercept any outbound mail message and make last minute changes
|
2
|
-
# (such as specifying a "from" address or sending to a test email account)
|
3
|
-
#
|
4
|
-
# See http://railscasts.com/episodes/206-action-mailer-in-rails-3 for more details.
|
5
|
-
module Spree
|
6
|
-
module Core
|
7
|
-
class MailInterceptor
|
8
|
-
def self.delivering_email(message)
|
9
|
-
return unless MailSettings.override?
|
10
|
-
|
11
|
-
if Config[:intercept_email].present?
|
12
|
-
message.subject = "#{message.to} #{message.subject}"
|
13
|
-
message.to = Config[:intercept_email]
|
14
|
-
end
|
15
|
-
|
16
|
-
if Config[:mail_bcc].present?
|
17
|
-
message.bcc ||= Config[:mail_bcc]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module Core
|
3
|
-
class MailMethod
|
4
|
-
def initialize(options={})
|
5
|
-
end
|
6
|
-
|
7
|
-
def deliver!(mail)
|
8
|
-
if Config.enable_mail_delivery
|
9
|
-
mailer.deliver!(mail)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def mailer
|
14
|
-
mailer_class.new(mail_server_settings)
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
def mailer_class
|
19
|
-
Rails.env.test?? Mail::TestMailer : Mail::SMTP
|
20
|
-
end
|
21
|
-
|
22
|
-
def mail_server_settings
|
23
|
-
MailSettings.new.mail_server_settings
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module Core
|
3
|
-
class MailSettings
|
4
|
-
MAIL_AUTH = ['None', 'plain', 'login', 'cram_md5']
|
5
|
-
SECURE_CONNECTION_TYPES = ['None','SSL','TLS']
|
6
|
-
|
7
|
-
# Override the Rails application mail settings based on preferences
|
8
|
-
# This makes it possible to configure the mail settings through an admin
|
9
|
-
# interface instead of requiring changes to the Rails envrionment file
|
10
|
-
def self.init
|
11
|
-
override! if override?
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.override?
|
15
|
-
Config.override_actionmailer_config
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.override!
|
19
|
-
ActionMailer::Base.delivery_method = :spree
|
20
|
-
ActionMailer::Base.default_url_options[:host] ||= Config.site_url
|
21
|
-
end
|
22
|
-
|
23
|
-
def mail_server_settings
|
24
|
-
settings = if need_authentication?
|
25
|
-
basic_settings.merge(user_credentials)
|
26
|
-
else
|
27
|
-
basic_settings
|
28
|
-
end
|
29
|
-
|
30
|
-
settings.merge :enable_starttls_auto => secure_connection?
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
def user_credentials
|
35
|
-
{ :user_name => Config.smtp_username,
|
36
|
-
:password => Config.smtp_password }
|
37
|
-
end
|
38
|
-
|
39
|
-
def basic_settings
|
40
|
-
{ :address => Config.mail_host,
|
41
|
-
:domain => Config.mail_domain,
|
42
|
-
:port => Config.mail_port,
|
43
|
-
:authentication => Config.mail_auth_type }
|
44
|
-
end
|
45
|
-
|
46
|
-
def need_authentication?
|
47
|
-
Config.mail_auth_type != 'None'
|
48
|
-
end
|
49
|
-
|
50
|
-
def secure_connection?
|
51
|
-
Config.secure_connection_type == 'TLS'
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
ActiveRecord::Base.class_eval do
|
2
|
-
class_attribute :whitelisted_ransackable_associations
|
3
|
-
class_attribute :whitelisted_ransackable_attributes
|
4
|
-
|
5
|
-
class_attribute :default_ransackable_attributes
|
6
|
-
self.default_ransackable_attributes = %w[id name]
|
7
|
-
|
8
|
-
def self.ransackable_associations *arg
|
9
|
-
self.whitelisted_ransackable_associations || []
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.ransackable_attributes *arg
|
13
|
-
self.default_ransackable_attributes | (self.whitelisted_ransackable_attributes || [])
|
14
|
-
end
|
15
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module Core
|
3
|
-
module TokenResource
|
4
|
-
module ClassMethods
|
5
|
-
def token_resource
|
6
|
-
has_one :tokenized_permission, :as => :permissable
|
7
|
-
delegate :token, :to => :tokenized_permission, :allow_nil => true
|
8
|
-
after_create :create_token
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def create_token
|
13
|
-
permission = build_tokenized_permission
|
14
|
-
permission.token = token = ::SecureRandom::hex(8)
|
15
|
-
permission.save!
|
16
|
-
token
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.included(receiver)
|
20
|
-
receiver.extend ClassMethods
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
ActiveRecord::Base.class_eval { include Spree::Core::TokenResource }
|
27
|
-
|