spree_core 4.1.3 → 4.1.8
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 +4 -4
 - data/app/finders/spree/products/find.rb +50 -9
 - data/app/helpers/spree/base_helper.rb +7 -1
 - data/app/helpers/spree/products_helper.rb +15 -14
 - data/app/models/concerns/spree/product_scopes.rb +2 -2
 - data/app/models/spree/app_configuration.rb +1 -0
 - data/app/models/spree/credit_card.rb +5 -4
 - data/app/models/spree/line_item.rb +8 -1
 - data/app/models/spree/preferences/preferable.rb +1 -1
 - data/app/models/spree/product.rb +2 -2
 - data/app/models/spree/promotion/actions/create_item_adjustments.rb +1 -1
 - data/app/models/spree/taxon.rb +6 -0
 - data/app/models/spree/variant.rb +11 -1
 - data/app/models/spree/zone.rb +2 -2
 - data/app/services/spree/checkout/get_shipping_rates.rb +7 -10
 - data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
 - data/lib/generators/spree/install/templates/config/initializers/spree.rb +1 -0
 - data/lib/spree/core.rb +1 -0
 - data/lib/spree/core/version.rb +1 -1
 - data/lib/spree/database_type_utilities.rb +12 -0
 - data/spree_core.gemspec +13 -7
 - metadata +18 -19
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 5fc843401beee13a77c3d23fa5fceacc0465b7c20ecd76068666703e4d7addd5
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 31a3220b19ff45d6495c4929024c6c10d9d8d1da78498914960d21ab75a63e6f
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 61f76f5ba5be894e74d09b68ee7d8b797a9bcd62f10607c442a4009089cfe3170a0846a5711b03fa7522c7de85a9e0db00b22bd502ae39a651ffbf1544d84d33
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 90c8b7435675640ffaaca1bb635bd7a929b54197973c79226f333196caf44a044e1bc821c47ddc3f6f8ce84ebb6522f9b07f76855aa45550e0f69cd5ab8e23ed
         
     | 
| 
         @@ -8,7 +8,8 @@ module Spree 
     | 
|
| 
       8 
8 
     | 
    
         
             
                    @skus             = String(params.dig(:filter, :skus)).split(',')
         
     | 
| 
       9 
9 
     | 
    
         
             
                    @price            = String(params.dig(:filter, :price)).split(',').map(&:to_f)
         
     | 
| 
       10 
10 
     | 
    
         
             
                    @currency         = params[:currency] || current_currency
         
     | 
| 
       11 
     | 
    
         
            -
                    @taxons           =  
     | 
| 
      
 11 
     | 
    
         
            +
                    @taxons           = taxon_ids(params.dig(:filter, :taxons))
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @concat_taxons    = taxon_ids(params.dig(:filter, :concat_taxons))
         
     | 
| 
       12 
13 
     | 
    
         
             
                    @name             = params.dig(:filter, :name)
         
     | 
| 
       13 
14 
     | 
    
         
             
                    @options          = params.dig(:filter, :options).try(:to_unsafe_hash)
         
     | 
| 
       14 
15 
     | 
    
         
             
                    @option_value_ids = params.dig(:filter, :option_value_ids)
         
     | 
| 
         @@ -22,6 +23,7 @@ module Spree 
     | 
|
| 
       22 
23 
     | 
    
         
             
                    products = by_skus(products)
         
     | 
| 
       23 
24 
     | 
    
         
             
                    products = by_price(products)
         
     | 
| 
       24 
25 
     | 
    
         
             
                    products = by_taxons(products)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    products = by_concat_taxons(products)
         
     | 
| 
       25 
27 
     | 
    
         
             
                    products = by_name(products)
         
     | 
| 
       26 
28 
     | 
    
         
             
                    products = by_options(products)
         
     | 
| 
       27 
29 
     | 
    
         
             
                    products = by_option_value_ids(products)
         
     | 
| 
         @@ -34,7 +36,8 @@ module Spree 
     | 
|
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
                  private
         
     | 
| 
       36 
38 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                  attr_reader :ids, :skus, :price, :currency, :taxons, : 
     | 
| 
      
 39 
     | 
    
         
            +
                  attr_reader :ids, :skus, :price, :currency, :taxons, :concat_taxons, :name, :options,
         
     | 
| 
      
 40 
     | 
    
         
            +
                              :option_value_ids, :scope, :sort_by, :deleted, :discontinued
         
     | 
| 
       38 
41 
     | 
    
         | 
| 
       39 
42 
     | 
    
         
             
                  def ids?
         
     | 
| 
       40 
43 
     | 
    
         
             
                    ids.present?
         
     | 
| 
         @@ -52,6 +55,10 @@ module Spree 
     | 
|
| 
       52 
55 
     | 
    
         
             
                    taxons.present?
         
     | 
| 
       53 
56 
     | 
    
         
             
                  end
         
     | 
| 
       54 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
                  def concat_taxons?
         
     | 
| 
      
 59 
     | 
    
         
            +
                    concat_taxons.present?
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
       55 
62 
     | 
    
         
             
                  def name?
         
     | 
| 
       56 
63 
     | 
    
         
             
                    name.present?
         
     | 
| 
       57 
64 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -99,7 +106,20 @@ module Spree 
     | 
|
| 
       99 
106 
     | 
    
         
             
                  def by_taxons(products)
         
     | 
| 
       100 
107 
     | 
    
         
             
                    return products unless taxons?
         
     | 
| 
       101 
108 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
                    products.joins(: 
     | 
| 
      
 109 
     | 
    
         
            +
                    products.joins(:classifications).where(Classification.table_name => { taxon_id: taxons })
         
     | 
| 
      
 110 
     | 
    
         
            +
                  end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                  def by_concat_taxons(products)
         
     | 
| 
      
 113 
     | 
    
         
            +
                    return products unless concat_taxons?
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                    product_ids = Spree::Product.
         
     | 
| 
      
 116 
     | 
    
         
            +
                                  joins(:classifications).
         
     | 
| 
      
 117 
     | 
    
         
            +
                                  where(Classification.table_name => { taxon_id: concat_taxons }).
         
     | 
| 
      
 118 
     | 
    
         
            +
                                  group("#{Spree::Product.table_name}.id").
         
     | 
| 
      
 119 
     | 
    
         
            +
                                  having("COUNT(#{Spree::Product.table_name}.id) = ?", concat_taxons.length).
         
     | 
| 
      
 120 
     | 
    
         
            +
                                  ids
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                    products.where(id: product_ids)
         
     | 
| 
       103 
123 
     | 
    
         
             
                  end
         
     | 
| 
       104 
124 
     | 
    
         | 
| 
       105 
125 
     | 
    
         
             
                  def by_name(products)
         
     | 
| 
         @@ -111,9 +131,11 @@ module Spree 
     | 
|
| 
       111 
131 
     | 
    
         
             
                  def by_options(products)
         
     | 
| 
       112 
132 
     | 
    
         
             
                    return products unless options?
         
     | 
| 
       113 
133 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
                     
     | 
| 
       115 
     | 
    
         
            -
                       
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
      
 134 
     | 
    
         
            +
                    products.where(
         
     | 
| 
      
 135 
     | 
    
         
            +
                      id: options.map do |key, value|
         
     | 
| 
      
 136 
     | 
    
         
            +
                        products.with_option_value(key, value).ids
         
     | 
| 
      
 137 
     | 
    
         
            +
                      end.flatten.compact.uniq
         
     | 
| 
      
 138 
     | 
    
         
            +
                    )
         
     | 
| 
       117 
139 
     | 
    
         
             
                  end
         
     | 
| 
       118 
140 
     | 
    
         | 
| 
       119 
141 
     | 
    
         
             
                  def by_option_value_ids(products)
         
     | 
| 
         @@ -142,13 +164,25 @@ module Spree 
     | 
|
| 
       142 
164 
     | 
    
         | 
| 
       143 
165 
     | 
    
         
             
                    case sort_by
         
     | 
| 
       144 
166 
     | 
    
         
             
                    when 'default'
         
     | 
| 
       145 
     | 
    
         
            -
                       
     | 
| 
      
 167 
     | 
    
         
            +
                      if taxons?
         
     | 
| 
      
 168 
     | 
    
         
            +
                        products.
         
     | 
| 
      
 169 
     | 
    
         
            +
                          select("#{Product.table_name}.*, #{Classification.table_name}.position").
         
     | 
| 
      
 170 
     | 
    
         
            +
                          order("#{Classification.table_name}.position" => :asc)
         
     | 
| 
      
 171 
     | 
    
         
            +
                      else
         
     | 
| 
      
 172 
     | 
    
         
            +
                        products
         
     | 
| 
      
 173 
     | 
    
         
            +
                      end
         
     | 
| 
       146 
174 
     | 
    
         
             
                    when 'newest-first'
         
     | 
| 
       147 
175 
     | 
    
         
             
                      products.order(available_on: :desc)
         
     | 
| 
       148 
176 
     | 
    
         
             
                    when 'price-high-to-low'
         
     | 
| 
       149 
     | 
    
         
            -
                      products. 
     | 
| 
      
 177 
     | 
    
         
            +
                      products.
         
     | 
| 
      
 178 
     | 
    
         
            +
                        select("#{Product.table_name}.*, #{Spree::Price.table_name}.amount").
         
     | 
| 
      
 179 
     | 
    
         
            +
                        reorder('').
         
     | 
| 
      
 180 
     | 
    
         
            +
                        send(:descend_by_master_price)
         
     | 
| 
       150 
181 
     | 
    
         
             
                    when 'price-low-to-high'
         
     | 
| 
       151 
     | 
    
         
            -
                      products. 
     | 
| 
      
 182 
     | 
    
         
            +
                      products.
         
     | 
| 
      
 183 
     | 
    
         
            +
                        select("#{Product.table_name}.*, #{Spree::Price.table_name}.amount").
         
     | 
| 
      
 184 
     | 
    
         
            +
                        reorder('').
         
     | 
| 
      
 185 
     | 
    
         
            +
                        send(:ascend_by_master_price)
         
     | 
| 
       152 
186 
     | 
    
         
             
                    end
         
     | 
| 
       153 
187 
     | 
    
         
             
                  end
         
     | 
| 
       154 
188 
     | 
    
         | 
| 
         @@ -159,6 +193,13 @@ module Spree 
     | 
|
| 
       159 
193 
     | 
    
         
             
                  def include_discontinued(products)
         
     | 
| 
       160 
194 
     | 
    
         
             
                    discontinued ? products : products.available
         
     | 
| 
       161 
195 
     | 
    
         
             
                  end
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
                  def taxon_ids(taxons_ids)
         
     | 
| 
      
 198 
     | 
    
         
            +
                    return if taxons_ids.nil? || taxons_ids.to_s.blank?
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
                    taxons = Spree::Taxon.where(id: taxons_ids.to_s.split(','))
         
     | 
| 
      
 201 
     | 
    
         
            +
                    taxons.map(&:cached_self_and_descendants_ids).flatten.compact.uniq.map(&:to_s)
         
     | 
| 
      
 202 
     | 
    
         
            +
                  end
         
     | 
| 
       162 
203 
     | 
    
         
             
                end
         
     | 
| 
       163 
204 
     | 
    
         
             
              end
         
     | 
| 
       164 
205 
     | 
    
         
             
            end
         
     | 
| 
         @@ -111,7 +111,9 @@ module Spree 
     | 
|
| 
       111 
111 
     | 
    
         
             
                # we should always try to render image of the default variant
         
     | 
| 
       112 
112 
     | 
    
         
             
                # same as it's done on PDP
         
     | 
| 
       113 
113 
     | 
    
         
             
                def default_image_for_product(product)
         
     | 
| 
       114 
     | 
    
         
            -
                  if product. 
     | 
| 
      
 114 
     | 
    
         
            +
                  if product.images.any?
         
     | 
| 
      
 115 
     | 
    
         
            +
                    product.images.first
         
     | 
| 
      
 116 
     | 
    
         
            +
                  elsif product.default_variant.images.any?
         
     | 
| 
       115 
117 
     | 
    
         
             
                    product.default_variant.images.first
         
     | 
| 
       116 
118 
     | 
    
         
             
                  elsif product.variant_images.any?
         
     | 
| 
       117 
119 
     | 
    
         
             
                    product.variant_images.first
         
     | 
| 
         @@ -136,6 +138,10 @@ module Spree 
     | 
|
| 
       136 
138 
     | 
    
         
             
                  [I18n.locale, current_currency]
         
     | 
| 
       137 
139 
     | 
    
         
             
                end
         
     | 
| 
       138 
140 
     | 
    
         | 
| 
      
 141 
     | 
    
         
            +
                def maximum_quantity
         
     | 
| 
      
 142 
     | 
    
         
            +
                  Spree::DatabaseTypeUtilities.maximum_value_for(:integer)
         
     | 
| 
      
 143 
     | 
    
         
            +
                end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
       139 
145 
     | 
    
         
             
                private
         
     | 
| 
       140 
146 
     | 
    
         | 
| 
       141 
147 
     | 
    
         
             
                def create_product_image_tag(image, product, options, style)
         
     | 
| 
         @@ -67,7 +67,7 @@ module Spree 
     | 
|
| 
       67 
67 
     | 
    
         
             
                  cache_key_elements = common_product_cache_keys
         
     | 
| 
       68 
68 
     | 
    
         
             
                  cache_key_elements += [
         
     | 
| 
       69 
69 
     | 
    
         
             
                    product.cache_key_with_version,
         
     | 
| 
       70 
     | 
    
         
            -
                    product.possible_promotions
         
     | 
| 
      
 70 
     | 
    
         
            +
                    product.possible_promotions.map(&:cache_key)
         
     | 
| 
       71 
71 
     | 
    
         
             
                  ]
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
                  cache_key_elements.compact.join('/')
         
     | 
| 
         @@ -79,8 +79,9 @@ module Spree 
     | 
|
| 
       79 
79 
     | 
    
         
             
                  string.slice(0..449) + '...'
         
     | 
| 
       80 
80 
     | 
    
         
             
                end
         
     | 
| 
       81 
81 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
                 
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
      
 82 
     | 
    
         
            +
                # will return a human readable string
         
     | 
| 
      
 83 
     | 
    
         
            +
                def available_status(product)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  return Spree.t(:discontinued) if product.discontinued?
         
     | 
| 
       84 
85 
     | 
    
         
             
                  return Spree.t(:deleted) if product.deleted?
         
     | 
| 
       85 
86 
     | 
    
         | 
| 
       86 
87 
     | 
    
         
             
                  if product.available?
         
     | 
| 
         @@ -116,16 +117,16 @@ module Spree 
     | 
|
| 
       116 
117 
     | 
    
         
             
                def related_products
         
     | 
| 
       117 
118 
     | 
    
         
             
                  return [] unless @product.respond_to?(:has_related_products?) && @product.has_related_products?(:related_products)
         
     | 
| 
       118 
119 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                  @ 
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
      
 120 
     | 
    
         
            +
                  @related_products ||= @product.
         
     | 
| 
      
 121 
     | 
    
         
            +
                                        related_products.
         
     | 
| 
      
 122 
     | 
    
         
            +
                                        includes(
         
     | 
| 
      
 123 
     | 
    
         
            +
                                          :tax_category,
         
     | 
| 
      
 124 
     | 
    
         
            +
                                          master: [
         
     | 
| 
      
 125 
     | 
    
         
            +
                                            :prices,
         
     | 
| 
      
 126 
     | 
    
         
            +
                                            images: { attachment_attachment: :blob },
         
     | 
| 
      
 127 
     | 
    
         
            +
                                          ]
         
     | 
| 
      
 128 
     | 
    
         
            +
                                        ).
         
     | 
| 
      
 129 
     | 
    
         
            +
                                        limit(Spree::Config[:products_per_page])
         
     | 
| 
       129 
130 
     | 
    
         
             
                end
         
     | 
| 
       130 
131 
     | 
    
         | 
| 
       131 
132 
     | 
    
         
             
                def product_available_in_currency?
         
     | 
| 
         @@ -145,7 +146,7 @@ module Spree 
     | 
|
| 
       145 
146 
     | 
    
         
             
                end
         
     | 
| 
       146 
147 
     | 
    
         | 
| 
       147 
148 
     | 
    
         
             
                def variants_option_types_presenter(variants, product)
         
     | 
| 
       148 
     | 
    
         
            -
                  @ 
     | 
| 
      
 149 
     | 
    
         
            +
                  @variants_option_types_presenter ||= begin
         
     | 
| 
       149 
150 
     | 
    
         
             
                    option_types = Spree::Variants::OptionTypesFinder.new(variant_ids: variants.map(&:id)).execute
         
     | 
| 
       150 
151 
     | 
    
         | 
| 
       151 
152 
     | 
    
         
             
                    Spree::Variants::OptionTypesPresenter.new(option_types, variants, product)
         
     | 
| 
         @@ -81,7 +81,7 @@ module Spree 
     | 
|
| 
       81 
81 
     | 
    
         
             
                  #   SELECT COUNT(*) ...
         
     | 
| 
       82 
82 
     | 
    
         
             
                  add_search_scope :in_taxon do |taxon|
         
     | 
| 
       83 
83 
     | 
    
         
             
                    includes(:classifications).
         
     | 
| 
       84 
     | 
    
         
            -
                      where('spree_products_taxons.taxon_id' => taxon. 
     | 
| 
      
 84 
     | 
    
         
            +
                      where('spree_products_taxons.taxon_id' => taxon.cached_self_and_descendants_ids).
         
     | 
| 
       85 
85 
     | 
    
         
             
                      order('spree_products_taxons.position ASC')
         
     | 
| 
       86 
86 
     | 
    
         
             
                  end
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
         @@ -221,7 +221,7 @@ module Spree 
     | 
|
| 
       221 
221 
     | 
    
         | 
| 
       222 
222 
     | 
    
         
             
                  # specifically avoid having an order for taxon search (conflicts with main order)
         
     | 
| 
       223 
223 
     | 
    
         
             
                  def self.prepare_taxon_conditions(taxons)
         
     | 
| 
       224 
     | 
    
         
            -
                    ids = taxons.map 
     | 
| 
      
 224 
     | 
    
         
            +
                    ids = taxons.map(&:cached_self_and_descendants_ids).flatten.uniq
         
     | 
| 
       225 
225 
     | 
    
         
             
                    joins(:classifications).where(Classification.table_name => { taxon_id: ids })
         
     | 
| 
       226 
226 
     | 
    
         
             
                  end
         
     | 
| 
       227 
227 
     | 
    
         
             
                  private_class_method :prepare_taxon_conditions
         
     | 
| 
         @@ -44,6 +44,7 @@ module Spree 
     | 
|
| 
       44 
44 
     | 
    
         
             
                preference :company, :boolean, default: false # Request company field for billing and shipping addr
         
     | 
| 
       45 
45 
     | 
    
         
             
                preference :currency, :string, default: 'USD'
         
     | 
| 
       46 
46 
     | 
    
         
             
                preference :default_country_id, :integer
         
     | 
| 
      
 47 
     | 
    
         
            +
                preference :disable_sku_validation, :boolean, default: false # when turned off disables the built-in SKU uniqueness validation
         
     | 
| 
       47 
48 
     | 
    
         
             
                preference :expedited_exchanges, :boolean, default: false # NOTE this requires payment profiles to be supported on your gateway of choice as well as a delayed job handler to be configured with activejob. kicks off an exchange shipment upon return authorization save. charge customer if they do not return items within timely manner.
         
     | 
| 
       48 
49 
     | 
    
         
             
                preference :expedited_exchanges_days_window, :integer, default: 14 # the amount of days the customer has to return their item after the expedited exchange is shipped in order to avoid being charged
         
     | 
| 
       49 
50 
     | 
    
         
             
                preference :layout, :string, default: 'spree/layouts/spree_application'
         
     | 
| 
         @@ -24,10 +24,9 @@ module Spree 
     | 
|
| 
       24 
24 
     | 
    
         
             
                attribute :month, ActiveRecord::Type::Integer.new
         
     | 
| 
       25 
25 
     | 
    
         
             
                attribute :year,  ActiveRecord::Type::Integer.new
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                attr_reader :number
         
     | 
| 
      
 27 
     | 
    
         
            +
                attr_reader :number, :verification_value
         
     | 
| 
       28 
28 
     | 
    
         
             
                attr_accessor :encrypted_data,
         
     | 
| 
       29 
29 
     | 
    
         
             
                              :imported,
         
     | 
| 
       30 
     | 
    
         
            -
                              :verification_value,
         
     | 
| 
       31 
30 
     | 
    
         
             
                              :manual_entry
         
     | 
| 
       32 
31 
     | 
    
         | 
| 
       33 
32 
     | 
    
         
             
                with_options if: :require_card_numbers?, on: :create do
         
     | 
| 
         @@ -101,9 +100,11 @@ module Spree 
     | 
|
| 
       101 
100 
     | 
    
         
             
                                   end
         
     | 
| 
       102 
101 
     | 
    
         
             
                end
         
     | 
| 
       103 
102 
     | 
    
         | 
| 
      
 103 
     | 
    
         
            +
                def verification_value=(value)
         
     | 
| 
      
 104 
     | 
    
         
            +
                  @verification_value = value.to_s.gsub(/\s/, '')
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
       104 
107 
     | 
    
         
             
                def set_last_digits
         
     | 
| 
       105 
     | 
    
         
            -
                  number.to_s.gsub!(/\s/, '')
         
     | 
| 
       106 
     | 
    
         
            -
                  verification_value.to_s.gsub!(/\s/, '')
         
     | 
| 
       107 
108 
     | 
    
         
             
                  self.last_digits ||= number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1)
         
     | 
| 
       108 
109 
     | 
    
         
             
                end
         
     | 
| 
       109 
110 
     | 
    
         | 
| 
         @@ -17,7 +17,14 @@ module Spree 
     | 
|
| 
       17 
17 
     | 
    
         
             
                before_validation :copy_tax_category
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                validates :variant, :order, presence: true
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                # numericality: :less_than_or_equal_to validation is due to the restriction at the database level
         
     | 
| 
      
 22 
     | 
    
         
            +
                #   https://github.com/spree/spree/issues/2695#issuecomment-143314161
         
     | 
| 
      
 23 
     | 
    
         
            +
                validates :quantity, numericality: {
         
     | 
| 
      
 24 
     | 
    
         
            +
                  less_than_or_equal_to: DatabaseTypeUtilities.maximum_value_for(:integer),
         
     | 
| 
      
 25 
     | 
    
         
            +
                  only_integer: true, message: Spree.t('validation.must_be_int')
         
     | 
| 
      
 26 
     | 
    
         
            +
                }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
       21 
28 
     | 
    
         
             
                validates :price, numericality: true
         
     | 
| 
       22 
29 
     | 
    
         | 
| 
       23 
30 
     | 
    
         
             
                validates_with Spree::Stock::AvailabilityValidator
         
     | 
    
        data/app/models/spree/product.rb
    CHANGED
    
    | 
         @@ -111,7 +111,7 @@ module Spree 
     | 
|
| 
       111 
111 
     | 
    
         | 
| 
       112 
112 
     | 
    
         
             
                alias options product_option_types
         
     | 
| 
       113 
113 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
                self.whitelisted_ransackable_associations = %w[stores variants_including_master master variants]
         
     | 
| 
      
 114 
     | 
    
         
            +
                self.whitelisted_ransackable_associations = %w[taxons stores variants_including_master master variants]
         
     | 
| 
       115 
115 
     | 
    
         
             
                self.whitelisted_ransackable_attributes = %w[description name slug discontinue_on]
         
     | 
| 
       116 
116 
     | 
    
         
             
                self.whitelisted_ransackable_scopes = %w[not_discontinued]
         
     | 
| 
       117 
117 
     | 
    
         | 
| 
         @@ -341,7 +341,7 @@ module Spree 
     | 
|
| 
       341 
341 
     | 
    
         
             
                      price: master.price
         
     | 
| 
       342 
342 
     | 
    
         
             
                    )
         
     | 
| 
       343 
343 
     | 
    
         
             
                  end
         
     | 
| 
       344 
     | 
    
         
            -
                   
     | 
| 
      
 344 
     | 
    
         
            +
                  save
         
     | 
| 
       345 
345 
     | 
    
         
             
                end
         
     | 
| 
       346 
346 
     | 
    
         | 
| 
       347 
347 
     | 
    
         
             
                def ensure_master
         
     | 
| 
         @@ -23,7 +23,7 @@ module Spree 
     | 
|
| 
       23 
23 
     | 
    
         
             
                      order   = line_item.order
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                      # Prevent negative order totals
         
     | 
| 
       26 
     | 
    
         
            -
                      amounts << order.amount - order.adjustments.sum(:amount).abs if order.adjustments.any?
         
     | 
| 
      
 26 
     | 
    
         
            +
                      amounts << order.amount - order.adjustments.eligible.sum(:amount).abs if order.adjustments.eligible.any?
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                      amounts.min * -1
         
     | 
| 
       29 
29 
     | 
    
         
             
                    end
         
     | 
    
        data/app/models/spree/taxon.rb
    CHANGED
    
    | 
         @@ -74,6 +74,12 @@ module Spree 
     | 
|
| 
       74 
74 
     | 
    
         
             
                  ancestor_chain + name.to_s
         
     | 
| 
       75 
75 
     | 
    
         
             
                end
         
     | 
| 
       76 
76 
     | 
    
         | 
| 
      
 77 
     | 
    
         
            +
                def cached_self_and_descendants_ids
         
     | 
| 
      
 78 
     | 
    
         
            +
                  Rails.cache.fetch("#{cache_key_with_version}/descendant-ids") do
         
     | 
| 
      
 79 
     | 
    
         
            +
                    self_and_descendants.ids
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
       77 
83 
     | 
    
         
             
                # awesome_nested_set sorts by :lft and :rgt. This call re-inserts the child
         
     | 
| 
       78 
84 
     | 
    
         
             
                # node so that its resulting position matches the observable 0-indexed position.
         
     | 
| 
       79 
85 
     | 
    
         
             
                # ** Note ** no :position column needed - a_n_s doesn't handle the reordering if
         
     | 
    
        data/app/models/spree/variant.rb
    CHANGED
    
    | 
         @@ -48,7 +48,8 @@ module Spree 
     | 
|
| 
       48 
48 
     | 
    
         
             
                  validates :cost_price
         
     | 
| 
       49 
49 
     | 
    
         
             
                  validates :price
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
     | 
    
         
            -
                validates :sku, uniqueness: { conditions: -> { where(deleted_at: nil) }, case_sensitive: false }, 
     | 
| 
      
 51 
     | 
    
         
            +
                validates :sku, uniqueness: { conditions: -> { where(deleted_at: nil) }, case_sensitive: false },
         
     | 
| 
      
 52 
     | 
    
         
            +
                                allow_blank: true, unless: :disable_sku_validation?
         
     | 
| 
       52 
53 
     | 
    
         | 
| 
       53 
54 
     | 
    
         
             
                after_create :create_stock_items
         
     | 
| 
       54 
55 
     | 
    
         
             
                after_create :set_master_out_of_stock, unless: :is_master?
         
     | 
| 
         @@ -102,6 +103,11 @@ module Spree 
     | 
|
| 
       102 
103 
     | 
    
         | 
| 
       103 
104 
     | 
    
         
             
                self.whitelisted_ransackable_associations = %w[option_values product prices default_price]
         
     | 
| 
       104 
105 
     | 
    
         
             
                self.whitelisted_ransackable_attributes = %w[weight sku]
         
     | 
| 
      
 106 
     | 
    
         
            +
                self.whitelisted_ransackable_scopes = %i(product_name_or_sku_cont)
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                def self.product_name_or_sku_cont(query)
         
     | 
| 
      
 109 
     | 
    
         
            +
                  joins(:product).where("#{Product.table_name}.name LIKE :query OR sku LIKE :query", query: "%#{query}%")
         
     | 
| 
      
 110 
     | 
    
         
            +
                end
         
     | 
| 
       105 
111 
     | 
    
         | 
| 
       106 
112 
     | 
    
         
             
                def available?
         
     | 
| 
       107 
113 
     | 
    
         
             
                  !discontinued? && product.available?
         
     | 
| 
         @@ -319,5 +325,9 @@ module Spree 
     | 
|
| 
       319 
325 
     | 
    
         
             
                def clear_in_stock_cache
         
     | 
| 
       320 
326 
     | 
    
         
             
                  Rails.cache.delete(in_stock_cache_key)
         
     | 
| 
       321 
327 
     | 
    
         
             
                end
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
      
 329 
     | 
    
         
            +
                def disable_sku_validation?
         
     | 
| 
      
 330 
     | 
    
         
            +
                  Spree::Config[:disable_sku_validation]
         
     | 
| 
      
 331 
     | 
    
         
            +
                end
         
     | 
| 
       322 
332 
     | 
    
         
             
              end
         
     | 
| 
       323 
333 
     | 
    
         
             
            end
         
     | 
    
        data/app/models/spree/zone.rb
    CHANGED
    
    
| 
         @@ -7,9 +7,7 @@ module Spree 
     | 
|
| 
       7 
7 
     | 
    
         
             
                    run :reload_order
         
     | 
| 
       8 
8 
     | 
    
         
             
                    run :ensure_shipping_address
         
     | 
| 
       9 
9 
     | 
    
         
             
                    run :ensure_line_items_present
         
     | 
| 
       10 
     | 
    
         
            -
                    run : 
     | 
| 
       11 
     | 
    
         
            -
                    run :generate_shipping_rates
         
     | 
| 
       12 
     | 
    
         
            -
                    run :return_shipments
         
     | 
| 
      
 10 
     | 
    
         
            +
                    run :generate_or_return_shipping_rates
         
     | 
| 
       13 
11 
     | 
    
         
             
                  end
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
13 
     | 
    
         
             
                  private
         
     | 
| 
         @@ -31,6 +29,11 @@ module Spree 
     | 
|
| 
       31 
29 
     | 
    
         
             
                    success(order: order)
         
     | 
| 
       32 
30 
     | 
    
         
             
                  end
         
     | 
| 
       33 
31 
     | 
    
         | 
| 
      
 32 
     | 
    
         
            +
                  def generate_or_return_shipping_rates(order:)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    generate_shipping_rates(order: order) if order.shipments.empty?
         
     | 
| 
      
 34 
     | 
    
         
            +
                    return_shipments(order: order)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       34 
37 
     | 
    
         
             
                  def generate_shipping_rates(order:)
         
     | 
| 
       35 
38 
     | 
    
         
             
                    ApplicationRecord.transaction do
         
     | 
| 
       36 
39 
     | 
    
         
             
                      order.create_proposed_shipments
         
     | 
| 
         @@ -42,13 +45,7 @@ module Spree 
     | 
|
| 
       42 
45 
     | 
    
         
             
                  end
         
     | 
| 
       43 
46 
     | 
    
         | 
| 
       44 
47 
     | 
    
         
             
                  def return_shipments(order:)
         
     | 
| 
       45 
     | 
    
         
            -
                    success(order.shipments.includes([shipping_rates: :shipping_method]))
         
     | 
| 
       46 
     | 
    
         
            -
                  end
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                  def move_order_to_delivery_state(order:)
         
     | 
| 
       49 
     | 
    
         
            -
                    Spree::Dependencies.checkout_next_service.constantize.call(order: order) until order.state == 'delivery'
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                    success(order: order)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    success(order.reload.shipments.includes([shipping_rates: :shipping_method]))
         
     | 
| 
       52 
49 
     | 
    
         
             
                  end
         
     | 
| 
       53 
50 
     | 
    
         
             
                end
         
     | 
| 
       54 
51 
     | 
    
         
             
              end
         
     | 
| 
         @@ -138,7 +138,7 @@ end 
     | 
|
| 
       138 
138 
     | 
    
         
             
                end
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
       140 
140 
     | 
    
         
             
                def gemfile_path
         
     | 
| 
       141 
     | 
    
         
            -
                  core_gems = ['spree/core', 'spree/api', 'spree/backend', 'spree/frontend']
         
     | 
| 
      
 141 
     | 
    
         
            +
                  core_gems = ['spree/core', 'spree/api', 'spree/backend', 'spree/frontend', 'spree/sample']
         
     | 
| 
       142 
142 
     | 
    
         | 
| 
       143 
143 
     | 
    
         
             
                  if core_gems.include?(lib_name)
         
     | 
| 
       144 
144 
     | 
    
         
             
                    '../../../../../Gemfile'
         
     | 
| 
         @@ -26,5 +26,6 @@ Spree.dependencies do |dependencies| 
     | 
|
| 
       26 
26 
     | 
    
         
             
              # dependencies.cart_add_item_service = 'MyNewAwesomeService'
         
     | 
| 
       27 
27 
     | 
    
         
             
            end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
            # Spree::Api::Dependencies.storefront_cart_serializer = 'MyRailsApp::CartSerializer'
         
     | 
| 
       29 
30 
     | 
    
         | 
| 
       30 
31 
     | 
    
         
             
            Spree.user_class = <%= (options[:user_class].blank? ? 'Spree::LegacyUser' : options[:user_class]).inspect %>
         
     | 
    
        data/lib/spree/core.rb
    CHANGED
    
    
    
        data/lib/spree/core/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Spree
         
     | 
| 
      
 2 
     | 
    
         
            +
              module DatabaseTypeUtilities
         
     | 
| 
      
 3 
     | 
    
         
            +
                def self.maximum_value_for(data_type)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  case data_type
         
     | 
| 
      
 5 
     | 
    
         
            +
                  when :integer
         
     | 
| 
      
 6 
     | 
    
         
            +
                    ActiveModel::Type::Integer.new.instance_eval { range.max }
         
     | 
| 
      
 7 
     | 
    
         
            +
                  else
         
     | 
| 
      
 8 
     | 
    
         
            +
                    raise ArgumentError, 'Currently only :integer argument is acceptable'
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
    
        data/spree_core.gemspec
    CHANGED
    
    | 
         @@ -6,17 +6,23 @@ Gem::Specification.new do |s| 
     | 
|
| 
       6 
6 
     | 
    
         
             
              s.platform    = Gem::Platform::RUBY
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name        = 'spree_core'
         
     | 
| 
       8 
8 
     | 
    
         
             
              s.version     = Spree.version
         
     | 
| 
      
 9 
     | 
    
         
            +
              s.author      = 'Sean Schofield'
         
     | 
| 
      
 10 
     | 
    
         
            +
              s.email       = 'sean@spreecommerce.com'
         
     | 
| 
       9 
11 
     | 
    
         
             
              s.summary     = 'The bare bones necessary for Spree.'
         
     | 
| 
       10 
12 
     | 
    
         
             
              s.description = 'The bare bones necessary for Spree.'
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.homepage    = 'http://spreecommerce.org'
         
     | 
| 
      
 14 
     | 
    
         
            +
              s.license     = 'BSD-3-Clause'
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              s.metadata = {
         
     | 
| 
      
 17 
     | 
    
         
            +
                "bug_tracker_uri"   => "https://github.com/spree/spree/issues",
         
     | 
| 
      
 18 
     | 
    
         
            +
                "changelog_uri"     => "https://github.com/spree/spree/releases/tag/v#{s.version}",
         
     | 
| 
      
 19 
     | 
    
         
            +
                "documentation_uri" => "https://guides.spreecommerce.org/",
         
     | 
| 
      
 20 
     | 
    
         
            +
                "source_code_uri"   => "https://github.com/spree/spree/tree/v#{s.version}",
         
     | 
| 
      
 21 
     | 
    
         
            +
              }
         
     | 
| 
       11 
22 
     | 
    
         | 
| 
       12 
23 
     | 
    
         
             
              s.required_ruby_version     = '>= 2.5.0'
         
     | 
| 
       13 
24 
     | 
    
         
             
              s.required_rubygems_version = '>= 1.8.23'
         
     | 
| 
       14 
25 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
              s.author      = 'Sean Schofield'
         
     | 
| 
       16 
     | 
    
         
            -
              s.email       = 'sean@spreecommerce.com'
         
     | 
| 
       17 
     | 
    
         
            -
              s.homepage    = 'http://spreecommerce.org'
         
     | 
| 
       18 
     | 
    
         
            -
              s.license     = 'BSD-3-Clause'
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
26 
     | 
    
         
             
              s.files        = `git ls-files`.split("\n").reject { |f| f.match(/^spec/) && !f.match(/^spec\/fixtures/) }
         
     | 
| 
       21 
27 
     | 
    
         
             
              s.require_path = 'lib'
         
     | 
| 
       22 
28 
     | 
    
         | 
| 
         @@ -28,7 +34,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       28 
34 
     | 
    
         
             
              s.add_dependency 'ffaker', '~> 2.9'
         
     | 
| 
       29 
35 
     | 
    
         
             
              s.add_dependency 'friendly_id', '>= 5.2.1', '< 5.4.0'
         
     | 
| 
       30 
36 
     | 
    
         
             
              s.add_dependency 'highline', '~> 2.0.0' # Necessary for the install generator
         
     | 
| 
       31 
     | 
    
         
            -
              s.add_dependency 'kaminari', ' 
     | 
| 
      
 37 
     | 
    
         
            +
              s.add_dependency 'kaminari', '~> 1.2.1'
         
     | 
| 
       32 
38 
     | 
    
         
             
              s.add_dependency 'money', '~> 6.13'
         
     | 
| 
       33 
39 
     | 
    
         
             
              s.add_dependency 'monetize', '~> 1.9'
         
     | 
| 
       34 
40 
     | 
    
         
             
              s.add_dependency 'paranoia', '~> 2.4.2'
         
     | 
| 
         @@ -39,7 +45,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       39 
45 
     | 
    
         
             
              s.add_dependency 'state_machines-activerecord', '~> 0.6'
         
     | 
| 
       40 
46 
     | 
    
         
             
              s.add_dependency 'state_machines-activemodel', '~> 0.7'
         
     | 
| 
       41 
47 
     | 
    
         
             
              s.add_dependency 'stringex'
         
     | 
| 
       42 
     | 
    
         
            -
              s.add_dependency 'twitter_cldr', '>= 4.3', '<  
     | 
| 
      
 48 
     | 
    
         
            +
              s.add_dependency 'twitter_cldr', '>= 4.3', '< 7.0'
         
     | 
| 
       43 
49 
     | 
    
         
             
              s.add_dependency 'sprockets', '~> 3.7'
         
     | 
| 
       44 
50 
     | 
    
         
             
              s.add_dependency 'sprockets-rails'
         
     | 
| 
       45 
51 
     | 
    
         
             
              s.add_dependency 'mini_magick', '>= 4.9.4', '< 4.11.0'
         
     | 
    
        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: 4.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 4.1.8
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sean Schofield
         
     | 
| 
       8 
     | 
    
         
            -
            autorequire: 
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2020- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-08-05 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activemerchant
         
     | 
| 
         @@ -144,22 +144,16 @@ dependencies: 
     | 
|
| 
       144 
144 
     | 
    
         
             
              name: kaminari
         
     | 
| 
       145 
145 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       146 
146 
     | 
    
         
             
                requirements:
         
     | 
| 
       147 
     | 
    
         
            -
                - - " 
     | 
| 
       148 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       149 
     | 
    
         
            -
                    version: 1.0.1
         
     | 
| 
       150 
     | 
    
         
            -
                - - "<"
         
     | 
| 
      
 147 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       151 
148 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       152 
     | 
    
         
            -
                    version: 1.2. 
     | 
| 
      
 149 
     | 
    
         
            +
                    version: 1.2.1
         
     | 
| 
       153 
150 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       154 
151 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       155 
152 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       156 
153 
     | 
    
         
             
                requirements:
         
     | 
| 
       157 
     | 
    
         
            -
                - - " 
     | 
| 
       158 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       159 
     | 
    
         
            -
                    version: 1.0.1
         
     | 
| 
       160 
     | 
    
         
            -
                - - "<"
         
     | 
| 
      
 154 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       161 
155 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       162 
     | 
    
         
            -
                    version: 1.2. 
     | 
| 
      
 156 
     | 
    
         
            +
                    version: 1.2.1
         
     | 
| 
       163 
157 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       164 
158 
     | 
    
         
             
              name: money
         
     | 
| 
       165 
159 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -309,7 +303,7 @@ dependencies: 
     | 
|
| 
       309 
303 
     | 
    
         
             
                    version: '4.3'
         
     | 
| 
       310 
304 
     | 
    
         
             
                - - "<"
         
     | 
| 
       311 
305 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       312 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 306 
     | 
    
         
            +
                    version: '7.0'
         
     | 
| 
       313 
307 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       314 
308 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       315 
309 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -319,7 +313,7 @@ dependencies: 
     | 
|
| 
       319 
313 
     | 
    
         
             
                    version: '4.3'
         
     | 
| 
       320 
314 
     | 
    
         
             
                - - "<"
         
     | 
| 
       321 
315 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       322 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 316 
     | 
    
         
            +
                    version: '7.0'
         
     | 
| 
       323 
317 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       324 
318 
     | 
    
         
             
              name: sprockets
         
     | 
| 
       325 
319 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -997,6 +991,7 @@ files: 
     | 
|
| 
       997 
991 
     | 
    
         
             
            - lib/spree/core/search/base.rb
         
     | 
| 
       998 
992 
     | 
    
         
             
            - lib/spree/core/token_generator.rb
         
     | 
| 
       999 
993 
     | 
    
         
             
            - lib/spree/core/version.rb
         
     | 
| 
      
 994 
     | 
    
         
            +
            - lib/spree/database_type_utilities.rb
         
     | 
| 
       1000 
995 
     | 
    
         
             
            - lib/spree/dependencies_helper.rb
         
     | 
| 
       1001 
996 
     | 
    
         
             
            - lib/spree/i18n.rb
         
     | 
| 
       1002 
997 
     | 
    
         
             
            - lib/spree/i18n/base.rb
         
     | 
| 
         @@ -1088,8 +1083,12 @@ files: 
     | 
|
| 
       1088 
1083 
     | 
    
         
             
            homepage: http://spreecommerce.org
         
     | 
| 
       1089 
1084 
     | 
    
         
             
            licenses:
         
     | 
| 
       1090 
1085 
     | 
    
         
             
            - BSD-3-Clause
         
     | 
| 
       1091 
     | 
    
         
            -
            metadata: 
     | 
| 
       1092 
     | 
    
         
            -
             
     | 
| 
      
 1086 
     | 
    
         
            +
            metadata:
         
     | 
| 
      
 1087 
     | 
    
         
            +
              bug_tracker_uri: https://github.com/spree/spree/issues
         
     | 
| 
      
 1088 
     | 
    
         
            +
              changelog_uri: https://github.com/spree/spree/releases/tag/v4.1.8
         
     | 
| 
      
 1089 
     | 
    
         
            +
              documentation_uri: https://guides.spreecommerce.org/
         
     | 
| 
      
 1090 
     | 
    
         
            +
              source_code_uri: https://github.com/spree/spree/tree/v4.1.8
         
     | 
| 
      
 1091 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
       1093 
1092 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       1094 
1093 
     | 
    
         
             
            require_paths:
         
     | 
| 
       1095 
1094 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -1104,8 +1103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       1104 
1103 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       1105 
1104 
     | 
    
         
             
                  version: 1.8.23
         
     | 
| 
       1106 
1105 
     | 
    
         
             
            requirements: []
         
     | 
| 
       1107 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
       1108 
     | 
    
         
            -
            signing_key: 
     | 
| 
      
 1106 
     | 
    
         
            +
            rubygems_version: 3.1.2
         
     | 
| 
      
 1107 
     | 
    
         
            +
            signing_key:
         
     | 
| 
       1109 
1108 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       1110 
1109 
     | 
    
         
             
            summary: The bare bones necessary for Spree.
         
     | 
| 
       1111 
1110 
     | 
    
         
             
            test_files: []
         
     |