Skip to content

Instantly share code, notes, and snippets.

@nfriend21
Created March 11, 2015 17:03
Show Gist options
  • Save nfriend21/814999b7d9e8bf36deca to your computer and use it in GitHub Desktop.
Save nfriend21/814999b7d9e8bf36deca to your computer and use it in GitHub Desktop.
class OrderAssetsZipDownloadCreator
def self.build(order)
@order = order
unless @order.download_zip_url.present? #prevent duplicate images from being added to zip.
reupload_assets_with_tag
create_zip
end
end
def self.build_and_assign_to(order)
order.update_attributes(download_zip_url: build(order),
download_zip_created_at: Time.now)
end
private
def self.reupload_assets_with_tag
@order.line_items.each do |item|
if item.job
upload_job_assets(item)
else
upload_product_assets(item)
end
end
upload_order_pdf
upload_order_packing_slip
end
def self.create_zip
begin
zip = Cloudinary::Uploader.multi(order_tag, :format => 'zip')
zip['url']
rescue CloudinaryException
return false
# no images with tag are found by Cloudinary, but let code continue to execute.
end
end
def self.upload_order_pdf
begin
Cloudinary::Uploader.upload(order_pdf_url, tags: [order_tag], public_id: "#{@order.number}_order_pdf_#{@order.id}")
rescue CloudinaryException
return false
end
end
def self.order_pdf_url
if Rails.env.development? || Rails.env.test?
"http://res.cloudinary.com/decosites/image/upload/v1415549444/Test_pdf_cfp8z8.pdf"
else
"http://#{@order.website.subdomain_in_hostname}/site_manager/orders/#{@order.id}/edit.pdf"
end
end
def self.upload_order_packing_slip
begin
Cloudinary::Uploader.upload(order_packing_slip_url, tags: [order_tag], public_id: "#{@order.number}_order_ps_#{@order.id}")
rescue CloudinaryException
return false
end
end
def self.order_packing_slip_url
if Rails.env.development? || Rails.env.test?
"http://res.cloudinary.com/decosites/image/upload/v1415549444/Test_pdf_cfp8z8.pdf"
else
"http://#{@order.website.subdomain_in_hostname}/site_manager/orders/#{@order.id}/edit.pdf?packing_slip=true"
end
end
def self.upload_product_assets(item)
url = download_url(item)
unless url =~ /fallback/
begin
Cloudinary::Uploader.upload(url, tags: [order_tag], public_id: product_asset_public_id(item))
rescue CloudinaryException
return false
end
end
end
def self.upload_job_assets(item)
item.job.jobable.job_items.each do |job_item|
url = download_url(job_item)
unless url =~ /fallback/
begin
Cloudinary::Uploader.upload(url, tags: [order_tag], public_id: job_asset_public_id(item, job_item))
rescue CloudinaryException
return false
end
end
end
end
def self.download_url(asset)
if asset.class == LineItem
asset.download_link
else
asset.cropped? ? CropPresenter.url(asset, true) : asset.picture_url
end
end
def self.item_count(item)
@order.line_items.index(item) + 1
end
def self.job_item_count(item, job_item)
item.job.jobable.job_items.index(job_item) + 1
end
def self.order_tag
"asf_order_#{@order.number}_#{@order.id}"
end
def self.product_asset_public_id(item)
"#{@order.number}-#{item_count(item)}_#{item.product.name.parameterize}_#{item.quantity}_#{item.attrs['size']}_#{item.medium_name.try(:parameterize)}_#{item.id}"
end
def self.job_asset_public_id(item, job_item)
"#{@order.number}-#{item_count(item)}-#{job_item_count(item, job_item)}_#{job_item.picture.my_public_id}_#{job_item.size}_#{job_item.id}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment