Ruby CampusWire Client
require 'rubygems'
require 'httparty'
# Sample usage
# campuswire = CampuswireClient.new 'username', 'password', 'organization name'
# campuswire.users
# campuswire.users(1)
# ...
class CampuswireClient
include HTTParty
headers 'Content-Type' => "text/xml; charset=utf-8"
def org_path
"organizations/#{@organization}"
end
def initialize(u, p, organization)
self.class.base_uri "https://thecampuswire.com/"
@options = {:basic_auth => {:username => u, :password => p}}
@organization = organization
end
def messages(id = nil)
if id
self.class.get("/messages/#{id}.xml", @options)
else
self.class.get("/#{org_path}/messages.xml", @options)
end
end
# Users
def users(id = nil)
if id
self.class.get("/users/#{id}.xml", @options)
else
self.class.get("/#{org_path}/users.xml", @options)
end
end
def create_user(params = {})
self.class.post("/#{org_path}/users.xml", @options.merge(:body => params.to_xml(:root => "user")))
end
def destroy_user(id = nil)
self.class.delete("/users/#{id}.xml", @options)
end
# Groups
def groups(id = nil)
if id
self.class.get("/groups/#{id}.xml", @options)
else
self.class.get("/#{org_path}/groups.xml", @options)
end
end
def destroy_group(id = nil)
self.class.delete("/groups/#{id}.xml", @options)
end
def create_group(name = nil)
self.class.post("/#{org_path}/groups.xml", @options.merge(:body => {:name => name}.to_xml(:root => "group")))
end
# Memberships
def destroy_membership(membership_id)
self.class.delete("/memberships/#{membership_id}.xml", @options)
end
def create_membership(group_id, user_id)
self.class.post("/users/#{user_id}/memberships.xml", @options.merge(:body => {:group_id => group_id, :user_id => user_id}.to_xml(:root => "membership")))
end
end