| CARVIEW |
Select Language
HTTP/2 302
server: nginx
date: Sun, 21 Dec 2025 11:18:50 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20100406000909
location: https://web.archive.org/web/20100406000909/https://developer.37signals.com/campfire/campfire.rb
server-timing: captures_list;dur=0.622861, exclusion.robots;dur=0.052839, exclusion.robots.policy;dur=0.041275, esindex;dur=0.011397, cdx.remote;dur=20.232127, LoadShardBlock;dur=291.906925, PetaboxLoader3.resolve;dur=29.189039, PetaboxLoader3.datanode;dur=136.573738
x-app-server: wwwb-app204-dc6
x-ts: 302
x-tr: 342
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=1
set-cookie: wb-p-SERVER=wwwb-app204; path=/
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 200
server: nginx
date: Sun, 21 Dec 2025 11:18:51 GMT
content-type: application/x-ruby
content-length: 1515
x-archive-orig-date: Tue, 06 Apr 2010 00:09:09 GMT
x-archive-orig-server: Apache
x-archive-orig-last-modified: Fri, 02 Apr 2010 23:31:52 GMT
x-archive-orig-etag: "5eb-48349624e6a00"
x-archive-orig-accept-ranges: bytes
x-archive-orig-content-length: 1515
x-archive-orig-connection: close
cache-control: max-age=1800
x-archive-guessed-content-type: application/x-ruby
x-archive-guessed-charset: utf-8
memento-datetime: Tue, 06 Apr 2010 00:09:09 GMT
link: ; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: 52_15_20100405195049_crawl103-c/52_15_20100406000735_crawl103_IndexOnly.arc.gz
server-timing: captures_list;dur=0.506093, exclusion.robots;dur=0.019872, exclusion.robots.policy;dur=0.011156, esindex;dur=0.009659, cdx.remote;dur=6.742895, LoadShardBlock;dur=134.176626, PetaboxLoader3.datanode;dur=184.910344, PetaboxLoader3.resolve;dur=125.806572, load_resource;dur=213.410949
x-app-server: wwwb-app204-dc6
x-ts: 200
x-tr: 375
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=1
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
accept-ranges: bytes
require 'rubygems'
require 'httparty'
require 'json'
class Campfire
include HTTParty
base_uri 'https://37s.campfirenow.com'
basic_auth 'find_your_auth_key_on_member_slash_edit', 'x'
headers 'Content-Type' => 'application/json'
def self.rooms
Campfire.get('/rooms.json')["rooms"]
end
def self.room(room_id)
Room.new(room_id)
end
def self.user(id)
Campfire.get("/users/#{id}.json")["user"]
end
end
class Room
attr_reader :room_id
def initialize(room_id)
@room_id = room_id
end
def join
post 'join'
end
def leave
post 'leave'
end
def lock
post 'lock'
end
def unlock
post 'unlock'
end
def message(message)
send_message message
end
def paste(paste)
send_message paste, 'PasteMessage'
end
def play_sound(sound)
send_message sound, 'SoundMessage'
end
def transcript
get('transcript')['messages']
end
private
def send_message(message, type = 'Textmessage')
post 'speak', :body => {:message => {:body => message, :type => type}}.to_json
end
def get(action, options = {})
Campfire.get room_url_for(action), options
end
def post(action, options = {})
Campfire.post room_url_for(action), options
end
def room_url_for(action)
"/room/#{room_id}/#{action}.json"
end
end
# Usage:
#
# room = Campfire.room(1)
# room.join
# room.lock
#
# room.message 'This is a top secret'
# room.paste "FROM THE\n\nAP-AYE"
# room.play_sound 'rimshot'
#
# room.unlock
# room.leave