Module: Basecamp

Defined in:
lib/basecamp/resources/comment.rb,
lib/basecamp/base.rb,
lib/basecamp/record.rb,
lib/basecamp/resource.rb,
lib/basecamp/connection.rb,
lib/basecamp/resources/person.rb,
lib/basecamp/resources/company.rb,
lib/basecamp/resources/message.rb,
lib/basecamp/resources/project.rb,
lib/basecamp/resources/category.rb,
lib/basecamp/resources/milestone.rb,
lib/basecamp/resources/todo_item.rb,
lib/basecamp/resources/todo_list.rb,
lib/basecamp/resources/attachment.rb,
lib/basecamp/resources/time_entry.rb

Overview

Creating different types of categories

The type parameter is required when creating a category. For exampe, to create an attachment category for a particular project:

c = Basecamp::Category.new(:project_id => 1037)
c.type = 'attachment'
c.name = 'Pictures'
c.save # => true

Defined Under Namespace

Classes: Attachment, Category, Comment, Company, Connection, Message, Milestone, Person, Project, Record, Resource, TimeEntry, TodoItem, TodoList

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.passwordObject (readonly)

Returns the value of attribute password.



4
5
6
# File 'lib/basecamp/base.rb', line 4

def password
  @password
end

.siteObject (readonly)

Returns the value of attribute site.



4
5
6
# File 'lib/basecamp/base.rb', line 4

def site
  @site
end

.use_sslObject (readonly)

Returns the value of attribute use_ssl.



4
5
6
# File 'lib/basecamp/base.rb', line 4

def use_ssl
  @use_ssl
end

.use_xmlObject

Returns the value of attribute use_xml.



3
4
5
# File 'lib/basecamp/base.rb', line 3

def use_xml
  @use_xml
end

.userObject (readonly)

Returns the value of attribute user.



4
5
6
# File 'lib/basecamp/base.rb', line 4

def user
  @user
end

Class Method Details

.connectionObject



21
22
23
# File 'lib/basecamp/base.rb', line 21

def connection
  @connection || raise('No connection established')
end

.establish_connection!(site, user, password, use_ssl = false, use_xml = true) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/basecamp/base.rb', line 6

def establish_connection!(site, user, password, use_ssl = false, use_xml = true)
  @site     = site
  @user     = user
  @password = password
  @use_ssl  = use_ssl
  @use_xml  = use_xml

  Resource.user     = user
  Resource.password = password
  Resource.site     = (use_ssl ? "https" : "http") + "://" + site
  Resource.format   = (use_xml ? :xml : :json)

  @connection = Connection.new(self)
end

.record(path, parameters = {}) ⇒ Object

A convenience method for wrapping the result of a query in a Record object. This assumes that the result is a singleton, not a collection.



40
41
42
43
# File 'lib/basecamp/base.rb', line 40

def record(path, parameters={})
  result = request(path, parameters)
  (result && !result.empty?) ? Record.new(result.keys.first, result.values.first) : nil
end

.records(node, path, parameters = {}) ⇒ Object

A convenience method for wrapping the result of a query in Record objects. This assumes that the result is a collection–any singleton result will be wrapped in an array.



48
49
50
51
52
53
# File 'lib/basecamp/base.rb', line 48

def records(node, path, parameters={})
  result = request(path, parameters).values.first or return []
  result = result[node] or return []
  result = [result] unless Array === result
  result.map { |row| Record.new(node, row) }
end

.request(path, parameters = {}) ⇒ Object

Make a raw web-service request to Basecamp. This will return a Hash of Arrays of the response, and may seem a little odd to the uninitiated.



27
28
29
30
31
32
33
34
35
36
# File 'lib/basecamp/base.rb', line 27

def request(path, parameters = {})
  response = Basecamp.connection.post(path, StringIO.new(convert_body(parameters)), "Content-Type" => content_type)

  if response.code.to_i / 100 == 2
    result = XmlSimple.xml_in(response.body, 'keeproot' => true, 'contentkey' => '__content__', 'forcecontent' => true)
    typecast_value(result)
  else
    raise "#{response.message} (#{response.code})"
  end
end