spree_core 2.0.4 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/app/mailers/spree/test_mailer.rb +2 -1
  3. data/app/models/spree/adjustment.rb +18 -7
  4. data/app/models/spree/alert.rb +1 -1
  5. data/app/models/spree/credit_card.rb +2 -2
  6. data/app/models/spree/inventory_unit.rb +5 -0
  7. data/app/models/spree/line_item.rb +18 -4
  8. data/app/models/spree/order/checkout.rb +10 -14
  9. data/app/models/spree/order.rb +39 -27
  10. data/app/models/spree/order_contents.rb +2 -2
  11. data/app/models/spree/order_inventory.rb +2 -9
  12. data/app/models/spree/order_updater.rb +18 -7
  13. data/app/models/spree/payment/processing.rb +102 -102
  14. data/app/models/spree/payment.rb +10 -9
  15. data/app/models/spree/preferences/store.rb +1 -1
  16. data/app/models/spree/product.rb +11 -2
  17. data/app/models/spree/promotion/rules/user.rb +7 -2
  18. data/app/models/spree/property.rb +1 -1
  19. data/app/models/spree/shipment.rb +12 -7
  20. data/app/models/spree/shipping_method.rb +1 -1
  21. data/app/models/spree/stock/availability_validator.rb +9 -1
  22. data/app/models/spree/stock/coordinator.rb +1 -3
  23. data/app/models/spree/stock/estimator.rb +1 -1
  24. data/app/models/spree/stock/packer.rb +13 -5
  25. data/app/models/spree/stock_item.rb +10 -1
  26. data/app/models/spree/stock_location.rb +1 -1
  27. data/app/models/spree/tax_rate.rb +3 -1
  28. data/app/models/spree/zone.rb +37 -1
  29. data/app/views/spree/test_mailer/test_email.text.erb +4 -0
  30. data/config/locales/en.yml +24 -1
  31. data/db/default/spree/roles.rb +2 -2
  32. data/db/migrate/20130213191427_create_default_stock.rb +2 -1
  33. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +1 -1
  34. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +12 -0
  35. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +8 -0
  36. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +5 -0
  37. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +5 -0
  38. data/db/migrate/20130813140619_expand_order_number_size.rb +9 -0
  39. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +16 -0
  40. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +5 -0
  41. data/lib/generators/spree/dummy/templates/rails/database.yml +0 -3
  42. data/lib/spree/core/engine.rb +1 -5
  43. data/lib/spree/core/permalinks.rb +4 -2
  44. data/lib/spree/core/version.rb +1 -1
  45. data/lib/spree/promo/coupon_applicator.rb +2 -2
  46. data/lib/spree/testing_support/capybara_ext.rb +2 -2
  47. data/lib/spree/testing_support/factories/order_factory.rb +8 -4
  48. metadata +17 -12
  49. data/app/models/spree/new_adjustment.rb +0 -4
  50. data/app/models/spree/shipping_adjustment.rb +0 -4
  51. data/db/migrate/20130805043440_create_spree_new_adjustments.rb +0 -8
@@ -1,6 +1,9 @@
1
1
  module Spree
2
2
  class Payment < ActiveRecord::Base
3
3
  include Spree::Payment::Processing
4
+
5
+ IDENTIFIER_CHARS = (('A'..'Z').to_a + ('0'..'9').to_a - %w(0 1 I O)).freeze
6
+
4
7
  belongs_to :order, class_name: 'Spree::Order'
5
8
  belongs_to :source, polymorphic: true
6
9
  belongs_to :payment_method, class_name: 'Spree::PaymentMethod'
@@ -144,15 +147,13 @@ module Spree
144
147
  # and this is it. Related to #1998.
145
148
  # See https://github.com/spree/spree/issues/1998#issuecomment-12869105
146
149
  def set_unique_identifier
147
- chars = [('A'..'Z').to_a, ('0'..'9').to_a].flatten - %w(0 1 I O)
148
- identifier = ''
149
- 8.times { identifier << chars[rand(chars.length)] }
150
- if Spree::Payment.exists?(identifier: identifier)
151
- # Call it again, we've got a duplicate ID.
152
- set_unique_identifier
153
- else
154
- self.identifier = identifier
155
- end
150
+ begin
151
+ self.identifier = generate_identifier
152
+ end while self.class.exists?(identifier: self.identifier)
153
+ end
154
+
155
+ def generate_identifier
156
+ Array.new(8){ IDENTIFIER_CHARS.sample }.join
156
157
  end
157
158
  end
158
159
  end
@@ -86,7 +86,7 @@ module Spree::Preferences
86
86
  end
87
87
 
88
88
  def should_persist?
89
- @persistence and Spree::Preference.table_exists?
89
+ @persistence && Spree::Preference.connected? && Spree::Preference.table_exists?
90
90
  end
91
91
 
92
92
  end
@@ -106,6 +106,8 @@ module Spree
106
106
 
107
107
  after_initialize :ensure_master
108
108
 
109
+ before_destroy :punch_permalink
110
+
109
111
  def variants_with_only_master
110
112
  ActiveSupport::Deprecation.warn("[SPREE] Spree::Product#variants_with_only_master will be deprecated in Spree 1.3. Please use Spree::Product#master instead.")
111
113
  master
@@ -169,8 +171,11 @@ module Spree
169
171
  end
170
172
 
171
173
  def self.like_any(fields, values)
172
- where_str = fields.map { |field| Array.new(values.size, "#{self.quoted_table_name}.#{field} #{LIKE} ?").join(' OR ') }.join(' OR ')
173
- self.where([where_str, values.map { |value| "%#{value}%" } * fields.size].flatten)
174
+ where fields.map { |field|
175
+ values.map { |value|
176
+ arel_table[field].matches("%#{value}%")
177
+ }.inject(:or)
178
+ }.inject(:or)
174
179
  end
175
180
 
176
181
  # Suitable for displaying only variants that has at least one option value.
@@ -262,6 +267,10 @@ module Spree
262
267
  return unless new_record?
263
268
  self.master ||= Variant.new
264
269
  end
270
+
271
+ def punch_permalink
272
+ update_attribute :permalink, "#{Time.now.to_i}_#{permalink}" # punch permalink with date prefix
273
+ end
265
274
  end
266
275
  end
267
276
 
@@ -4,8 +4,13 @@ module Spree
4
4
  class User < PromotionRule
5
5
  attr_accessible :user_ids_string
6
6
 
7
- belongs_to :user, :class_name => Spree.user_class.to_s
8
- has_and_belongs_to_many :users, :class_name => Spree.user_class.to_s, :join_table => 'spree_promotion_rules_users', :foreign_key => 'promotion_rule_id'
7
+ if Spree.user_class
8
+ belongs_to :user, class_name: Spree.user_class.to_s
9
+ has_and_belongs_to_many :users, class_name: Spree.user_class.to_s, join_table: 'spree_promotion_rules_users', foreign_key: 'promotion_rule_id'
10
+ else
11
+ belongs_to :user
12
+ has_and_belongs_to_many :users, join_table: 'spree_promotion_rules_users', foreign_key: 'promotion_rule_id'
13
+ end
9
14
 
10
15
  def eligible?(order, options = {})
11
16
  users.include?(order.user)
@@ -2,7 +2,7 @@ module Spree
2
2
  class Property < ActiveRecord::Base
3
3
  has_and_belongs_to_many :prototypes, join_table: 'spree_properties_prototypes'
4
4
 
5
- has_many :product_properties, dependent: :destroy
5
+ has_many :product_properties, dependent: :delete_all
6
6
  has_many :products, through: :product_properties
7
7
 
8
8
  attr_accessible :name, :presentation
@@ -6,10 +6,10 @@ module Spree
6
6
  belongs_to :address, class_name: 'Spree::Address'
7
7
  belongs_to :stock_location, class_name: 'Spree::StockLocation'
8
8
 
9
- has_many :shipping_rates, dependent: :destroy
9
+ has_many :shipping_rates, dependent: :delete_all
10
10
  has_many :shipping_methods, through: :shipping_rates
11
11
  has_many :state_changes, as: :stateful
12
- has_many :inventory_units, dependent: :destroy
12
+ has_many :inventory_units, dependent: :delete_all
13
13
  has_one :adjustment, as: :source, dependent: :destroy
14
14
 
15
15
  before_create :generate_shipment_number
@@ -105,13 +105,11 @@ module Spree
105
105
  def refresh_rates
106
106
  return shipping_rates if shipped?
107
107
 
108
- shipping_method_id = shipping_method.try(:id)
109
108
  self.shipping_rates = Stock::Estimator.new(order).shipping_rates(to_package)
110
109
 
111
-
112
- if shipping_method_id
110
+ if shipping_method
113
111
  selected_rate = shipping_rates.detect { |rate|
114
- rate.shipping_method_id == shipping_method_id
112
+ rate.shipping_method_id == shipping_method.id
115
113
  }
116
114
  self.selected_shipping_rate_id = selected_rate.id if selected_rate
117
115
  end
@@ -158,7 +156,7 @@ module Spree
158
156
  end
159
157
 
160
158
  def manifest
161
- inventory_units.includes(:variant).group_by(&:variant).map do |variant, units|
159
+ inventory_units.joins(:variant).includes(:variant).group_by(&:variant).map do |variant, units|
162
160
  states = {}
163
161
  units.group_by(&:state).each { |state, iu| states[state] = iu.count }
164
162
  OpenStruct.new(variant: variant, quantity: units.length, states: states)
@@ -229,6 +227,13 @@ module Spree
229
227
  package
230
228
  end
231
229
 
230
+ def set_up_inventory(state, variant, order)
231
+ self.inventory_units.create(
232
+ { variant_id: variant.id, state: state, order_id: order.id },
233
+ without_protection: true
234
+ )
235
+ end
236
+
232
237
  private
233
238
 
234
239
  def manifest_unstock(item)
@@ -14,7 +14,7 @@ module Spree
14
14
  :class_name => 'Spree::Zone',
15
15
  :foreign_key => 'shipping_method_id'
16
16
 
17
- attr_accessible :name, :zones, :display_on, :shipping_category_id,
17
+ attr_accessible :name, :admin_name, :zones, :display_on, :shipping_category_id,
18
18
  :match_none, :match_one, :match_all, :tracking_url
19
19
 
20
20
  validates :name, presence: true
@@ -2,9 +2,17 @@ module Spree
2
2
  module Stock
3
3
  class AvailabilityValidator < ActiveModel::Validator
4
4
  def validate(line_item)
5
+ if shipment = line_item.target_shipment
6
+ units = shipment.inventory_units_for(line_item.variant)
7
+ return if units.count > line_item.quantity
8
+ quantity = line_item.quantity - units.count
9
+ else
10
+ quantity = line_item.quantity
11
+ end
12
+
5
13
  quantifier = Stock::Quantifier.new(line_item.variant_id)
6
14
 
7
- unless quantifier.can_supply? line_item.quantity
15
+ unless quantifier.can_supply? quantity
8
16
  variant = line_item.variant
9
17
  display_name = %Q{#{variant.name}}
10
18
  display_name += %Q{ (#{variant.options_text})} unless variant.options_text.blank?
@@ -24,9 +24,7 @@ module Spree
24
24
  # Returns an array of Package instances
25
25
  def build_packages(packages = Array.new)
26
26
  StockLocation.active.each do |stock_location|
27
- next unless order.line_items.any? do |item|
28
- stock_location.stock_item(item.variant)
29
- end
27
+ next unless stock_location.stock_items.where(:variant_id => order.line_items.pluck(:variant_id)).exists?
30
28
 
31
29
  packer = build_packer(stock_location, order)
32
30
  packages += packer.packages
@@ -15,7 +15,7 @@ module Spree
15
15
 
16
16
  shipping_methods.each do |shipping_method|
17
17
  cost = calculate_cost(shipping_method, package)
18
- shipping_rates << shipping_method.shipping_rates.new(:cost => cost)
18
+ shipping_rates << shipping_method.shipping_rates.new(:cost => cost) unless cost.nil?
19
19
  end
20
20
 
21
21
  shipping_rates.sort_by! { |r| r.cost || 0 }
@@ -10,17 +10,25 @@ module Spree
10
10
  end
11
11
 
12
12
  def packages
13
- build_splitter.split [default_package]
13
+ if splitters.empty?
14
+ [default_package]
15
+ else
16
+ build_splitter.split [default_package]
17
+ end
14
18
  end
15
19
 
16
20
  def default_package
17
21
  package = Package.new(stock_location, order)
18
22
  order.line_items.each do |line_item|
19
- next unless stock_location.stock_item(line_item.variant)
23
+ if Config.track_inventory_levels
24
+ next unless stock_location.stock_item(line_item.variant)
20
25
 
21
- on_hand, backordered = stock_location.fill_status(line_item.variant, line_item.quantity)
22
- package.add line_item.variant, on_hand, :on_hand if on_hand > 0
23
- package.add line_item.variant, backordered, :backordered if backordered > 0
26
+ on_hand, backordered = stock_location.fill_status(line_item.variant, line_item.quantity)
27
+ package.add line_item.variant, on_hand, :on_hand if on_hand > 0
28
+ package.add line_item.variant, backordered, :backordered if backordered > 0
29
+ else
30
+ package.add line_item.variant, line_item.quantity, :on_hand
31
+ end
24
32
  end
25
33
  package
26
34
  end
@@ -1,8 +1,10 @@
1
1
  module Spree
2
2
  class StockItem < ActiveRecord::Base
3
+ acts_as_paranoid
4
+
3
5
  belongs_to :stock_location, class_name: 'Spree::StockLocation'
4
6
  belongs_to :variant, class_name: 'Spree::Variant'
5
- has_many :stock_movements, dependent: :destroy
7
+ has_many :stock_movements
6
8
 
7
9
  validates_presence_of :stock_location, :variant
8
10
  validates_uniqueness_of :variant_id, scope: :stock_location_id
@@ -28,6 +30,13 @@ module Spree
28
30
  end
29
31
  end
30
32
 
33
+ def set_count_on_hand(value)
34
+ self.count_on_hand = value
35
+ process_backorders if in_stock?
36
+
37
+ self.save!
38
+ end
39
+
31
40
  def in_stock?
32
41
  self.count_on_hand > 0
33
42
  end
@@ -10,7 +10,7 @@ module Spree
10
10
 
11
11
  attr_accessible :name, :active, :address1, :address2, :city, :zipcode,
12
12
  :backorderable_default, :state_name, :state_id, :country_id, :phone,
13
- :country_id, :propagate_all_variants
13
+ :country_id, :propagate_all_variants, :admin_name
14
14
 
15
15
  scope :active, -> { where(active: true) }
16
16
 
@@ -33,7 +33,9 @@ module Spree
33
33
  end
34
34
 
35
35
  def self.adjust(order)
36
- order.clear_adjustments!
36
+ order.adjustments.tax.destroy_all
37
+ order.line_item_adjustments.where(originator_type: 'Spree::TaxRate').destroy_all
38
+
37
39
  self.match(order).each do |rate|
38
40
  rate.adjust(order)
39
41
  end
@@ -14,7 +14,7 @@ module Spree
14
14
  accepts_nested_attributes_for :zone_members, allow_destroy: true, reject_if: proc { |a| a['zoneable_id'].blank? }
15
15
 
16
16
  attr_accessible :name, :description, :default_tax, :kind, :zone_members,
17
- :zone_members_attributes
17
+ :zone_members_attributes, :state_ids, :country_ids
18
18
 
19
19
  def kind
20
20
  if members.any? && !members.any? { |member| member.try(:zoneable_type).nil? }
@@ -75,6 +75,42 @@ module Spree
75
75
  members.collect(&:zoneable)
76
76
  end
77
77
 
78
+ def country_ids
79
+ if kind == 'country'
80
+ members.collect(&:zoneable_id)
81
+ else
82
+ []
83
+ end
84
+ end
85
+
86
+ def state_ids
87
+ if kind == 'state'
88
+ members.collect(&:zoneable_id)
89
+ else
90
+ []
91
+ end
92
+ end
93
+
94
+ def country_ids=(ids)
95
+ zone_members.destroy_all
96
+ ids.reject{ |id| id.blank? }.map do |id|
97
+ member = ZoneMember.new
98
+ member.zoneable_type = 'Spree::Country'
99
+ member.zoneable_id = id
100
+ members << member
101
+ end
102
+ end
103
+
104
+ def state_ids=(ids)
105
+ zone_members.destroy_all
106
+ ids.reject{ |id| id.blank? }.map do |id|
107
+ member = ZoneMember.new
108
+ member.zoneable_type = 'Spree::State'
109
+ member.zoneable_id = id
110
+ members << member
111
+ end
112
+ end
113
+
78
114
  def self.default_tax
79
115
  where(default_tax: true).first
80
116
  end
@@ -0,0 +1,4 @@
1
+ <%= t('test_mailer.test_email.greeting') %>
2
+ ================
3
+
4
+ <%= t('test_mailer.test_email.message') %>
@@ -63,6 +63,7 @@ en:
63
63
  zipcode: Shipping address zipcode
64
64
  spree/payment:
65
65
  amount: Amount
66
+ one: "Payment"
66
67
  spree/payment_method:
67
68
  name: Name
68
69
  spree/product:
@@ -148,9 +149,15 @@ en:
148
149
  spree/payment:
149
150
  one: Payment
150
151
  other: Payments
152
+ spree/payment_method:
153
+ one: Payment Method
154
+ other: Payment Methods
151
155
  spree/product:
152
156
  one: Product
153
157
  other: Products
158
+ spree/promotion:
159
+ one: Promotion
160
+ other: Promotions
154
161
  spree/property:
155
162
  one: Property
156
163
  other: Properties
@@ -169,9 +176,18 @@ en:
169
176
  spree/shipping_category:
170
177
  one: Shipping Category
171
178
  other: Shipping Categories
179
+ spree/shipping_method:
180
+ one: Shipping Method
181
+ other: Shipping Methods
172
182
  spree/state:
173
183
  one: State
174
184
  other: States
185
+ spree/stock_location:
186
+ one: Stock Location
187
+ other: Stock Locations
188
+ spree/stock_transfer:
189
+ one: Stock Transfer
190
+ other: Stock Transfers
175
191
  spree/tax_category:
176
192
  one: Tax Category
177
193
  other: Tax Categories
@@ -184,6 +200,9 @@ en:
184
200
  spree/taxonomy:
185
201
  one: Taxonomy
186
202
  other: Taxonomies
203
+ spree/tracker:
204
+ one: Tracker
205
+ other: Trackers
187
206
  spree/user:
188
207
  one: User
189
208
  other: Users
@@ -360,6 +379,7 @@ en:
360
379
  back_to_users_list: Back To Users List
361
380
  back_to_zones_list: Back To Zones List
362
381
  backorderable: Backorderable
382
+ backorders_allowed: backorders allowed
363
383
  balance_due: Balance Due
364
384
  bill_address: Bill Address
365
385
  billing: Billing
@@ -454,6 +474,7 @@ en:
454
474
  date: Date
455
475
  date_completed: Date Completed
456
476
  date_picker:
477
+ first_day: 0
457
478
  format: ! '%Y/%m/%d'
458
479
  js_format: yy/mm/dd
459
480
  date_range: Date Range
@@ -575,6 +596,7 @@ en:
575
596
  insufficient_stock: Insufficient stock available, only %{on_hand} remaining
576
597
  intercept_email_address: Intercept Email Address
577
598
  intercept_email_instructions: Override email recipient and replace with this address.
599
+ internal_name: Internal Name
578
600
  invalid_payment_provider: Invalid payment provider.
579
601
  invalid_promotion_action: Invalid promotion action.
580
602
  invalid_promotion_rule: Invalid promotion rule.
@@ -590,7 +612,7 @@ en:
590
612
  operators:
591
613
  gt: greater than
592
614
  gte: greater than or equal to
593
- items_cannot_be_shipped: We are unable to ship the selected items to your shipping address. Please choose another shipping address.
615
+ items_cannot_be_shipped: We are unable to calculate shipping rates for the selected items.
594
616
  jirafe: Jirafe
595
617
  landing_page_rule:
596
618
  path: Path
@@ -674,6 +696,7 @@ en:
674
696
  no_promotions_found: No promotions found
675
697
  no_results: No results
676
698
  no_rules_added: No rules added
699
+ no_resource_found: ! 'No %{resource} found'
677
700
  no_shipping_methods_found: No shipping methods found
678
701
  no_trackers_found: No Trackers Found
679
702
  no_stock_locations_found: No stock locations found
@@ -1,2 +1,2 @@
1
- Spree::Role.create!(:name => "admin")
2
- Spree::Role.create!(:name => "user")
1
+ Spree::Role.where(:name => "admin").first_or_create
2
+ Spree::Role.where(:name => "user").first_or_create
@@ -2,7 +2,8 @@ class CreateDefaultStock < ActiveRecord::Migration
2
2
  def up
3
3
  Spree::StockLocation.skip_callback(:create, :after, :create_stock_items)
4
4
  Spree::StockItem.skip_callback(:save, :after, :process_backorders)
5
- location = Spree::StockLocation.create(name: 'default')
5
+ location = Spree::StockLocation.new(name: 'default')
6
+ location.save(validate: false)
6
7
  Spree::Variant.all.each do |variant|
7
8
  stock_item = location.stock_items.build(variant: variant)
8
9
  stock_item.send(:count_on_hand=, variant.count_on_hand)
@@ -2,7 +2,7 @@ class MigrateTaxCategoriesToLineItems < ActiveRecord::Migration
2
2
  def change
3
3
  Spree::LineItem.includes(:variant => { :product => :tax_category }).find_in_batches do |line_items|
4
4
  line_items.each do |line_item|
5
- line_item.update_column(:tax_category_id, line_item.product.tax_category.id)
5
+ line_item.update_column(:tax_category_id, line_item.product.tax_category_id)
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,12 @@
1
+ class DropSpreeMailMethods < ActiveRecord::Migration
2
+ def up
3
+ drop_table :spree_mail_methods
4
+ end
5
+
6
+ def down
7
+ create_table(:spree_mail_methods) do |t|
8
+ t.string :environment
9
+ t.boolean :active
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ class SetDefaultStockLocationOnShipments < ActiveRecord::Migration
2
+ def change
3
+ if Spree::Shipment.where('stock_location_id IS NULL').count > 0
4
+ location = Spree::StockLocation.find_by_name('default') || Spree::StockLocation.first
5
+ Spree::Shipment.where('stock_location_id IS NULL').update_all(stock_location_id: location.id)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ class AddAdminNameColumnToSpreeShippingMethods < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_shipping_methods, :admin_name, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddAdminNameColumnToSpreeStockLocations < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_stock_locations, :admin_name, :string
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class ExpandOrderNumberSize < ActiveRecord::Migration
2
+ def up
3
+ change_column :spree_orders, :number, :string, :limit => 32
4
+ end
5
+
6
+ def down
7
+ change_column :spree_orders, :number, :string, :limit => 15
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ class AddDepthToSpreeTaxons < ActiveRecord::Migration
2
+ def up
3
+ if !Spree::Taxon.column_names.include?('depth')
4
+ add_column :spree_taxons, :depth, :integer
5
+
6
+ say_with_time 'Update depth on all taxons' do
7
+ Spree::Taxon.reset_column_information
8
+ Spree::Taxon.all.each { |t| t.save }
9
+ end
10
+ end
11
+ end
12
+
13
+ def down
14
+ remove_column :spree_taxons, :depth
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ class AddDeletedAtToSpreeStockItems < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_stock_items, :deleted_at, :datetime
4
+ end
5
+ end
@@ -17,17 +17,14 @@ production:
17
17
  development:
18
18
  adapter: mysql2
19
19
  database: <%= database_prefix %>spree_development
20
- username:
21
20
  encoding: utf8
22
21
  test:
23
22
  adapter: mysql2
24
23
  database: <%= database_prefix %>spree_test
25
- username:
26
24
  encoding: utf8
27
25
  production:
28
26
  adapter: mysql2
29
27
  database: <%= database_prefix %>spree_production
30
- username:
31
28
  encoding: utf8
32
29
  <% when 'postgres' %>
33
30
  development:
@@ -86,11 +86,7 @@ module Spree
86
86
  ]
87
87
  end
88
88
 
89
- # Promotion rules need to be evaluated on after initialize otherwise
90
- # Spree.user_class would be nil and users might experience errors related
91
- # to malformed model associations (Spree.user_class is only defined on
92
- # the app initializer)
93
- config.after_initialize do
89
+ initializer 'spree.promo.register.promotion.calculators' do
94
90
  Rails.application.config.spree.promotions.rules.concat [
95
91
  Spree::Promotion::Rules::ItemTotal,
96
92
  Spree::Promotion::Rules::Product,
@@ -14,8 +14,10 @@ module Spree
14
14
  options[:field] ||= :permalink
15
15
  self.permalink_options = options
16
16
 
17
- if self.table_exists? && self.column_names.include?(permalink_options[:field].to_s)
18
- before_validation(:on => :create) { save_permalink }
17
+ if self.connected?
18
+ if self.table_exists? && self.column_names.include?(permalink_options[:field].to_s)
19
+ before_validation(:on => :create) { save_permalink }
20
+ end
19
21
  end
20
22
  end
21
23
 
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- "2.0.4"
3
+ "2.0.5"
4
4
  end
5
5
  end
@@ -32,8 +32,8 @@ module Spree
32
32
  return promotion_usage_limit_exceeded if promotion.usage_limit_exceeded?
33
33
 
34
34
  event_name = "spree.checkout.coupon_code_added"
35
- ActiveSupport::Notifications.instrument(event_name, :coupon_code => @order.coupon_code, :order => @order)
36
- promo = @order.adjustments.promotion.detect { |p| p.originator.promotion.code == @order.coupon_code }
35
+ promotion.activate(:coupon_code => @order.coupon_code, :order => @order)
36
+ promo = @order.adjustments.includes(:originator).promotion.detect { |p| p.originator.promotion.code == @order.coupon_code }
37
37
  determine_promotion_application_result(promo)
38
38
  end
39
39
 
@@ -104,7 +104,7 @@ end
104
104
 
105
105
  RSpec::Matchers.define :have_meta do |name, expected|
106
106
  match do |actual|
107
- has_css?("meta[name='#{name}'][content='#{expected}']")
107
+ has_css?("meta[name='#{name}'][content='#{expected}']", visible: false)
108
108
  end
109
109
 
110
110
  failure_message_for_should do |actual|
@@ -119,7 +119,7 @@ end
119
119
 
120
120
  RSpec::Matchers.define :have_title do |expected|
121
121
  match do |actual|
122
- has_css?("title", :text => expected)
122
+ has_css?("title", :text => expected, visible: false)
123
123
  end
124
124
 
125
125
  failure_message_for_should do |actual|
@@ -33,14 +33,18 @@ FactoryGirl.define do
33
33
  state 'complete'
34
34
  completed_at { Time.now }
35
35
 
36
+ after(:create) do |order|
37
+ order.refresh_shipment_rates
38
+ end
39
+
36
40
  factory :order_ready_to_ship do
37
41
  payment_state 'paid'
38
42
  shipment_state 'ready'
39
43
  after(:create) do |order|
40
44
  create(:payment, amount: order.total, order: order, state: 'completed')
41
45
  order.shipments.each do |shipment|
42
- shipment.inventory_units.each { |u| u.update_attribute('state', 'on_hand') }
43
- shipment.update_attribute('state', 'ready')
46
+ shipment.inventory_units.each { |u| u.update_column('state', 'on_hand') }
47
+ shipment.update_column('state', 'ready')
44
48
  end
45
49
  order.reload
46
50
  end
@@ -49,8 +53,8 @@ FactoryGirl.define do
49
53
  factory :shipped_order do
50
54
  after(:create) do |order|
51
55
  order.shipments.each do |shipment|
52
- shipment.inventory_units.each { |u| u.update_attribute('state', 'shipped') }
53
- shipment.update_attribute('state', 'shipped')
56
+ shipment.inventory_units.each { |u| u.update_column('state', 'shipped') }
57
+ shipment.update_column('state', 'shipped')
54
58
  end
55
59
  order.reload
56
60
  end