Sha256: eb6f22b46ee8a8498dcab5f20f465aa80028ad32e72fb8b265f780a0217e0e01
Contents?: true
Size: 1.83 KB
Versions: 4
Compression:
Stored size: 1.83 KB
Contents
require 'json' require 'digest/md5' module Orders class PdfGeneration PDF_POST_URL = "http://quick-pdf.geminisbs.net/pdfs.json" PDF_GET_URL = "http://quick-pdf.geminisbs.net/pdfs/:id.json?api_key=:key" PDF_DOWNLOAD_URL = "http://quick-pdf.geminisbs.net/pdfs/:id/download?api_key=:key" ERB_TEMPLATE = <<-ERB <h1>Your Tickets</h1> <% order.tickets.map(&:product).each do |ticket| %> <img src="<%= ticket.qr_code_url %>" /> <% end %> ERB def initialize(order, pdf_api_key = PDF_API_KEY, http_party = HTTParty, sleeper = Kernel) @order = order @pdf_api_key = pdf_api_key @http_party = http_party @sleeper = sleeper end def generate response = http_party.post(PDF_POST_URL, pdf_attributes) json = JSON.parse(response.body) while !json["complete"] response = http_party.get(status_url(json)) json = JSON.parse(response.body) sleeper.sleep 1 unless json["complete"] end download_url(json) end def content ERB.new(ERB_TEMPLATE).result(binding) end private attr_reader :order, :pdf_api_key, :http_party, :sleeper def pdf_attributes { :body => { :api_key => pdf_api_key, :pdf => { :html_doc => content, :filename => filename, :pdf_options => { :margin_top => "0.5in", :margin_bottom => "0.5in", :margin_left => "0.5in", :margin_right => "0.5in" } } } } end def filename "#{Digest::MD5.hexdigest order.id.to_s}.pdf" end def status_url(json) PDF_GET_URL.gsub(":id", json["id"].to_s).gsub(":key", pdf_api_key) end def download_url(json) PDF_DOWNLOAD_URL.gsub(":id", json["id"].to_s).gsub(":key", pdf_api_key) end end end
Version data entries
4 entries across 4 versions & 1 rubygems