Sha256: 8e7561d3dfb13ed07b0743e96e3eb7b9a9cc1fb11a8f319d15f4e5e437910df2

Contents?: true

Size: 1.15 KB

Versions: 6

Compression:

Stored size: 1.15 KB

Contents

module Shipit
  class Delivery < ActiveRecord::Base
    STATUSES = %w(pending scheduled sent).freeze
    enum status: STATUSES.zip(STATUSES).to_h

    belongs_to :hook

    scope :due_for_deletion, -> { where('created_at < ?', 1.month.ago) }

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

    serialize :response_headers, JSON

    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 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.19.0 app/models/shipit/delivery.rb
shipit-engine-0.18.1 app/models/shipit/delivery.rb
shipit-engine-0.18.0 app/models/shipit/delivery.rb
shipit-engine-0.17.0 app/models/shipit/delivery.rb
shipit-engine-0.16.0 app/models/shipit/delivery.rb
shipit-engine-0.15.0 app/models/shipit/delivery.rb