Sha256: 3ecc14652833ead564186503cf1bc5140484635ffff7bd6c0692fc7b06992613

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true
module Shipit
  class Delivery < Record
    STATUSES = %w(pending scheduled sent).freeze
    enum status: STATUSES.zip(STATUSES).to_h

    belongs_to :hook

    validates :url, presence: true, url: { no_local: true, allow_blank: true }
    validates :content_type, presence: true

    serialize :response_headers, coder: SafeJSON

    after_commit :purge_old_deliveries, on: :create

    def schedule!
      DeliverHookJob.perform_later(self)
      scheduled!
    end

    def send!
      update!(response: http.post(url, payload), status: 'sent', delivered_at: Time.now)
    end

    def response=(response)
      self.response_code = response.status
      self.response_headers = response.headers
      self.response_body = response.body
    end

    private

    def purge_old_deliveries
      PurgeOldDeliveriesJob.perform_later(hook)
    end

    def http
      Faraday::Connection.new do |connection|
        connection.headers = headers
        connection.adapter(Faraday.default_adapter)
      end
    end

    def headers
      {
        'User-Agent' => 'Shipit Webhook',
        'Content-Type' => content_type,
        'X-Shipit-Event' => event,
        'X-Shipit-Delivery' => id.to_s,
        'Accept' => '*/*',
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shipit-engine-0.39.0 app/models/shipit/delivery.rb