Sha256: 15d7bd720bf937d8624c0ffe8df404e38ea8396a15b90e5e6d4dfb0c894471dd

Contents?: true

Size: 1.24 KB

Versions: 6

Compression:

Stored size: 1.24 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, JSON

    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

6 entries across 6 versions & 1 rubygems

Version Path
shipit-engine-0.36.0 app/models/shipit/delivery.rb
shipit-engine-0.35.1 app/models/shipit/delivery.rb
shipit-engine-0.35.0 app/models/shipit/delivery.rb
shipit-engine-0.34.0 app/models/shipit/delivery.rb
shipit-engine-0.33.0 app/models/shipit/delivery.rb
shipit-engine-0.32.0 app/models/shipit/delivery.rb