solidus_asset_variant_options 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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