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.
Files changed (209) hide show
  1. data/app/assets/javascripts/admin/admin.js.erb +9 -18
  2. data/app/assets/javascripts/admin/calculator.js +7 -6
  3. data/app/assets/javascripts/admin/checkouts/edit.js +2 -2
  4. data/app/assets/javascripts/admin/image_settings.js +49 -0
  5. data/app/assets/javascripts/admin/orders/edit_form.js +14 -14
  6. data/app/assets/stylesheets/admin/admin.css.erb +36 -54
  7. data/app/assets/stylesheets/store/screen.css.scss +25 -12
  8. data/app/controllers/spree/admin/base_controller.rb +3 -3
  9. data/app/controllers/spree/admin/image_settings_controller.rb +71 -0
  10. data/app/controllers/spree/admin/images_controller.rb +22 -21
  11. data/app/controllers/spree/admin/mail_methods_controller.rb +1 -1
  12. data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -2
  13. data/app/controllers/spree/admin/orders_controller.rb +13 -13
  14. data/app/controllers/spree/admin/payment_methods_controller.rb +1 -1
  15. data/app/controllers/spree/admin/payments_controller.rb +1 -1
  16. data/app/controllers/spree/admin/product_properties_controller.rb +3 -4
  17. data/app/controllers/spree/admin/products_controller.rb +49 -47
  18. data/app/controllers/spree/admin/properties_controller.rb +1 -1
  19. data/app/controllers/spree/admin/prototypes_controller.rb +12 -6
  20. data/app/controllers/spree/admin/reports_controller.rb +15 -16
  21. data/app/controllers/spree/admin/resource_controller.rb +1 -1
  22. data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
  23. data/app/controllers/spree/admin/shipments_controller.rb +0 -3
  24. data/app/controllers/spree/admin/states_controller.rb +9 -9
  25. data/app/controllers/spree/admin/users_controller.rb +18 -42
  26. data/app/controllers/spree/admin/variants_controller.rb +22 -21
  27. data/app/controllers/spree/admin/zones_controller.rb +11 -11
  28. data/app/controllers/spree/content_controller.rb +1 -1
  29. data/app/controllers/spree/locale_controller.rb +2 -2
  30. data/app/controllers/spree/orders_controller.rb +4 -6
  31. data/app/controllers/spree/products_controller.rb +1 -1
  32. data/app/controllers/spree/states_controller.rb +4 -7
  33. data/app/helpers/spree/admin/base_helper.rb +4 -0
  34. data/app/helpers/spree/admin/navigation_helper.rb +4 -16
  35. data/app/helpers/spree/base_helper.rb +22 -3
  36. data/app/models/spree/activator.rb +4 -1
  37. data/app/models/spree/address.rb +45 -45
  38. data/app/models/spree/adjustment.rb +4 -4
  39. data/app/models/spree/app_configuration.rb +12 -0
  40. data/app/models/spree/calculator/default_tax.rb +1 -3
  41. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -2
  42. data/app/models/spree/calculator/flat_rate.rb +0 -3
  43. data/app/models/spree/calculator/flexi_rate.rb +1 -3
  44. data/app/models/spree/calculator/per_item.rb +1 -6
  45. data/app/models/spree/calculator/price_sack.rb +0 -2
  46. data/app/models/spree/country.rb +1 -1
  47. data/app/models/spree/creditcard.rb +9 -10
  48. data/app/models/spree/gateway.rb +0 -2
  49. data/app/models/spree/image.rb +18 -2
  50. data/app/models/spree/inventory_unit.rb +4 -2
  51. data/app/models/spree/mail_method.rb +1 -6
  52. data/app/models/spree/option_type.rb +3 -1
  53. data/app/models/spree/order.rb +68 -62
  54. data/app/models/spree/payment.rb +1 -1
  55. data/app/models/spree/payment_method.rb +0 -6
  56. data/app/models/spree/product/scopes.rb +44 -44
  57. data/app/models/spree/product.rb +44 -26
  58. data/app/models/spree/product_property.rb +0 -2
  59. data/app/models/spree/property.rb +0 -16
  60. data/app/models/spree/prototype.rb +0 -1
  61. data/app/models/spree/return_authorization.rb +0 -2
  62. data/app/models/spree/shipment.rb +2 -3
  63. data/app/models/spree/shipping_category.rb +0 -2
  64. data/app/models/spree/shipping_method.rb +1 -2
  65. data/app/models/spree/shipping_rate.rb +9 -0
  66. data/app/models/spree/state.rb +10 -2
  67. data/app/models/spree/{state_event.rb → state_change.rb} +1 -4
  68. data/app/models/spree/tax_rate.rb +3 -3
  69. data/app/models/spree/taxon.rb +1 -6
  70. data/app/models/spree/taxonomy.rb +3 -6
  71. data/app/models/spree/user.rb +1 -0
  72. data/app/models/spree/variant.rb +3 -4
  73. data/app/models/spree/zone.rb +0 -10
  74. data/app/views/spree/admin/adjustments/_adjustments_table.html.erb +1 -1
  75. data/app/views/spree/admin/configurations/index.html.erb +4 -0
  76. data/app/views/spree/admin/image_settings/edit.html.erb +91 -0
  77. data/app/views/spree/admin/image_settings/show.html.erb +11 -0
  78. data/app/views/spree/admin/images/index.html.erb +3 -3
  79. data/app/views/spree/admin/mail_methods/_form.html.erb +1 -1
  80. data/app/views/spree/admin/mail_methods/index.html.erb +1 -1
  81. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +1 -1
  82. data/app/views/spree/admin/option_types/index.html.erb +1 -1
  83. data/app/views/spree/admin/option_types/new.js.erb +1 -1
  84. data/app/views/spree/admin/orders/_form.html.erb +3 -5
  85. data/app/views/spree/admin/orders/_line_item.html.erb +1 -1
  86. data/app/views/spree/admin/orders/customer_details/_form.html.erb +1 -1
  87. data/app/views/spree/admin/orders/history.html.erb +2 -2
  88. data/app/views/spree/admin/orders/index.html.erb +19 -19
  89. data/app/views/spree/admin/payment_methods/_form.html.erb +1 -1
  90. data/app/views/spree/admin/payment_methods/index.html.erb +1 -3
  91. data/app/views/spree/admin/payments/_list.html.erb +1 -1
  92. data/app/views/spree/admin/product_properties/index.html.erb +1 -1
  93. data/app/views/spree/admin/products/_form.html.erb +30 -27
  94. data/app/views/spree/admin/products/index.html.erb +9 -9
  95. data/app/views/spree/admin/products/new.html.erb +28 -4
  96. data/app/views/spree/admin/products/new.js.erb +1 -1
  97. data/app/views/spree/admin/properties/index.html.erb +1 -1
  98. data/app/views/spree/admin/properties/new.js.erb +1 -1
  99. data/app/views/spree/admin/prototypes/index.html.erb +1 -1
  100. data/app/views/spree/admin/prototypes/new.js.erb +1 -1
  101. data/app/views/spree/admin/prototypes/show.html.erb +42 -0
  102. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
  103. data/app/views/spree/admin/shared/_address_form.html.erb +1 -1
  104. data/app/views/spree/admin/shared/_calculator_fields.html.erb +2 -2
  105. data/app/views/spree/admin/shared/_head.html.erb +3 -3
  106. data/app/views/spree/admin/shared/_order_details.html.erb +1 -1
  107. data/app/views/spree/admin/shared/_order_tabs.html.erb +6 -6
  108. data/app/views/spree/admin/shared/_product_sub_menu.html.erb +0 -1
  109. data/app/views/spree/admin/shared/_report_criteria.html.erb +3 -3
  110. data/app/views/spree/admin/shared/_tabs.html.erb +1 -1
  111. data/app/views/spree/admin/shared/_update_order_state.js +5 -4
  112. data/app/views/spree/admin/shipments/index.html.erb +1 -1
  113. data/app/views/spree/admin/shipping_categories/index.html.erb +1 -1
  114. data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
  115. data/app/views/spree/admin/states/_state_list.html.erb +1 -1
  116. data/app/views/spree/admin/states/new.js.erb +1 -1
  117. data/app/views/spree/admin/tax_categories/index.html.erb +2 -2
  118. data/app/views/spree/admin/tax_rates/index.html.erb +2 -2
  119. data/app/views/spree/admin/taxonomies/_list.html.erb +1 -1
  120. data/app/views/spree/admin/trackers/_form.html.erb +1 -1
  121. data/app/views/spree/admin/trackers/index.html.erb +1 -1
  122. data/app/views/spree/admin/users/_form.html.erb +1 -16
  123. data/app/views/spree/admin/users/index.html.erb +3 -4
  124. data/app/views/spree/admin/variants/index.html.erb +2 -2
  125. data/app/views/spree/admin/variants/new.js.erb +1 -1
  126. data/app/views/spree/admin/zones/index.html.erb +1 -1
  127. data/app/views/spree/checkout/_address.html.erb +1 -1
  128. data/app/views/spree/checkout/edit.html.erb +1 -1
  129. data/app/views/spree/checkout/registration.html.erb +2 -2
  130. data/app/views/spree/order_mailer/confirm_email.text.erb +3 -3
  131. data/app/views/spree/orders/show.html.erb +2 -2
  132. data/app/views/spree/products/_cart_form.html.erb +1 -2
  133. data/app/views/spree/products/_image.html.erb +1 -1
  134. data/app/views/spree/products/show.html.erb +3 -3
  135. data/app/views/spree/shared/_filters.html.erb +26 -24
  136. data/app/views/spree/shared/_google_analytics.html.erb +26 -26
  137. data/app/views/spree/shared/_products.html.erb +2 -2
  138. data/app/views/spree/shared/_search.html.erb +1 -1
  139. data/app/views/spree/shared/_store_menu.html.erb +1 -1
  140. data/app/views/spree/states/index.js.erb +1 -1
  141. data/config/initializers/rails_3_1.rb +3 -3
  142. data/config/locales/en.yml +40 -35
  143. data/config/routes.rb +5 -13
  144. data/db/migrate/20101026184714_migrate_transactions_to_payment_state.rb +4 -4
  145. data/db/migrate/20111007143030_namespace_top_level_models.rb +0 -3
  146. data/db/migrate/20120203001428_rename_state_events_to_state_changes.rb +9 -0
  147. data/db/migrate/20120315064358_migrate_images_from_products_to_variants.rb +35 -0
  148. data/lib/generators/spree/dummy/templates/rails/database.yml +48 -20
  149. data/lib/generators/spree/install/install_generator.rb +17 -1
  150. data/lib/generators/spree/install/templates/app/assets/javascripts/admin/all.js +0 -1
  151. data/lib/generators/spree/install/templates/app/assets/javascripts/store/all.js +0 -1
  152. data/lib/generators/spree/install/templates/app/assets/stylesheets/admin/all.css +0 -1
  153. data/lib/generators/spree/install/templates/app/assets/stylesheets/store/all.css +0 -1
  154. data/lib/generators/spree/sandbox/sandbox_generator.rb +9 -2
  155. data/lib/spree/core/calculated_adjustments.rb +29 -34
  156. data/lib/spree/core/controller_helpers.rb +36 -34
  157. data/lib/spree/core/custom_fixtures.rb +1 -1
  158. data/lib/spree/core/delegate_belongs_to.rb +22 -24
  159. data/lib/spree/core/engine.rb +3 -3
  160. data/lib/spree/core/environment_extension.rb +12 -15
  161. data/lib/spree/core/mail_settings.rb +1 -1
  162. data/lib/spree/core/permalinks.rb +24 -16
  163. data/lib/spree/core/preference_rescue.rb +1 -1
  164. data/lib/spree/core/respond_with.rb +13 -8
  165. data/lib/spree/core/responder.rb +1 -2
  166. data/lib/spree/core/search/base.rb +36 -19
  167. data/lib/spree/core/ssl_requirement.rb +18 -10
  168. data/lib/spree/core/testing_support/common_rake.rb +1 -1
  169. data/lib/spree/core/testing_support/factories/product_factory.rb +9 -9
  170. data/lib/spree/core/testing_support/factories/role_factory.rb +1 -1
  171. data/lib/spree/core/testing_support/factories/shipping_category_factory.rb +1 -1
  172. data/lib/spree/core/testing_support/factories/shipping_method_factory.rb +3 -3
  173. data/lib/spree/core/testing_support/factories/user_factory.rb +1 -1
  174. data/lib/spree/core/testing_support/factories/zone_factory.rb +4 -2
  175. data/lib/spree/core/validators/email.rb +23 -0
  176. data/lib/spree/core/version.rb +1 -1
  177. data/lib/spree/core.rb +2 -2
  178. data/lib/spree/product_filters.rb +10 -19
  179. data/lib/tasks/core.rake +1 -1
  180. data/vendor/assets/javascripts/jquery.alerts/jquery.alerts.css.erb +5 -5
  181. data/vendor/assets/stylesheets/jquery-ui.datepicker.css.erb +1 -1
  182. metadata +68 -140
  183. data/app/assets/images/noimage/large.png +0 -0
  184. data/app/controllers/spree/admin/product_groups_controller.rb +0 -49
  185. data/app/controllers/spree/admin/product_scopes_controller.rb +0 -39
  186. data/app/helpers/spree/admin/product_groups_helper.rb +0 -14
  187. data/app/helpers/spree/admin/product_properties_helper.rb +0 -24
  188. data/app/models/spree/product_group.rb +0 -200
  189. data/app/models/spree/product_scope.rb +0 -79
  190. data/app/views/spree/admin/banners/_gateway.html.erb +0 -14
  191. data/app/views/spree/admin/product_groups/_preview.html.erb +0 -33
  192. data/app/views/spree/admin/product_groups/_product_scope.html.erb +0 -24
  193. data/app/views/spree/admin/product_groups/edit.html.erb +0 -59
  194. data/app/views/spree/admin/product_groups/index.html.erb +0 -37
  195. data/app/views/spree/admin/product_groups/new.html.erb +0 -12
  196. data/app/views/spree/admin/product_groups/show.html.erb +0 -32
  197. data/app/views/spree/admin/product_scopes/create.js.erb +0 -6
  198. data/app/views/spree/admin/product_scopes/destroy.js.erb +0 -3
  199. data/app/views/spree/admin/product_scopes/new.html.erb +0 -1
  200. data/app/views/spree/admin/shared/_group_from_products_form.html.erb +0 -12
  201. data/db/migrate/20091012120519_product_groups_and_scopes.rb +0 -18
  202. data/db/migrate/20100126103714_create_products_product_groups.rb +0 -8
  203. data/db/migrate/20100306153445_fix_by_popularity.rb +0 -9
  204. data/db/migrate/20120523061241_convert_sales_tax_to_default_tax.rb +0 -9
  205. data/lib/spree/core/testing_support/factories/product_group_factory.rb +0 -5
  206. data/lib/spree/core/testing_support/factories/product_scope_factory.rb +0 -7
  207. data/lib/spree/core/theme_support/hook_listener.rb +0 -145
  208. data/lib/spree/core/theme_support.rb +0 -1
  209. 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
- base_scope = get_base_scope
14
- @products_scope = @product_group.apply_on(base_scope)
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([:images, :master]).page(curr_page).per(per_page)
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[name]
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 = @cached_product_group ? @cached_product_group.products.active : Spree::Product.active
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.group_by_products_id if @product_group.product_scopes.size > 1
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
- @product_group = Spree::ProductGroup.new.from_route([params[:order_by_price] + '_by_master_price'])
50
- elsif params[:product_group_name]
51
- @cached_product_group = Spree::ProductGroup.find_by_permalink(params[:product_group_name])
52
- @product_group = Spree::ProductGroup.new
53
- elsif params[:product_group_query]
54
- @product_group = Spree::ProductGroup.new.from_route(params[:product_group_query].split('/'))
55
- else
56
- @product_group = Spree::ProductGroup.new
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
- write_inheritable_array(:ssl_required_actions, actions)
64
+ class_attribute(:ssl_required_actions)
65
+ self.ssl_required_actions = actions
65
66
  end
66
67
 
67
68
  def ssl_allowed(*actions)
68
- write_inheritable_array(:ssl_allowed_actions, actions)
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
- actions = self.class.read_inheritable_attribute(:ssl_required_actions)
76
- return false if actions.nil?
77
- actions.empty? || actions.include?(action_name.to_sym)
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
- actions = self.class.read_inheritable_attribute(:ssl_allowed_actions)
82
- return false if actions.nil?
83
- actions.empty? || actions.include?(action_name.to_sym)
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.sub("//", "/")
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.sub("//", "/")
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 RAILS_ENV=test AUTO_ACCEPT=true"
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 :product, :class => Spree::Product do
5
- name { Factory.next :product_sequence }
6
- description { Faker::Lorem.paragraphs(rand(5)+1).join("\n") }
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)+1).join("\n") }
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,7 +2,7 @@ FactoryGirl.define do
2
2
  sequence(:role_sequence) { |n| "Role ##{n}" }
3
3
 
4
4
  factory :role, :class => Spree::Role do
5
- name { Factory.next(:role_sequence) }
5
+ name { FactoryGirl.generate :role_sequence }
6
6
  end
7
7
 
8
8
  factory :admin_role, :parent => :role do
@@ -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 { Factory.next(:shipping_category_sequence) }
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 { |sm| Factory(:calculator, :calculable_id => sm.object_id, :calculable_type => 'Spree::ShippingMethod') }
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 { |sm| Factory(:no_amount_calculator, :calculable_id => sm.object_id, :calculable_type => 'Spree::ShippingMethod') }
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 { Factory.next(:user_authentication_token) } if Spree::User.attribute_method? :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{|c| Spree::ZoneMember.create({:zoneable => c, :zone => zone})}
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
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- "1.0.6"
3
+ "1.1.0.rc1"
4
4
  end
5
5
  end
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 'meta_search'
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/spree folder
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
- scope = conds.shift
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
- v = Spree::Variant.arel_table
73
- conds = [ [ I18n.t(:under_price, :price => format_price(10)) , v[:price].lteq(10)],
74
- [ "#{format_price(10)} - #{format_price(15)}" , v[:price].in(10..15)],
75
- [ "#{format_price(15)} - #{format_price(18)}" , v[:price].in(15..18)],
76
- [ "#{format_price(18)} - #{format_price(20)}" , v[:price].in(18..20)],
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
- scope = conds.shift
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) unless dir =~ /^(\/|[a-zA-Z]:[\/\\])/
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 'icons/title.gif' %>) top repeat-x;
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 'icons/info.gif' %>);
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 'icons/info.gif' %>);
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 'icons/important.gif' %>);
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 'icons/help.gif' %>);
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") %>); }