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

.access_tokenObject (readonly)

Returns the value of attribute access_token.



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

def access_token
  @access_token
end

.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_oauthObject (readonly)

Returns the value of attribute use_oauth.



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

def use_oauth
  @use_oauth
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



36
37
38
# File 'lib/basecamp/base.rb', line 36

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
20
# 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
  @use_oauth  = false

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

  @connection = Connection.new(self)
end

.establish_oauth_connection!(site, access_token, use_ssl = false, use_xml = true) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/basecamp/base.rb', line 22

def establish_oauth_connection!(site, access_token, use_ssl = false, use_xml = true)
  @site         = site
  @use_ssl      = use_ssl
  @use_xml      = use_xml
  @use_oauth    = true
  @access_token = access_token

  Resource.site         = (use_ssl ? "https" : "http") + "://" + site
  Resource.format       = (use_xml ? :xml : :json)
  Resource.connection.set_header('Authorization', "Bearer #{access_token}")

  @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.



62
63
64
65
# File 'lib/basecamp/base.rb', line 62

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.



70
71
72
73
74
75
# File 'lib/basecamp/base.rb', line 70

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.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/basecamp/base.rb', line 42

def request(path, parameters = {})
  headers = { "Content-Type" => content_type }
  headers.merge!('Authorization' => "Bearer #{@access_token}") if @use_oauth
  if parameters.empty?
    response = Basecamp.connection.get(path, headers)
  else
    response = Basecamp.connection.post(path, StringIO.new(convert_body(parameters)), headers)
  end

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