spree_core 1.1.2 → 1.1.3
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.
- 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
|