spree_core 2.0.6 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b3832f1651011ef4d49aebec92add9c6fc8744d
4
- data.tar.gz: 0f9032e0a7134479874ddda954c590cee31486a8
3
+ metadata.gz: 3c0e00c7f8d48f1f8f6a553128e0f324baf1b80b
4
+ data.tar.gz: 13ad6252099846dd0af9cb82e417d804199ecfa5
5
5
  SHA512:
6
- metadata.gz: df88e26ab461edc8b6a6373a708386c359a051aec2e6a1715c26ef6b7318d90fec9be379abb911d2eb0171377076186210565fbd2408e8c6eb112a0eefb5c3f1
7
- data.tar.gz: d8e1e60bb608201d98d4fcf89344716d4bbdd17347135b3ccad3e8b524d44d22ac515cd3d23a78c1dc5f55262083c63aec0ead934f0202d737ebcf7c845fa651
6
+ metadata.gz: c87d7b7176aa8f6447eba1897834beb1889741ab3b2a8fe6d0090d25559a96d2f104447a89ced51264099b4ed43e8cc8a9504e8c986bcb868bec309a73d5c71b
7
+ data.tar.gz: 884eef22bc8e8e9b6caf813c24b453582089d2966aab9cc924c62fcda7c8fefe0608513b464ed761c157f46047ec3b208b44c1d6e4fa3570e2ffdccdfe204ac9
@@ -117,7 +117,7 @@ module Spree
117
117
  countries.collect do |country|
118
118
  country.name = Spree.t(country.iso, scope: 'country_names', default: country.name)
119
119
  country
120
- end.sort { |a, b| a.name <=> b.name }
120
+ end.sort { |a, b| a.name.parameterize <=> b.name.parameterize }
121
121
  end
122
122
 
123
123
  def seo_url(taxon)
@@ -82,23 +82,17 @@ module Spree
82
82
  # delegate updating of amount to their Originator when present, but only if
83
83
  # +locked+ is false. Adjustments that are +locked+ will never change their amount.
84
84
  #
85
- # Adjustments delegate updating of amount to their Originator when present,
86
- # but only if when they're in "open" state, closed or finalized adjustments
87
- # are not recalculated.
88
- #
89
- # It receives +calculable+ as the updated source here so calculations can be
90
- # performed on the current values of that source. If we used +source+ it
91
- # could load the old record from db for the association. e.g. when updating
92
- # more than on line items at once via accepted_nested_attributes the order
93
- # object on the association would be in a old state and therefore the
94
- # adjustment calculations would not performed on proper values
95
- def update!(calculable = nil)
85
+ # order#update_adjustments passes self as the src, this is so calculations can
86
+ # be performed on the # current values. If we used source it would load the old
87
+ # record from db for the association
88
+ def update!(calculable=nil)
96
89
  return if immutable?
97
90
  # Fix for #3381
98
91
  # If we attempt to call 'source' before the reload, then source is currently
99
92
  # the order object. After calling a reload, the source is the Shipment.
100
93
  reload
101
- originator.update_adjustment(self, calculable || source) if originator.present?
94
+ calculable = source unless calculable == source
95
+ originator.update_adjustment(self, calculable) if originator.present?
102
96
  set_eligibility
103
97
  end
104
98
 
@@ -42,6 +42,7 @@ module Spree
42
42
  preference :currency, :string, default: "USD"
43
43
  preference :currency_decimal_mark, :string, default: "."
44
44
  preference :currency_symbol_position, :string, default: "before"
45
+ preference :currency_sign_before_symbol, :boolean, default: true
45
46
  preference :currency_thousands_separator, :string, default: ","
46
47
  preference :display_currency, :boolean, default: false
47
48
  preference :default_country_id, :integer
@@ -7,7 +7,7 @@ module Spree
7
7
 
8
8
  attr_accessor :number, :verification_value
9
9
 
10
- validates :month, :year, numericality: { only_integer: true }
10
+ validates :month, :year, numericality: { only_integer: true }, unless: :has_payment_profile?
11
11
  validates :number, presence: true, unless: :has_payment_profile?, on: :create
12
12
  validates :verification_value, presence: true, unless: :has_payment_profile?, on: :create
13
13
  validate :expiry_not_in_the_past
@@ -94,7 +94,7 @@ module Spree
94
94
  end
95
95
 
96
96
  def has_payment_profile?
97
- gateway_customer_profile_id.present?
97
+ gateway_customer_profile_id.present? || gateway_payment_profile_id.present?
98
98
  end
99
99
 
100
100
  def spree_cc_type
@@ -6,6 +6,14 @@ module Spree
6
6
  false
7
7
  end
8
8
 
9
+ def capture(money, response_code, options = {})
10
+ if response_code == '12345'
11
+ ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '67890')
12
+ else
13
+ ActiveMerchant::Billing::Response.new(false, 'Bogus Gateway: Forced failure', :error => 'Bogus Gateway: Forced failure', :test => true)
14
+ end
15
+ end
16
+
9
17
  def authorize(money, credit_card, options = {})
10
18
  if VALID_CCS.include? credit_card.number
11
19
  ActiveMerchant::Billing::Response.new(true, 'Bogus Gateway: Forced success', {}, :test => true, :authorization => '12345', :avs_result => { :code => 'A' })
@@ -2,6 +2,7 @@ module Spree
2
2
  class OptionType < ActiveRecord::Base
3
3
  has_many :option_values, order: :position, dependent: :destroy
4
4
  has_many :product_option_types, dependent: :destroy
5
+ has_many :products, through: :product_option_types
5
6
  has_and_belongs_to_many :prototypes, join_table: 'spree_option_types_prototypes'
6
7
 
7
8
  attr_accessible :name, :presentation, :option_values_attributes
@@ -65,10 +65,14 @@ module Spree
65
65
  end
66
66
 
67
67
  def add_to_shipment(shipment, variant, quantity)
68
- on_hand, back_order = shipment.stock_location.fill_status(variant, quantity)
68
+ if Config.track_inventory_levels
69
+ on_hand, back_order = shipment.stock_location.fill_status(variant, quantity)
69
70
 
70
- on_hand.times { shipment.set_up_inventory('on_hand', variant, order) }
71
- back_order.times { shipment.set_up_inventory('backordered', variant, order) }
71
+ on_hand.times { shipment.set_up_inventory('on_hand', variant, order) }
72
+ back_order.times { shipment.set_up_inventory('backordered', variant, order) }
73
+ else
74
+ quantity.times { shipment.set_up_inventory('on_hand', variant, order) }
75
+ end
72
76
 
73
77
  # adding to this shipment, and removing from stock_location
74
78
  if order.completed?
@@ -25,8 +25,7 @@ module Spree
25
25
  update_shipment_state
26
26
  end
27
27
 
28
- update_promotion_adjustments
29
- update_shipping_adjustments
28
+ update_adjustments
30
29
  # update totals a second time in case updated adjustments have an effect on the total
31
30
  update_totals
32
31
 
@@ -125,17 +124,11 @@ module Spree
125
124
  #
126
125
  # Adjustments will check if they are still eligible. Ineligible adjustments
127
126
  # are preserved but not counted towards adjustment_total.
128
- def update_promotion_adjustments
129
- order.adjustments.reload.promotion.each { |adjustment| adjustment.update!(order) }
127
+ def update_adjustments
128
+ order.adjustments.reload.each { |adjustment| adjustment.update!(order) }
130
129
  choose_best_promotion_adjustment
131
130
  end
132
131
 
133
- # Shipping adjustments don't receive order on update! because they calculated
134
- # over a shipping / package object rather than an order object
135
- def update_shipping_adjustments
136
- order.adjustments.reload.shipping.each { |adjustment| adjustment.update! }
137
- end
138
-
139
132
  private
140
133
 
141
134
  # Picks one (and only one) promotion to be eligible for this order
@@ -13,7 +13,7 @@ module Spree
13
13
  end
14
14
  else
15
15
  invalidate!
16
- raise Core::GatewayError.new(I18n.t(:payment_method_not_supported))
16
+ raise Core::GatewayError.new(Spree.t(:payment_method_not_supported))
17
17
  end
18
18
  end
19
19
  else
@@ -83,11 +83,12 @@ module Spree
83
83
 
84
84
  credit_amount ||= credit_allowed >= order.outstanding_balance.abs ? order.outstanding_balance.abs : credit_allowed.abs
85
85
  credit_amount = credit_amount.to_f
86
+ credit_cents = Spree::Money.new(credit_amount, currency: currency).money.cents
86
87
 
87
88
  if payment_method.payment_profiles_supported?
88
- response = payment_method.credit((credit_amount * 100).round, source, response_code, gateway_options)
89
+ response = payment_method.credit(credit_cents, source, response_code, gateway_options)
89
90
  else
90
- response = payment_method.credit((credit_amount * 100).round, response_code, gateway_options)
91
+ response = payment_method.credit(credit_cents, response_code, gateway_options)
91
92
  end
92
93
 
93
94
  record_response(response)
@@ -139,7 +140,7 @@ module Spree
139
140
  protect_from_connection_error do
140
141
  check_environment
141
142
 
142
- response = payment_method.send(action, (amount * 100).round,
143
+ response = payment_method.send(action, money.money.cents,
143
144
  source,
144
145
  gateway_options)
145
146
  handle_response(response, success_state, :failure)
@@ -202,8 +202,13 @@ module Spree
202
202
 
203
203
  def set_property(property_name, property_value)
204
204
  ActiveRecord::Base.transaction do
205
- property = Property.where(name: property_name).first_or_create!(presentation: property_name)
206
- product_property = ProductProperty.where(product_id: id, property_id: property.id).first_or_initialize
205
+ # Works around spree_i18n #301
206
+ property = if Property.exists?(name: property_name)
207
+ Property.where(name: property_name).first
208
+ else
209
+ Property.create(name: property_name, presentation: property_name)
210
+ end
211
+ product_property = ProductProperty.where(product_id: self.id, property_id: property.id).first_or_initialize
207
212
  product_property.value = property_value
208
213
  product_property.save!
209
214
  end
@@ -9,7 +9,7 @@ module Spree
9
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
10
  else
11
11
  belongs_to :user
12
- has_and_belongs_to_many :users, join_table: 'spree_promotion_rules_users', foreign_key: 'promotion_rule_id'
12
+ has_and_belongs_to_many :users, join_table: 'spree_promotion_rules_users', foreign_key: 'promotion_rule_id', :class_name => Spree.user_class
13
13
  end
14
14
 
15
15
  def eligible?(order, options = {})
@@ -66,9 +66,7 @@ module Spree
66
66
  end
67
67
 
68
68
  def to_param
69
- number if number
70
- generate_shipment_number unless number
71
- number.to_s.to_url.upcase
69
+ number
72
70
  end
73
71
 
74
72
  def backordered?
@@ -104,6 +102,7 @@ module Spree
104
102
 
105
103
  def refresh_rates
106
104
  return shipping_rates if shipped?
105
+ return [] unless can_get_rates?
107
106
 
108
107
  # StockEstimator.new assigment below will replace the current shipping_method
109
108
  original_shipping_method_id = shipping_method.try(:id)
@@ -294,5 +293,9 @@ module Spree
294
293
  def update_order
295
294
  order.update!
296
295
  end
296
+
297
+ def can_get_rates?
298
+ order.ship_address && order.ship_address.valid?
299
+ end
297
300
  end
298
301
  end
@@ -8,8 +8,8 @@ module Spree
8
8
 
9
9
  before_create :set_permalink
10
10
 
11
- attr_accessible :name, :parent_id, :position, :icon, :description, :permalink, :taxonomy_id,
12
- :meta_description, :meta_keywords, :meta_title
11
+ attr_accessible :name, :parent_id, :icon, :description, :permalink, :taxonomy_id,
12
+ :meta_description, :meta_keywords, :meta_title, :child_index
13
13
 
14
14
  validates :name, presence: true
15
15
 
@@ -72,5 +72,14 @@ module Spree
72
72
  ancestor_chain + "#{name}"
73
73
  end
74
74
 
75
+ # awesome_nested_set sorts by :lft and :rgt. This call re-inserts the child
76
+ # node so that its resulting position matches the observable 0-indexed position.
77
+ # ** Note ** no :position column needed - a_n_s doesn't handle the reordering if
78
+ # you bring your own :order_column.
79
+ #
80
+ # See #3390 for background.
81
+ def child_index=(idx)
82
+ move_to_child_with_index(parent, idx.to_i)
83
+ end
75
84
  end
76
85
  end
@@ -4,7 +4,9 @@
4
4
  <% unless (cc_type = source.cc_type).blank? %>
5
5
  <%= image_tag "credit_cards/icons/#{cc_type}.png" %>
6
6
  <% end %>
7
- <%= Spree.t(:ending_in) %> <%= source.last_digits %>
7
+ <% if source.last_digits %>
8
+ <%= Spree.t(:ending_in) %> <%= source.last_digits %>
9
+ <% end %>
8
10
  </span>
9
11
  <br />
10
12
  <span class="full-name">
@@ -790,6 +790,7 @@ en:
790
790
  payment_method: Payment Method
791
791
  payment_methods: Payment Methods
792
792
  payment_processing_failed: Payment could not be processed, please check the details you entered
793
+ payment_method_not_supported: That payment method is unsupported. Please choose another one.
793
794
  payment_processor_choose_banner_text: If you need help choosing a payment processor, please visit
794
795
  payment_processor_choose_link: our payments page
795
796
  payment_state: Payment State
@@ -0,0 +1,5 @@
1
+ class AddChannelToSpreeOrders < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_orders, :channel, :string, default: "spree"
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- "2.0.6"
3
+ "2.0.7"
4
4
  end
5
5
  end
data/lib/spree/core.rb CHANGED
@@ -16,9 +16,9 @@ module Spree
16
16
 
17
17
  def self.user_class
18
18
  if @@user_class.is_a?(Class)
19
- raise "Spree.user_class MUST be a String object, not a Class object."
20
- elsif @@user_class.is_a?(String)
21
- @@user_class.constantize
19
+ raise "Spree.user_class MUST be a String or Symbol object, not a Class object."
20
+ elsif @@user_class.is_a?(String) || @@user_class.is_a?(Symbol)
21
+ @@user_class.to_s.constantize
22
22
  end
23
23
  end
24
24
 
@@ -54,3 +54,30 @@ require 'spree/core/product_duplicator'
54
54
  ActiveRecord::Base.class_eval do
55
55
  include CollectiveIdea::Acts::NestedSet
56
56
  end
57
+
58
+ # Monkey patch to give us miliseconds precision in timestamps
59
+ module ActiveSupport
60
+ class TimeWithZone
61
+ # Coerces time to a string for JSON encoding. The default format is ISO 8601. You can get
62
+ # %Y/%m/%d %H:%M:%S +offset style by setting <tt>ActiveSupport::JSON::Encoding.use_standard_json_time_format</tt>
63
+ # to false.
64
+ #
65
+ # ==== Examples
66
+ #
67
+ # # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = true
68
+ # Time.utc(2005,2,1,15,15,10).in_time_zone.to_json
69
+ # # => "2005-02-01T15:15:10.001Z"
70
+ #
71
+ # # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
72
+ # Time.utc(2005,2,1,15,15,10).in_time_zone.to_json
73
+ # # => "2005/02/01 15:15:10 +0000"
74
+ #
75
+ def as_json(options = nil)
76
+ if ActiveSupport::JSON::Encoding.use_standard_json_time_format
77
+ xmlschema(3)
78
+ else
79
+ %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
80
+ end
81
+ end
82
+ end
83
+ end
data/lib/spree/money.rb CHANGED
@@ -14,6 +14,7 @@ module Spree
14
14
  @options[:no_cents] = Spree::Config[:hide_cents]
15
15
  @options[:decimal_mark] = Spree::Config[:currency_decimal_mark]
16
16
  @options[:thousands_separator] = Spree::Config[:currency_thousands_separator]
17
+ @options[:sign_before_symbol] = Spree::Config[:currency_sign_before_symbol]
17
18
  @options.merge!(options)
18
19
  # Must be a symbol because the Money gem doesn't do the conversion
19
20
  @options[:symbol_position] = @options[:symbol_position].to_sym
@@ -13,11 +13,19 @@ module CapybaraExt
13
13
  end
14
14
 
15
15
  def within_row(num, &block)
16
- within("table.index tbody tr:nth-child(#{num})", &block)
16
+ if example.metadata[:js]
17
+ within("table.index tbody tr:nth-child(#{num})", &block)
18
+ else
19
+ within(:xpath, all("table.index tbody tr")[num-1].path, &block)
20
+ end
17
21
  end
18
22
 
19
23
  def column_text(num)
20
- find("td:nth-child(#{num})").text
24
+ if example.metadata[:js]
25
+ find("td:nth-child(#{num})").text
26
+ else
27
+ all("td")[num-1].text
28
+ end
21
29
  end
22
30
 
23
31
  def set_select2_field(field, value)
@@ -94,7 +102,7 @@ module CapybaraExt
94
102
 
95
103
  def wait_for_ajax
96
104
  counter = 0
97
- while page.execute_script("return $.active").to_i > 0
105
+ while page.evaluate_script("$.active").to_i > 0
98
106
  counter += 1
99
107
  sleep(0.1)
100
108
  raise "AJAX request took longer than 5 seconds." if counter >= 50
@@ -4,9 +4,9 @@
4
4
  # Inside your spec_helper.rb, include this module inside the RSpec.configure
5
5
  # block by doing this:
6
6
  #
7
- # require 'spree/core/testing_support/controller_requests'
7
+ # require 'spree/testing_support/controller_requests'
8
8
  # RSpec.configure do |c|
9
- # c.include Spree::Core::TestingSupport::ControllerRequests, :type => :controller
9
+ # c.include Spree::TestingSupport::ControllerRequests, :type => :controller
10
10
  # end
11
11
  #
12
12
  # Then, in your controller tests, you can access spree routes like this:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6
4
+ version: 2.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-15 00:00:00.000000000 Z
11
+ date: 2013-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemerchant
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.39.2
19
+ version: 1.42.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.39.2
26
+ version: 1.42.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: acts_as_list
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 2.1.5
47
+ version: 2.1.6
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 2.1.5
54
+ version: 2.1.6
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: aws-sdk
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.14.1
61
+ version: 1.27.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 1.14.1
68
+ version: 1.27.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: cancan
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: deface
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.9.1
89
+ version: 1.0.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.9.1
96
+ version: 1.0.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: ffaker
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -112,14 +112,14 @@ dependencies:
112
112
  name: highline
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '='
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
117
  version: 1.6.18
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '='
122
+ - - ~>
123
123
  - !ruby/object:Gem::Version
124
124
  version: 1.6.18
125
125
  - !ruby/object:Gem::Dependency
@@ -140,16 +140,16 @@ dependencies:
140
140
  name: json
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ~>
144
144
  - !ruby/object:Gem::Version
145
- version: 1.7.7
145
+ version: '1.7'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ~>
151
151
  - !ruby/object:Gem::Version
152
- version: 1.7.7
152
+ version: '1.7'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: kaminari
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -168,14 +168,14 @@ dependencies:
168
168
  name: money
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - '>='
171
+ - - ~>
172
172
  - !ruby/object:Gem::Version
173
173
  version: 5.1.1
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - '>='
178
+ - - ~>
179
179
  - !ruby/object:Gem::Version
180
180
  version: 5.1.1
181
181
  - !ruby/object:Gem::Dependency
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - ~>
228
228
  - !ruby/object:Gem::Version
229
- version: 1.0.0
229
+ version: 1.1.0
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - ~>
235
235
  - !ruby/object:Gem::Version
236
- version: 1.0.0
236
+ version: 1.1.0
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: state_machine
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -619,6 +619,7 @@ files:
619
619
  - db/migrate/20130909115621_change_states_required_for_countries.rb
620
620
  - db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb
621
621
  - db/migrate/20131001013410_remove_unused_credit_card_fields.rb
622
+ - db/migrate/20131113035136_add_channel_to_spree_orders.rb
622
623
  - db/seeds.rb
623
624
  - vendor/assets/javascripts/jquery-migrate-1.0.0.js
624
625
  - vendor/assets/javascripts/jquery.validate/localization/messages_et.js