class Spree::ProductDuplicator
Attributes
product[RW]
Public Class Methods
new(product, include_images = @@clone_images_default)
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 8 def initialize(product, include_images = @@clone_images_default) @product = product @include_images = include_images end
Public Instance Methods
duplicate()
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 13 def duplicate new_product = duplicate_product # don't dup the actual variants, just the characterising types new_product.option_types = product.option_types if product.has_variants? # allow site to do some customization new_product.send(:duplicate_extra, product) if new_product.respond_to?(:duplicate_extra) new_product.save! new_product end
Protected Instance Methods
duplicate_image(image)
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 59 def duplicate_image(image) new_image = image.dup new_image.attachment.attach(image.attachment.blob) new_image.save! new_image end
duplicate_master()
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 40 def duplicate_master master = product.master master.dup.tap do |new_master| new_master.sku = sku_generator(master.sku) new_master.deleted_at = nil new_master.images = master.images.map { |image| duplicate_image image } if @include_images new_master.price = master.price new_master.currency = master.currency end end
duplicate_product()
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 27 def duplicate_product product.dup.tap do |new_product| new_product.name = "COPY OF #{product.name}" new_product.taxons = product.taxons new_product.created_at = nil new_product.deleted_at = nil new_product.updated_at = nil new_product.product_properties = reset_properties new_product.master = duplicate_master new_product.variants = product.variants.map { |variant| duplicate_variant variant } end end
duplicate_variant(variant)
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 51 def duplicate_variant(variant) new_variant = variant.dup new_variant.sku = sku_generator(new_variant.sku) new_variant.deleted_at = nil new_variant.option_values = variant.option_values.map { |option_value| option_value } new_variant end
reset_properties()
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 66 def reset_properties product.product_properties.map do |prop| prop.dup.tap do |new_prop| new_prop.created_at = nil new_prop.updated_at = nil end end end
sku_generator(sku)
click to toggle source
# File lib/spree/core/product_duplicator.rb, line 75 def sku_generator(sku) "COPY OF #{Variant.unscoped.where('sku like ?', "%#{sku}").order(:created_at).last.sku}" end