solidus_asset_variant_options 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +10 -0
  5. data/LICENSE +26 -0
  6. data/README.md +55 -0
  7. data/Rakefile +21 -0
  8. data/app/controllers/spree/admin/images_controller_decorator.rb +14 -0
  9. data/app/helpers/spree/admin/images_helper_decorator.rb +11 -0
  10. data/app/models/spree/image_decorator.rb +10 -0
  11. data/app/models/spree/product_decorator.rb +7 -0
  12. data/app/models/spree/variant_decorator.rb +4 -0
  13. data/app/models/spree/variant_image.rb +13 -0
  14. data/app/overrides/spree/admin/images/_form/replace_variant_select_with_multi_select.html.erb.deface +15 -0
  15. data/app/overrides/spree/products/_thumbnails/replace_thumbnail_classes_with_classes_including_variant_ids.html.erb.deface +20 -0
  16. data/bin/rails +7 -0
  17. data/circle.yml +6 -0
  18. data/config/locales/en.yml +5 -0
  19. data/config/routes.rb +3 -0
  20. data/db/migrate/20131212185245_create_spree_assets_variants.rb +8 -0
  21. data/db/migrate/20140115160024_add_id_to_spree_assets_variants.rb +6 -0
  22. data/db/migrate/20140411185638_add_position_to_spree_assets_variants.rb +5 -0
  23. data/lib/generators/solidus_asset_variant_options/install/install_generator.rb +20 -0
  24. data/lib/solidus_asset_variant_options.rb +1 -0
  25. data/lib/spree_asset_variant_options.rb +2 -0
  26. data/lib/spree_asset_variant_options/engine.rb +22 -0
  27. data/lib/spree_asset_variant_options/factories.rb +2 -0
  28. data/solidus_asset_variant_options.gemspec +31 -0
  29. data/spec/helpers/spree/admin/images_helper_decorator_spec.rb +24 -0
  30. data/spec/models/spree/image_decorator_spec.rb +23 -0
  31. data/spec/models/spree/product_decorator_spec.rb +21 -0
  32. data/spec/models/spree/variant_decorator_spec.rb +38 -0
  33. data/spec/spec_helper.rb +60 -0
  34. data/spec/support/images/green.jpeg +0 -0
  35. metadata +215 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ee127972622ae9236a5f62a6ee8e8c95e6c8634b
4
+ data.tar.gz: 7ecf27a0bc64d7354c4959d7caf33d5dddb2efa3
5
+ SHA512:
6
+ metadata.gz: 1caa57e9ecb6a0dcf2e563e5369facbf420702d9e73726b7d89741a50d32f09c0ca7ec25061545adb837218bb052650349116e427090dcaafbb40a8d8f980942
7
+ data.tar.gz: 41e1f69f073159c7fe059e36a1374a295f4d40df45cc2de2e05fdac127741ca309af86be2f44f05231a4a9429a4d8ab5bc07154fb346ac618c0322b321a7ef87
@@ -0,0 +1,15 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .project
7
+ .sass-cache
8
+ coverage
9
+ Gemfile.lock
10
+ tmp
11
+ nbproject
12
+ pkg
13
+ *.swp
14
+ spec/dummy
15
+ .ruby-version
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "solidus", github: "solidusio/solidus", branch: "master"
4
+ gem "solidus_auth_devise", "~> 1.0"
5
+
6
+ group :development, :test do
7
+ gem "pry-rails"
8
+ end
9
+
10
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2013 Bonobos, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,55 @@
1
+ Solidus Asset Variant Options
2
+ =============================
3
+
4
+ Adds the ability for admins to use the same image asset for multiple variants.
5
+ Originally a fork of [jpdesigndev/spree_asset_variant_options](https://github.com/jpdesigndev/spree_asset_variant_options).
6
+
7
+ [![Circle CI](https://circleci.com/gh/solidusio/solidus_asset_variant_options.svg?style=shield)](https://circleci.com/gh/solidusio/solidus_asset_variant_options/tree/master)
8
+
9
+ Installation
10
+ ------------
11
+
12
+ Add solidus_asset_variant_options to your Gemfile:
13
+
14
+ ```ruby
15
+ gem "solidus_asset_variant_options"
16
+ ```
17
+
18
+ Bundle your dependencies and run the installation generator:
19
+
20
+ ```shell
21
+ bundle
22
+ bundle exec rails g solidus_asset_variant_options:install
23
+ ```
24
+
25
+ Since this extension changes the way images are associated, if you've got any
26
+ existing ones you'll need to add the association back in. This can be
27
+ accomplished by running:
28
+
29
+ ```ruby
30
+ Spree::Image.find_each do |image|
31
+ if image.viewable_type == "Spree::Variant"
32
+ image.variants << image.viewable
33
+ end
34
+ end
35
+ ```
36
+
37
+ Afterwards it is recommended to consolidate the images in the admin.
38
+
39
+ Testing
40
+ -------
41
+
42
+ First bundle your dependencies, then run `rake`. `rake` will default to
43
+ building the dummy app if it does not exist, then it will run specs. The dummy
44
+ app can be regenerated by using `rake test_app`.
45
+
46
+ ```shell
47
+ bundle exec rake
48
+ ```
49
+
50
+ When testing your applications integration with this extension you may use it's factories.
51
+ Simply add this require statement to your spec_helper:
52
+
53
+ ```ruby
54
+ require "spree_asset_variant_options/factories"
55
+ ```
@@ -0,0 +1,21 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "rspec/core/rake_task"
5
+ require "spree/testing_support/extension_rake"
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default do
10
+ if Dir["spec/dummy"].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir("../../")
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
16
+
17
+ desc "Generates a dummy app for testing"
18
+ task :test_app do
19
+ ENV["LIB_NAME"] = "solidus_asset_variant_options"
20
+ Rake::Task["extension:test_app"].invoke
21
+ end
@@ -0,0 +1,14 @@
1
+ Spree::Admin::ImagesController.class_eval do
2
+ create.before :set_variants
3
+ update.before :set_variants
4
+
5
+ private
6
+
7
+ def set_variants
8
+ @image.variant_ids = viewable_ids
9
+ end
10
+
11
+ def viewable_ids
12
+ params[:image][:viewable_ids].reject(&:blank?)
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ Spree::Admin::ImagesHelper.class_eval do
2
+ alias :original_options_text_for :options_text_for
3
+
4
+ def options_text_for image
5
+ if image.variants.any?
6
+ image.variants.map { |variant| variant.sku_and_options_text }.join('; ')
7
+ else
8
+ original_options_text_for image
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ Spree::Image.class_eval do
2
+ attr_accessor :viewable_ids
3
+
4
+ has_many :variant_images, class_name: '::Spree::VariantImage'
5
+ has_many :variants, through: :variant_images
6
+
7
+ def variant_html_classes
8
+ variant_ids.map { |variant| "tmb-#{variant}"}.join(" ")
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ Spree::Product.class_eval do
2
+ has_many :nonuniq_variant_images, -> { order(:position) }, source: :images, through: :variants_including_master
3
+
4
+ def variant_images
5
+ nonuniq_variant_images.distinct
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ Spree::Variant.class_eval do
2
+ has_many :variant_images, -> { order(:position) }, class_name: '::Spree::VariantImage'
3
+ has_many :images, through: :variant_images, source: :image
4
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ class VariantImage < ActiveRecord::Base
3
+ self.table_name = :spree_assets_variants
4
+ belongs_to :image, class_name: 'Spree::Image'
5
+ belongs_to :variant, class_name: 'Spree::Variant', touch: true
6
+
7
+ scope :with_position, -> { where("position IS NOT NULL") }
8
+ default_scope -> { order("#{self.table_name}.position") }
9
+
10
+ # on create only just in case there are some lingering in the system
11
+ validates_uniqueness_of :image_id, scope: :variant_id, on: :create
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ <!-- replace 'erb[loud]:contains("f.select :viewable_id")' -->
2
+ <%= f.hidden_field :viewable_id, value: 1 %>
3
+ <%= f.select :viewable_ids, options_for_select(@variants, @image.variant_ids), {}, {multiple: true, :class => 'select2 fullwidth'} %>
4
+
5
+ <%# Keeping this script tag in the view for now. %>
6
+ <script>
7
+ $('#image_viewable_ids')
8
+ .on('change', function() {
9
+ $('#image_viewable_id').val($(this).val()[0]);
10
+ })
11
+ .select2({
12
+ allowClear: true,
13
+ dropdownAutoWidth: true
14
+ });
15
+ </script>
@@ -0,0 +1,20 @@
1
+ <!-- replace '#product-thumbnails' -->
2
+ <%# no need for thumbnails unless there is more than one image %>
3
+ <% if (@product.images + @product.variant_images).uniq.size > 1 %>
4
+ <ul id="product-thumbnails" class="thumbnails inline" data-hook>
5
+ <% @product.images.each do |i| %>
6
+ <li class='tmb-all <%= i.variant_html_classes %>'>
7
+ <%= link_to(image_tag(i.attachment.url(:mini)), i.attachment.url(:product)) %>
8
+ </li>
9
+ <% end %>
10
+
11
+ <% if @product.has_variants? %>
12
+ <% @product.variant_images.each do |i| %>
13
+ <% next if @product.images.include?(i) %>
14
+ <li class='vtmb <%= i.variant_html_classes %>'>
15
+ <%= link_to(image_tag(i.attachment.url(:mini)), i.attachment.url(:product)) %>
16
+ </li>
17
+ <% end %>
18
+ <% end %>
19
+ </ul>
20
+ <% end %>
@@ -0,0 +1,7 @@
1
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
2
+
3
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
4
+ ENGINE_PATH = File.expand_path('../../lib/spree_asset_variant_options/engine', __FILE__)
5
+
6
+ require 'rails/all'
7
+ require 'rails/engine/commands'
@@ -0,0 +1,6 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.1.5
4
+ test:
5
+ pre:
6
+ - bundle exec rake test_app
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ options: "Options"
@@ -0,0 +1,3 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ # Add your extension routes here
3
+ end
@@ -0,0 +1,8 @@
1
+ class CreateSpreeAssetsVariants < ActiveRecord::Migration
2
+ def change
3
+ create_table :spree_assets_variants, id: false do |t|
4
+ t.references :asset, index: true
5
+ t.references :variant, index: true
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ class AddIdToSpreeAssetsVariants < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_assets_variants, :id, :primary_key
4
+ rename_column :spree_assets_variants, :asset_id, :image_id
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddPositionToSpreeAssetsVariants < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_assets_variants, :position, :integer
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ module SolidusAssetVariantOptions
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_migrations
7
+ run 'bundle exec rake railties:install:migrations FROM=solidus_asset_variant_options'
8
+ end
9
+
10
+ def run_migrations
11
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
12
+ if run_migrations
13
+ run 'bundle exec rake db:migrate'
14
+ else
15
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ require "spree_asset_variant_options"
@@ -0,0 +1,2 @@
1
+ require 'spree_core'
2
+ require 'spree_asset_variant_options/engine'
@@ -0,0 +1,22 @@
1
+ module SpreeAssetVariantOptions
2
+ class Engine < Rails::Engine
3
+ require "spree/core"
4
+ isolate_namespace Spree
5
+ engine_name "solidus_asset_variant_options"
6
+
7
+ config.autoload_paths += %W(#{config.root}/lib)
8
+
9
+ # use rspec for tests
10
+ config.generators do |g|
11
+ g.test_framework :rspec
12
+ end
13
+
14
+ def self.activate
15
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
16
+ Rails.configuration.cache_classes ? require(c) : load(c)
17
+ end
18
+ end
19
+
20
+ config.to_prepare &method(:activate).to_proc
21
+ end
22
+ end
@@ -0,0 +1,2 @@
1
+ FactoryGirl.define do
2
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: UTF-8
2
+
3
+ Gem::Specification.new do |s|
4
+ s.platform = Gem::Platform::RUBY
5
+ s.name = "solidus_asset_variant_options"
6
+ s.version = "1.0.0"
7
+ s.summary = "Allow an image to belong to multiple Spree::Variant models"
8
+ s.description =
9
+ "Spree makes it tedious to upload the same image across" \
10
+ "multiple variants. This gem solves the problem."
11
+ s.required_ruby_version = ">= 2.1"
12
+
13
+ s.author = "Solidus Team"
14
+ s.email = "contact@solidus.io"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.require_path = "lib"
19
+ s.requirements << "none"
20
+
21
+ s.add_dependency "solidus", [">= 1.0.0", "< 1.2.0"]
22
+
23
+ s.add_development_dependency "rspec-rails", "~> 2.13"
24
+ s.add_development_dependency "simplecov"
25
+ s.add_development_dependency "sqlite3"
26
+ s.add_development_dependency "sass-rails"
27
+ s.add_development_dependency "coffee-rails"
28
+ s.add_development_dependency "database_cleaner"
29
+ s.add_development_dependency "factory_girl"
30
+ s.add_development_dependency "ffaker"
31
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Admin::ImagesHelper do
4
+ let(:image) { create :image }
5
+ let(:variant_small) { create :base_variant }
6
+ let(:variant_big) { create :base_variant }
7
+
8
+ before do
9
+ image.variant_ids = [variant_small.id, variant_big.id]
10
+ end
11
+
12
+ describe '#options_text_for' do
13
+ before do
14
+ viewable = double('viewable')
15
+ allow(viewable).to receive(:is_master?) { false }
16
+ allow(image).to receive(:viewable) { viewable }
17
+ end
18
+
19
+ it 'returns list of classes for variants' do
20
+ skip
21
+ expect(options_text_for(image)).to eq("tmb-#{variant_small.id} tmb-#{variant_big.id}")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Image do
4
+ let(:image) { create :image }
5
+ let(:variant_small) { create :base_variant }
6
+ let(:variant_big) { create :base_variant }
7
+
8
+ before do
9
+ image.variant_ids = [variant_small.id, variant_big.id]
10
+ end
11
+
12
+ describe '#variant_html_classes' do
13
+ it 'returns list of classes for variants' do
14
+ expect(image.variant_html_classes).to eq("tmb-#{variant_small.id} tmb-#{variant_big.id}")
15
+ end
16
+ end
17
+
18
+ describe 'variant relationship' do
19
+ it "should have many variants" do
20
+ expect(image.variants.size).to eq(2)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Product do
4
+ let(:product) { create :product }
5
+ let(:variant) { create :base_variant, product: product }
6
+ let(:image_green) { create :image, viewable_type: 'Spree::Variant' }
7
+ let(:image_blue) { create :image, viewable_type: 'Spree::Variant' }
8
+
9
+ before do
10
+ variant.images << image_green
11
+ variant.images << image_blue
12
+ variant.save
13
+ end
14
+
15
+ describe '#variant_images' do
16
+ it 'returns unique list of variant images' do
17
+ expect(product.reload.variant_images.size).to eq(2)
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Variant do
4
+ let(:variant) { create :base_variant }
5
+ let(:image_green) { create :image }
6
+ let(:image_blue) { create :image }
7
+
8
+ before do
9
+ variant.images << image_green
10
+ variant.images << image_blue
11
+ end
12
+
13
+ describe 'variant relationship' do
14
+ it "should have many images" do
15
+ expect(variant.images.size).to eq(2)
16
+ end
17
+ end
18
+
19
+ describe 'images are ordered by variant image positions' do
20
+ it "returns the images ordered by variant image position" do
21
+ variant.variant_images.where(image: image_blue).first.update_attributes(position: 0)
22
+ variant.variant_images.where(image: image_green).first.update_attributes(position: 1)
23
+
24
+ expect(variant.images.first).to eq image_blue
25
+ expect(variant.images.last).to eq image_green
26
+
27
+ variant.variant_images.where(image: image_blue).first.update_attributes(position: 1)
28
+ variant.variant_images.where(image: image_green).first.update_attributes(position: 0)
29
+
30
+ expect(variant.images.first).to eq image_green
31
+ expect(variant.images.last).to eq image_blue
32
+ end
33
+ end
34
+
35
+ it "cannot associate itself to the same image twice" do
36
+ expect { variant.images << image_green }.to raise_error ActiveRecord::RecordInvalid, /Image has already been taken/
37
+ end
38
+ end
@@ -0,0 +1,60 @@
1
+ # Run Coverage report
2
+ require "simplecov"
3
+ SimpleCov.start do
4
+ add_filter "spec/dummy"
5
+ add_group "Controllers", "app/controllers"
6
+ add_group "Helpers", "app/helpers"
7
+ add_group "Mailers", "app/mailers"
8
+ add_group "Models", "app/models"
9
+ add_group "Views", "app/views"
10
+ add_group "Libraries", "lib"
11
+ end
12
+
13
+ # Configure Rails Environment
14
+ ENV["RAILS_ENV"] = "test"
15
+
16
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
17
+
18
+ require "rspec/rails"
19
+
20
+ require "database_cleaner"
21
+ require "ffaker"
22
+
23
+ require "spree/testing_support/factories"
24
+ require "spree_asset_variant_options/factories"
25
+
26
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each { |f| require f }
27
+
28
+ RSpec.configure do |config|
29
+ config.infer_spec_type_from_file_location!
30
+ config.mock_with :rspec
31
+
32
+ config.color = true
33
+ config.order = "random"
34
+
35
+ config.expose_current_running_example_as :example
36
+ config.fail_fast = ENV["FAIL_FAST"] || false
37
+
38
+ config.filter_run focus: true
39
+ config.run_all_when_everything_filtered = true
40
+ config.use_transactional_fixtures = false
41
+
42
+ config.include FactoryGirl::Syntax::Methods
43
+
44
+ # Ensure Suite is set to use transactions for speed.
45
+ config.before :suite do
46
+ DatabaseCleaner.strategy = :transaction
47
+ DatabaseCleaner.clean_with :truncation
48
+ end
49
+
50
+ # Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary.
51
+ config.before :each do |example|
52
+ DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
53
+ DatabaseCleaner.start
54
+ end
55
+
56
+ # After each spec clean the database.
57
+ config.after :each do
58
+ DatabaseCleaner.clean
59
+ end
60
+ end
metadata ADDED
@@ -0,0 +1,215 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_asset_variant_options
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Solidus Team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec-rails
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.13'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.13'
47
+ - !ruby/object:Gem::Dependency
48
+ name: simplecov
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: sqlite3
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: sass-rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: coffee-rails
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: database_cleaner
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: factory_girl
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: ffaker
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ description: Spree makes it tedious to upload the same image acrossmultiple variants.
146
+ This gem solves the problem.
147
+ email: contact@solidus.io
148
+ executables: []
149
+ extensions: []
150
+ extra_rdoc_files: []
151
+ files:
152
+ - ".gitignore"
153
+ - ".rspec"
154
+ - Gemfile
155
+ - LICENSE
156
+ - README.md
157
+ - Rakefile
158
+ - app/controllers/spree/admin/images_controller_decorator.rb
159
+ - app/helpers/spree/admin/images_helper_decorator.rb
160
+ - app/models/spree/image_decorator.rb
161
+ - app/models/spree/product_decorator.rb
162
+ - app/models/spree/variant_decorator.rb
163
+ - app/models/spree/variant_image.rb
164
+ - app/overrides/spree/admin/images/_form/replace_variant_select_with_multi_select.html.erb.deface
165
+ - app/overrides/spree/products/_thumbnails/replace_thumbnail_classes_with_classes_including_variant_ids.html.erb.deface
166
+ - bin/rails
167
+ - circle.yml
168
+ - config/locales/en.yml
169
+ - config/routes.rb
170
+ - db/migrate/20131212185245_create_spree_assets_variants.rb
171
+ - db/migrate/20140115160024_add_id_to_spree_assets_variants.rb
172
+ - db/migrate/20140411185638_add_position_to_spree_assets_variants.rb
173
+ - lib/generators/solidus_asset_variant_options/install/install_generator.rb
174
+ - lib/solidus_asset_variant_options.rb
175
+ - lib/spree_asset_variant_options.rb
176
+ - lib/spree_asset_variant_options/engine.rb
177
+ - lib/spree_asset_variant_options/factories.rb
178
+ - solidus_asset_variant_options.gemspec
179
+ - spec/helpers/spree/admin/images_helper_decorator_spec.rb
180
+ - spec/models/spree/image_decorator_spec.rb
181
+ - spec/models/spree/product_decorator_spec.rb
182
+ - spec/models/spree/variant_decorator_spec.rb
183
+ - spec/spec_helper.rb
184
+ - spec/support/images/green.jpeg
185
+ homepage:
186
+ licenses: []
187
+ metadata: {}
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '2.1'
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements:
203
+ - none
204
+ rubyforge_project:
205
+ rubygems_version: 2.2.5
206
+ signing_key:
207
+ specification_version: 4
208
+ summary: Allow an image to belong to multiple Spree::Variant models
209
+ test_files:
210
+ - spec/helpers/spree/admin/images_helper_decorator_spec.rb
211
+ - spec/models/spree/image_decorator_spec.rb
212
+ - spec/models/spree/product_decorator_spec.rb
213
+ - spec/models/spree/variant_decorator_spec.rb
214
+ - spec/spec_helper.rb
215
+ - spec/support/images/green.jpeg