spree_core 2.2.1 → 2.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/spree/products_helper.rb +3 -3
- data/app/models/concerns/spree/user_reporting.rb +2 -2
- data/app/models/spree/address.rb +7 -7
- data/app/models/spree/credit_card.rb +11 -5
- data/app/models/spree/gateway.rb +4 -1
- data/app/models/spree/item_adjustments.rb +17 -7
- data/app/models/spree/line_item.rb +2 -2
- data/app/models/spree/order.rb +35 -19
- data/app/models/spree/order/checkout.rb +3 -1
- data/app/models/spree/order_updater.rb +8 -2
- data/app/models/spree/payment.rb +2 -2
- data/app/models/spree/payment/processing.rb +9 -0
- data/app/models/spree/payment_method.rb +6 -0
- data/app/models/spree/price.rb +2 -2
- data/app/models/spree/product.rb +7 -2
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +1 -0
- data/app/models/spree/promotion/rules/product.rb +4 -2
- data/app/models/spree/promotion/rules/user.rb +2 -2
- data/app/models/spree/promotion_handler/coupon.rb +6 -1
- data/app/models/spree/shipment.rb +0 -1
- data/app/models/spree/shipping_rate.rb +11 -9
- data/app/models/spree/stock/availability_validator.rb +1 -1
- data/app/models/spree/stock/quantifier.rb +1 -9
- data/app/models/spree/stock_item.rb +4 -0
- data/app/models/spree/tax_rate.rb +9 -8
- data/app/models/spree/taxon.rb +3 -0
- data/app/models/spree/variant.rb +1 -5
- data/config/locales/en.yml +1 -0
- data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
- data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +5 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +7 -2
- data/lib/spree/core.rb +2 -0
- data/lib/spree/core/engine.rb +1 -1
- data/lib/spree/core/importer/order.rb +13 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/migrations.rb +10 -1
- data/lib/spree/money.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +1 -1
- data/lib/spree/testing_support/factories/address_factory.rb +1 -1
- metadata +34 -11
- data/vendor/assets/fonts/FontAwesome.otf +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.eot +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.svg +0 -399
- data/vendor/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.woff +0 -0
- data/vendor/assets/stylesheets/font-awesome.scss +0 -1475
@@ -28,6 +28,7 @@ module Spree
|
|
28
28
|
def create_adjustment(adjustable, order)
|
29
29
|
amount = self.compute_amount(adjustable)
|
30
30
|
return if amount == 0
|
31
|
+
return if promotion.product_ids.present? and !promotion.product_ids.include?(adjustable.product.id)
|
31
32
|
self.adjustments.create!(
|
32
33
|
amount: amount,
|
33
34
|
adjustable: adjustable,
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
class Product < PromotionRule
|
8
8
|
has_and_belongs_to_many :products, class_name: '::Spree::Product', join_table: 'spree_products_promotion_rules', foreign_key: 'promotion_rule_id'
|
9
9
|
|
10
|
-
MATCH_POLICIES = %w(any all)
|
10
|
+
MATCH_POLICIES = %w(any all none)
|
11
11
|
preference :match_policy, :string, default: MATCH_POLICIES.first
|
12
12
|
|
13
13
|
# scope/association that is used to test eligibility
|
@@ -23,8 +23,10 @@ module Spree
|
|
23
23
|
return true if eligible_products.empty?
|
24
24
|
if preferred_match_policy == 'all'
|
25
25
|
eligible_products.all? {|p| order.products.include?(p) }
|
26
|
-
|
26
|
+
elsif preferred_match_policy == 'any'
|
27
27
|
order.products.any? {|p| eligible_products.include?(p) }
|
28
|
+
else
|
29
|
+
order.products.none? {|p| eligible_products.include?(p) }
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
@@ -2,8 +2,8 @@ module Spree
|
|
2
2
|
class Promotion
|
3
3
|
module Rules
|
4
4
|
class User < PromotionRule
|
5
|
-
belongs_to :user, class_name: Spree.user_class
|
6
|
-
has_and_belongs_to_many :users, class_name: Spree.user_class, join_table: 'spree_promotion_rules_users', foreign_key: 'promotion_rule_id'
|
5
|
+
belongs_to :user, class_name: "::#{Spree.user_class.to_s}"
|
6
|
+
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
7
|
|
8
8
|
def applicable?(promotable)
|
9
9
|
promotable.is_a?(Spree::Order)
|
@@ -57,7 +57,12 @@ module Spree
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def determine_promotion_application_result(result)
|
60
|
-
detector = lambda { |p|
|
60
|
+
detector = lambda { |p|
|
61
|
+
if p.source.promotion.code
|
62
|
+
p.source.promotion.code.downcase == order.coupon_code.downcase
|
63
|
+
end
|
64
|
+
}
|
65
|
+
|
61
66
|
discount = order.line_item_adjustments.promotion.detect(&detector)
|
62
67
|
discount ||= order.shipment_adjustments.promotion.detect(&detector)
|
63
68
|
discount ||= order.adjustments.promotion.detect(&detector)
|
@@ -19,17 +19,19 @@ module Spree
|
|
19
19
|
price = display_base_price.to_s
|
20
20
|
if tax_rate
|
21
21
|
tax_amount = calculate_tax_amount
|
22
|
-
if
|
23
|
-
if
|
24
|
-
|
25
|
-
|
22
|
+
if tax_amount != 0
|
23
|
+
if tax_rate.included_in_price?
|
24
|
+
if tax_amount > 0
|
25
|
+
amount = "#{display_tax_amount(tax_amount)} #{tax_rate.name}"
|
26
|
+
price += " (incl. #{amount})"
|
27
|
+
else
|
28
|
+
amount = "#{display_tax_amount(tax_amount*-1)} #{tax_rate.name}"
|
29
|
+
price += " (excl. #{amount})"
|
30
|
+
end
|
26
31
|
else
|
27
|
-
amount = "#{display_tax_amount(tax_amount
|
28
|
-
price += " (
|
32
|
+
amount = "#{display_tax_amount(tax_amount)} #{tax_rate.name}"
|
33
|
+
price += " (+ #{amount})"
|
29
34
|
end
|
30
|
-
else
|
31
|
-
amount = "#{display_tax_amount(tax_amount)} #{tax_rate.name}"
|
32
|
-
price += " (+ #{amount})"
|
33
35
|
end
|
34
36
|
end
|
35
37
|
price
|
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
attr_reader :stock_items
|
5
5
|
|
6
6
|
def initialize(variant)
|
7
|
-
@variant =
|
7
|
+
@variant = variant
|
8
8
|
@stock_items = Spree::StockItem.joins(:stock_location).where(:variant_id => @variant, Spree::StockLocation.table_name =>{ :active => true})
|
9
9
|
end
|
10
10
|
|
@@ -24,14 +24,6 @@ module Spree
|
|
24
24
|
total_on_hand >= required || backorderable?
|
25
25
|
end
|
26
26
|
|
27
|
-
private
|
28
|
-
|
29
|
-
# return variant when passed either variant object or variant id
|
30
|
-
def resolve_variant_id(variant)
|
31
|
-
variant = Spree::Variant.find_by_id(variant) unless variant.respond_to?(:should_track_inventory?)
|
32
|
-
variant
|
33
|
-
end
|
34
|
-
|
35
27
|
end
|
36
28
|
end
|
37
29
|
end
|
@@ -25,8 +25,9 @@ module Spree
|
|
25
25
|
|
26
26
|
# Gets the array of TaxRates appropriate for the specified order
|
27
27
|
def self.match(order)
|
28
|
-
|
29
|
-
|
28
|
+
order_zone = order.tax_zone
|
29
|
+
return [] unless order_zone
|
30
|
+
rates = includes(zone: { zone_members: :zoneable }).load.select do |rate|
|
30
31
|
# Why "potentially"?
|
31
32
|
# Go see the documentation for that method.
|
32
33
|
rate.potentially_applicable?(order)
|
@@ -51,7 +52,7 @@ module Spree
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
|
-
# Pre-tax amounts must be stored so that we can calculate
|
55
|
+
# Pre-tax amounts must be stored so that we can calculate
|
55
56
|
# correct rate amounts in the future. For example:
|
56
57
|
# https://github.com/spree/spree/issues/4318#issuecomment-34723428
|
57
58
|
def self.store_pre_tax_amount(item, rates)
|
@@ -95,7 +96,7 @@ module Spree
|
|
95
96
|
rate || 0
|
96
97
|
end
|
97
98
|
|
98
|
-
|
99
|
+
|
99
100
|
# Tax rates can *potentially* be applicable to an order.
|
100
101
|
# We do not know if they are/aren't until we attempt to apply these rates to
|
101
102
|
# the items contained within the Order itself.
|
@@ -103,14 +104,14 @@ module Spree
|
|
103
104
|
# but then has a tax category that doesn't match against any of the line items
|
104
105
|
# inside of the order, then that tax rate will not be applicable to anything.
|
105
106
|
# For instance:
|
106
|
-
#
|
107
|
+
#
|
107
108
|
# Zones:
|
108
109
|
# - Spain (default tax zone)
|
109
110
|
# - France
|
110
111
|
#
|
111
112
|
# Tax rates: (note: amounts below do not actually reflect real VAT rates)
|
112
113
|
# 21% inclusive - "Clothing" - Spain
|
113
|
-
# 18% inclusive - "Clothing" - France
|
114
|
+
# 18% inclusive - "Clothing" - France
|
114
115
|
# 10% inclusive - "Food" - Spain
|
115
116
|
# 8% inclusive - "Food" - France
|
116
117
|
# 5% inclusive - "Hotels" - Spain
|
@@ -119,14 +120,14 @@ module Spree
|
|
119
120
|
# Order has:
|
120
121
|
# Line Item #1 - Tax Category: Clothing
|
121
122
|
# Line Item #2 - Tax Category: Food
|
122
|
-
#
|
123
|
+
#
|
123
124
|
# Tax rates that should be selected:
|
124
125
|
#
|
125
126
|
# 21% inclusive - "Clothing" - Spain
|
126
127
|
# 10% inclusive - "Food" - Spain
|
127
128
|
#
|
128
129
|
# If the order's address changes to one in France, then the tax will be recalculated:
|
129
|
-
#
|
130
|
+
#
|
130
131
|
# 18% inclusive - "Clothing" - France
|
131
132
|
# 8% inclusive - "Food" - France
|
132
133
|
#
|
data/app/models/spree/taxon.rb
CHANGED
@@ -19,6 +19,9 @@ module Spree
|
|
19
19
|
path: ':rails_root/public/spree/taxons/:id/:style/:basename.:extension',
|
20
20
|
default_url: '/assets/default_taxon.png'
|
21
21
|
|
22
|
+
validates_attachment :icon,
|
23
|
+
content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
|
24
|
+
|
22
25
|
include Spree::Core::ProductFilters # for detailed defs of filters
|
23
26
|
|
24
27
|
# indicate which filters should be used for a taxon
|
data/app/models/spree/variant.rb
CHANGED
@@ -79,15 +79,11 @@ module Spree
|
|
79
79
|
values.to_sentence({ words_connector: ", ", two_words_connector: ", " })
|
80
80
|
end
|
81
81
|
|
82
|
-
def gross_profit
|
83
|
-
cost_price.nil? ? 0 : (price - cost_price)
|
84
|
-
end
|
85
|
-
|
86
82
|
# use deleted? rather than checking the attribute directly. this
|
87
83
|
# allows extensions to override deleted? if they want to provide
|
88
84
|
# their own definition.
|
89
85
|
def deleted?
|
90
|
-
deleted_at
|
86
|
+
!!deleted_at
|
91
87
|
end
|
92
88
|
|
93
89
|
# Product may be created with deleted_at already set,
|
data/config/locales/en.yml
CHANGED
@@ -3,7 +3,7 @@ class MigrateOldShippingCalculators < ActiveRecord::Migration
|
|
3
3
|
Spree::ShippingMethod.all.each do |shipping_method|
|
4
4
|
old_calculator = shipping_method.calculator
|
5
5
|
next if old_calculator.class < Spree::ShippingCalculator # We don't want to mess with new shipping calculators
|
6
|
-
new_calculator = eval(
|
6
|
+
new_calculator = eval(old_calculator.class.name.sub("::Calculator::", "::Calculator::Shipping::")).new
|
7
7
|
new_calculator.preferences.keys.each do |pref|
|
8
8
|
# Preferences can't be read/set by name, you have to prefix preferred_
|
9
9
|
pref_method = "preferred_#{pref}"
|
@@ -122,7 +122,13 @@ end
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def gemfile_path
|
125
|
-
|
125
|
+
core_gems = ["spree/core", "spree/api", "spree/backend", "spree/frontend"]
|
126
|
+
|
127
|
+
if core_gems.include?(lib_name)
|
128
|
+
'../../../../../Gemfile'
|
129
|
+
else
|
130
|
+
'../../../../Gemfile'
|
131
|
+
end
|
126
132
|
end
|
127
133
|
end
|
128
134
|
end
|
@@ -131,4 +137,3 @@ module Spree::DummyGeneratorHelper
|
|
131
137
|
mattr_accessor :inject_extension_requirements
|
132
138
|
self.inject_extension_requirements = false
|
133
139
|
end
|
134
|
-
|
data/lib/spree/core.rb
CHANGED
@@ -5,11 +5,13 @@ require 'awesome_nested_set'
|
|
5
5
|
require 'cancan'
|
6
6
|
require 'kaminari'
|
7
7
|
require 'mail'
|
8
|
+
require 'monetize'
|
8
9
|
require 'paperclip'
|
9
10
|
require 'paranoia'
|
10
11
|
require 'ransack'
|
11
12
|
require 'state_machine'
|
12
13
|
require 'friendly_id'
|
14
|
+
require 'font-awesome-rails'
|
13
15
|
|
14
16
|
module Spree
|
15
17
|
|
data/lib/spree/core/engine.rb
CHANGED
@@ -58,7 +58,7 @@ module Spree
|
|
58
58
|
app.config.spree.calculators.promotion_actions_create_adjustments = [
|
59
59
|
Spree::Calculator::FlatPercentItemTotal,
|
60
60
|
Spree::Calculator::FlatRate,
|
61
|
-
Spree::Calculator::FlexiRate
|
61
|
+
Spree::Calculator::FlexiRate
|
62
62
|
]
|
63
63
|
|
64
64
|
app.config.spree.calculators.add_class('promotion_actions_create_item_adjustments')
|
@@ -18,12 +18,21 @@ module Spree
|
|
18
18
|
create_adjustments_from_params(params.delete(:adjustments_attributes), order)
|
19
19
|
create_payments_from_params(params.delete(:payments_attributes), order)
|
20
20
|
|
21
|
+
|
21
22
|
if(completed_at = params.delete(:completed_at))
|
22
23
|
order.completed_at = completed_at
|
23
24
|
order.state = 'complete'
|
24
25
|
end
|
25
26
|
|
27
|
+
user_id = params.delete(:user_id)
|
28
|
+
if user.has_spree_role? "admin"
|
29
|
+
order.user_id = user_id
|
30
|
+
end
|
31
|
+
|
26
32
|
order.update_attributes!(params)
|
33
|
+
# Really ensure that the order totals are correct
|
34
|
+
order.update_totals
|
35
|
+
order.persist_totals
|
27
36
|
order.reload
|
28
37
|
rescue Exception => e
|
29
38
|
order.destroy if order && order.persisted?
|
@@ -51,8 +60,10 @@ module Spree
|
|
51
60
|
shipment.save!
|
52
61
|
|
53
62
|
shipping_method = Spree::ShippingMethod.find_by_name!(s[:shipping_method])
|
54
|
-
shipment.shipping_rates.create!(:shipping_method => shipping_method,
|
55
|
-
|
63
|
+
rate = shipment.shipping_rates.create!(:shipping_method => shipping_method,
|
64
|
+
:cost => s[:cost])
|
65
|
+
shipment.selected_shipping_rate_id = rate.id
|
66
|
+
|
56
67
|
rescue Exception => e
|
57
68
|
raise "Order import shipments: #{e.message} #{s}"
|
58
69
|
end
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/migrations.rb
CHANGED
@@ -24,7 +24,7 @@ module Spree
|
|
24
24
|
if File.exists?("config/spree.yml") && File.directory?("db/migrate")
|
25
25
|
engine_in_app = app_migrations.map do |file_name|
|
26
26
|
name, engine = file_name.split(".", 2)
|
27
|
-
next unless engine
|
27
|
+
next unless match_engine?(engine)
|
28
28
|
name
|
29
29
|
end.compact! || []
|
30
30
|
|
@@ -51,5 +51,14 @@ module Spree
|
|
51
51
|
name.empty? ? next : name
|
52
52
|
end.compact! || []
|
53
53
|
end
|
54
|
+
|
55
|
+
def match_engine?(engine)
|
56
|
+
if engine_name == "spree"
|
57
|
+
# Avoid stores upgrading from 1.3 getting wrong warnings
|
58
|
+
["spree.rb", "spree_promo.rb"].include? engine
|
59
|
+
else
|
60
|
+
engine == "#{engine_name}.rb"
|
61
|
+
end
|
62
|
+
end
|
54
63
|
end
|
55
64
|
end
|
data/lib/spree/money.rb
CHANGED
@@ -30,7 +30,7 @@ module Spree
|
|
30
30
|
|
31
31
|
# Check the first character for a currency symbol, alternatively get it
|
32
32
|
# from the stated currency string
|
33
|
-
c = if ::
|
33
|
+
c = if ::Monetize.assume_from_symbol && i =~ /^(\$|€|£)/
|
34
34
|
case i
|
35
35
|
when /^\$/ then "USD"
|
36
36
|
when /^€/ then "EUR"
|
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.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: 0.15.0
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: monetize
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: paperclip
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -212,14 +226,14 @@ dependencies:
|
|
212
226
|
requirements:
|
213
227
|
- - "~>"
|
214
228
|
- !ruby/object:Gem::Version
|
215
|
-
version: 4.0.
|
229
|
+
version: 4.0.5
|
216
230
|
type: :runtime
|
217
231
|
prerelease: false
|
218
232
|
version_requirements: !ruby/object:Gem::Requirement
|
219
233
|
requirements:
|
220
234
|
- - "~>"
|
221
235
|
- !ruby/object:Gem::Version
|
222
|
-
version: 4.0.
|
236
|
+
version: 4.0.5
|
223
237
|
- !ruby/object:Gem::Dependency
|
224
238
|
name: ransack
|
225
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -276,6 +290,20 @@ dependencies:
|
|
276
290
|
- - '='
|
277
291
|
- !ruby/object:Gem::Version
|
278
292
|
version: 0.9.2
|
293
|
+
- !ruby/object:Gem::Dependency
|
294
|
+
name: font-awesome-rails
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
296
|
+
requirements:
|
297
|
+
- - "~>"
|
298
|
+
- !ruby/object:Gem::Version
|
299
|
+
version: '4.0'
|
300
|
+
type: :runtime
|
301
|
+
prerelease: false
|
302
|
+
version_requirements: !ruby/object:Gem::Requirement
|
303
|
+
requirements:
|
304
|
+
- - "~>"
|
305
|
+
- !ruby/object:Gem::Version
|
306
|
+
version: '4.0'
|
279
307
|
description: The bare bones necessary for Spree.
|
280
308
|
email: sean@spreecommerce.com
|
281
309
|
executables: []
|
@@ -561,6 +589,7 @@ files:
|
|
561
589
|
- db/migrate/20140213184916_add_more_indexes.rb
|
562
590
|
- db/migrate/20140219060952_add_considered_risky_to_orders.rb
|
563
591
|
- db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb
|
592
|
+
- db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb
|
564
593
|
- db/seeds.rb
|
565
594
|
- lib/generators/spree/custom_user/custom_user_generator.rb
|
566
595
|
- lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt
|
@@ -671,11 +700,6 @@ files:
|
|
671
700
|
- lib/spree/testing_support/url_helpers.rb
|
672
701
|
- lib/spree_core.rb
|
673
702
|
- lib/tasks/core.rake
|
674
|
-
- vendor/assets/fonts/FontAwesome.otf
|
675
|
-
- vendor/assets/fonts/fontawesome-webfont.eot
|
676
|
-
- vendor/assets/fonts/fontawesome-webfont.svg
|
677
|
-
- vendor/assets/fonts/fontawesome-webfont.ttf
|
678
|
-
- vendor/assets/fonts/fontawesome-webfont.woff
|
679
703
|
- vendor/assets/javascripts/jquery-migrate-1.0.0.js
|
680
704
|
- vendor/assets/javascripts/jquery.payment.js
|
681
705
|
- vendor/assets/javascripts/jquery.validate/localization/messages_et.js
|
@@ -692,7 +716,6 @@ files:
|
|
692
716
|
- vendor/assets/javascripts/jquery.validate/localization/messages_zh.js
|
693
717
|
- vendor/assets/javascripts/jquery.validate/localization/messages_zh_TW.js
|
694
718
|
- vendor/assets/javascripts/jsuri.js
|
695
|
-
- vendor/assets/stylesheets/font-awesome.scss
|
696
719
|
- vendor/assets/stylesheets/normalize.css
|
697
720
|
- vendor/assets/stylesheets/skeleton.css
|
698
721
|
homepage: http://spreecommerce.com
|
@@ -715,7 +738,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
715
738
|
version: '0'
|
716
739
|
requirements: []
|
717
740
|
rubyforge_project:
|
718
|
-
rubygems_version: 2.2.
|
741
|
+
rubygems_version: 2.2.0
|
719
742
|
signing_key:
|
720
743
|
specification_version: 4
|
721
744
|
summary: The bare bones necessary for Spree.
|