spree_core 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/admin/admin.js.erb +21 -20
- data/app/assets/stylesheets/store/screen.css.scss +4 -0
- data/app/controllers/spree/admin/payment_methods_controller.rb +1 -1
- data/app/controllers/spree/admin/products_controller.rb +1 -1
- data/app/controllers/spree/admin/shipping_methods_controller.rb +1 -1
- data/app/controllers/spree/admin/taxons_controller.rb +1 -1
- data/app/controllers/spree/content_controller.rb +1 -1
- data/app/controllers/spree/products_controller.rb +5 -4
- data/app/helpers/spree/admin/products_helper.rb +0 -9
- data/app/helpers/spree/products_helper.rb +14 -1
- data/app/helpers/spree/taxons_helper.rb +1 -0
- data/app/models/spree/address.rb +1 -1
- data/app/models/spree/app_configuration.rb +1 -0
- data/app/models/spree/creditcard.rb +1 -1
- data/app/models/spree/image.rb +1 -0
- data/app/models/spree/line_item.rb +1 -1
- data/app/models/spree/order.rb +2 -2
- data/app/models/spree/payment_method.rb +1 -1
- data/app/models/spree/product.rb +2 -1
- data/app/models/spree/product/scopes.rb +0 -11
- data/app/models/spree/shipment.rb +6 -7
- data/app/models/spree/tax_category.rb +1 -1
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/tracker.rb +2 -1
- data/app/models/spree/variant.rb +5 -0
- data/app/models/spree/zone.rb +5 -11
- data/app/models/spree/zone_member.rb +1 -1
- data/app/views/spree/admin/image_settings/edit.html.erb +7 -0
- data/app/views/spree/admin/images/index.html.erb +2 -0
- data/app/views/spree/admin/option_types/index.html.erb +2 -0
- data/app/views/spree/admin/orders/customer_details/edit.html.erb +1 -1
- data/app/views/spree/admin/shared/_head.html.erb +9 -6
- data/app/views/spree/admin/variants/index.html.erb +2 -0
- data/app/views/spree/checkout/_address.html.erb +6 -6
- data/app/views/spree/layouts/spree_application.html.erb +7 -7
- data/app/views/spree/orders/_line_item.html.erb +1 -1
- data/app/views/spree/shared/_google_analytics.html.erb +27 -27
- data/app/views/spree/taxons/show.html.erb +5 -5
- data/config/locales/en.yml +1 -0
- data/config/routes.rb +2 -7
- data/db/migrate/20090923100315_add_count_on_hand_to_variants_and_products.rb +2 -2
- data/db/migrate/20091015153048_add_openid_field_to_users.rb +1 -1
- data/db/migrate/20091021133257_charge_refactoring.rb +2 -2
- data/db/migrate/20100105132138_shipment_id_for_inventory_units.rb +1 -1
- data/db/migrate/20120712172620_add_counter_cache_to_zone_members.rb +14 -0
- data/lib/spree/core/controller_helpers.rb +0 -5
- data/lib/spree/core/mail_interceptor.rb +1 -1
- data/lib/spree/core/permalinks.rb +2 -2
- data/lib/spree/core/testing_support/factories/product_factory.rb +1 -3
- data/lib/spree/core/version.rb +1 -1
- metadata +32 -31
@@ -164,9 +164,9 @@ $.fn.product_autocomplete = function(){
|
|
164
164
|
$.fn.objectPicker = function(url){
|
165
165
|
$(this).tokenInput(url + "&authenticity_token=" + escape(AUTH_TOKEN), {
|
166
166
|
searchDelay : 600,
|
167
|
-
hintText : strings.type_to_search,
|
168
|
-
noResultsText : strings.no_results,
|
169
|
-
searchingText : strings.searching,
|
167
|
+
hintText : Spree.strings.type_to_search,
|
168
|
+
noResultsText : Spree.strings.no_results,
|
169
|
+
searchingText : Spree.strings.searching,
|
170
170
|
prePopulateFromInput : true
|
171
171
|
});
|
172
172
|
};
|
@@ -174,26 +174,11 @@ $.fn.objectPicker = function(url){
|
|
174
174
|
$.fn.productPicker = function(){
|
175
175
|
$(this).objectPicker(Spree.routes.product_search_basic);
|
176
176
|
}
|
177
|
+
|
177
178
|
$.fn.userPicker = function(){
|
178
179
|
$(this).objectPicker(Spree.routes.user_search);
|
179
180
|
}
|
180
181
|
|
181
|
-
$(".observe_field").on('change', function() {
|
182
|
-
target = $(this).attr("data-update");
|
183
|
-
ajax_indicator = $(this).attr("data-ajax-indicator") || '#busy_indicator';
|
184
|
-
$(target).hide();
|
185
|
-
$(ajax_indicator).show();
|
186
|
-
$.ajax({ dataType: 'html',
|
187
|
-
url: $(this).attr("data-base-url")+encodeURIComponent($(this).val()),
|
188
|
-
type: 'get',
|
189
|
-
success: function(data){
|
190
|
-
$(target).html(data);
|
191
|
-
$(ajax_indicator).hide();
|
192
|
-
$(target).show();
|
193
|
-
}
|
194
|
-
});
|
195
|
-
});
|
196
|
-
|
197
182
|
handle_date_picker_fields = function(){
|
198
183
|
$('.datepicker').datepicker({
|
199
184
|
dateFormat: "<%= ::I18n.t(:format, :scope => 'spree.date_picker', :default => 'yy/mm/dd') %>",
|
@@ -209,6 +194,22 @@ handle_date_picker_fields = function(){
|
|
209
194
|
}
|
210
195
|
|
211
196
|
$(document).ready(function(){
|
197
|
+
$(".observe_field").on('change', function() {
|
198
|
+
target = $(this).attr("data-update");
|
199
|
+
ajax_indicator = $(this).attr("data-ajax-indicator") || '#busy_indicator';
|
200
|
+
$(target).hide();
|
201
|
+
$(ajax_indicator).show();
|
202
|
+
$.ajax({ dataType: 'html',
|
203
|
+
url: $(this).attr("data-base-url")+encodeURIComponent($(this).val()),
|
204
|
+
type: 'get',
|
205
|
+
success: function(data){
|
206
|
+
$(target).html(data);
|
207
|
+
$(ajax_indicator).hide();
|
208
|
+
$(target).show();
|
209
|
+
}
|
210
|
+
});
|
211
|
+
});
|
212
|
+
|
212
213
|
$('.add_fields').click(function() {
|
213
214
|
var target = $(this).data("target");
|
214
215
|
var new_table_row = $(target + ' tr:visible:last').clone();
|
@@ -255,7 +256,7 @@ $(document).ready(function(){
|
|
255
256
|
|
256
257
|
handle_date_picker_fields();
|
257
258
|
|
258
|
-
$(
|
259
|
+
$('body').on('click', '.select_properties_from_prototype', function(){
|
259
260
|
$("#busy_indicator").show();
|
260
261
|
var clicked_link = $(this);
|
261
262
|
$.ajax({ dataType: 'script', url: clicked_link.attr("href"), type: 'get',
|
@@ -530,6 +530,10 @@ mark {background-color: $link_text_color; color: $layout_background_color; font-
|
|
530
530
|
text-align: center;
|
531
531
|
border: 1px solid lighten($body_text_color, 60);
|
532
532
|
background-color: $product_background_color;
|
533
|
+
|
534
|
+
img {
|
535
|
+
min-height: 240px;
|
536
|
+
}
|
533
537
|
}
|
534
538
|
#product-thumbnails {
|
535
539
|
li {
|
@@ -22,7 +22,7 @@ module Spree
|
|
22
22
|
invoke_callbacks(:update, :before)
|
23
23
|
payment_method_type = params[:payment_method].delete(:type)
|
24
24
|
if @payment_method['type'].to_s != payment_method_type
|
25
|
-
@payment_method.
|
25
|
+
@payment_method.update_column(:type, payment_method_type)
|
26
26
|
@payment_method = PaymentMethod.find(params[:id])
|
27
27
|
end
|
28
28
|
|
@@ -23,7 +23,7 @@ module Spree
|
|
23
23
|
# instead of actually deleting the product.
|
24
24
|
def destroy
|
25
25
|
@product = Product.find_by_permalink!(params[:id])
|
26
|
-
@product.
|
26
|
+
@product.update_column(:deleted_at, Time.now)
|
27
27
|
|
28
28
|
@product.variants_including_master.update_all(:deleted_at => Time.now)
|
29
29
|
|
@@ -58,7 +58,7 @@ module Spree
|
|
58
58
|
@taxon.move_to_right_of(new_siblings[new_position]) # we move down
|
59
59
|
end
|
60
60
|
# Reset legacy position, if any extensions still rely on it
|
61
|
-
new_parent.children.reload.each{|t| t.
|
61
|
+
new_parent.children.reload.each{|t| t.update_column(:position, t.position)}
|
62
62
|
|
63
63
|
if parent_id
|
64
64
|
@taxon.reload
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Spree
|
2
2
|
class ProductsController < BaseController
|
3
|
-
HTTP_REFERER_REGEXP = /^https?:\/\/[^\/]+\/t\/([a-z0-9\-\/]+)$/
|
4
3
|
before_filter :load_product, :only => :show
|
5
4
|
rescue_from ActiveRecord::RecordNotFound, :with => :render_404
|
6
5
|
helper 'spree/taxons'
|
@@ -20,9 +19,11 @@ module Spree
|
|
20
19
|
@product_properties = ProductProperty.includes(:property).where(:product_id => @product.id)
|
21
20
|
|
22
21
|
referer = request.env['HTTP_REFERER']
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
if referer
|
23
|
+
referer_path = URI.parse(request.env['HTTP_REFERER']).path
|
24
|
+
if referer_path && referer_path.match(/\/t\/(.*)/)
|
25
|
+
@taxon = Taxon.find_by_permalink($1)
|
26
|
+
end
|
26
27
|
end
|
27
28
|
|
28
29
|
respond_with(@product)
|
@@ -1,15 +1,6 @@
|
|
1
1
|
module Spree
|
2
2
|
module Admin
|
3
3
|
module ProductsHelper
|
4
|
-
def option_type_select(so)
|
5
|
-
select(:new_variant,
|
6
|
-
so.option_type.presentation,
|
7
|
-
so.option_type.option_values.collect { |ov| [ ov.presentation, ov.id ] })
|
8
|
-
end
|
9
|
-
|
10
|
-
def pv_tag_id(product_value)
|
11
|
-
"product-property-value-#{product_value.id}"
|
12
|
-
end
|
13
4
|
end
|
14
5
|
end
|
15
6
|
end
|
@@ -14,11 +14,24 @@ module Spree
|
|
14
14
|
|
15
15
|
# converts line breaks in product description into <p> tags (for html display purposes)
|
16
16
|
def product_description(product)
|
17
|
-
raw(product.description.gsub(/(.*?)\n\n/m, '<p>\1</p
|
17
|
+
raw(product.description.gsub(/(.*?)\r?\n\r?\n/m, '<p>\1</p>'))
|
18
18
|
end
|
19
19
|
|
20
20
|
def variant_images_hash(product)
|
21
21
|
product.variant_images.inject({}) { |h, img| (h[img.viewable_id] ||= []) << img; h }
|
22
22
|
end
|
23
|
+
|
24
|
+
def line_item_description(variant)
|
25
|
+
description = variant.product.description
|
26
|
+
if description.present?
|
27
|
+
truncate(strip_tags(description.gsub(' ', ' ')), :length => 100)
|
28
|
+
else
|
29
|
+
t(:product_has_no_description)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_taxonomies
|
34
|
+
@taxonomies ||= Spree::Taxonomy.includes(:root => :children)
|
35
|
+
end
|
23
36
|
end
|
24
37
|
end
|
data/app/models/spree/address.rb
CHANGED
@@ -76,6 +76,7 @@ module Spree
|
|
76
76
|
preference :s3_secret, :string
|
77
77
|
preference :s3_headers, :string, :default => "{\"Cache-Control\":\"max-age=31557600\"}"
|
78
78
|
preference :use_s3, :boolean, :default => false # Use S3 for images rather than the file system
|
79
|
+
preference :s3_protocol, :string
|
79
80
|
|
80
81
|
# searcher_class allows spree extension writers to provide their own Search class
|
81
82
|
def searcher_class
|
@@ -12,7 +12,7 @@ module Spree
|
|
12
12
|
validates :verification_value, :presence => true, :unless => :has_payment_profile?, :on => :create
|
13
13
|
|
14
14
|
attr_accessible :first_name, :last_name, :number, :verification_value, :year,
|
15
|
-
:month, :gateway_customer_profile_id
|
15
|
+
:month, :gateway_customer_profile_id, :gateway_payment_profile_id
|
16
16
|
|
17
17
|
scope :with_payment_profile, where('gateway_customer_profile_id IS NOT NULL')
|
18
18
|
|
data/app/models/spree/image.rb
CHANGED
@@ -21,6 +21,7 @@ module Spree
|
|
21
21
|
Spree::Image.attachment_definitions[:attachment][:s3_credentials] = s3_creds
|
22
22
|
Spree::Image.attachment_definitions[:attachment][:s3_headers] = ActiveSupport::JSON.decode(Spree::Config[:s3_headers])
|
23
23
|
Spree::Image.attachment_definitions[:attachment][:bucket] = Spree::Config[:s3_bucket]
|
24
|
+
Spree::Image.attachment_definitions[:attachment][:s3_protocol] = Spree::Config[:s3_protocol] unless Spree::Config[:s3_protocol].blank?
|
24
25
|
end
|
25
26
|
|
26
27
|
Spree::Image.attachment_definitions[:attachment][:styles] = ActiveSupport::JSON.decode(Spree::Config[:attachment_styles])
|
data/app/models/spree/order.rb
CHANGED
@@ -383,10 +383,10 @@ module Spree
|
|
383
383
|
# Finalizes an in progress order after checkout is complete.
|
384
384
|
# Called after transition to complete state when payments will have been processed
|
385
385
|
def finalize!
|
386
|
-
|
386
|
+
touch :completed_at
|
387
387
|
InventoryUnit.assign_opening_inventory(self)
|
388
388
|
# lock any optional adjustments (coupon promotions, etc.)
|
389
|
-
adjustments.optional.each { |adjustment| adjustment.
|
389
|
+
adjustments.optional.each { |adjustment| adjustment.update_column('locked', true) }
|
390
390
|
deliver_order_confirmation_email
|
391
391
|
|
392
392
|
self.state_changes.create({
|
data/app/models/spree/product.rb
CHANGED
@@ -60,7 +60,8 @@ module Spree
|
|
60
60
|
|
61
61
|
def variant_images
|
62
62
|
Image.joins("LEFT JOIN #{Variant.quoted_table_name} ON #{Variant.quoted_table_name}.id = #{Asset.quoted_table_name}.viewable_id").
|
63
|
-
where("#{
|
63
|
+
where("(#{Asset.quoted_table_name}.viewable_type = ? AND #{Asset.quoted_table_name}.viewable_id = ?) OR
|
64
|
+
(#{Asset.quoted_table_name}.viewable_type = ? AND #{Asset.quoted_table_name}.viewable_id = ?)", Variant.name, self.master.id, Product.name, self.id).
|
64
65
|
order("#{Asset.quoted_table_name}.position").
|
65
66
|
extend(Spree::Core::RelationSerialization)
|
66
67
|
end
|
@@ -34,17 +34,6 @@ module Spree
|
|
34
34
|
joins(:variants_with_only_master).order("#{variant_table_name}.price DESC")
|
35
35
|
end
|
36
36
|
|
37
|
-
# Ryan Bates - http://railscasts.com/episodes/112
|
38
|
-
# general merging of conditions, names following the searchlogic pattern
|
39
|
-
add_search_scope :conditions do |*args|
|
40
|
-
where(args)
|
41
|
-
end
|
42
|
-
|
43
|
-
# conditions_all is a more descriptively named enhancement of the above
|
44
|
-
add_search_scope :conditions_all do |*args|
|
45
|
-
where([args].flatten)
|
46
|
-
end
|
47
|
-
|
48
37
|
add_search_scope :price_between do |low, high|
|
49
38
|
joins(:master).where(Variant.table_name => { :price => low..high })
|
50
39
|
end
|
@@ -86,7 +86,7 @@ module Spree
|
|
86
86
|
def update!(order)
|
87
87
|
old_state = state
|
88
88
|
new_state = determine_state(order)
|
89
|
-
|
89
|
+
update_column 'state', new_state
|
90
90
|
after_ship if new_state == 'shipped' and old_state != 'shipped'
|
91
91
|
end
|
92
92
|
|
@@ -105,12 +105,6 @@ module Spree
|
|
105
105
|
"#{I18n.t(:shipping)} (#{shipping_method.name})"
|
106
106
|
end
|
107
107
|
|
108
|
-
# def transition_order
|
109
|
-
# update_attribute(:shipped_at, Time.now)
|
110
|
-
# # transition order to shipped if all shipments have been shipped
|
111
|
-
# order.ship! if order.shipments.all?(&:shipped?)
|
112
|
-
# end
|
113
|
-
|
114
108
|
def validate_shipping_method
|
115
109
|
unless shipping_method.nil?
|
116
110
|
errors.add :shipping_method, I18n.t(:is_not_available_to_shipment_address) unless shipping_method.zone.include?(address)
|
@@ -138,6 +132,11 @@ module Spree
|
|
138
132
|
|
139
133
|
def after_ship
|
140
134
|
inventory_units.each &:ship!
|
135
|
+
send_shipped_email
|
136
|
+
touch :shipped_at
|
137
|
+
end
|
138
|
+
|
139
|
+
def send_shipped_email
|
141
140
|
ShipmentMailer.shipped_email(self).deliver
|
142
141
|
end
|
143
142
|
|
@@ -14,7 +14,7 @@ module Spree
|
|
14
14
|
#set existing default tax category to false if this one has been marked as default
|
15
15
|
|
16
16
|
if is_default && tax_category = self.class.where(:is_default => true).first
|
17
|
-
tax_category.
|
17
|
+
tax_category.update_column(:is_default, false) unless tax_category == self
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
data/app/models/spree/tracker.rb
CHANGED
@@ -3,7 +3,8 @@ module Spree
|
|
3
3
|
attr_accessible :analytics_id, :environment, :active
|
4
4
|
|
5
5
|
def self.current
|
6
|
-
first(:conditions => { :active => true, :environment => Rails.env })
|
6
|
+
tracker = first(:conditions => { :active => true, :environment => Rails.env })
|
7
|
+
tracker.analytics_id.present? ? tracker : nil if tracker
|
7
8
|
end
|
8
9
|
end
|
9
10
|
end
|
data/app/models/spree/variant.rb
CHANGED
@@ -22,6 +22,7 @@ module Spree
|
|
22
22
|
validates :count_on_hand, :numericality => true
|
23
23
|
|
24
24
|
before_save :touch_product
|
25
|
+
after_save :recalculate_product_on_hand, :if => :is_master?
|
25
26
|
|
26
27
|
# default variant scope only lists non-deleted variants
|
27
28
|
scope :active, where(:deleted_at => nil)
|
@@ -166,6 +167,10 @@ module Spree
|
|
166
167
|
def touch_product
|
167
168
|
product.touch unless is_master?
|
168
169
|
end
|
170
|
+
|
171
|
+
def recalculate_product_on_hand
|
172
|
+
product.update_column(:count_on_hand, product.on_hand)
|
173
|
+
end
|
169
174
|
end
|
170
175
|
end
|
171
176
|
|
data/app/models/spree/zone.rb
CHANGED
@@ -14,13 +14,8 @@ module Spree
|
|
14
14
|
attr_accessible :name, :description, :default_tax, :kind, :zone_members, :zone_members_attributes
|
15
15
|
|
16
16
|
def kind
|
17
|
-
|
18
|
-
|
19
|
-
case member && member.zoneable_type
|
20
|
-
when 'Spree::State' then 'state'
|
21
|
-
else
|
22
|
-
'country'
|
23
|
-
end
|
17
|
+
return nil if members.empty? || members.any? { |member| member.try(:zoneable_type).nil? }
|
18
|
+
members.last.zoneable_type.demodulize.downcase
|
24
19
|
end
|
25
20
|
|
26
21
|
def kind=(value)
|
@@ -46,7 +41,7 @@ module Spree
|
|
46
41
|
# Returns the matching zone with the highest priority zone type (State, Country, Zone.)
|
47
42
|
# Returns nil in the case of no matches.
|
48
43
|
def self.match(address)
|
49
|
-
return unless matches = self.order('created_at').select { |zone| zone.include? address }
|
44
|
+
return unless matches = self.includes(:zone_members).order('zone_members_count', 'created_at').select { |zone| zone.include? address }
|
50
45
|
|
51
46
|
['state', 'country'].each do |zone_kind|
|
52
47
|
if match = matches.detect { |zone| zone_kind == zone.kind }
|
@@ -58,7 +53,7 @@ module Spree
|
|
58
53
|
|
59
54
|
# convenience method for returning the countries contained within a zone
|
60
55
|
def country_list
|
61
|
-
members.map { |zone_member|
|
56
|
+
@countries ||= members.includes(:zoneable).map { |zone_member|
|
62
57
|
case zone_member.zoneable_type
|
63
58
|
when 'Spree::Country'
|
64
59
|
zone_member.zoneable
|
@@ -111,9 +106,8 @@ module Spree
|
|
111
106
|
|
112
107
|
def remove_previous_default
|
113
108
|
return unless default_tax
|
114
|
-
|
115
109
|
Zone.all.each do |zone|
|
116
|
-
zone.
|
110
|
+
zone.update_column 'default_tax', false unless zone == self
|
117
111
|
end
|
118
112
|
end
|
119
113
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Spree
|
2
2
|
class ZoneMember < ActiveRecord::Base
|
3
|
-
belongs_to :zone, :class_name => "Spree::Zone"
|
3
|
+
belongs_to :zone, :class_name => "Spree::Zone", :counter_cache => true
|
4
4
|
belongs_to :zoneable, :polymorphic => true
|
5
5
|
|
6
6
|
attr_accessible :zone, :zone_id, :zoneable, :zoneable_id, :zoneable_type
|
@@ -71,6 +71,13 @@
|
|
71
71
|
</label>
|
72
72
|
</p>
|
73
73
|
|
74
|
+
<p data-hook="s3_protocol">
|
75
|
+
<label>
|
76
|
+
<%= label_tag 'preferences[s3_protocol]', t(:s3_protocol) %>
|
77
|
+
<%= preference_field_tag 'preferences[s3_protocol]', Spree::Config[:s3_protocol], :type => :string %>
|
78
|
+
</label>
|
79
|
+
</p>
|
80
|
+
|
74
81
|
<h2><%= t(:s3_headers) %></h2>
|
75
82
|
<ul id="headers_list">
|
76
83
|
<% @headers.each do |header_name, header_value| %>
|
@@ -12,6 +12,7 @@
|
|
12
12
|
<th><%= t(:action) %></th>
|
13
13
|
</tr>
|
14
14
|
|
15
|
+
<tbody>
|
15
16
|
<% @product.images.each do |image| %>
|
16
17
|
<tr id="<%= spree_dom_id image %>" data-hook="images_row">
|
17
18
|
<td>
|
@@ -46,6 +47,7 @@
|
|
46
47
|
</tr>
|
47
48
|
<% end %>
|
48
49
|
<% end %>
|
50
|
+
</tbody>
|
49
51
|
</table>
|
50
52
|
|
51
53
|
<div id="images" data-hook></div>
|
@@ -19,6 +19,7 @@
|
|
19
19
|
<th><%= t(:presentation) %></th>
|
20
20
|
<th></th>
|
21
21
|
</tr>
|
22
|
+
<tbody>
|
22
23
|
<% @option_types.each do |option_type| %>
|
23
24
|
<tr class="spree_option_type" id="<%= spree_dom_id option_type %>" data-hook="option_row">
|
24
25
|
<td><span class="handle"></span> <%= option_type.name %></td>
|
@@ -30,4 +31,5 @@
|
|
30
31
|
</td>
|
31
32
|
</tr>
|
32
33
|
<% end %>
|
34
|
+
</tbody>
|
33
35
|
</table>
|
@@ -7,16 +7,19 @@
|
|
7
7
|
<%= javascript_include_tag 'admin/all' %>
|
8
8
|
|
9
9
|
<%= javascript_tag do %>
|
10
|
-
Spree
|
10
|
+
var Spree = {
|
11
|
+
routes: <%== {
|
11
12
|
:product_search => spree.admin_products_path(:format => 'json'),
|
12
13
|
:product_search_basic => spree.admin_products_path(:format => 'json', :json_format => 'basic', :limit => 10),
|
13
14
|
:user_search => spree.admin_users_path(:format => 'json', :limit => 10)
|
14
|
-
}.to_json
|
15
|
+
}.to_json %>,
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
strings: {
|
18
|
+
no_results: '<%== t(:no_results) %>',
|
19
|
+
type_to_search: '<%== t(:type_to_search) %>',
|
20
|
+
searching: '<%== t(:searching) %>'
|
21
|
+
}
|
22
|
+
}
|
20
23
|
<% end %>
|
21
24
|
|
22
25
|
<%= javascript_tag do -%>
|
@@ -13,6 +13,7 @@
|
|
13
13
|
<th><%= t(:on_hand) %></th>
|
14
14
|
<th><%= t(:action) %></th>
|
15
15
|
</tr>
|
16
|
+
<tbody>
|
16
17
|
<% @variants.each do |variant| %>
|
17
18
|
<!-- you can skip variant with no options: that's just the default variant that all products have -->
|
18
19
|
<% next if variant.option_values.empty? %>
|
@@ -34,6 +35,7 @@
|
|
34
35
|
<% unless @product.has_variants? %>
|
35
36
|
<tr><td colspan="9"><%= t(:none) %></td></tr>
|
36
37
|
<% end %>
|
38
|
+
</tbody>
|
37
39
|
</table>
|
38
40
|
|
39
41
|
<% if @product.empty_option_values? %>
|
@@ -42,9 +42,6 @@
|
|
42
42
|
<p class="field" id="bstate">
|
43
43
|
<% have_states = !@order.bill_address.country.states.empty? %>
|
44
44
|
<%= bill_form.label :state, t(:state) %><span class="required">*</span><br />
|
45
|
-
<noscript>
|
46
|
-
<%= bill_form.text_field :state_name, :class => 'required' %>
|
47
|
-
</noscript>
|
48
45
|
<% state_elements = [
|
49
46
|
bill_form.collection_select(:state_id, @order.bill_address.country.states,
|
50
47
|
:id, :name,
|
@@ -60,6 +57,9 @@
|
|
60
57
|
document.write("<%== state_elements %>");
|
61
58
|
<% end -%>
|
62
59
|
</p>
|
60
|
+
<noscript>
|
61
|
+
<%= bill_form.text_field :state_name, :class => 'required' %>
|
62
|
+
</noscript>
|
63
63
|
<% end %>
|
64
64
|
|
65
65
|
<p class="field" id="bzipcode">
|
@@ -129,9 +129,6 @@
|
|
129
129
|
<p class="field" id="sstate">
|
130
130
|
<% have_states = !@order.ship_address.country.states.empty? %>
|
131
131
|
<%= ship_form.label :state, t(:state) %><span class="required">*</span><br />
|
132
|
-
<noscript>
|
133
|
-
<%= ship_form.text_field :state_name, :class => 'required' %>
|
134
|
-
</noscript>
|
135
132
|
<% state_elements = [
|
136
133
|
ship_form.collection_select(:state_id, @order.ship_address.country.states,
|
137
134
|
:id, :name,
|
@@ -147,6 +144,9 @@
|
|
147
144
|
document.write("<%== state_elements %>");
|
148
145
|
<% end %>
|
149
146
|
</p>
|
147
|
+
<noscript>
|
148
|
+
<%= ship_form.text_field :state_name, :class => 'required' %>
|
149
|
+
</noscript>
|
150
150
|
<% end %>
|
151
151
|
|
152
152
|
<p class="field" id="szipcode">
|
@@ -6,20 +6,20 @@
|
|
6
6
|
<!--[if IE 9 ]> <html class="ie ie9" lang="en"> <![endif]-->
|
7
7
|
<!--[if gt IE 9]><!--><html lang="en"><!--<![endif]-->
|
8
8
|
|
9
|
-
|
9
|
+
|
10
10
|
<head data-hook="inside_head">
|
11
11
|
<%= render :partial => 'spree/shared/head' %>
|
12
12
|
</head>
|
13
13
|
|
14
14
|
<body class="<%= body_class %>" id="<%= @body_id || 'default' %>" data-hook="body">
|
15
|
-
|
15
|
+
|
16
16
|
<div class="container">
|
17
17
|
|
18
18
|
<header id="header" class="row" data-hook>
|
19
|
-
|
19
|
+
|
20
20
|
<figure id="logo" class="columns alpha six" data-hook>
|
21
21
|
<%= logo %>
|
22
|
-
</figure>
|
22
|
+
</figure>
|
23
23
|
|
24
24
|
<nav id="top-nav-bar" class="columns omega ten">
|
25
25
|
<ul id="nav-bar" class="inline" data-hook>
|
@@ -29,16 +29,16 @@
|
|
29
29
|
|
30
30
|
<% if store_menu? %>
|
31
31
|
<nav class="columns alpha omega sixteen">
|
32
|
-
<ul id="main-nav-bar" class="inline" data-hook>
|
32
|
+
<ul id="main-nav-bar" class="inline" data-hook>
|
33
33
|
<%= render :partial => 'spree/shared/store_menu' %>
|
34
34
|
</ul>
|
35
35
|
</nav>
|
36
36
|
<% end %>
|
37
|
-
|
37
|
+
|
38
38
|
</header>
|
39
39
|
|
40
40
|
<div id="wrapper" class="row" data-hook>
|
41
|
-
|
41
|
+
|
42
42
|
<% if content_for?(:sidebar) %>
|
43
43
|
<aside id="sidebar" class="columns alpha four" data-hook>
|
44
44
|
<%= yield :sidebar %>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<%= variant.in_stock? ? t(:insufficient_stock, :on_hand => variant.on_hand) : t(:out_of_stock) %><br />
|
15
15
|
</span>
|
16
16
|
<% end %>
|
17
|
-
<%=
|
17
|
+
<%= line_item_description(variant) %>
|
18
18
|
</td>
|
19
19
|
<td class="cart-item-price" data-hook="cart_item_price">
|
20
20
|
<%= number_to_currency line_item.price %>
|
@@ -1,38 +1,38 @@
|
|
1
1
|
<% if tracker = Spree::Tracker.current %>
|
2
2
|
|
3
|
-
<%= javascript_tag do
|
3
|
+
<%= javascript_tag do %>
|
4
4
|
var _gaq = _gaq || [];
|
5
|
-
_gaq.push(['_setAccount', '<%= tracker.analytics_id
|
5
|
+
_gaq.push(['_setAccount', '<%= tracker.analytics_id %>']);
|
6
6
|
_gaq.push(['_trackPageview']);
|
7
7
|
|
8
|
+
<% if flash[:commerce_tracking] %>
|
9
|
+
<%# report e-commerce transaction information when applicable %>
|
10
|
+
_gaq.push(['_addTrans',
|
11
|
+
"<%= @order.number %>", <%# Order Number %>
|
12
|
+
"", <%# Affiliation %>
|
13
|
+
"<%= @order.total %>", <%# Order total %>
|
14
|
+
"<%= @order.adjustments.tax.sum(:amount) %>", <%# Tax Amount %>
|
15
|
+
"<%= @order.adjustments.shipping.sum(:amount) %>",<%# Ship Amount %>
|
16
|
+
"", <%# City %>
|
17
|
+
"", <%# State %>
|
18
|
+
"" <%# Country %>
|
19
|
+
]);
|
20
|
+
<% @order.line_items.each do |line_item| %>
|
21
|
+
_gaq.push(['_addItem',
|
22
|
+
"<%= @order.number %>", <%# order ID - required %>
|
23
|
+
"<%= line_item.variant.sku %>", <%# SKU/code - required %>
|
24
|
+
"<%= line_item.variant.product.name %>",<%# product name %>
|
25
|
+
"", <%# category or variation, Product Category %>
|
26
|
+
"<%= line_item.price %>", <%# unit price - required %>
|
27
|
+
"<%= line_item.quantity %>" <%# quantity - required %>
|
28
|
+
]);
|
29
|
+
<% end %>
|
30
|
+
<% end %>
|
31
|
+
|
8
32
|
(function() {
|
9
33
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
10
34
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
11
35
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
12
36
|
})();
|
13
|
-
<% end -%>
|
14
|
-
|
15
|
-
<% if flash[:commerce_tracking] %>
|
16
|
-
|
17
|
-
<%= javascript_tag do -%>
|
18
|
-
// report e-commerce transaction information when applicable
|
19
|
-
pageTracker._addTrans(
|
20
|
-
"<%= @order.number %>", //Order Number
|
21
|
-
"", //Affiliation
|
22
|
-
"<%= @order.total %>", //Order total
|
23
|
-
"<%= @order.adjustments.tax.sum(:amount).to_s %>", //Tax Amount
|
24
|
-
"<%= @order.adjustments.shipping.sum(:amount).to_s %>", //Ship Amount
|
25
|
-
"", //City
|
26
|
-
"", //State
|
27
|
-
"" //Country
|
28
|
-
);
|
29
|
-
<% @order.line_items.each do |line_item| %>
|
30
|
-
pageTracker._addItem("<%= @order.number %>", "<%= line_item.variant.sku %>", "<%= line_item.variant.product.name %>",
|
31
|
-
"" /*Product Category*/, "<%= line_item.price %>", "<%= line_item.quantity %>");
|
32
|
-
<% end %>
|
33
|
-
pageTracker._trackTrans();
|
34
|
-
<% end -%>
|
35
|
-
|
36
37
|
<% end %>
|
37
|
-
|
38
|
-
<% end %>
|
38
|
+
<% end %>
|
@@ -7,11 +7,11 @@
|
|
7
7
|
</div>
|
8
8
|
<% end %>
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
<%
|
10
|
+
<div data-hook="taxon_products">
|
11
|
+
<%= render :partial => 'spree/shared/products', :locals => { :products => @products, :taxon => @taxon } %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<% unless params[:keyword].present? %>
|
15
15
|
<div data-hook="taxon_children">
|
16
16
|
<%= render :partial => 'taxon', :collection => @taxon.children %>
|
17
17
|
</div>
|
data/config/locales/en.yml
CHANGED
@@ -858,6 +858,7 @@ en:
|
|
858
858
|
s3_bucket: "Bucket"
|
859
859
|
s3_headers: "S3 Headers"
|
860
860
|
s3_secret: "Secret Key"
|
861
|
+
s3_protocol: "S3 Protocol"
|
861
862
|
s3_used_for_product_images: "S3 is being used for product images"
|
862
863
|
s3_not_used_for_product_images: "S3 is not being used for product images"
|
863
864
|
sales_tax: "Sales Tax"
|
data/config/routes.rb
CHANGED
@@ -40,13 +40,8 @@ Spree::Core::Engine.routes.draw do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
#
|
43
|
+
# route globbing for pretty nested taxon and product paths
|
44
44
|
match '/t/*id', :to => 'taxons#show', :as => :nested_taxons
|
45
|
-
#
|
46
|
-
# #moved old taxons route to after nested_taxons so nested_taxons will be default route
|
47
|
-
# #this route maybe removed in the near future (no longer used by core)
|
48
|
-
# map.resources :taxons
|
49
|
-
#
|
50
45
|
|
51
46
|
namespace :admin do
|
52
47
|
resources :adjustments
|
@@ -195,6 +190,6 @@ Spree::Core::Engine.routes.draw do
|
|
195
190
|
|
196
191
|
match '/admin', :to => 'admin/orders#index', :as => :admin
|
197
192
|
|
198
|
-
match '/content/cvv', :to => 'content#cvv'
|
193
|
+
match '/content/cvv', :to => 'content#cvv', :as => :cvv
|
199
194
|
match '/content/*path', :to => 'content#show', :via => :get, :as => :content
|
200
195
|
end
|
@@ -16,7 +16,7 @@ class AddCountOnHandToVariantsAndProducts < ActiveRecord::Migration
|
|
16
16
|
|
17
17
|
say_with_time 'Transfering inventory units with status on_hand to variants table...' do
|
18
18
|
Spree::Variant.all.each do |v|
|
19
|
-
v.
|
19
|
+
v.update_column(:count_on_hand, v.inventory_units.with_state('on_hand').size)
|
20
20
|
Spree::InventoryUnit.destroy_all(:variant_id => v.id, :state => 'on_hand')
|
21
21
|
end
|
22
22
|
end
|
@@ -26,7 +26,7 @@ class AddCountOnHandToVariantsAndProducts < ActiveRecord::Migration
|
|
26
26
|
product_count_on_hand = p.has_variants? ?
|
27
27
|
p.variants.inject(0) { |acc, v| acc + v.count_on_hand } :
|
28
28
|
(p.master ? p.master.count_on_hand : 0)
|
29
|
-
p.
|
29
|
+
p.update_column(:count_on_hand, product_count_on_hand)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -15,7 +15,7 @@ class AddOpenidFieldToUsers < ActiveRecord::Migration
|
|
15
15
|
Spree::User.table_name = 'users'
|
16
16
|
|
17
17
|
[:login, :crypted_password, :salt].each do |field|
|
18
|
-
Spree::User.where(field => nil).each { |user| user.
|
18
|
+
Spree::User.where(field => nil).each { |user| user.update_column(field, '') if user.send(field).nil? }
|
19
19
|
change_column :users, field, :string, :default => '', :null => false
|
20
20
|
end
|
21
21
|
|
@@ -12,7 +12,7 @@ class ChargeRefactoring < ActiveRecord::Migration
|
|
12
12
|
|
13
13
|
add_column :orders, :completed_at, :timestamp
|
14
14
|
Order.reset_column_information
|
15
|
-
Order.all.each { |o| o.
|
15
|
+
Order.all.each { |o| o.update_column(:completed_at, o.checkout && o.checkout.read_attribute(:completed_at)) }
|
16
16
|
remove_column :checkouts, :completed_at
|
17
17
|
|
18
18
|
change_column :adjustments, :amount, :decimal, :null => true, :default => nil, :precision => 8, :scale => 2
|
@@ -27,7 +27,7 @@ class ChargeRefactoring < ActiveRecord::Migration
|
|
27
27
|
def down
|
28
28
|
add_column :checkouts, :completed_at, :timestamp
|
29
29
|
Spree::Checkout.reset_column_information
|
30
|
-
Spree::Checkout.all.each { |c| c.
|
30
|
+
Spree::Checkout.all.each { |c| c.update_column(:completed_at, c.order && c.order.completed_at) }
|
31
31
|
remove_column :orders, :completed_at
|
32
32
|
|
33
33
|
add_column :adjustments, :secondary_type, :string
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class AddCounterCacheToZoneMembers < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :spree_zones, :zone_members_count, :integer, :default => 0
|
4
|
+
|
5
|
+
Spree::Zone.reset_column_information
|
6
|
+
Spree::Zone.find(:all).each do |zone|
|
7
|
+
Spree::Zone.update_counters zone.id, :zone_members_count => zone.zone_members.length
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def down
|
12
|
+
remove_column :spree_zones, :zone_members_count
|
13
|
+
end
|
14
|
+
end
|
@@ -5,7 +5,6 @@ module Spree
|
|
5
5
|
receiver.send :layout, :get_layout
|
6
6
|
receiver.send :before_filter, 'instantiate_controller_and_action_names'
|
7
7
|
receiver.send :before_filter, 'set_user_language'
|
8
|
-
|
9
8
|
receiver.send :helper_method, 'title'
|
10
9
|
receiver.send :helper_method, 'title='
|
11
10
|
receiver.send :helper_method, 'accurate_title'
|
@@ -78,10 +77,6 @@ module Spree
|
|
78
77
|
@current_controller = controller_name
|
79
78
|
end
|
80
79
|
|
81
|
-
def get_taxonomies
|
82
|
-
@taxonomies ||= Taxonomy.includes(:root => :children).joins(:root)
|
83
|
-
end
|
84
|
-
|
85
80
|
def associate_user
|
86
81
|
return unless current_user and current_order
|
87
82
|
current_order.associate_user!(current_user)
|
@@ -47,8 +47,8 @@ module Spree
|
|
47
47
|
permalink_value = self.to_param
|
48
48
|
field = self.class.permalink_field
|
49
49
|
# Do other links exist with this permalink?
|
50
|
-
other = self.class.
|
51
|
-
|
50
|
+
other = self.class.where("#{field} LIKE ?", "#{permalink_value}%")
|
51
|
+
if other.any?
|
52
52
|
# Find the existing permalink with the highest number, and increment that number.
|
53
53
|
# (If none of the existing permalinks have a number, this will evaluate to 1.)
|
54
54
|
number = other.map { |o| o.send(field)[/-(\d+)$/, 1].to_i }.max + 1
|
@@ -1,8 +1,6 @@
|
|
1
1
|
FactoryGirl.define do
|
2
|
-
sequence(:product_sequence) { |n| "Product ##{n} - #{rand(9999)}" }
|
3
|
-
|
4
2
|
factory :simple_product, :class => Spree::Product do
|
5
|
-
name {
|
3
|
+
sequence(:name) { |n| "Product ##{n} - #{rand(9999)}" }
|
6
4
|
description { Faker::Lorem.paragraphs(1 + Kernel.rand(5)).join("\n") }
|
7
5
|
price 19.99
|
8
6
|
cost_price 17.00
|
data/lib/spree/core/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-27 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: acts_as_list
|
16
|
-
requirement: &
|
16
|
+
requirement: &70251996737660 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.1.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70251996737660
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: nested_set
|
27
|
-
requirement: &
|
27
|
+
requirement: &70251996735520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.7.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70251996735520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jquery-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &70251996380040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.0.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70251996380040
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: highline
|
49
|
-
requirement: &
|
49
|
+
requirement: &70251996377420 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - =
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.11
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70251996377420
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: state_machine
|
60
|
-
requirement: &
|
60
|
+
requirement: &70251996375460 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - =
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.1.2
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70251996375460
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: ffaker
|
71
|
-
requirement: &
|
71
|
+
requirement: &70251996373560 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.12.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70251996373560
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: paperclip
|
82
|
-
requirement: &
|
82
|
+
requirement: &70251996372140 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '2.7'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70251996372140
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: aws-sdk
|
93
|
-
requirement: &
|
93
|
+
requirement: &70251996370680 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 1.3.4
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70251996370680
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ransack
|
104
|
-
requirement: &
|
104
|
+
requirement: &70251996369560 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 0.6.0
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70251996369560
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: activemerchant
|
115
|
-
requirement: &
|
115
|
+
requirement: &70251996368240 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - =
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: 1.20.4
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70251996368240
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: rails
|
126
|
-
requirement: &
|
126
|
+
requirement: &70251996367220 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: 3.2.6
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70251996367220
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: kaminari
|
137
|
-
requirement: &
|
137
|
+
requirement: &70251996365100 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: 0.13.0
|
143
143
|
type: :runtime
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70251996365100
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: deface
|
148
|
-
requirement: &
|
148
|
+
requirement: &70251996351260 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: 0.9.0
|
154
154
|
type: :runtime
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *70251996351260
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: stringex
|
159
|
-
requirement: &
|
159
|
+
requirement: &70251996338660 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ~>
|
@@ -164,7 +164,7 @@ dependencies:
|
|
164
164
|
version: 1.3.2
|
165
165
|
type: :runtime
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *70251996338660
|
168
168
|
description: Required dependency for Spree
|
169
169
|
email: sean@spreecommerce.com
|
170
170
|
executables: []
|
@@ -872,6 +872,7 @@ files:
|
|
872
872
|
- db/migrate/20120523061241_convert_sales_tax_to_default_tax.rb
|
873
873
|
- db/migrate/20120604030249_add_deleted_at_to_spree_shipping_methods.rb
|
874
874
|
- db/migrate/20120605211305_make_users_email_index_unique.rb
|
875
|
+
- db/migrate/20120712172620_add_counter_cache_to_zone_members.rb
|
875
876
|
- db/sample/users.rb
|
876
877
|
- db/seeds.rb
|
877
878
|
- vendor/assets/images/datepicker/cal.gif
|
@@ -972,7 +973,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
972
973
|
version: '0'
|
973
974
|
segments:
|
974
975
|
- 0
|
975
|
-
hash:
|
976
|
+
hash: 173937272433649960
|
976
977
|
requirements:
|
977
978
|
- none
|
978
979
|
rubyforge_project: spree_core
|