spree_variant_options 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +12 -0
- data/README.md +4 -50
- data/Versionfile +1 -1
- data/{public/images → app/assets/images/store}/out-of-stock.png +0 -0
- data/{public/javascripts → app/assets/javascripts/store}/product.js +0 -0
- data/{public/javascripts → app/assets/javascripts/store}/variant_options.js +4 -4
- data/{public/stylesheets → app/assets/stylesheets/store}/variant_options.css +0 -0
- data/app/models/option_value_decorator.rb +3 -14
- data/app/overrides/spree_variant_options.rb +5 -0
- data/app/views/products/_variant_options.html.erb +6 -5
- data/features/admin_option_types.feature +2 -2
- data/features/step_definitions/option_values.rb +2 -2
- data/features/step_definitions/variant_options.rb +4 -3
- data/features/step_definitions/web_steps.rb +2 -2
- data/features/support/env.rb +18 -23
- data/features/variant_options.feature +11 -11
- data/lib/generators/spree_variant_options/install_generator.rb +11 -2
- data/lib/spree_variant_options.rb +9 -11
- data/lib/spree_variant_options/version.rb +1 -1
- data/spree_variant_options.gemspec +6 -9
- data/test/dummy_hooks/before_migrate.rb +12 -10
- data/test/dummy_hooks/templates/admin/all.css +3 -0
- data/test/dummy_hooks/templates/admin/all.js +1 -0
- data/test/dummy_hooks/templates/store/all.css +3 -0
- data/test/dummy_hooks/templates/store/all.js +1 -0
- data/test/support/images/1.gif +0 -0
- data/test/support/images/1.jpg +0 -0
- data/test/support/images/1.png +0 -0
- data/test/support/images/2.gif +0 -0
- data/test/support/images/2.jpg +0 -0
- data/test/support/images/2.png +0 -0
- data/test/support/images/3.gif +0 -0
- data/test/support/images/3.jpg +0 -0
- data/test/support/images/3.png +0 -0
- data/test/test_helper.rb +8 -19
- data/test/unit/option_value_test.rb +4 -4
- data/test/unit/product_test.rb +1 -1
- metadata +116 -126
- data/app/views/products/_cart_form.html.erb +0 -32
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
Spree Variant Options
|
2
|
-
|
1
|
+
# Spree Variant Options [![Build Status](https://secure.travis-ci.org/citrus/spree_variant_options.png)](http://travis-ci.org/citrus/spree_variant_options)
|
2
|
+
|
3
3
|
|
4
4
|
Spree Variant Options is a very simple spree extension that replaces the radio-button variant selection with groups of option types and values. To get a better idea let's let a few images do the explaining.
|
5
5
|
|
@@ -24,7 +24,7 @@ If you don't already have an existing Spree site, [click here](https://gist.gith
|
|
24
24
|
|
25
25
|
To install Spree Variant Options, just add the following to your Gemfile:
|
26
26
|
|
27
|
-
gem 'spree_variant_options', '0.
|
27
|
+
gem 'spree_variant_options', '0.3.0'
|
28
28
|
|
29
29
|
|
30
30
|
Now, bundle up with:
|
@@ -36,23 +36,13 @@ Next, run the install generator to copy the necessary migration to your project
|
|
36
36
|
|
37
37
|
rails g spree_variant_options:install
|
38
38
|
rake db:migrate
|
39
|
-
|
40
|
-
|
41
|
-
Finally, you'll need include `app/views/products/_variant_options.html.erb` in your `products#show` view...
|
42
|
-
|
43
|
-
If you don't have a custom version of `_cart_form.html.erb` in your application, then don't worry about a thing, spree_variant_options will include the partial for you. Otherwise, just replace the entire `<% if @product.has_variants? %>` block with:
|
44
|
-
|
45
|
-
<%= render 'variant_options' %>
|
46
|
-
|
47
|
-
|
48
|
-
To tie spree_variant_options in with your product photos just delete your local copy of `product.js` or copy spree_variant_options' `product.js` to your local `public/javascripts` directory.
|
49
39
|
|
50
40
|
|
51
41
|
|
52
42
|
Versions
|
53
43
|
--------
|
54
44
|
|
55
|
-
Spree Variant Options
|
45
|
+
Spree Variant Options is compatible with Spree 0.30.x through 0.70.x. Please reference `Versionfile` for more details.
|
56
46
|
|
57
47
|
|
58
48
|
Testing
|
@@ -65,42 +55,6 @@ Clone this repo to where you develop, bundle up, then run `dummier' to get the s
|
|
65
55
|
bundle install
|
66
56
|
bundle exec dummier
|
67
57
|
|
68
|
-
|
69
|
-
This will generate a fresh rails app in test/dummy, install spree & spree_variant_options, then migrate the test database. Sweet.
|
70
|
-
|
71
|
-
|
72
|
-
### Spork + Cucumber
|
73
|
-
|
74
|
-
To run the cucumber features, boot spork like this:
|
75
|
-
|
76
|
-
bundle exec spork
|
77
|
-
|
78
|
-
Then, in another window, run:
|
79
|
-
|
80
|
-
cucumber --drb
|
81
|
-
|
82
|
-
|
83
|
-
### Spork + Test::Unit
|
84
|
-
|
85
|
-
If you want to run shoulda tests, start spork with:
|
86
|
-
|
87
|
-
bundle exec spork TestUnit
|
88
|
-
#or
|
89
|
-
bundle exec spork t
|
90
|
-
|
91
|
-
In another window, run all tests:
|
92
|
-
|
93
|
-
testdrb test/**/*_test.rb
|
94
|
-
|
95
|
-
Or just a specific test:
|
96
|
-
|
97
|
-
testdrb test/unit/supplier_test.rb
|
98
|
-
|
99
|
-
|
100
|
-
### No Spork
|
101
|
-
|
102
|
-
If you don't want to spork, just use rake:
|
103
|
-
|
104
58
|
# cucumber/capybara
|
105
59
|
rake cucumber
|
106
60
|
|
data/Versionfile
CHANGED
File without changes
|
File without changes
|
@@ -150,9 +150,9 @@ function VariantOptions(options, allow_backorders) {
|
|
150
150
|
return to_f(a) < to_f(b) ? -1 : 1;
|
151
151
|
});
|
152
152
|
if (prices.length == 1) {
|
153
|
-
$('
|
153
|
+
$('#product-price .price').html('<span class="price assumed">' + prices[0] + '</span>');
|
154
154
|
} else {
|
155
|
-
$('
|
155
|
+
$('#product-price .price').html('<span class="price from">' + prices[0] + '</span> - <span class="price to">' + prices[prices.length - 1] + '</span>');
|
156
156
|
}
|
157
157
|
return false;
|
158
158
|
}
|
@@ -161,7 +161,7 @@ function VariantOptions(options, allow_backorders) {
|
|
161
161
|
function toggle() {
|
162
162
|
if (variant) {
|
163
163
|
$('#variant_id').val(variant.id);
|
164
|
-
$('
|
164
|
+
$('#product-price .price').removeClass('unselected').text(variant.price);
|
165
165
|
$('button[type=submit]').attr('disabled', false).fadeTo(100, 1);
|
166
166
|
try {
|
167
167
|
select_variant(variant.id, $.map($('a.selected'), function(i) { return $(i).text() }).join(" "));
|
@@ -171,7 +171,7 @@ function VariantOptions(options, allow_backorders) {
|
|
171
171
|
} else {
|
172
172
|
$('#variant_id').val('');
|
173
173
|
$('button[type=submit]').attr('disabled', true).fadeTo(0, 0.5);
|
174
|
-
$('
|
174
|
+
$('#product-price .price').addClass('unselected').text('(select)');
|
175
175
|
}
|
176
176
|
}
|
177
177
|
|
File without changes
|
@@ -2,20 +2,9 @@ OptionValue.class_eval do
|
|
2
2
|
|
3
3
|
default_scope order(:position)
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
:default_style => :small,
|
9
|
-
:path => "assets/option_values/:id/:style/:basename.:extension",
|
10
|
-
:storage => "s3",
|
11
|
-
:s3_credentials => "#{Rails.root}/config/s3.yml"
|
12
|
-
else
|
13
|
-
has_attached_file :image,
|
14
|
-
:styles => { :small => '40x30#', :large => '140x110#' },
|
15
|
-
:default_style => :small,
|
16
|
-
:url => "/assets/option_values/:id/:style/:basename.:extension",
|
17
|
-
:path => ":rails_root/public/assets/option_values/:id/:style/:basename.:extension"
|
18
|
-
end
|
5
|
+
has_attached_file :image,
|
6
|
+
:styles => { :small => '40x30#', :large => '140x110#' },
|
7
|
+
:default_style => :small
|
19
8
|
|
20
9
|
def has_image?
|
21
10
|
image_file_name && !image_file_name.empty?
|
@@ -35,9 +35,10 @@
|
|
35
35
|
</script>
|
36
36
|
|
37
37
|
</div>
|
38
|
-
|
38
|
+
|
39
|
+
<% content_for :head do %>
|
40
|
+
<%= stylesheet_link_tag 'store/variant_options' %>
|
41
|
+
<%= javascript_include_tag 'store/variant_options' %>
|
42
|
+
<% end %>
|
39
43
|
|
40
|
-
<%
|
41
|
-
<%= stylesheet_link_tag 'variant_options' %>
|
42
|
-
<%= javascript_include_tag 'variant_options' %>
|
43
|
-
<% end %>
|
44
|
+
<% end%>
|
@@ -18,14 +18,14 @@ Feature: Admin option type values
|
|
18
18
|
And I fill in the option value fields for the new option value
|
19
19
|
When I press "Update"
|
20
20
|
Then I should see option values for small, medium, large, x-large and xxx-large
|
21
|
-
And I should see image "
|
21
|
+
And I should see image "1.jpg"
|
22
22
|
|
23
23
|
Scenario: Update an existing option value
|
24
24
|
Given I'm on the edit admin option type page for option type "Size"
|
25
25
|
When I fill in the option value fields for option value "Medium"
|
26
26
|
And I press "Update"
|
27
27
|
Then I should see option values for small, large, x-large and xxx-large
|
28
|
-
And I should see image "
|
28
|
+
And I should see image "1.jpg"
|
29
29
|
|
30
30
|
Scenario: Delete an existing option value
|
31
31
|
Given I'm on the edit admin option type page for option type "Size"
|
@@ -19,8 +19,8 @@ Then /^I fill in the option value fields for (.*)$/ do |parent|
|
|
19
19
|
%w(name presentation).each do |name|
|
20
20
|
find(:xpath, ".//input[contains(@name, '[#{name}]')]").set('xxx-large')
|
21
21
|
end
|
22
|
-
find(:xpath, ".//input[contains(@name, '[image]')]").set(
|
23
|
-
end
|
22
|
+
find(:xpath, ".//input[contains(@name, '[image]')]").set(File.expand_path("../../../test/support/images/1.jpg", __FILE__))
|
23
|
+
end
|
24
24
|
end
|
25
25
|
|
26
26
|
|
@@ -10,7 +10,7 @@ end
|
|
10
10
|
|
11
11
|
def random_image
|
12
12
|
unless @sample_images
|
13
|
-
dir = File.expand_path("../../../test/
|
13
|
+
dir = File.expand_path("../../../test/support/images/*", __FILE__)
|
14
14
|
@sample_images = Dir[dir]
|
15
15
|
end
|
16
16
|
image = @sample_images.shuffle.first
|
@@ -22,6 +22,7 @@ end
|
|
22
22
|
|
23
23
|
Given /^I( don't)? allow backorders$/ do |dont|
|
24
24
|
Spree::Config.set(:allow_backorders => dont.nil?)
|
25
|
+
assert_equal dont.nil?, Spree::Config[:allow_backorders]
|
25
26
|
end
|
26
27
|
|
27
28
|
Given /^I have a product( with variants)?( and images)?$/ do |has_variants, has_images|
|
@@ -38,14 +39,14 @@ end
|
|
38
39
|
|
39
40
|
Given /^the first option type has an option value with image "([^"]*)"$/ do |source|
|
40
41
|
flunk unless @product
|
41
|
-
@product.option_types.first.option_values.first.update_attributes(:image => File.open(Rails.root.join("
|
42
|
+
@product.option_types.first.option_values.first.update_attributes(:image => File.open(Rails.root.join("../support/images/#{source}")))
|
42
43
|
end
|
43
44
|
|
44
45
|
Then /^I should see image "([^"]*)" within the first option value$/ do |source|
|
45
46
|
ot = @product.option_types.first
|
46
47
|
ov = ot.option_values.first
|
47
48
|
within ".variant-options a[rel='#{ot.id}-#{ov.id}']" do
|
48
|
-
assert_match "/
|
49
|
+
assert_match "/system/images/#{ov.id}/small/#{source}", find("img").native.attribute("src")
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
@@ -8,8 +8,8 @@ def get_parent(parent)
|
|
8
8
|
when "flash notice"; ".flash"
|
9
9
|
when "first set of options"; "#option_type_#{@product.option_types.first.id}"
|
10
10
|
when "second set of options"; "#option_type_#{@product.option_types[1].id}"
|
11
|
-
when "variant images label"; "#
|
12
|
-
when "price"; "
|
11
|
+
when "variant images label"; "#product-thumbnails"
|
12
|
+
when "price"; "#product-price .price"
|
13
13
|
else "[set-your-parent] #{parent}"
|
14
14
|
end
|
15
15
|
end
|
data/features/support/env.rb
CHANGED
@@ -1,31 +1,26 @@
|
|
1
1
|
ENV["RAILS_ENV"] = "test"
|
2
2
|
ENV["RAILS_ROOT"] = File.expand_path("../../../test/dummy", __FILE__)
|
3
3
|
|
4
|
-
require
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
require 'factory_girl'
|
10
|
-
|
11
|
-
|
12
|
-
I18n.reload!
|
13
|
-
|
14
|
-
ActionController::Base.allow_rescue = false
|
15
|
-
|
16
|
-
Capybara.default_driver = :selenium
|
17
|
-
Capybara.default_selector = :css
|
4
|
+
require "cucumber/rails"
|
5
|
+
require "selenium/webdriver"
|
6
|
+
require "factory_girl"
|
7
|
+
|
8
|
+
# I18n.reload!
|
18
9
|
|
19
|
-
|
20
|
-
|
10
|
+
ActionController::Base.allow_rescue = false
|
11
|
+
|
12
|
+
Capybara.default_driver = :selenium
|
13
|
+
Capybara.default_selector = :css
|
14
|
+
|
15
|
+
Cucumber::Rails::World.use_transactional_fixtures
|
16
|
+
DatabaseCleaner.strategy = :transaction
|
21
17
|
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
Spork.each_run do
|
18
|
+
Dir["#{File.expand_path("../../../", __FILE__)}/test/support/**/*.rb"].each { |f| require f }
|
27
19
|
|
28
|
-
|
29
|
-
World(HelperMethods)
|
20
|
+
World(HelperMethods)
|
30
21
|
|
22
|
+
# ensures spree preferencs are initialized before each test
|
23
|
+
Before do
|
24
|
+
Spree::Config.instance_variable_set("@configuration", nil)
|
25
|
+
Spree::Config.set(:random => rand(1000))
|
31
26
|
end
|
@@ -16,9 +16,9 @@ Feature: Products should have variant options
|
|
16
16
|
|
17
17
|
Scenario: Display option images when visiting a product
|
18
18
|
Given I have a product with variants
|
19
|
-
And the first option type has an option value with image "
|
19
|
+
And the first option type has an option value with image "1.jpg"
|
20
20
|
And I'm on the product page for the first product
|
21
|
-
Then I should see image "
|
21
|
+
Then I should see image "1.jpg" within the first option value
|
22
22
|
|
23
23
|
Scenario: Interact with options for a product
|
24
24
|
Given I have a product with variants
|
@@ -117,13 +117,13 @@ Feature: Products should have variant options
|
|
117
117
|
Then I should see "$24.99" in the price
|
118
118
|
And the add to cart button should be enabled
|
119
119
|
|
120
|
-
Scenario: Should show variant images when a selection is made
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
120
|
+
#Scenario: Should show variant images when a selection is made
|
121
|
+
# Given I have a product with variants and images
|
122
|
+
# And I'm on the product page for the first product
|
123
|
+
# When I follow "Small" within the first set of options
|
124
|
+
# And I follow "Green" within the second set of options
|
125
|
+
# Then the add to cart button should be enabled
|
126
|
+
# And I should see "Small Green" in the variant images label
|
127
|
+
# When I follow "Red" within the second set of options
|
128
|
+
# Then I should see "Small Red" in the variant images label
|
129
129
|
|
@@ -4,15 +4,24 @@ module SpreeVariantOptions
|
|
4
4
|
|
5
5
|
include Rails::Generators::Migration
|
6
6
|
|
7
|
-
def self.count
|
7
|
+
def self.count
|
8
8
|
@count ||= 0
|
9
9
|
(@count += 1) * 3
|
10
10
|
end
|
11
|
+
|
12
|
+
def self.new_migration_number
|
13
|
+
(Time.new.utc + self.count).strftime("%Y%m%d%H%M%S")
|
14
|
+
end
|
11
15
|
|
12
16
|
def self.next_migration_number(path)
|
13
17
|
@time ||= Time.new.utc
|
14
18
|
if ActiveRecord::Base.timestamped_migrations
|
15
|
-
|
19
|
+
files = Dir.entries(Rails.root.join("db/migrate"))
|
20
|
+
migration = new_migration_number
|
21
|
+
while files.join.include?(migration)
|
22
|
+
migration = new_migration_number
|
23
|
+
end
|
24
|
+
migration
|
16
25
|
else
|
17
26
|
"%.3d" % (current_migration_number(dirname) + 1)
|
18
27
|
end
|
@@ -7,19 +7,17 @@ module SpreeVariantOptions
|
|
7
7
|
|
8
8
|
config.autoload_paths += %W(#{config.root}/lib)
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
def self.activate
|
15
|
-
|
16
|
-
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator.rb")) do |c|
|
17
|
-
Rails.env.production? ? require(c) : load(c)
|
10
|
+
config.to_prepare do
|
11
|
+
#loads application's model / class decorators
|
12
|
+
Dir.glob File.expand_path("../../app/**/*_decorator.rb", __FILE__) do |c|
|
13
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
18
14
|
end
|
19
|
-
|
20
|
-
end
|
21
15
|
|
22
|
-
|
16
|
+
#loads application's deface view overrides
|
17
|
+
Dir.glob File.expand_path("../../app/overrides/*.rb", __FILE__) do |c|
|
18
|
+
Rails.application.config.cache_classes ? require(c) : load(c)
|
19
|
+
end
|
20
|
+
end
|
23
21
|
|
24
22
|
end
|
25
23
|
|
@@ -20,18 +20,15 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
22
|
# Runtime
|
23
|
-
s.add_dependency('spree_core', '>= 0.
|
23
|
+
s.add_dependency('spree_core', '>= 0.70.0')
|
24
24
|
|
25
25
|
# Development
|
26
|
-
s.add_development_dependency('spree_sample', '>= 0.
|
27
|
-
s.add_development_dependency('dummier', '>= 0.2.
|
28
|
-
s.add_development_dependency('shoulda', '>=
|
29
|
-
s.add_development_dependency('factory_girl', '>= 2.
|
30
|
-
s.add_development_dependency('cucumber-rails', '>= 1.
|
26
|
+
s.add_development_dependency('spree_sample', '>= 0.70.0')
|
27
|
+
s.add_development_dependency('dummier', '>= 0.2.4')
|
28
|
+
s.add_development_dependency('shoulda', '>= 3.0.0.beta2')
|
29
|
+
s.add_development_dependency('factory_girl', '>= 2.3.2')
|
30
|
+
s.add_development_dependency('cucumber-rails', '>= 1.2.1')
|
31
31
|
s.add_development_dependency('database_cleaner', '>= 0.6.7')
|
32
32
|
s.add_development_dependency('sqlite3', '>= 1.3.4')
|
33
|
-
s.add_development_dependency('spork', '>= 0.9.0.rc9')
|
34
|
-
s.add_development_dependency('spork-testunit', '>= 0.0.5')
|
35
|
-
s.add_development_dependency('turn', '>= 0.8.2')
|
36
33
|
|
37
34
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
-
# install spree &
|
2
|
-
|
1
|
+
# install spree & spree_variant_options
|
2
|
+
run "rails g spree:site"
|
3
|
+
run "rails g spree_variant_options:install"
|
3
4
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
|
5
|
+
# remove all stylesheets except core
|
6
|
+
%w(admin store).each do |ns|
|
7
|
+
js = "app/assets/javascripts/#{ns}/all.js"
|
8
|
+
css = "app/assets/stylesheets/#{ns}/all.css"
|
9
|
+
remove_file js
|
10
|
+
remove_file css
|
11
|
+
template "#{ns}/all.js", js
|
12
|
+
template "#{ns}/all.css", css
|
13
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require admin/spree_core
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require store/spree_core
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/test_helper.rb
CHANGED
@@ -1,23 +1,12 @@
|
|
1
1
|
# Configure Rails Envinronment
|
2
2
|
ENV["RAILS_ENV"] = "test"
|
3
|
-
require 'spork'
|
4
|
-
|
5
|
-
Spork.prefork do
|
6
3
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
+
require "rails/test_help"
|
6
|
+
require "shoulda"
|
7
|
+
require "factory_girl"
|
8
|
+
require "sqlite3"
|
9
|
+
require "faker"
|
10
|
+
begin; require "turn"; rescue LoadError; end
|
14
11
|
|
15
|
-
|
16
|
-
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
|
17
|
-
end
|
18
|
-
|
19
|
-
Spork.each_run do
|
20
|
-
|
21
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
22
|
-
|
23
|
-
end
|
12
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
@@ -1,9 +1,9 @@
|
|
1
|
-
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class OptionValueTest < ActiveSupport::TestCase
|
4
4
|
|
5
5
|
setup do
|
6
|
-
@images = Dir[File.expand_path("../../
|
6
|
+
@images = Dir[File.expand_path("../../support/images/*", __FILE__)]
|
7
7
|
end
|
8
8
|
|
9
9
|
should_have_attached_file :image
|
@@ -44,13 +44,13 @@ class OptionValueTest < ActiveSupport::TestCase
|
|
44
44
|
end
|
45
45
|
|
46
46
|
should "have small large and original images" do
|
47
|
-
dir = File.expand_path("../../dummy/public/
|
47
|
+
dir = File.expand_path("../../dummy/public/system/images/#{@option_value.id}", __FILE__)
|
48
48
|
%w(small large original).each do |size|
|
49
49
|
assert File.exists?(File.join(dir, size, File.basename(@path)))
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
end
|
53
|
+
end
|
54
54
|
|
55
55
|
end
|
56
56
|
|
data/test/unit/product_test.rb
CHANGED
metadata
CHANGED
@@ -1,160 +1,130 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_variant_options
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Spencer Steffen
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-12-30 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: spree_core
|
17
|
-
requirement: &
|
16
|
+
requirement: &70264012210960 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
|
-
requirements:
|
20
|
-
- -
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.70.0
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
26
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *70264012210960
|
25
|
+
- !ruby/object:Gem::Dependency
|
27
26
|
name: spree_sample
|
28
|
-
requirement: &
|
27
|
+
requirement: &70264012210180 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.70.0
|
34
33
|
type: :development
|
35
34
|
prerelease: false
|
36
|
-
version_requirements: *
|
37
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *70264012210180
|
36
|
+
- !ruby/object:Gem::Dependency
|
38
37
|
name: dummier
|
39
|
-
requirement: &
|
38
|
+
requirement: &70264012209520 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 0.2.
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.2.4
|
45
44
|
type: :development
|
46
45
|
prerelease: false
|
47
|
-
version_requirements: *
|
48
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version_requirements: *70264012209520
|
47
|
+
- !ruby/object:Gem::Dependency
|
49
48
|
name: shoulda
|
50
|
-
requirement: &
|
49
|
+
requirement: &70264012208880 !ruby/object:Gem::Requirement
|
51
50
|
none: false
|
52
|
-
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.0.beta2
|
56
55
|
type: :development
|
57
56
|
prerelease: false
|
58
|
-
version_requirements: *
|
59
|
-
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: *70264012208880
|
58
|
+
- !ruby/object:Gem::Dependency
|
60
59
|
name: factory_girl
|
61
|
-
requirement: &
|
60
|
+
requirement: &70264012208400 !ruby/object:Gem::Requirement
|
62
61
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: 2.
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 2.3.2
|
67
66
|
type: :development
|
68
67
|
prerelease: false
|
69
|
-
version_requirements: *
|
70
|
-
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: *70264012208400
|
69
|
+
- !ruby/object:Gem::Dependency
|
71
70
|
name: cucumber-rails
|
72
|
-
requirement: &
|
71
|
+
requirement: &70264012207760 !ruby/object:Gem::Requirement
|
73
72
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 1.
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.2.1
|
78
77
|
type: :development
|
79
78
|
prerelease: false
|
80
|
-
version_requirements: *
|
81
|
-
- !ruby/object:Gem::Dependency
|
79
|
+
version_requirements: *70264012207760
|
80
|
+
- !ruby/object:Gem::Dependency
|
82
81
|
name: database_cleaner
|
83
|
-
requirement: &
|
82
|
+
requirement: &70264012207300 !ruby/object:Gem::Requirement
|
84
83
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
88
87
|
version: 0.6.7
|
89
88
|
type: :development
|
90
89
|
prerelease: false
|
91
|
-
version_requirements: *
|
92
|
-
- !ruby/object:Gem::Dependency
|
90
|
+
version_requirements: *70264012207300
|
91
|
+
- !ruby/object:Gem::Dependency
|
93
92
|
name: sqlite3
|
94
|
-
requirement: &
|
93
|
+
requirement: &70264012206820 !ruby/object:Gem::Requirement
|
95
94
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
99
98
|
version: 1.3.4
|
100
99
|
type: :development
|
101
100
|
prerelease: false
|
102
|
-
version_requirements: *
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 0.9.0.rc9
|
111
|
-
type: :development
|
112
|
-
prerelease: false
|
113
|
-
version_requirements: *id009
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
|
-
name: spork-testunit
|
116
|
-
requirement: &id010 !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
118
|
-
requirements:
|
119
|
-
- - ">="
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: 0.0.5
|
122
|
-
type: :development
|
123
|
-
prerelease: false
|
124
|
-
version_requirements: *id010
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: turn
|
127
|
-
requirement: &id011 !ruby/object:Gem::Requirement
|
128
|
-
none: false
|
129
|
-
requirements:
|
130
|
-
- - ">="
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: 0.8.2
|
133
|
-
type: :development
|
134
|
-
prerelease: false
|
135
|
-
version_requirements: *id011
|
136
|
-
description: Spree Variant Options is a simple spree extension that replaces the radio-button variant selection with groups of option types and values. Please see the documentation for more details.
|
137
|
-
email:
|
101
|
+
version_requirements: *70264012206820
|
102
|
+
description: Spree Variant Options is a simple spree extension that replaces the radio-button
|
103
|
+
variant selection with groups of option types and values. Please see the documentation
|
104
|
+
for more details.
|
105
|
+
email:
|
138
106
|
- spencer@citrusme.com
|
139
107
|
executables: []
|
140
|
-
|
141
108
|
extensions: []
|
142
|
-
|
143
109
|
extra_rdoc_files: []
|
144
|
-
|
145
|
-
files:
|
110
|
+
files:
|
146
111
|
- .gitignore
|
112
|
+
- .travis.yml
|
147
113
|
- Gemfile
|
148
114
|
- LICENSE
|
149
115
|
- README.md
|
150
116
|
- Rakefile
|
151
117
|
- Versionfile
|
118
|
+
- app/assets/images/store/out-of-stock.png
|
119
|
+
- app/assets/javascripts/store/product.js
|
120
|
+
- app/assets/javascripts/store/variant_options.js
|
121
|
+
- app/assets/stylesheets/store/variant_options.css
|
152
122
|
- app/controllers/admin/option_values_controller.rb
|
153
123
|
- app/models/option_value_decorator.rb
|
154
124
|
- app/models/product_decorator.rb
|
125
|
+
- app/overrides/spree_variant_options.rb
|
155
126
|
- app/views/admin/option_types/_option_value_fields.html.erb
|
156
127
|
- app/views/admin/option_types/edit.html.erb
|
157
|
-
- app/views/products/_cart_form.html.erb
|
158
128
|
- app/views/products/_variant_options.html.erb
|
159
129
|
- config/cucumber.yml
|
160
130
|
- config/routes.rb
|
@@ -170,53 +140,60 @@ files:
|
|
170
140
|
- lib/generators/templates/db/migrate/add_image_to_option_values.rb
|
171
141
|
- lib/spree_variant_options.rb
|
172
142
|
- lib/spree_variant_options/version.rb
|
173
|
-
- public/images/out-of-stock.png
|
174
|
-
- public/javascripts/product.js
|
175
|
-
- public/javascripts/variant_options.js
|
176
|
-
- public/stylesheets/variant_options.css
|
177
143
|
- spree_variant_options.gemspec
|
178
144
|
- test/dummy_hooks/after_migrate.rb.sample
|
179
145
|
- test/dummy_hooks/before_migrate.rb
|
146
|
+
- test/dummy_hooks/templates/admin/all.css
|
147
|
+
- test/dummy_hooks/templates/admin/all.js
|
148
|
+
- test/dummy_hooks/templates/store/all.css
|
149
|
+
- test/dummy_hooks/templates/store/all.js
|
180
150
|
- test/support/factories.rb
|
181
151
|
- test/support/helper_methods.rb
|
152
|
+
- test/support/images/1.gif
|
153
|
+
- test/support/images/1.jpg
|
154
|
+
- test/support/images/1.png
|
155
|
+
- test/support/images/2.gif
|
156
|
+
- test/support/images/2.jpg
|
157
|
+
- test/support/images/2.png
|
158
|
+
- test/support/images/3.gif
|
159
|
+
- test/support/images/3.jpg
|
160
|
+
- test/support/images/3.png
|
182
161
|
- test/support/paperclip.rb
|
183
162
|
- test/test_helper.rb
|
184
163
|
- test/unit/option_value_test.rb
|
185
164
|
- test/unit/product_test.rb
|
186
165
|
homepage: https://github.com/citrus/spree_variant_options
|
187
166
|
licenses: []
|
188
|
-
|
189
167
|
post_install_message:
|
190
168
|
rdoc_options: []
|
191
|
-
|
192
|
-
require_paths:
|
169
|
+
require_paths:
|
193
170
|
- lib
|
194
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
171
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
195
172
|
none: false
|
196
|
-
requirements:
|
197
|
-
- -
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
|
200
|
-
segments:
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
segments:
|
201
178
|
- 0
|
202
|
-
|
203
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
|
+
hash: -3966294049605257627
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
181
|
none: false
|
205
|
-
requirements:
|
206
|
-
- -
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
|
209
|
-
segments:
|
182
|
+
requirements:
|
183
|
+
- - ! '>='
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
186
|
+
segments:
|
210
187
|
- 0
|
211
|
-
|
188
|
+
hash: -3966294049605257627
|
212
189
|
requirements: []
|
213
|
-
|
214
190
|
rubyforge_project: spree_variant_options
|
215
|
-
rubygems_version: 1.8.
|
191
|
+
rubygems_version: 1.8.10
|
216
192
|
signing_key:
|
217
193
|
specification_version: 3
|
218
|
-
summary: Spree Variant Options is a simple spree extension that replaces the radio-button
|
219
|
-
|
194
|
+
summary: Spree Variant Options is a simple spree extension that replaces the radio-button
|
195
|
+
variant selection with groups of option types and values.
|
196
|
+
test_files:
|
220
197
|
- features/admin_option_types.feature
|
221
198
|
- features/step_definitions/option_values.rb
|
222
199
|
- features/step_definitions/variant_options.rb
|
@@ -227,8 +204,21 @@ test_files:
|
|
227
204
|
- features/variant_options.feature
|
228
205
|
- test/dummy_hooks/after_migrate.rb.sample
|
229
206
|
- test/dummy_hooks/before_migrate.rb
|
207
|
+
- test/dummy_hooks/templates/admin/all.css
|
208
|
+
- test/dummy_hooks/templates/admin/all.js
|
209
|
+
- test/dummy_hooks/templates/store/all.css
|
210
|
+
- test/dummy_hooks/templates/store/all.js
|
230
211
|
- test/support/factories.rb
|
231
212
|
- test/support/helper_methods.rb
|
213
|
+
- test/support/images/1.gif
|
214
|
+
- test/support/images/1.jpg
|
215
|
+
- test/support/images/1.png
|
216
|
+
- test/support/images/2.gif
|
217
|
+
- test/support/images/2.jpg
|
218
|
+
- test/support/images/2.png
|
219
|
+
- test/support/images/3.gif
|
220
|
+
- test/support/images/3.jpg
|
221
|
+
- test/support/images/3.png
|
232
222
|
- test/support/paperclip.rb
|
233
223
|
- test/test_helper.rb
|
234
224
|
- test/unit/option_value_test.rb
|
@@ -1,32 +0,0 @@
|
|
1
|
-
<%= form_for :order, :url => populate_orders_url do |f| %>
|
2
|
-
<%= hook :inside_product_cart_form do %>
|
3
|
-
|
4
|
-
<% if product_price(@product) %>
|
5
|
-
<%= hook :product_price do %>
|
6
|
-
<p class="prices">
|
7
|
-
<%= t("price") %>
|
8
|
-
<br />
|
9
|
-
<span class="price selling"><%= product_price(@product) %></span>
|
10
|
-
</p>
|
11
|
-
<% end %>
|
12
|
-
<% end %>
|
13
|
-
|
14
|
-
<%= render 'variant_options' %>
|
15
|
-
|
16
|
-
<% if @product.has_stock? || Spree::Config[:allow_backorders] %>
|
17
|
-
<%= text_field_tag (@product.has_variants? ? :quantity : "variants[#{@product.master.id}]"),
|
18
|
-
1, :class => "title", :size => 3 %>
|
19
|
-
|
20
|
-
<button type='submit' class='large primary'>
|
21
|
-
<%= image_tag('/images/add-to-cart.png') + t('add_to_cart') %>
|
22
|
-
</button>
|
23
|
-
<% else %>
|
24
|
-
<%= content_tag('strong', t('out_of_stock')) %>
|
25
|
-
<% end %>
|
26
|
-
|
27
|
-
<% end %>
|
28
|
-
<% end %>
|
29
|
-
|
30
|
-
<% content_for :head do %>
|
31
|
-
<%= javascript_include_tag 'product' %>
|
32
|
-
<% end %>
|