Sha256: 664133966f6a74f7bd8647c5de010946a89341d216f35be9c4fd30fd7322d539
Contents?: true
Size: 1.72 KB
Versions: 1
Compression:
Stored size: 1.72 KB
Contents
require 'money' require 'active_support' module TicketingHub class Order < Resource schema do integer :id, :venue_id, :consumer_id float :commission, :total, default: 0 string :currency datetime :confirmed_at end attr_accessor :consumer_fields has_many :tickets belongs_to :venue belongs_to :consumer def total attributes[:total].to_money currency end def commission attributes[:commission].to_money currency end def consumer_fields @consumer_fields ||= client.get("venues/#{venue_id}/orders/new")['consumer_fields'].map do |field| HashWithIndifferentAccess.new field end end def tickets=(tickets) @tickets = tickets.map { |ticket| Ticket.new ticket, client } end def consumer_fields=(fields) @consumer_fields = fields self.consumer = Consumer.from_fields consumer_fields end def pdf client.get("orders/#{id}", accept: 'application/pdf') end def create attributes={} self.attributes = attributes if tiers = attributes.delete(:tiers) tickets = attributes[:tickets_attributes] ||= [] tiers.each do |tier_id, qty| qty.to_i.times { tickets.push tier_id: tier_id.to_i } end end if (consumer = attributes.delete(:consumer)).try :persisted? (attributes[:consumer_attributes] ||= {})[:email] = consumer.email end venue.orders.build client.post("venues/#{venue_id}/orders", attributes) rescue TicketingHub::BadRequest => error self.tap { errors.add :tickets, error.response_body['message'] } rescue TicketingHub::UnprocessableEntity => error venue.orders.build error.response_body end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ticketinghub-0.0.2 | lib/ticketing_hub/order.rb |