Sha256: bb5a076bb2f05170745066188df0ed19c3f48994a6c13899fdf59fb60d3906de

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

require 'httparty'
require 'json'

module Messenger

  class Campfire

    def self.valid_url?(url)
      !!matcher(url)
    rescue NoMethodError
      false
    end

    # URL format:
    #     campfire://api-key:room-id@subdomain.campfirenow.com
    def self.send(url, body, options={})
      raise URLError, "The URL provided is invalid" unless valid_url?(url)
      ssl, api_key, room, subdomain = matcher(url)
      response = HTTParty.post(
        "http#{ssl ? "s" : ""}://#{subdomain}.campfirenow.com/room/#{room}/speak.json",
        :basic_auth => { :username => api_key, :password => "x" },
        :headers => { "Content-Type" => "application/json" },
        :body => { "message" => { "body" => body } }.to_json
      )
      Result.new(success?(response), response)
    end

    def self.obfuscate(url)
      raise URLError, "The URL provided is invalid" unless valid_url?(url)
      ssl, api_key, room, subdomain = matcher(url)
      "campfire#{ssl ? "-ssl" : ""}://xxxx:#{room}@#{subdomain}.campfirenow.com"
    end


  private

    def self.matcher(url)
      url.match(/^campfire(-ssl)?:\/\/([^:]+):([^@]+)@([^\.]+).campfirenow.com/)[1,4]
    end

    def self.success?(response)
      case response.code
      when 200, 201: true
      else
        false
      end
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
messenger-0.2.0 lib/messenger/campfire.rb