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

Version Path
artfully_ose-1.2.0.pre.19 app/models/orders/pdf_generation.rb
artfully_ose-1.2.0.pre.18 app/models/orders/pdf_generation.rb
artfully_ose-1.2.0.pre.17 app/models/orders/pdf_generation.rb
artfully_ose-1.2.0.pre.16 app/models/orders/pdf_generation.rb