Sha256: 52eefbe486fab2782c2cd82893068da30c3f8af1e8a8cc1ac66246e64248b03d

Contents?: true

Size: 1.57 KB

Versions: 4

Compression:

Stored size: 1.57 KB

Contents

require 'net/https'
require 'uri'
require 'cgi'

require 'houdini/model'
require 'houdini/task'
require 'houdini/task_manager'
require 'houdini/postback_processor'

require 'houdini/engine'

module Houdini
  mattr_accessor :environment, :api_key, :app_url, :app_uri, :app_host

  def self.setup(environment, options)
    self.environment = environment.to_s
    self.api_key = options[:api_key]
    self.app_url = options[:app_host] || options[:app_url]
    self.app_uri = URI.parse(self.app_url)
  end

  RequestError = Class.new(NameError)
  HostError = Class.new(NameError)

  HOST = 'v1.houdiniapi.com'

  def self.submit!(blueprint, class_name, object_id, input_params)
    unless environment.to_s == 'test'
      request(
        :environment  => environment,
        :api_key      => api_key,
        :blueprint    => blueprint,
        :input        => input_params,
        :postback_url => "#{app_uri.scheme}://#{app_uri.host}:#{app_uri.port}/houdini/#{CGI.escape(class_name)}/#{object_id}/postbacks"
      )
    end
  end

  def self.request(params)
    # TODO: this should validate sooner
    raise HostError, "Houdini.app_url should specify http:// or https://" unless app_url.match(/^https?\:\/\//)

    url = File.join("https://", HOST, "tasks.json")
    uri = URI.parse(url)
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    response, body = http.post(uri.path, params.to_json)
    if response.code != "200"
      raise RequestError, "The request to houdini failed with code #{response.code}: #{body}"
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
houdini-0.3.4 lib/houdini.rb
houdini-0.3.3 lib/houdini.rb
houdini-0.3.2 lib/houdini.rb
houdini-0.3.1 lib/houdini.rb