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.
- data/History.txt +5 -0
- data/Manifest.txt +158 -21
- data/config/hoe.rb +2 -1
- data/lib/spree/version.rb +1 -1
- data/starter-app/app/views/layouts/application.rhtml +6 -4
- data/starter-app/db/sample/line_items.yml +6 -4
- data/starter-app/db/sample/{variations.yml → variants.yml} +16 -0
- data/starter-app/log/README +1 -0
- data/starter-app/public/images/spree.jpg +0 -0
- data/starter-app/public/stylesheets/application.css +2 -2
- data/starter-app/script/spec +4 -0
- data/starter-app/script/spec_server +102 -0
- data/starter-app/spec/models/cart_item_spec.rb +50 -0
- data/starter-app/spec/models/cart_spec.rb +51 -0
- data/starter-app/spec/models/line_item_spec.rb +33 -0
- data/starter-app/spec/models/product_spec.rb +29 -0
- data/starter-app/spec/rcov.opts +2 -0
- data/starter-app/spec/spec.opts +6 -0
- data/starter-app/spec/spec_helper.rb +39 -0
- data/starter-app/stories/all.rb +4 -0
- data/starter-app/stories/helper.rb +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/MIT-LICENSE +31 -0
- data/starter-app/vendor/plugins/rspec_on_rails/README +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/Rakefile +9 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/CHANGES +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb +35 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb +4 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec +4 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server +102 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts +6 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb +39 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE +33 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb +49 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb +25 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb +12 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/USAGE +18 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb +30 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb +167 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb +313 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb +25 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb +22 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb +26 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb +61 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb +22 -0
- data/starter-app/vendor/plugins/rspec_on_rails/init.rb +9 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/discover.rb +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb +81 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails.rb +51 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb +47 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb +42 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb +255 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb +66 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb +82 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb +62 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb +14 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb +68 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb +90 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb +171 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb +12 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb +14 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb +21 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb +27 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb +30 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb +66 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb +21 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb +29 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb +130 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb +55 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb +113 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb +70 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb +71 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb +23 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb +36 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb +8 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb +55 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb +83 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb +43 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb +187 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb +112 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb +118 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb +64 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb +18 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb +16 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb +263 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb +54 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb +48 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb +14 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb +783 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb +37 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb +13 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb +62 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb +203 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb +169 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb +65 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb +7 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb +89 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails_suite.rb +7 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/spec_helper.rb +46 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb +56 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb +59 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb +26 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb +58 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb +10 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb +6 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb +13 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/all.rb +10 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/helper.rb +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/steps/people.rb +8 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback +15 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb +25 -0
- data/starter-app/vendor/plugins/rspec_on_rails/tasks/rspec.rake +137 -0
- data/starter-app/vendor/plugins/spree/LICENSE +1 -1
- data/starter-app/vendor/plugins/spree/app/controllers/admin/categories_controller.rb +0 -24
- data/starter-app/vendor/plugins/spree/app/controllers/admin/products_controller.rb +16 -16
- data/starter-app/vendor/plugins/spree/app/controllers/cart_controller.rb +2 -8
- data/starter-app/vendor/plugins/spree/app/helpers/admin/products_helper.rb +1 -1
- data/starter-app/vendor/plugins/spree/app/helpers/spree/base_helper.rb +2 -2
- data/starter-app/vendor/plugins/spree/app/models/cart.rb +7 -20
- data/starter-app/vendor/plugins/spree/app/models/cart_item.rb +3 -6
- data/starter-app/vendor/plugins/spree/app/models/category.rb +6 -22
- data/starter-app/vendor/plugins/spree/app/models/line_item.rb +3 -5
- data/starter-app/vendor/plugins/spree/app/models/option_value.rb +1 -1
- data/starter-app/vendor/plugins/spree/app/models/product.rb +18 -2
- data/starter-app/vendor/plugins/spree/app/models/variant.rb +5 -0
- data/starter-app/vendor/plugins/spree/app/views/admin/categories/_form.rhtml +1 -5
- data/starter-app/vendor/plugins/spree/app/views/admin/overview/index.rhtml +3 -0
- data/starter-app/vendor/plugins/spree/app/views/admin/products/_form.rhtml +2 -2
- data/starter-app/vendor/plugins/spree/app/views/admin/products/{_new_variation.rhtml → _new_variant.rhtml} +1 -1
- data/starter-app/vendor/plugins/spree/app/views/admin/products/_variants.rhtml +43 -0
- data/starter-app/vendor/plugins/spree/app/views/cart/index.rhtml +4 -4
- data/starter-app/vendor/plugins/spree/app/views/layouts/admin.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/order_mailer/cancel.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/order_mailer/confirm.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/shared/_order_details.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/store/show.rhtml +30 -29
- data/starter-app/vendor/plugins/spree/assets/images/spree/spree.jpg +0 -0
- data/starter-app/vendor/plugins/spree/assets/stylesheets/spree-admin.css +1 -1
- data/starter-app/vendor/plugins/spree/assets/stylesheets/store/_controller.css +1 -1
- data/starter-app/vendor/plugins/spree/db/migrate/002_create_cart_items.rb +1 -2
- data/starter-app/vendor/plugins/spree/db/migrate/006_create_line_items.rb +5 -7
- data/starter-app/vendor/plugins/spree/db/migrate/011_create_variants.rb +11 -0
- data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variants.rb +12 -0
- data/starter-app/vendor/plugins/spree/test/unit/product_test.rb +0 -33
- metadata +170 -23
- data/starter-app/vendor/plugins/spree/app/controllers/admin/variations_controller.rb +0 -73
- data/starter-app/vendor/plugins/spree/app/helpers/admin/variations_helper.rb +0 -2
- data/starter-app/vendor/plugins/spree/app/models/variation.rb +0 -8
- data/starter-app/vendor/plugins/spree/app/views/admin/option_types/test.rhtml +0 -8
- data/starter-app/vendor/plugins/spree/app/views/admin/products/_variations.rhtml +0 -41
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/_form.rhtml +0 -33
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/_option_values.rhtml +0 -5
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/list.rhtml +0 -23
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/new.rhtml +0 -14
- data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo142x65.gif +0 -0
- data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo245x112.gif +0 -0
- data/starter-app/vendor/plugins/spree/db/migrate/011_create_variations.rb +0 -11
- data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variations.rb +0 -12
- data/starter-app/vendor/plugins/spree/test/functional/admin/variations_controller_test.rb +0 -18
- data/starter-app/vendor/plugins/spree/test/integration/variations_test.rb +0 -24
- data/starter-app/vendor/plugins/spree/test/unit/cart_item_test.rb +0 -55
- data/starter-app/vendor/plugins/spree/test/unit/cart_test.rb +0 -35
- data/starter-app/vendor/plugins/spree/test/unit/line_item_test.rb +0 -61
- 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
|
-
|
19
|
-
|
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
|
|
@@ -65,8 +65,8 @@ module Spree::BaseHelper
|
|
65
65
|
end
|
66
66
|
|
67
67
|
|
68
|
-
# human readable list of
|
69
|
-
def
|
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(
|
4
|
-
|
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
|
18
|
-
current_item = cart_items.in_cart(
|
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 =>
|
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 :
|
3
|
-
belongs_to :variation
|
2
|
+
belongs_to :variant
|
4
3
|
belongs_to :cart
|
5
4
|
|
6
|
-
validates_presence_of :
|
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.
|
60
|
-
unless self.parent.variations.empty? # new parent has no variations to inherit - leave the current ones alone
|
61
|
-
|
62
|
-
|
63
|
-
|
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 :
|
4
|
-
belongs_to :variation
|
3
|
+
belongs_to :variant
|
5
4
|
|
6
|
-
validates_presence_of :
|
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.
|
13
|
+
line_item.variant = cart_item.variant
|
16
14
|
line_item
|
17
15
|
end
|
18
16
|
|
@@ -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 :
|
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
|
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
|
@@ -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
|
-
|
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>
|
@@ -35,8 +35,8 @@
|
|
35
35
|
:on => 'changed' -%>
|
36
36
|
</p>
|
37
37
|
<br/>
|
38
|
-
<div id="
|
39
|
-
<%= render :partial => '
|
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">
|
@@ -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
|
-
<%=
|
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/
|
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-%> <%=
|
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-%> <%=
|
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-%> <%= "(" +
|
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
|
-
|
27
|
-
<%= f.hidden_field :id %>
|
28
|
-
<% unless @product.variations.empty? %>
|
26
|
+
<% if @product.variants? %>
|
29
27
|
<tr>
|
30
|
-
<td class="product-
|
28
|
+
<td class="product-variants">Variants:</td>
|
31
29
|
</tr>
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
</
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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' %>
|
Binary file
|