Sha256: 6b939f2ae3a93fa5c09914f045e3033811781ffe3d94977c254cc8fd76057964

Contents?: true

Size: 884 Bytes

Versions: 1

Compression:

Stored size: 884 Bytes

Contents

require 'sinatra/base'
require 'json'

module Pushpop
  class Web

    def app
      Sinatra::Application
    end

    def routes
      @routes ||= []
    end

    def add_route(url, job)

      if url[0] != '/'
        url = "/#{url}"
      end

      raise "Route #{url} is already set up as a webhook" if routes.include?(url)

      runner = lambda do
        response = self.instance_eval(&job.webhook_proc)

        if response
          {
            status: 'success',
            job: job.name
          }.to_json
        else
          {
            status: 'failed',
            job: job.name,
            message: 'webhook step did not pass'
          }.to_json
        end
      end
      
      Sinatra::Application.get  url, &runner
      Sinatra::Application.post url, &runner
      Sinatra::Application.put  url, &runner

      routes.push(url)
    
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pushpop-0.3.1 lib/pushpop/web.rb