spree_core 1.0.7 → 1.1.0.rc1
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 +9 -18
- data/app/assets/javascripts/admin/calculator.js +7 -6
- data/app/assets/javascripts/admin/checkouts/edit.js +2 -2
- data/app/assets/javascripts/admin/image_settings.js +49 -0
- data/app/assets/javascripts/admin/orders/edit_form.js +14 -14
- data/app/assets/stylesheets/admin/admin.css.erb +36 -54
- data/app/assets/stylesheets/store/screen.css.scss +25 -12
- data/app/controllers/spree/admin/base_controller.rb +3 -3
- data/app/controllers/spree/admin/image_settings_controller.rb +71 -0
- data/app/controllers/spree/admin/images_controller.rb +22 -21
- data/app/controllers/spree/admin/mail_methods_controller.rb +1 -1
- data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -2
- data/app/controllers/spree/admin/orders_controller.rb +13 -13
- data/app/controllers/spree/admin/payment_methods_controller.rb +1 -1
- data/app/controllers/spree/admin/payments_controller.rb +1 -1
- data/app/controllers/spree/admin/product_properties_controller.rb +3 -4
- data/app/controllers/spree/admin/products_controller.rb +49 -47
- data/app/controllers/spree/admin/properties_controller.rb +1 -1
- data/app/controllers/spree/admin/prototypes_controller.rb +12 -6
- data/app/controllers/spree/admin/reports_controller.rb +15 -16
- data/app/controllers/spree/admin/resource_controller.rb +1 -1
- data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
- data/app/controllers/spree/admin/shipments_controller.rb +0 -3
- data/app/controllers/spree/admin/states_controller.rb +9 -9
- data/app/controllers/spree/admin/users_controller.rb +18 -42
- data/app/controllers/spree/admin/variants_controller.rb +22 -21
- data/app/controllers/spree/admin/zones_controller.rb +11 -11
- data/app/controllers/spree/content_controller.rb +1 -1
- data/app/controllers/spree/locale_controller.rb +2 -2
- data/app/controllers/spree/orders_controller.rb +4 -6
- data/app/controllers/spree/products_controller.rb +1 -1
- data/app/controllers/spree/states_controller.rb +4 -7
- data/app/helpers/spree/admin/base_helper.rb +4 -0
- data/app/helpers/spree/admin/navigation_helper.rb +4 -16
- data/app/helpers/spree/base_helper.rb +22 -3
- data/app/models/spree/activator.rb +4 -1
- data/app/models/spree/address.rb +45 -45
- data/app/models/spree/adjustment.rb +4 -4
- data/app/models/spree/app_configuration.rb +12 -0
- data/app/models/spree/calculator/default_tax.rb +1 -3
- data/app/models/spree/calculator/flat_percent_item_total.rb +0 -2
- data/app/models/spree/calculator/flat_rate.rb +0 -3
- data/app/models/spree/calculator/flexi_rate.rb +1 -3
- data/app/models/spree/calculator/per_item.rb +1 -6
- data/app/models/spree/calculator/price_sack.rb +0 -2
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/creditcard.rb +9 -10
- data/app/models/spree/gateway.rb +0 -2
- data/app/models/spree/image.rb +18 -2
- data/app/models/spree/inventory_unit.rb +4 -2
- data/app/models/spree/mail_method.rb +1 -6
- data/app/models/spree/option_type.rb +3 -1
- data/app/models/spree/order.rb +68 -62
- data/app/models/spree/payment.rb +1 -1
- data/app/models/spree/payment_method.rb +0 -6
- data/app/models/spree/product/scopes.rb +44 -44
- data/app/models/spree/product.rb +44 -26
- data/app/models/spree/product_property.rb +0 -2
- data/app/models/spree/property.rb +0 -16
- data/app/models/spree/prototype.rb +0 -1
- data/app/models/spree/return_authorization.rb +0 -2
- data/app/models/spree/shipment.rb +2 -3
- data/app/models/spree/shipping_category.rb +0 -2
- data/app/models/spree/shipping_method.rb +1 -2
- data/app/models/spree/shipping_rate.rb +9 -0
- data/app/models/spree/state.rb +10 -2
- data/app/models/spree/{state_event.rb → state_change.rb} +1 -4
- data/app/models/spree/tax_rate.rb +3 -3
- data/app/models/spree/taxon.rb +1 -6
- data/app/models/spree/taxonomy.rb +3 -6
- data/app/models/spree/user.rb +1 -0
- data/app/models/spree/variant.rb +3 -4
- data/app/models/spree/zone.rb +0 -10
- data/app/views/spree/admin/adjustments/_adjustments_table.html.erb +1 -1
- data/app/views/spree/admin/configurations/index.html.erb +4 -0
- data/app/views/spree/admin/image_settings/edit.html.erb +91 -0
- data/app/views/spree/admin/image_settings/show.html.erb +11 -0
- data/app/views/spree/admin/images/index.html.erb +3 -3
- data/app/views/spree/admin/mail_methods/_form.html.erb +1 -1
- data/app/views/spree/admin/mail_methods/index.html.erb +1 -1
- data/app/views/spree/admin/option_types/_option_value_fields.html.erb +1 -1
- data/app/views/spree/admin/option_types/index.html.erb +1 -1
- data/app/views/spree/admin/option_types/new.js.erb +1 -1
- data/app/views/spree/admin/orders/_form.html.erb +3 -5
- data/app/views/spree/admin/orders/_line_item.html.erb +1 -1
- data/app/views/spree/admin/orders/customer_details/_form.html.erb +1 -1
- data/app/views/spree/admin/orders/history.html.erb +2 -2
- data/app/views/spree/admin/orders/index.html.erb +19 -19
- data/app/views/spree/admin/payment_methods/_form.html.erb +1 -1
- data/app/views/spree/admin/payment_methods/index.html.erb +1 -3
- data/app/views/spree/admin/payments/_list.html.erb +1 -1
- data/app/views/spree/admin/product_properties/index.html.erb +1 -1
- data/app/views/spree/admin/products/_form.html.erb +30 -27
- data/app/views/spree/admin/products/index.html.erb +9 -9
- data/app/views/spree/admin/products/new.html.erb +28 -4
- data/app/views/spree/admin/products/new.js.erb +1 -1
- data/app/views/spree/admin/properties/index.html.erb +1 -1
- data/app/views/spree/admin/properties/new.js.erb +1 -1
- data/app/views/spree/admin/prototypes/index.html.erb +1 -1
- data/app/views/spree/admin/prototypes/new.js.erb +1 -1
- data/app/views/spree/admin/prototypes/show.html.erb +42 -0
- data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
- data/app/views/spree/admin/shared/_address_form.html.erb +1 -1
- data/app/views/spree/admin/shared/_calculator_fields.html.erb +2 -2
- data/app/views/spree/admin/shared/_head.html.erb +3 -3
- data/app/views/spree/admin/shared/_order_details.html.erb +1 -1
- data/app/views/spree/admin/shared/_order_tabs.html.erb +6 -6
- data/app/views/spree/admin/shared/_product_sub_menu.html.erb +0 -1
- data/app/views/spree/admin/shared/_report_criteria.html.erb +3 -3
- data/app/views/spree/admin/shared/_tabs.html.erb +1 -1
- data/app/views/spree/admin/shared/_update_order_state.js +5 -4
- data/app/views/spree/admin/shipments/index.html.erb +1 -1
- data/app/views/spree/admin/shipping_categories/index.html.erb +1 -1
- data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
- data/app/views/spree/admin/states/_state_list.html.erb +1 -1
- data/app/views/spree/admin/states/new.js.erb +1 -1
- data/app/views/spree/admin/tax_categories/index.html.erb +2 -2
- data/app/views/spree/admin/tax_rates/index.html.erb +2 -2
- data/app/views/spree/admin/taxonomies/_list.html.erb +1 -1
- data/app/views/spree/admin/trackers/_form.html.erb +1 -1
- data/app/views/spree/admin/trackers/index.html.erb +1 -1
- data/app/views/spree/admin/users/_form.html.erb +1 -16
- data/app/views/spree/admin/users/index.html.erb +3 -4
- data/app/views/spree/admin/variants/index.html.erb +2 -2
- data/app/views/spree/admin/variants/new.js.erb +1 -1
- data/app/views/spree/admin/zones/index.html.erb +1 -1
- data/app/views/spree/checkout/_address.html.erb +1 -1
- data/app/views/spree/checkout/edit.html.erb +1 -1
- data/app/views/spree/checkout/registration.html.erb +2 -2
- data/app/views/spree/order_mailer/confirm_email.text.erb +3 -3
- data/app/views/spree/orders/show.html.erb +2 -2
- data/app/views/spree/products/_cart_form.html.erb +1 -2
- data/app/views/spree/products/_image.html.erb +1 -1
- data/app/views/spree/products/show.html.erb +3 -3
- data/app/views/spree/shared/_filters.html.erb +26 -24
- data/app/views/spree/shared/_google_analytics.html.erb +26 -26
- data/app/views/spree/shared/_products.html.erb +2 -2
- data/app/views/spree/shared/_search.html.erb +1 -1
- data/app/views/spree/shared/_store_menu.html.erb +1 -1
- data/app/views/spree/states/index.js.erb +1 -1
- data/config/initializers/rails_3_1.rb +3 -3
- data/config/locales/en.yml +40 -35
- data/config/routes.rb +5 -13
- data/db/migrate/20101026184714_migrate_transactions_to_payment_state.rb +4 -4
- data/db/migrate/20111007143030_namespace_top_level_models.rb +0 -3
- data/db/migrate/20120203001428_rename_state_events_to_state_changes.rb +9 -0
- data/db/migrate/20120315064358_migrate_images_from_products_to_variants.rb +35 -0
- data/lib/generators/spree/dummy/templates/rails/database.yml +48 -20
- data/lib/generators/spree/install/install_generator.rb +17 -1
- data/lib/generators/spree/install/templates/app/assets/javascripts/admin/all.js +0 -1
- data/lib/generators/spree/install/templates/app/assets/javascripts/store/all.js +0 -1
- data/lib/generators/spree/install/templates/app/assets/stylesheets/admin/all.css +0 -1
- data/lib/generators/spree/install/templates/app/assets/stylesheets/store/all.css +0 -1
- data/lib/generators/spree/sandbox/sandbox_generator.rb +9 -2
- data/lib/spree/core/calculated_adjustments.rb +29 -34
- data/lib/spree/core/controller_helpers.rb +36 -34
- data/lib/spree/core/custom_fixtures.rb +1 -1
- data/lib/spree/core/delegate_belongs_to.rb +22 -24
- data/lib/spree/core/engine.rb +3 -3
- data/lib/spree/core/environment_extension.rb +12 -15
- data/lib/spree/core/mail_settings.rb +1 -1
- data/lib/spree/core/permalinks.rb +24 -16
- data/lib/spree/core/preference_rescue.rb +1 -1
- data/lib/spree/core/respond_with.rb +13 -8
- data/lib/spree/core/responder.rb +1 -2
- data/lib/spree/core/search/base.rb +36 -19
- data/lib/spree/core/ssl_requirement.rb +18 -10
- data/lib/spree/core/testing_support/common_rake.rb +1 -1
- data/lib/spree/core/testing_support/factories/product_factory.rb +9 -9
- data/lib/spree/core/testing_support/factories/role_factory.rb +1 -1
- data/lib/spree/core/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/core/testing_support/factories/shipping_method_factory.rb +3 -3
- data/lib/spree/core/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/core/testing_support/factories/zone_factory.rb +4 -2
- data/lib/spree/core/validators/email.rb +23 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +2 -2
- data/lib/spree/product_filters.rb +10 -19
- data/lib/tasks/core.rake +1 -1
- data/vendor/assets/javascripts/jquery.alerts/jquery.alerts.css.erb +5 -5
- data/vendor/assets/stylesheets/jquery-ui.datepicker.css.erb +1 -1
- metadata +68 -140
- data/app/assets/images/noimage/large.png +0 -0
- data/app/controllers/spree/admin/product_groups_controller.rb +0 -49
- data/app/controllers/spree/admin/product_scopes_controller.rb +0 -39
- data/app/helpers/spree/admin/product_groups_helper.rb +0 -14
- data/app/helpers/spree/admin/product_properties_helper.rb +0 -24
- data/app/models/spree/product_group.rb +0 -200
- data/app/models/spree/product_scope.rb +0 -79
- data/app/views/spree/admin/banners/_gateway.html.erb +0 -14
- data/app/views/spree/admin/product_groups/_preview.html.erb +0 -33
- data/app/views/spree/admin/product_groups/_product_scope.html.erb +0 -24
- data/app/views/spree/admin/product_groups/edit.html.erb +0 -59
- data/app/views/spree/admin/product_groups/index.html.erb +0 -37
- data/app/views/spree/admin/product_groups/new.html.erb +0 -12
- data/app/views/spree/admin/product_groups/show.html.erb +0 -32
- data/app/views/spree/admin/product_scopes/create.js.erb +0 -6
- data/app/views/spree/admin/product_scopes/destroy.js.erb +0 -3
- data/app/views/spree/admin/product_scopes/new.html.erb +0 -1
- data/app/views/spree/admin/shared/_group_from_products_form.html.erb +0 -12
- data/db/migrate/20091012120519_product_groups_and_scopes.rb +0 -18
- data/db/migrate/20100126103714_create_products_product_groups.rb +0 -8
- data/db/migrate/20100306153445_fix_by_popularity.rb +0 -9
- data/db/migrate/20120523061241_convert_sales_tax_to_default_tax.rb +0 -9
- data/lib/spree/core/testing_support/factories/product_group_factory.rb +0 -5
- data/lib/spree/core/testing_support/factories/product_scope_factory.rb +0 -7
- data/lib/spree/core/theme_support/hook_listener.rb +0 -145
- data/lib/spree/core/theme_support.rb +0 -1
- data/vendor/assets/javascripts/jquery.alerts/jquery.alerts.css +0 -57
|
@@ -10,25 +10,41 @@ module Spree
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def retrieve_products
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
curr_page = manage_pagination && keywords ? 1 : page
|
|
13
|
+
@products_scope = get_base_scope
|
|
14
|
+
curr_page = keywords ? 1 : page
|
|
16
15
|
|
|
17
|
-
@products = @products_scope.includes([:
|
|
16
|
+
@products = @products_scope.includes([:master]).page(curr_page).per(per_page)
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
def method_missing(name)
|
|
21
|
-
@properties
|
|
20
|
+
if @properties.has_key? name
|
|
21
|
+
@properties[name]
|
|
22
|
+
else
|
|
23
|
+
super
|
|
24
|
+
end
|
|
22
25
|
end
|
|
23
26
|
|
|
24
27
|
protected
|
|
25
28
|
def get_base_scope
|
|
26
|
-
base_scope =
|
|
29
|
+
base_scope = Spree::Product.active
|
|
27
30
|
base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
|
|
28
31
|
base_scope = get_products_conditions_for(base_scope, keywords) unless keywords.blank?
|
|
29
|
-
|
|
30
32
|
base_scope = base_scope.on_hand unless Spree::Config[:show_zero_stock_products]
|
|
31
|
-
base_scope = base_scope
|
|
33
|
+
base_scope = add_search_scopes(base_scope)
|
|
34
|
+
base_scope
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def add_search_scopes(base_scope)
|
|
38
|
+
search.each do |name, scope_attribute|
|
|
39
|
+
next if name.to_s =~ /eval|send|system/
|
|
40
|
+
|
|
41
|
+
scope_name = name.intern
|
|
42
|
+
if base_scope.respond_to? scope_name
|
|
43
|
+
base_scope = base_scope.send(scope_name, *scope_attribute)
|
|
44
|
+
else
|
|
45
|
+
base_scope = base_scope.merge(Spree::Product.search({scope_name => scope_attribute}).result)
|
|
46
|
+
end
|
|
47
|
+
end if search
|
|
32
48
|
base_scope
|
|
33
49
|
end
|
|
34
50
|
|
|
@@ -40,22 +56,23 @@ module Spree
|
|
|
40
56
|
def prepare(params)
|
|
41
57
|
@properties[:taxon] = params[:taxon].blank? ? nil : Spree::Taxon.find(params[:taxon])
|
|
42
58
|
@properties[:keywords] = params[:keywords]
|
|
59
|
+
@properties[:search] = params[:search]
|
|
43
60
|
|
|
44
61
|
per_page = params[:per_page].to_i
|
|
45
62
|
@properties[:per_page] = per_page > 0 ? per_page : Spree::Config[:products_per_page]
|
|
46
63
|
@properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
|
|
47
64
|
|
|
48
|
-
if !params[:order_by_price].blank?
|
|
49
|
-
|
|
50
|
-
elsif params[:product_group_name]
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
elsif params[:product_group_query]
|
|
54
|
-
|
|
55
|
-
else
|
|
56
|
-
|
|
57
|
-
end
|
|
58
|
-
@product_group = @product_group.from_search(params[:search]) if params[:search]
|
|
65
|
+
# if !params[:order_by_price].blank?
|
|
66
|
+
# @product_group = Spree::ProductGroup.new.from_route([params[:order_by_price] + '_by_master_price'])
|
|
67
|
+
# elsif params[:product_group_name]
|
|
68
|
+
# @cached_product_group = Spree::ProductGroup.find_by_permalink(params[:product_group_name])
|
|
69
|
+
# @product_group = Spree::ProductGroup.new
|
|
70
|
+
# elsif params[:product_group_query]
|
|
71
|
+
# @product_group = Spree::ProductGroup.new.from_route(params[:product_group_query].split('/'))
|
|
72
|
+
# else
|
|
73
|
+
# @product_group = Spree::ProductGroup.new
|
|
74
|
+
# end
|
|
75
|
+
# @product_group = @product_group.from_search(params[:search]) if params[:search]
|
|
59
76
|
end
|
|
60
77
|
end
|
|
61
78
|
end
|
|
@@ -61,26 +61,34 @@ module SslRequirement
|
|
|
61
61
|
module ClassMethods
|
|
62
62
|
# Specifies that the named actions requires an SSL connection to be performed (which is enforced by ensure_proper_protocol).
|
|
63
63
|
def ssl_required(*actions)
|
|
64
|
-
|
|
64
|
+
class_attribute(:ssl_required_actions)
|
|
65
|
+
self.ssl_required_actions = actions
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
def ssl_allowed(*actions)
|
|
68
|
-
|
|
69
|
+
class_attribute(:ssl_allowed_actions)
|
|
70
|
+
self.ssl_allowed_actions = actions
|
|
69
71
|
end
|
|
70
72
|
end
|
|
71
73
|
|
|
72
74
|
protected
|
|
73
75
|
# Returns true if the current action is supposed to run as SSL
|
|
74
76
|
def ssl_required?
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
if self.class.respond_to?(:ssl_required_actions)
|
|
78
|
+
actions = self.class.ssl_required_actions
|
|
79
|
+
actions.empty? || actions.include?(action_name.to_sym)
|
|
80
|
+
else
|
|
81
|
+
return false
|
|
82
|
+
end
|
|
78
83
|
end
|
|
79
84
|
|
|
80
85
|
def ssl_allowed?
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
if self.class.respond_to?(:ssl_allowed_actions)
|
|
87
|
+
actions = self.class.ssl_allowed_actions
|
|
88
|
+
actions.empty? || actions.include?(action_name.to_sym)
|
|
89
|
+
else
|
|
90
|
+
return false
|
|
91
|
+
end
|
|
84
92
|
end
|
|
85
93
|
|
|
86
94
|
private
|
|
@@ -94,10 +102,10 @@ module SslRequirement
|
|
|
94
102
|
def ensure_proper_protocol
|
|
95
103
|
return true if ssl_allowed?
|
|
96
104
|
if ssl_required? && !request.ssl? && ssl_supported?
|
|
97
|
-
redirect_to "https://" + request.host + request.fullpath
|
|
105
|
+
redirect_to "https://" + request.host + request.fullpath
|
|
98
106
|
flash.keep
|
|
99
107
|
elsif request.ssl? && !ssl_required?
|
|
100
|
-
redirect_to "http://" + request.host + request.fullpath
|
|
108
|
+
redirect_to "http://" + request.host + request.fullpath
|
|
101
109
|
flash.keep
|
|
102
110
|
end
|
|
103
111
|
|
|
@@ -11,7 +11,7 @@ namespace :common do
|
|
|
11
11
|
Spree::InstallGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", "--auto-accept", "--migrate=false", "--seed=false", "--sample=false", "--quiet"]
|
|
12
12
|
|
|
13
13
|
puts "Setting up dummy database..."
|
|
14
|
-
cmd = "bundle exec rake db:drop db:create db:migrate
|
|
14
|
+
cmd = "bundle exec rake db:drop db:create db:migrate db:test:prepare"
|
|
15
15
|
|
|
16
16
|
if RUBY_PLATFORM =~ /mswin/ #windows
|
|
17
17
|
cmd += " >nul"
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
FactoryGirl.define do
|
|
2
2
|
sequence(:product_sequence) { |n| "Product ##{n} - #{rand(9999)}" }
|
|
3
3
|
|
|
4
|
-
factory :
|
|
5
|
-
name {
|
|
6
|
-
description { Faker::Lorem.paragraphs(rand(5)
|
|
7
|
-
|
|
8
|
-
# associations:
|
|
9
|
-
tax_category { |r| Spree::TaxCategory.find(:first) || r.association(:tax_category) }
|
|
10
|
-
shipping_category { |r| Spree::ShippingCategory.find(:first) || r.association(:shipping_category) }
|
|
11
|
-
|
|
4
|
+
factory :simple_product, :class => Spree::Product do
|
|
5
|
+
name { FactoryGirl.generate :product_sequence }
|
|
6
|
+
description { Faker::Lorem.paragraphs(1 + Kernel.rand(5)).join("\n") }
|
|
12
7
|
price 19.99
|
|
13
8
|
cost_price 17.00
|
|
14
9
|
sku 'ABC'
|
|
@@ -16,6 +11,11 @@ FactoryGirl.define do
|
|
|
16
11
|
deleted_at nil
|
|
17
12
|
end
|
|
18
13
|
|
|
14
|
+
factory :product, :parent => :simple_product do
|
|
15
|
+
tax_category { |r| Spree::TaxCategory.find(:first) || r.association(:tax_category) }
|
|
16
|
+
shipping_category { |r| Spree::ShippingCategory.find(:first) || r.association(:shipping_category) }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
19
|
factory :product_with_option_types, :parent => :product do
|
|
20
20
|
after_create { |product| Factory(:product_option_type, :product => product) }
|
|
21
21
|
end
|
|
@@ -23,7 +23,7 @@ FactoryGirl.define do
|
|
|
23
23
|
factory :custom_product, :class => Spree::Product do
|
|
24
24
|
name "Custom Product"
|
|
25
25
|
price "17.99"
|
|
26
|
-
description { Faker::Lorem.paragraphs(rand(5)
|
|
26
|
+
description { Faker::Lorem.paragraphs(1 + Kernel.rand(5)).join("\n") }
|
|
27
27
|
|
|
28
28
|
# associations:
|
|
29
29
|
tax_category { |r| Spree::TaxCategory.find(:first) || r.association(:tax_category) }
|
|
@@ -2,6 +2,6 @@ FactoryGirl.define do
|
|
|
2
2
|
sequence(:shipping_category_sequence) { |n| "ShippingCategory ##{n}" }
|
|
3
3
|
|
|
4
4
|
factory :shipping_category, :class => Spree::ShippingCategory do
|
|
5
|
-
name {
|
|
5
|
+
name { FactoryGirl.generate :shipping_category_sequence }
|
|
6
6
|
end
|
|
7
7
|
end
|
|
@@ -2,22 +2,22 @@ FactoryGirl.define do
|
|
|
2
2
|
factory :shipping_method, :class => Spree::ShippingMethod do
|
|
3
3
|
zone { |a| Spree::Zone.find_by_name('GlobalZone') || a.association(:global_zone) }
|
|
4
4
|
name 'UPS Ground'
|
|
5
|
-
calculator {
|
|
5
|
+
calculator { Factory.build(:calculator) }
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
factory :free_shipping_method, :class => Spree::ShippingMethod do
|
|
9
9
|
zone { |a| Spree::Zone.find_by_name('GlobalZone') || a.association(:global_zone) }
|
|
10
10
|
name 'UPS Ground'
|
|
11
|
-
calculator {
|
|
11
|
+
calculator { Factory.build(:no_amount_calculator) }
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
factory :shipping_method_with_category, :class => Spree::ShippingMethod do
|
|
15
15
|
zone { |a| Spree::Zone.find_by_name('GlobalZone') || a.association(:global_zone) }
|
|
16
16
|
name 'UPS Ground'
|
|
17
|
-
calculator { |sm| Factory(:calculator, :calculable_id => sm.object_id, :calculable_type => 'Spree::ShippingMethod') }
|
|
18
17
|
match_none nil
|
|
19
18
|
match_one nil
|
|
20
19
|
match_all nil
|
|
21
20
|
association(:shipping_category, :factory => :shipping_category)
|
|
21
|
+
calculator { Factory.build(:calculator) }
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -8,7 +8,7 @@ FactoryGirl.define do
|
|
|
8
8
|
login { email }
|
|
9
9
|
password 'secret'
|
|
10
10
|
password_confirmation 'secret'
|
|
11
|
-
authentication_token {
|
|
11
|
+
authentication_token { FactoryGirl.generate(:user_authentication_token) } if Spree::User.attribute_method? :authentication_token
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
factory :admin_user, :parent => :user do
|
|
@@ -4,13 +4,15 @@ FactoryGirl.define do
|
|
|
4
4
|
description { Faker::Lorem.sentence }
|
|
5
5
|
zone_members do |proxy|
|
|
6
6
|
zone = proxy.instance_eval{@instance}
|
|
7
|
-
Spree::Country.find(:all).map
|
|
7
|
+
Spree::Country.find(:all).map do |c|
|
|
8
|
+
zone_member = Spree::ZoneMember.create(:zoneable => c, :zone => zone)
|
|
9
|
+
end
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
factory :zone, :class => Spree::Zone do
|
|
12
14
|
name { Faker::Lorem.words }
|
|
13
15
|
description { Faker::Lorem.sentence }
|
|
14
|
-
zone_members { [Spree::ZoneMember.create(:zoneable => Factory(:country)
|
|
16
|
+
zone_members { [Spree::ZoneMember.create(:zoneable => Factory(:country))] }
|
|
15
17
|
end
|
|
16
18
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Borrowed from http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
|
|
2
|
+
# Mentioned in tweet here: https://twitter.com/_sohara/status/177120126083141633
|
|
3
|
+
require 'mail'
|
|
4
|
+
class EmailValidator < ActiveModel::EachValidator
|
|
5
|
+
def validate_each(record,attribute,value)
|
|
6
|
+
begin
|
|
7
|
+
m = Mail::Address.new(value)
|
|
8
|
+
# We must check that value contains a domain and that value is an email address
|
|
9
|
+
r = m.domain && m.address == value
|
|
10
|
+
t = m.__send__(:tree)
|
|
11
|
+
# We need to dig into treetop
|
|
12
|
+
# A valid domain must have dot_atom_text elements size > 1
|
|
13
|
+
# user@localhost is excluded
|
|
14
|
+
# treetop must respond to domain
|
|
15
|
+
# We exclude valid email values like <user@localhost.com>
|
|
16
|
+
# Hence we use m.__send__(tree).domain
|
|
17
|
+
r &&= (t.domain.dot_atom_text.elements.size > 1)
|
|
18
|
+
rescue Exception => e
|
|
19
|
+
r = false
|
|
20
|
+
end
|
|
21
|
+
record.errors[attribute] << (options[:message] || "is invalid") unless r
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core.rb
CHANGED
|
@@ -34,8 +34,9 @@ require 'kaminari'
|
|
|
34
34
|
require 'nested_set'
|
|
35
35
|
require 'acts_as_list'
|
|
36
36
|
require 'active_merchant'
|
|
37
|
-
require '
|
|
37
|
+
require 'ransack'
|
|
38
38
|
require 'jquery-rails'
|
|
39
|
+
require 'deface'
|
|
39
40
|
|
|
40
41
|
module Spree
|
|
41
42
|
module Core
|
|
@@ -61,7 +62,6 @@ require 'spree/core/ext/hash'
|
|
|
61
62
|
|
|
62
63
|
require 'spree/core/delegate_belongs_to'
|
|
63
64
|
|
|
64
|
-
require 'spree/core/theme_support'
|
|
65
65
|
require 'spree/core/responder'
|
|
66
66
|
require 'spree/core/respond_with'
|
|
67
67
|
require 'spree/core/ssl_requirement'
|
|
@@ -4,9 +4,9 @@ module Spree
|
|
|
4
4
|
# the current contents are mainly for testing and documentation
|
|
5
5
|
|
|
6
6
|
# To override this file...
|
|
7
|
-
# 1) Make a copy of it in your sites local /lib
|
|
7
|
+
# 1) Make a copy of it in your sites local /lib folder
|
|
8
8
|
# 2) Add it to the config load path, or require it in an initializer, e.g...
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# # config/initializers/spree.rb
|
|
11
11
|
# require 'product_filters'
|
|
12
12
|
#
|
|
@@ -48,7 +48,7 @@ module Spree
|
|
|
48
48
|
module ProductFilters
|
|
49
49
|
extend ActionView::Helpers::NumberHelper
|
|
50
50
|
extend Spree::BaseHelper
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
# Example: filtering by price
|
|
53
53
|
# The named scope just maps incoming labels onto their conditions, and builds the conjunction
|
|
54
54
|
# 'price' is in the base scope's context (ie, "select foo from products where ...") so
|
|
@@ -61,20 +61,15 @@ module Spree
|
|
|
61
61
|
Spree::Product.scope :price_range_any,
|
|
62
62
|
lambda {|*opts|
|
|
63
63
|
conds = opts.map {|o| Spree::ProductFilters.price_filter[:conds][o]}.reject {|c| c.nil?}
|
|
64
|
-
|
|
65
|
-
conds.each do |new_scope|
|
|
66
|
-
scope = scope.or(new_scope)
|
|
67
|
-
end
|
|
68
|
-
Spree::Product.scoped(:joins => :master).where(scope)
|
|
64
|
+
Spree::Product.scoped(:joins => :master).conditions_any(conds)
|
|
69
65
|
}
|
|
70
66
|
|
|
71
67
|
def ProductFilters.price_filter
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
[ "#{format_price(
|
|
75
|
-
[ "#{format_price(
|
|
76
|
-
[
|
|
77
|
-
[ I18n.t(:or_over_price, :price => format_price(20)) , v[:price].gteq(20)]]
|
|
68
|
+
conds = [ [ I18n.t(:under_price, :price => format_price(10)) , "price <= 10" ],
|
|
69
|
+
[ "#{format_price(10)} - #{format_price(15)}" , "price between 10 and 15" ],
|
|
70
|
+
[ "#{format_price(15)} - #{format_price(18)}" , "price between 15 and 18" ],
|
|
71
|
+
[ "#{format_price(18)} - #{format_price(20)}" , "price between 18 and 20" ],
|
|
72
|
+
[ I18n.t(:or_over_price, :price => format_price(20)) , "price >= 20" ] ]
|
|
78
73
|
{ :name => I18n.t(:price_range),
|
|
79
74
|
:scope => :price_range_any,
|
|
80
75
|
:conds => Hash[*conds.flatten],
|
|
@@ -100,11 +95,7 @@ module Spree
|
|
|
100
95
|
Spree::Product.scope :brand_any,
|
|
101
96
|
lambda {|*opts|
|
|
102
97
|
conds = opts.map {|o| ProductFilters.brand_filter[:conds][o]}.reject {|c| c.nil?}
|
|
103
|
-
|
|
104
|
-
conds.each do |new_scope|
|
|
105
|
-
scope = scope.or(new_scope)
|
|
106
|
-
end
|
|
107
|
-
Spree::Product.with_property("brand").where(scope)
|
|
98
|
+
Spree::Product.with_property("brand").conditions_any(conds)
|
|
108
99
|
}
|
|
109
100
|
|
|
110
101
|
def ProductFilters.brand_filter
|
data/lib/tasks/core.rake
CHANGED
|
@@ -21,7 +21,7 @@ For .rb use rake db:load_file[/absolute/path/to/sample/filename.rb]}
|
|
|
21
21
|
desc "Loads fixtures from the the dir you specify using rake db:load_dir[loadfrom]"
|
|
22
22
|
task :load_dir , [:dir] => :environment do |t , args|
|
|
23
23
|
dir = args.dir
|
|
24
|
-
dir = File.join(Rails.root, "db", dir)
|
|
24
|
+
dir = File.join(Rails.root, "db", dir) if Pathname.new(dir).relative?
|
|
25
25
|
|
|
26
26
|
fixtures = ActiveSupport::OrderedHash.new
|
|
27
27
|
ruby_files = ActiveSupport::OrderedHash.new
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
text-align: center;
|
|
18
18
|
line-height: 1.75em;
|
|
19
19
|
color: #666;
|
|
20
|
-
background: #CCC url(<%= asset_path
|
|
20
|
+
background: #CCC url(<%= asset_path('jquery.alerts/images/title.gif') %>) top repeat-x;
|
|
21
21
|
border: solid 1px #FFF;
|
|
22
22
|
border-bottom: solid 1px #999;
|
|
23
23
|
cursor: default;
|
|
@@ -26,21 +26,21 @@
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
#popup_content {
|
|
29
|
-
background: 16px 16px no-repeat url(<%= asset_path
|
|
29
|
+
background: 16px 16px no-repeat url(<%= asset_path('jquery.alerts/images/info.gif') %>);
|
|
30
30
|
padding: 1em 1.75em;
|
|
31
31
|
margin: 0em;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
#popup_content.alert {
|
|
35
|
-
background-image: url(<%= asset_path
|
|
35
|
+
background-image: url(<%= asset_path('jquery.alerts/images/info.gif') %>);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
#popup_content.confirm {
|
|
39
|
-
background-image: url(<%= asset_path
|
|
39
|
+
background-image: url(<%= asset_path('jquery.alerts/images/important.gif') %>);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
#popup_content.prompt {
|
|
43
|
-
background-image: url(<%= asset_path
|
|
43
|
+
background-image: url(<%= asset_path('jquery.alerts/images/help.gif') %>);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
#popup_message {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
----------------------------------*/
|
|
90
90
|
|
|
91
91
|
/* states and images */
|
|
92
|
-
.ui-icon { width: 16px; height: 16px; background-image: url(jquery-ui/ui-icons_ff0084_256x240.png); }
|
|
92
|
+
.ui-icon { width: 16px; height: 16px; background-image: url(<%= asset_path("jquery-ui/ui-icons_ff0084_256x240.png") %>); }
|
|
93
93
|
.ui-widget-content .ui-icon {background-image: url(<%= asset_path("jquery-ui/ui-icons_ff0084_256x240.png") %>); }
|
|
94
94
|
.ui-widget-header .ui-icon {background-image: url(<%= asset_path("jquery-ui/ui-icons_0073ea_256x240.png") %>); }
|
|
95
95
|
.ui-state-default .ui-icon { background-image: url(<%= asset_path("jquery-ui/ui-icons_666666_256x240.png") %>); }
|