spree 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of spree might be problematic. Click here for more details.

Files changed (211) hide show
  1. data/History.txt +5 -0
  2. data/Manifest.txt +158 -21
  3. data/config/hoe.rb +2 -1
  4. data/lib/spree/version.rb +1 -1
  5. data/starter-app/app/views/layouts/application.rhtml +6 -4
  6. data/starter-app/db/sample/line_items.yml +6 -4
  7. data/starter-app/db/sample/{variations.yml → variants.yml} +16 -0
  8. data/starter-app/log/README +1 -0
  9. data/starter-app/public/images/spree.jpg +0 -0
  10. data/starter-app/public/stylesheets/application.css +2 -2
  11. data/starter-app/script/spec +4 -0
  12. data/starter-app/script/spec_server +102 -0
  13. data/starter-app/spec/models/cart_item_spec.rb +50 -0
  14. data/starter-app/spec/models/cart_spec.rb +51 -0
  15. data/starter-app/spec/models/line_item_spec.rb +33 -0
  16. data/starter-app/spec/models/product_spec.rb +29 -0
  17. data/starter-app/spec/rcov.opts +2 -0
  18. data/starter-app/spec/spec.opts +6 -0
  19. data/starter-app/spec/spec_helper.rb +39 -0
  20. data/starter-app/stories/all.rb +4 -0
  21. data/starter-app/stories/helper.rb +3 -0
  22. data/starter-app/vendor/plugins/rspec_on_rails/MIT-LICENSE +31 -0
  23. data/starter-app/vendor/plugins/rspec_on_rails/README +3 -0
  24. data/starter-app/vendor/plugins/rspec_on_rails/Rakefile +9 -0
  25. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/CHANGES +1 -0
  26. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb +35 -0
  27. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb +4 -0
  28. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt +0 -0
  29. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts +2 -0
  30. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec +4 -0
  31. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server +102 -0
  32. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts +6 -0
  33. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb +39 -0
  34. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb +3 -0
  35. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE +33 -0
  36. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb +49 -0
  37. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb +25 -0
  38. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb +11 -0
  39. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb +12 -0
  40. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/USAGE +18 -0
  41. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb +30 -0
  42. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb +11 -0
  43. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb +167 -0
  44. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb +313 -0
  45. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb +25 -0
  46. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
  47. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb +22 -0
  48. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb +26 -0
  49. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb +61 -0
  50. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb +22 -0
  51. data/starter-app/vendor/plugins/rspec_on_rails/init.rb +9 -0
  52. data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/discover.rb +1 -0
  53. data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb +81 -0
  54. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails.rb +51 -0
  55. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb +47 -0
  56. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb +42 -0
  57. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb +255 -0
  58. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb +66 -0
  59. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb +82 -0
  60. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb +62 -0
  61. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb +14 -0
  62. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb +68 -0
  63. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb +90 -0
  64. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb +171 -0
  65. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb +12 -0
  66. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb +14 -0
  67. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb +21 -0
  68. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb +11 -0
  69. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb +27 -0
  70. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb +30 -0
  71. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb +5 -0
  72. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb +66 -0
  73. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb +21 -0
  74. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb +29 -0
  75. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb +130 -0
  76. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb +55 -0
  77. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb +113 -0
  78. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb +70 -0
  79. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb +71 -0
  80. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb +23 -0
  81. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb +36 -0
  82. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb +8 -0
  83. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb +55 -0
  84. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb +83 -0
  85. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb +43 -0
  86. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb +187 -0
  87. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb +112 -0
  88. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb +118 -0
  89. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb +64 -0
  90. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb +18 -0
  91. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb +16 -0
  92. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
  93. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb +263 -0
  94. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb +54 -0
  95. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb +48 -0
  96. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb +14 -0
  97. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb +783 -0
  98. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb +37 -0
  99. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb +13 -0
  100. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb +62 -0
  101. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb +203 -0
  102. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb +169 -0
  103. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb +65 -0
  104. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb +7 -0
  105. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb +89 -0
  106. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb +11 -0
  107. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails_suite.rb +7 -0
  108. data/starter-app/vendor/plugins/rspec_on_rails/spec/spec_helper.rb +46 -0
  109. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb +2 -0
  110. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb +56 -0
  111. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb +59 -0
  112. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb +26 -0
  113. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb +58 -0
  114. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb +10 -0
  115. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb +5 -0
  116. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb +6 -0
  117. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb +13 -0
  118. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml +0 -0
  119. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml +1 -0
  120. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml +1 -0
  121. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml +0 -0
  122. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml +1 -0
  123. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml +1 -0
  124. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml +0 -0
  125. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs +1 -0
  126. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml +0 -0
  127. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs +1 -0
  128. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml +1 -0
  129. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs +1 -0
  130. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs +1 -0
  131. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs +1 -0
  132. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs +1 -0
  133. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs +1 -0
  134. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs +1 -0
  135. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs +1 -0
  136. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs +1 -0
  137. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml +1 -0
  138. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml +1 -0
  139. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml +1 -0
  140. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml +2 -0
  141. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml +0 -0
  142. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml +1 -0
  143. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml +1 -0
  144. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml +1 -0
  145. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml +3 -0
  146. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml +2 -0
  147. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml +2 -0
  148. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml +1 -0
  149. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml +2 -0
  150. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml +3 -0
  151. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml +5 -0
  152. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml +3 -0
  153. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml +1 -0
  154. data/starter-app/vendor/plugins/rspec_on_rails/stories/all.rb +10 -0
  155. data/starter-app/vendor/plugins/rspec_on_rails/stories/helper.rb +5 -0
  156. data/starter-app/vendor/plugins/rspec_on_rails/stories/steps/people.rb +8 -0
  157. data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback +15 -0
  158. data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb +25 -0
  159. data/starter-app/vendor/plugins/rspec_on_rails/tasks/rspec.rake +137 -0
  160. data/starter-app/vendor/plugins/spree/LICENSE +1 -1
  161. data/starter-app/vendor/plugins/spree/app/controllers/admin/categories_controller.rb +0 -24
  162. data/starter-app/vendor/plugins/spree/app/controllers/admin/products_controller.rb +16 -16
  163. data/starter-app/vendor/plugins/spree/app/controllers/cart_controller.rb +2 -8
  164. data/starter-app/vendor/plugins/spree/app/helpers/admin/products_helper.rb +1 -1
  165. data/starter-app/vendor/plugins/spree/app/helpers/spree/base_helper.rb +2 -2
  166. data/starter-app/vendor/plugins/spree/app/models/cart.rb +7 -20
  167. data/starter-app/vendor/plugins/spree/app/models/cart_item.rb +3 -6
  168. data/starter-app/vendor/plugins/spree/app/models/category.rb +6 -22
  169. data/starter-app/vendor/plugins/spree/app/models/line_item.rb +3 -5
  170. data/starter-app/vendor/plugins/spree/app/models/option_value.rb +1 -1
  171. data/starter-app/vendor/plugins/spree/app/models/product.rb +18 -2
  172. data/starter-app/vendor/plugins/spree/app/models/variant.rb +5 -0
  173. data/starter-app/vendor/plugins/spree/app/views/admin/categories/_form.rhtml +1 -5
  174. data/starter-app/vendor/plugins/spree/app/views/admin/overview/index.rhtml +3 -0
  175. data/starter-app/vendor/plugins/spree/app/views/admin/products/_form.rhtml +2 -2
  176. data/starter-app/vendor/plugins/spree/app/views/admin/products/{_new_variation.rhtml → _new_variant.rhtml} +1 -1
  177. data/starter-app/vendor/plugins/spree/app/views/admin/products/_variants.rhtml +43 -0
  178. data/starter-app/vendor/plugins/spree/app/views/cart/index.rhtml +4 -4
  179. data/starter-app/vendor/plugins/spree/app/views/layouts/admin.rhtml +1 -1
  180. data/starter-app/vendor/plugins/spree/app/views/order_mailer/cancel.rhtml +1 -1
  181. data/starter-app/vendor/plugins/spree/app/views/order_mailer/confirm.rhtml +1 -1
  182. data/starter-app/vendor/plugins/spree/app/views/shared/_order_details.rhtml +1 -1
  183. data/starter-app/vendor/plugins/spree/app/views/store/show.rhtml +30 -29
  184. data/starter-app/vendor/plugins/spree/assets/images/spree/spree.jpg +0 -0
  185. data/starter-app/vendor/plugins/spree/assets/stylesheets/spree-admin.css +1 -1
  186. data/starter-app/vendor/plugins/spree/assets/stylesheets/store/_controller.css +1 -1
  187. data/starter-app/vendor/plugins/spree/db/migrate/002_create_cart_items.rb +1 -2
  188. data/starter-app/vendor/plugins/spree/db/migrate/006_create_line_items.rb +5 -7
  189. data/starter-app/vendor/plugins/spree/db/migrate/011_create_variants.rb +11 -0
  190. data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variants.rb +12 -0
  191. data/starter-app/vendor/plugins/spree/test/unit/product_test.rb +0 -33
  192. metadata +170 -23
  193. data/starter-app/vendor/plugins/spree/app/controllers/admin/variations_controller.rb +0 -73
  194. data/starter-app/vendor/plugins/spree/app/helpers/admin/variations_helper.rb +0 -2
  195. data/starter-app/vendor/plugins/spree/app/models/variation.rb +0 -8
  196. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/test.rhtml +0 -8
  197. data/starter-app/vendor/plugins/spree/app/views/admin/products/_variations.rhtml +0 -41
  198. data/starter-app/vendor/plugins/spree/app/views/admin/variations/_form.rhtml +0 -33
  199. data/starter-app/vendor/plugins/spree/app/views/admin/variations/_option_values.rhtml +0 -5
  200. data/starter-app/vendor/plugins/spree/app/views/admin/variations/list.rhtml +0 -23
  201. data/starter-app/vendor/plugins/spree/app/views/admin/variations/new.rhtml +0 -14
  202. data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo142x65.gif +0 -0
  203. data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo245x112.gif +0 -0
  204. data/starter-app/vendor/plugins/spree/db/migrate/011_create_variations.rb +0 -11
  205. data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variations.rb +0 -12
  206. data/starter-app/vendor/plugins/spree/test/functional/admin/variations_controller_test.rb +0 -18
  207. data/starter-app/vendor/plugins/spree/test/integration/variations_test.rb +0 -24
  208. data/starter-app/vendor/plugins/spree/test/unit/cart_item_test.rb +0 -55
  209. data/starter-app/vendor/plugins/spree/test/unit/cart_test.rb +0 -35
  210. data/starter-app/vendor/plugins/spree/test/unit/line_item_test.rb +0 -61
  211. data/starter-app/vendor/plugins/spree/test/unit/variation_test.rb +0 -9
@@ -15,14 +15,8 @@ class CartController < Spree::BaseController
15
15
  end
16
16
 
17
17
  def add
18
- product = Product.find(params[:product][:id])
19
- variation_id = params[:variation_id]
20
- if variation_id.blank?
21
- variation = nil
22
- else
23
- variation = Variation.find(variation_id)
24
- end
25
- item = @cart.add_product(product, variation)
18
+ variant = Variant.find(params[:id])
19
+ item = @cart.add_variant(variant)
26
20
  @cart.save
27
21
  item.save
28
22
 
@@ -1,6 +1,6 @@
1
1
  module Admin::ProductsHelper
2
2
  def option_type_select(so)
3
- select(:new_variation,
3
+ select(:new_variant,
4
4
  so.option_type.presentation,
5
5
  so.option_type.option_values.collect {|ov| [ ov.presentation, ov.id ] })
6
6
  end
@@ -65,8 +65,8 @@ module Spree::BaseHelper
65
65
  end
66
66
 
67
67
 
68
- # human readable list of variation options
69
- def variation_options(v)
68
+ # human readable list of variant options
69
+ def variant_options(v)
70
70
  list = []
71
71
  v.option_values.each do |ov|
72
72
  list << ov.option_type.presentation + ": " + ov.presentation
@@ -1,11 +1,7 @@
1
1
  class Cart < ActiveRecord::Base
2
2
  has_many :cart_items, :dependent => :destroy do
3
- def in_cart(product, variation = nil)
4
- if variation
5
- find :first, :conditions => ['product_id = ? and variation_id = ?', product.id, variation.id]
6
- else
7
- find :first, :conditions => ['product_id = ?', product.id]
8
- end
3
+ def in_cart(variant)
4
+ find :first, :conditions => ['variant_id = ?', variant.id]
9
5
  end
10
6
  end
11
7
  has_many :products, :through => :cart_items
@@ -14,24 +10,15 @@ class Cart < ActiveRecord::Base
14
10
  cart_items.inject(0) {|sum, n| n.price * n.quantity + sum}
15
11
  end
16
12
 
17
- def add_product(product, variation = nil)
18
- current_item = cart_items.in_cart(product, variation)
13
+ def add_variant(variant, quantity=1)
14
+ current_item = cart_items.in_cart(variant)
19
15
  if current_item
20
- current_item.increment_quantity
16
+ current_item.increment_quantity unless quantity > 1
17
+ current_item.quantity = (current_item.quantity + quantity) if quantity > 1
21
18
  else
22
- current_item = CartItem.new(:quantity => 1, :product => product, :variation => variation)
19
+ current_item = CartItem.new(:quantity => quantity, :variant => variant)
23
20
  cart_items << current_item
24
21
  end
25
22
  current_item
26
23
  end
27
-
28
- def remove_product(product, variation = nil)
29
- current_item = cart_items.in_cart(product, variation)
30
- if current_item.quantity > 1
31
- current_item.decrement_quantity
32
- else
33
- CartItem.destroy(current_item.id)
34
- end
35
- current_item
36
- end
37
24
  end
@@ -1,9 +1,8 @@
1
1
  class CartItem < ActiveRecord::Base
2
- belongs_to :product
3
- belongs_to :variation
2
+ belongs_to :variant
4
3
  belongs_to :cart
5
4
 
6
- validates_presence_of :product, :quantity
5
+ validates_presence_of :variant, :quantity
7
6
  validates_numericality_of :quantity, :only_integer => true
8
7
 
9
8
  def validate
@@ -21,9 +20,7 @@ class CartItem < ActiveRecord::Base
21
20
  end
22
21
 
23
22
  def price
24
- self.product.price
25
- #pe = self.variation ? self.variation.price_effect : 0
26
- #self.product.price + pe
23
+ self.variant.product.price
27
24
  end
28
25
 
29
26
  end
@@ -3,7 +3,6 @@ class Category < ActiveRecord::Base
3
3
  acts_as_list :scope => :parent_id
4
4
  acts_as_tree :order => :position
5
5
  has_and_belongs_to_many :tax_treatments
6
- has_many :variations, :as => :variable, :dependent => :destroy
7
6
  validates_presence_of :name
8
7
 
9
8
  def ancestors_name
@@ -21,21 +20,6 @@ class Category < ActiveRecord::Base
21
20
  def before_save
22
21
  self.parent = nil if parent == self
23
22
  end
24
-
25
- # Serious Ruby hacking going on here. We alias the original method for the association as added by
26
- # ActiveRecord and then override it so we can return the parent category's variations if they are present.
27
- alias :ar_variations :variations
28
- def variations
29
- v = ar_variations
30
- return v unless v.empty?
31
- if self.parent and not self.parent.variations.empty?
32
- # return a frozen copy of the parent category's variations
33
- return Array.new(self.parent.variations).freeze
34
- else
35
- # return category variations
36
- return v
37
- end
38
- end
39
23
 
40
24
  # Serious Ruby hacking going on here. We alias the original method for the association as added by
41
25
  # ActiveRecord and then override it so we can return the parent category's treatments if they are present.
@@ -56,11 +40,11 @@ class Category < ActiveRecord::Base
56
40
  # the previous parent-child relationship
57
41
  def before_update
58
42
  return if self.parent.nil?
59
- return if self.variations.frozen? and self.tax_treatments.frozen? # variations and treatments were inherited from previous parent - leave them alone
60
- unless self.parent.variations.empty? # new parent has no variations to inherit - leave the current ones alone
61
- self.ar_variations.each do |v|
62
- v.destroy
63
- end
64
- end
43
+ return if self.tax_treatments.frozen? # tax treatments were inherited from previous parent - leave them alone
44
+ #unless self.parent.variations.empty? # new parent has no variations to inherit - leave the current ones alone
45
+ # self.ar_variations.each do |v|
46
+ # v.destroy
47
+ # end
48
+ #end
65
49
  end
66
50
  end
@@ -1,18 +1,16 @@
1
1
  class LineItem < ActiveRecord::Base
2
2
  belongs_to :order
3
- belongs_to :product
4
- belongs_to :variation
3
+ belongs_to :variant
5
4
 
6
- validates_presence_of :product
5
+ validates_presence_of :variant
7
6
  validates_numericality_of :quantity
8
7
  validates_numericality_of :price
9
8
 
10
9
  def self.from_cart_item(cart_item)
11
10
  line_item = self.new
12
- line_item.product = cart_item.product
13
11
  line_item.quantity = cart_item.quantity
14
12
  line_item.price = cart_item.price
15
- line_item.variation = cart_item.variation
13
+ line_item.variant = cart_item.variant
16
14
  line_item
17
15
  end
18
16
 
@@ -1,5 +1,5 @@
1
1
  class OptionValue < ActiveRecord::Base
2
2
  belongs_to :option_type
3
3
  acts_as_list :scope => :option_type
4
- has_and_belongs_to_many :variations
4
+ has_and_belongs_to_many :variants
5
5
  end
@@ -1,7 +1,7 @@
1
1
  class Product < ActiveRecord::Base
2
2
  has_many :product_option_types, :dependent => :destroy
3
3
  has_many :option_types, :through => :product_option_types
4
- has_many :variations, :dependent => :destroy
4
+ has_many :variants, :dependent => :destroy
5
5
  belongs_to :category
6
6
  has_and_belongs_to_many :tax_treatments
7
7
  has_many :images, :as => :viewable, :dependent => :destroy
@@ -9,9 +9,18 @@ class Product < ActiveRecord::Base
9
9
  validates_presence_of :name
10
10
  validates_presence_of :description
11
11
  validates_presence_of :price
12
+ before_create :empty_variant
12
13
 
13
14
  alias :selected_options :product_option_types
14
15
 
16
+ # checks is there are any meaningful variants (ie. variants with at least one option value)
17
+ def variants?
18
+ self.variants.each do |v|
19
+ return true unless v.option_values.empty?
20
+ end
21
+ false
22
+ end
23
+
15
24
  # if product has a new category then we may need to delete tax_treatments associated with the
16
25
  # previous category
17
26
  def before_update
@@ -35,8 +44,15 @@ class Product < ActiveRecord::Base
35
44
  # return empty array (does not need to be frozen since category has none)
36
45
  return tt
37
46
  else
38
- # return a frozen copy of the cateogires variations
47
+ # return a frozen copy of the category tax treatments
39
48
  return Array.new(self.category.tax_treatments).freeze
40
49
  end
41
50
  end
51
+
52
+ private
53
+
54
+ # all products must have an "empty variant" (this variant will be ignored if meaningful ones are added later)
55
+ def empty_variant
56
+ self.variants << Variant.new
57
+ end
42
58
  end
@@ -0,0 +1,5 @@
1
+ class Variant < ActiveRecord::Base
2
+ belongs_to :product
3
+ has_and_belongs_to_many :option_values
4
+ validates_presence_of :product
5
+ end
@@ -12,11 +12,7 @@
12
12
  :url => {:action => :tax_treatments},
13
13
  :with => "'category_id=#{@category.id}&parent_id=' + encodeURIComponent(value)",
14
14
  :on => 'changed' -%>
15
- <%= observe_field :category_parent_id,
16
- :update => 'variationsWrapper',
17
- :url => {:controller => :variations, :action => :category_variations},
18
- :with => "'category_id=#{@category.id}&parent_id=' + encodeURIComponent(value)",
19
- :on => 'changed' -%>
15
+
20
16
  <div id="treatmentWrapper">
21
17
  <%= render :partial => 'shared/tax_treatments', :locals => {:tax_treatments => @all_tax_treatments, :selected_treatments => @category.tax_treatments} -%>
22
18
  </div>
@@ -0,0 +1,3 @@
1
+ <h2>Overview</h2>
2
+
3
+ Welcome to the Overview Page. This is a placeholder for some real content. Eventually we envision a bunch of "widgets" summarizing recent activity and other elements of interest.
@@ -35,8 +35,8 @@
35
35
  :on => 'changed' -%>
36
36
  </p>
37
37
  <br/>
38
- <div id="variation-listing">
39
- <%= render :partial => 'variations', :locals => {:product => @product} -%>
38
+ <div id="variant-listing">
39
+ <%= render :partial => 'variants', :locals => {:product => @product} -%>
40
40
  </div>
41
41
  <br/>
42
42
  <div id="option-type-listing">
@@ -1,4 +1,4 @@
1
- <h3>New Variation</h3>
1
+ <h3>New Variant</h3>
2
2
  <table>
3
3
  <% @product.selected_options.each do |so| %>
4
4
  <tr>
@@ -0,0 +1,43 @@
1
+ <h2>Variants</h2>
2
+ <%=error_message_on :product, :variants %>
3
+ <table class="basic-table">
4
+ <thead>
5
+ <tr>
6
+ <th>Options</th>
7
+ <th>Action</th>
8
+ </tr>
9
+ </thead>
10
+ <tbody>
11
+ <% if @product.variants? %>
12
+ <% @product.variants.each do |v| %>
13
+ <tr>
14
+ <% next if v.option_values.empty? %>
15
+ <td><%= variant_options v %></td>
16
+ <td>
17
+ <%= link_to_remote "Remove",
18
+ :url => {:action => 'delete_variant', :id=> @product, :variant_id => v},
19
+ :before => "Element.show('busy_indicator')",
20
+ :complete => "Element.hide('busy_indicator')",
21
+ :update => 'variant-listing' %>
22
+ </td>
23
+ </tr>
24
+ <% end %>
25
+ <% else %>
26
+ <tr>
27
+ <td colspan="3">None Available.</td>
28
+ </tr>
29
+ <% end %>
30
+ </tbody>
31
+ </table>
32
+ <% unless @product.new_record? or @product.selected_options.empty? %>
33
+ <span id="new-var-link">
34
+ <%= link_to_remote "New Product Variant",
35
+ :url => {:controller => 'products', :action => 'new_variant', :id=> @product},
36
+ :before => "Element.hide('new-var-link');Element.show('var_busy_indicator')",
37
+ :complete => "Element.hide('var_busy_indicator')",
38
+ :update => 'new-variant' %>
39
+ </span>
40
+ <%= image_tag "spinner.gif", :plugin=>"spree", :style => "display:none", :id => 'var_busy_indicator' %>
41
+ <% end %>
42
+
43
+ <div id="new-variant"></div>
@@ -17,12 +17,12 @@
17
17
  <% for @item in @cart.cart_items %>
18
18
  <tr class="<%= cycle('even', 'odd') %>">
19
19
  <td width="100">
20
- <%= small_image(@item.product) %>
20
+ <%= small_image(@item.variant.product) %>
21
21
  </td>
22
22
  <td valign="top">
23
- <%=link_to @item.product.name, :controller => 'store', :action => 'show', :id => @item.product-%>
24
- <%= variation_options @item.variation if @item.variation %><br/>
25
- <%=truncate(@item.product.description, length = 100, truncate_string = "...")-%>
23
+ <%=link_to @item.variant.product.name, :controller => 'store', :action => 'show', :id => @item.variant.product %>
24
+ <%= variant_options @item.variant %><br/>
25
+ <%=truncate(@item.variant.product.description, length = 100, truncate_string = "...")-%>
26
26
  </td>
27
27
  <td valign="top" width="75">$ <%= sprintf("%0.2f", @item.price) %></td>
28
28
  <td valign="top" width="50"><%= text_field "item[]", :quantity, :size => 1 -%></td>
@@ -20,7 +20,7 @@
20
20
  <% end -%>
21
21
  <table width="780">
22
22
  <tr>
23
- <td rowspan="3"><%= image_tag "spree/spree_logo142x65.gif", :plugin=>"spree" %></td>
23
+ <td rowspan="3"><%= image_tag "spree/spree.jpg", :plugin=>"spree" %></td>
24
24
  <td>
25
25
  <!-- TODO: may want to restrict to admin users only (instead of any authenticated user) -->
26
26
  <% if logged_in? -%>
@@ -6,7 +6,7 @@ Your order has been CANCELED. Please retain this cancellation information for y
6
6
  Order Summary [CANCELED]
7
7
  ============================================================
8
8
  <% for item in @order.line_items -%>
9
- <%=item.product.sku if item.product.sku-%> <%=item.product.name-%> <%= variation_options(item.variation) if item.variation -%> (<%=item.quantity-%>) @ $ <%= sprintf("%0.2f", item.price) %> = $ <%= sprintf("%0.2f", item.price * item.quantity) %>
9
+ <%=item.variant.product.sku if item.variant.product.sku-%> <%=item.variant.product.name-%> <%= variant_options(item.variant) %> (<%=item.quantity-%>) @ $ <%= sprintf("%0.2f", item.price) %> = $ <%= sprintf("%0.2f", item.price * item.quantity) %>
10
10
  <% end -%>
11
11
  ============================================================
12
12
  Subtotal: <%= number_to_currency @order.item_total %>
@@ -6,7 +6,7 @@ Please review and retain the following order information for your records.
6
6
  Order Summary
7
7
  ============================================================
8
8
  <% for item in @order.line_items -%>
9
- <%=item.product.sku if item.product.sku-%> <%=item.product.name-%> <%= variation_options(item.variation) if item.variation -%> (<%=item.quantity-%>) @ $ <%= sprintf("%0.2f", item.price) %> = $ <%= sprintf("%0.2f", item.price * item.quantity) %>
9
+ <%=item.variant.product.sku if item.variant.product.sku-%> <%=item.variant.product.name-%> <%= variant_options(item.variant) %> (<%=item.quantity-%>) @ $ <%= sprintf("%0.2f", item.price) %> = $ <%= sprintf("%0.2f", item.price * item.quantity) %>
10
10
  <% end -%>
11
11
  ============================================================
12
12
  Subtotal: <%= number_to_currency @order.item_total %>
@@ -10,7 +10,7 @@
10
10
  </tr>
11
11
  <% for item in @order.line_items %>
12
12
  <tr >
13
- <td width="300"><%=item.product.name-%> <%= "(" + variation_options(item.variation) + ")" if item.variation %></td>
13
+ <td width="300"><%=item.variant.product.name-%> <%= "(" + variant_options(item.variant) + ")" unless item.variant .option_values.empty? %></td>
14
14
  <td valign="top"><%= number_to_currency item.price -%></td>
15
15
  <td valign="top"><%=item.quantity-%></td>
16
16
  <td valign="top"><%= number_to_currency (item.price * item.quantity)-%></td>
@@ -23,37 +23,38 @@
23
23
  </td>
24
24
  </tr>
25
25
  <% form_for :product, :url => {:controller => :cart, :action => :add} do |f| %>
26
- <input type="hidden" name="product_id" value="<%= @product.id %>"/>
27
- <%= f.hidden_field :id %>
28
- <% unless @product.variations.empty? %>
26
+ <% if @product.variants? %>
29
27
  <tr>
30
- <td class="product-variations">Variations:</td>
28
+ <td class="product-variants">Variants:</td>
31
29
  </tr>
32
- <tr>
33
- <td>
34
- <div id="variations">
35
- <ul>
36
- <% @product.variations.each do |v| %>
37
- <li>
38
- <input type="radio" name="variation_id" value="<%= v.id %>" <%= @product.variations.first == v ? 'checked' : '' %>"/>
39
- <%= variation_options v%>
40
- </li>
41
- <% end%>
42
- </ul>
43
- </div>
44
- </td>
45
- </tr>
46
- <% end%>
47
- <% if @product.tags.size > 0 %>
48
- <tr>
49
- <td>
50
- <div id="Related Products">
51
- <h4>Related Products</h4>
52
- [TODO - list related products]
53
- </div>
54
- </td>
55
- </tr>
56
- <% end %>
30
+ <tr>
31
+ <td>
32
+ <div id="variants">
33
+ <ul>
34
+ <% @product.variants.each do |v| %>
35
+ <% next if v.option_values.empty? %>
36
+ <li>
37
+ <input type="radio" name="id" value="<%= v.id %>" <%= @product.variants.first == v ? 'checked' : '' %>/>
38
+ <%= variant_options v%>
39
+ </li>
40
+ <% end%>
41
+ </ul>
42
+ </div>
43
+ </td>
44
+ </tr>
45
+ <% else %>
46
+ <input type="hidden" name="id" value=<%=@product.variants.first.id %>/>
47
+ <% end%>
48
+ <% if @product.tags.size > 0 %>
49
+ <tr>
50
+ <td>
51
+ <div id="Related Products">
52
+ <h4>Related Products</h4>
53
+ [TODO - list related products]
54
+ </div>
55
+ </td>
56
+ </tr>
57
+ <% end %>
57
58
  <tr>
58
59
  <td>
59
60
  <%= submit_tag 'Add To Cart' %>
@@ -19,7 +19,7 @@ a:hover, a:active {
19
19
  }
20
20
 
21
21
  a:link, a:visited {
22
- color:#265E15;
22
+ color:#3875D7;
23
23
  }
24
24
 
25
25
  img {