minmb-teambox-client 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/Gemfile +11 -0
  2. data/Gemfile.lock +54 -0
  3. data/History +6 -0
  4. data/License +20 -0
  5. data/README.rdoc +30 -0
  6. data/Rakefile +44 -0
  7. data/VERSION +1 -0
  8. data/examples/conversation.rb +12 -0
  9. data/examples/task.rb +17 -0
  10. data/examples/users.rb +19 -0
  11. data/lib/teambox-client/models/activity.rb +27 -0
  12. data/lib/teambox-client/models/comment.rb +55 -0
  13. data/lib/teambox-client/models/conversation.rb +26 -0
  14. data/lib/teambox-client/models/divider.rb +15 -0
  15. data/lib/teambox-client/models/invitation.rb +21 -0
  16. data/lib/teambox-client/models/membership.rb +15 -0
  17. data/lib/teambox-client/models/note.rb +15 -0
  18. data/lib/teambox-client/models/organization.rb +18 -0
  19. data/lib/teambox-client/models/page.rb +20 -0
  20. data/lib/teambox-client/models/page_slot.rb +16 -0
  21. data/lib/teambox-client/models/person.rb +19 -0
  22. data/lib/teambox-client/models/project.rb +52 -0
  23. data/lib/teambox-client/models/task.rb +66 -0
  24. data/lib/teambox-client/models/task_list.rb +26 -0
  25. data/lib/teambox-client/models/teambox_data.rb +16 -0
  26. data/lib/teambox-client/models/upload.rb +27 -0
  27. data/lib/teambox-client/models/user.rb +11 -0
  28. data/lib/teambox-client/reference_list.rb +49 -0
  29. data/lib/teambox-client/result_set.rb +72 -0
  30. data/lib/teambox-client/teambox.rb +288 -0
  31. data/lib/teambox-client/teambox_oauth.rb +37 -0
  32. data/lib/teambox-client.rb +8 -0
  33. data/minmb-teambox-client.gemspec +96 -0
  34. data/spec/client_spec.rb +17 -0
  35. data/spec/conversation_spec.rb +29 -0
  36. data/spec/project_spec.rb +11 -0
  37. data/spec/resource_spec.rb +77 -0
  38. data/spec/result_set_spec.rb +55 -0
  39. data/spec/spec_helper.rb +7 -0
  40. data/spec/task_lists_spec.rb +17 -0
  41. data/spec/tasks_spec.rb +18 -0
  42. metadata +251 -0
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ # -*- mode: ruby; tab-width: 2; indent-tabs-mode: nil -*-
2
+
3
+ source :rubygems
4
+
5
+ group :development do
6
+ gem 'rake'
7
+ gem 'jeweler'
8
+ gem 'rspec'
9
+ end
10
+
11
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,54 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ minmb-teambox-client (0.4.0)
5
+ httparty (~> 0.7.4)
6
+ json (~> 1.5.1)
7
+ minmb-teambox-client
8
+ oauth2 (~> 0.1.1)
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ addressable (2.2.8)
14
+ crack (0.1.8)
15
+ diff-lcs (1.1.3)
16
+ faraday (0.5.7)
17
+ addressable (~> 2.2.4)
18
+ multipart-post (~> 1.1.0)
19
+ rack (>= 1.1.0, < 2)
20
+ git (1.2.5)
21
+ httparty (0.7.8)
22
+ crack (= 0.1.8)
23
+ jeweler (1.8.4)
24
+ bundler (~> 1.0)
25
+ git (>= 1.2.5)
26
+ rake
27
+ rdoc
28
+ json (1.5.4)
29
+ multi_json (0.0.5)
30
+ multipart-post (1.1.5)
31
+ oauth2 (0.1.1)
32
+ faraday (~> 0.5.0)
33
+ multi_json (~> 0.0.4)
34
+ rack (1.4.1)
35
+ rake (0.9.2.2)
36
+ rdoc (3.12)
37
+ json (~> 1.4)
38
+ rspec (2.11.0)
39
+ rspec-core (~> 2.11.0)
40
+ rspec-expectations (~> 2.11.0)
41
+ rspec-mocks (~> 2.11.0)
42
+ rspec-core (2.11.1)
43
+ rspec-expectations (2.11.2)
44
+ diff-lcs (~> 1.1.3)
45
+ rspec-mocks (2.11.2)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ jeweler
52
+ minmb-teambox-client!
53
+ rake
54
+ rspec
data/History ADDED
@@ -0,0 +1,6 @@
1
+ 0.4.0 - May 25, 2011
2
+ * Updated for lasted API
3
+ 0.3.0 - March 19, 2011
4
+ * Complete revamp, update to latest Teambox API.
5
+ 0.0.1 - June 19, 2010
6
+ * Initial release, inspired by @jnunemaker's Twitter gem
data/License ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009-2011 James Urquhart, Pablo Villalba
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,30 @@
1
+
2
+ minmb-teambox-client is a Ruby wrapper for Teambox ( http://www.teambox.com ) API.
3
+
4
+ * Wraps the API in a client object with resources
5
+ * Inspired by the philosophy of KISS, minimal spaghetti
6
+
7
+ Check out the API docs at http://www.teambox.com/api for more details on the Teambox API.
8
+
9
+ *Note:* this is a forked version pushed to RubyGems.org to fill in for the outdated version
10
+ of the upstream gem.
11
+
12
+ == Getting Started
13
+
14
+ First, install the minmb-teambox-client gem:
15
+
16
+ gem install minmb-teambox-client
17
+
18
+ Now, run "irb -rubygems" and this snippet to get the list of activities:
19
+
20
+ require 'teambox-client'
21
+ client = Teambox::Client.new(:auth => {:username => 'frank', :password => 'papapa'})
22
+ puts client.activities
23
+
24
+ By default, teambox-client will connect to the hosted service at https://teambox.com/api/1; optionally you can:
25
+
26
+ client = Teambox::Client.new(:base_uri => 'http://teambox.mysite.com/api/1', :auth => {:username => 'frank', :password => 'papapa'})
27
+
28
+ == Examples
29
+
30
+ See the examples directory.
data/Rakefile ADDED
@@ -0,0 +1,44 @@
1
+ # -*- mode: ruby; tab-width: nil; indent-tabs-mode: 2; encoding: utf-8 -*-
2
+
3
+ require 'rubygems'
4
+ require 'bundler/setup'
5
+ require 'rake'
6
+
7
+ begin
8
+ require 'jeweler'
9
+ Jeweler::Tasks.new do |gem|
10
+ gem.name = "minmb-teambox-client"
11
+ gem.summary = "A ruby gem wrapper for Teambox API"
12
+ gem.description = "Provides methods to read and write to Teambox for ruby apps"
13
+ gem.email = "martin.hager@minmb.se"
14
+ gem.homepage = "http://github.com/minmb/teambox-ruby-client"
15
+ gem.authors = ["Pablo Villalba", "James Urquhart", "Martin Häger"]
16
+
17
+ gem.add_dependency("httparty", "~> 0.7.4")
18
+ gem.add_dependency("oauth2", "~> 0.1.1")
19
+ gem.add_dependency("json", "~> 1.5.1")
20
+ end
21
+ rescue LoadError
22
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
23
+ end
24
+
25
+ require 'rspec/core/rake_task'
26
+ RSpec::Core::RakeTask.new do |t|
27
+ t.pattern = "spec/*spec.rb"
28
+ end
29
+
30
+ task :default => :spec
31
+
32
+ require 'rake/rdoctask'
33
+ Rake::RDocTask.new do |rdoc|
34
+ if File.exist?('VERSION')
35
+ version = File.read('VERSION')
36
+ else
37
+ version = ""
38
+ end
39
+
40
+ rdoc.rdoc_dir = 'rdoc'
41
+ rdoc.title = "minmb-teambox-client #{version}"
42
+ rdoc.rdoc_files.include('README*')
43
+ rdoc.rdoc_files.include('lib/**/**/*.rb')
44
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.4.0
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'teambox-client')
3
+ require 'pp'
4
+
5
+ TEAMBOX_SERVER = ENV["TEAMBOX_SERVER"] || "http://localhost:3000"
6
+
7
+ client = Teambox::Client.new({:base_uri => "#{TEAMBOX_SERVER}/api/1", :auth => {:user => 'frank', :password => 'papapa'}})
8
+ project = client.project('earthworks')
9
+
10
+ # Make a conversation
11
+ project.create_conversation({:body => 'Test conversation', :simple => true}) # return conversation resource
12
+ pp project.conversations[0].data
data/examples/task.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'teambox-client')
3
+ require 'pp'
4
+
5
+ TEAMBOX_SERVER = ENV["TEAMBOX_SERVER"] || "http://localhost:3000"
6
+
7
+ client = Teambox::Client.new({:base_uri => "#{TEAMBOX_SERVER}/api/1", :auth => {:user => 'frank', :password => 'papapa'}})
8
+ project = client.project('earthworks')
9
+
10
+ # Make a task list with a task, update task to hold
11
+ task_list = project.create_task_list(:name => 'Teambox App')
12
+ task = project.create_task(task_list, {:name => 'Decide what we are going to make'})
13
+ task.status_name = :hold
14
+ task.comment = "We have no idea what we are making!"
15
+ task.save
16
+ pp task.data
17
+ pp task.comments[0].data
data/examples/users.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'teambox-client')
3
+ require 'pp'
4
+
5
+ TEAMBOX_SERVER = ENV["TEAMBOX_SERVER"] || "http://localhost:3000"
6
+
7
+ client = Teambox::Client.new({:base_uri => "#{TEAMBOX_SERVER}/api/1", :auth => {:user => 'frank', :password => 'papapa'}})
8
+ puts "Logged in as #{client.current_user.name} (#{client.current_user.username})"
9
+
10
+ # Get info on single project
11
+ project = client.project('earthworks')
12
+ puts "Earthworks owner: #{client.project('earthworks').owner_user.reload.name}"
13
+
14
+ # Get info on all projects (subject to limits)
15
+ client.projects.each do |project|
16
+ puts "Project: #{project.name} (#{project.permalink})"
17
+ puts " Owned by: #{project.owner_user.name}"
18
+ end
19
+
@@ -0,0 +1,27 @@
1
+ module Teambox
2
+ class Activity < Teambox::Resource
3
+ # Teambox::User who generated this activity
4
+ def user
5
+ get_or_make_reference('User', @data, 'user_id')
6
+ end
7
+
8
+ # The Teambox::Resource which generated this activity
9
+ def target
10
+ get_or_make_reference(@data['target_type'], @data, 'target_id')
11
+ end
12
+
13
+ # The Teambox::Project this activity belongs to
14
+ def project
15
+ get_or_make_reference('Project', @data, 'project_id')
16
+ end
17
+
18
+ # The target of the comment if this is a Teambox::Comment
19
+ def comment_target
20
+ get_or_make_reference(@data['comment_target_type'], @data, 'comment_target_id')
21
+ end
22
+
23
+ def url #:nodoc:
24
+ "/activities/#{@data['id']}"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,55 @@
1
+ module Teambox
2
+ class Comment < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ def project
8
+ get_or_make_reference('Project', @data, 'project_id')
9
+ end
10
+
11
+ # The Teambox::Resource which this comment belongs to
12
+ def target
13
+ get_or_make_reference(@data['target_type'], @data, 'target_id')
14
+ end
15
+
16
+ # The Teambox::Person assigned to the task at time of posting, if the comment belongs to a Teambox::Task
17
+ def assigned
18
+ get_or_make_reference('Person', @data, 'assigned_id')
19
+ end
20
+
21
+ # The Teambox::Person previously assigned to the task at time of posting, if the comment belongs to a Teambox::Task
22
+ def previous_assigned
23
+ get_or_make_reference('Person', @data, 'previous_assigned_id')
24
+ end
25
+
26
+ # The name of the status assigned to the Teambox::Task at time of posting
27
+ def status_name
28
+ @data['status'].nil? ? nil : Teambox::Task::STATUS_NAMES[@data['status']]
29
+ end
30
+
31
+ # The name of the previous status assigned to the Teambox::Task at time of posting
32
+ def previous_status_name
33
+ @data['previous_status'].nil? ? nil : Teambox::Task::STATUS_NAMES[@data['previous_status']]
34
+ end
35
+
36
+ # The due date of the Teambox::Task at time of posting
37
+ def due_on
38
+ @data['due_on'] ? Time.parse(data['due_on']) : nil
39
+ end
40
+
41
+ # The previous due date of the Teambox::Task at time of posting
42
+ def previous_due_on
43
+ @data['previous_due_on'] ? Time.parse(data['previous_due_on']) : nil
44
+ end
45
+
46
+ # A list of Teambox::Upload attached to this comment
47
+ def uploads
48
+ get_or_make_references('Upload', @data, 'upload_ids', 'uploads')
49
+ end
50
+
51
+ def url #:nodoc:
52
+ "/comments/#{@data['id']}"
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,26 @@
1
+ module Teambox
2
+ class Conversation < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ # Last two Teambox::Comment of the conversation (may include first_comment)
8
+ def recent_comments
9
+ get_or_make_references('Comment', @data, 'recent_comment_ids')
10
+ end
11
+
12
+ # First Teambox::Comment of the conversation
13
+ def first_comment
14
+ get_or_make_reference('Comment', @data, 'first_comment_id')
15
+ end
16
+
17
+ # Gets a Teambox::ResultSet of all Teambox::Comment objects belonging to the conversation
18
+ def comments
19
+ @list.client.get("#{url}/comments")
20
+ end
21
+
22
+ def url #:nodoc:
23
+ "/conversations/#{@data['id']}"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module Teambox
2
+ class Divider < Teambox::Resource
3
+ def page
4
+ get_or_make_reference('Page', @data, 'page_id')
5
+ end
6
+
7
+ def project
8
+ get_or_make_reference('Project', @data, 'project_id')
9
+ end
10
+
11
+ def url #:nodoc:
12
+ "/pages/#{@data['page_id']}/dividers/#{@data['id']}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ module Teambox
2
+ class Invitation < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ # Teambox::User who is the subject of this invite
8
+ def invited_user
9
+ get_or_make_reference('User', @data, 'invited_user_id')
10
+ end
11
+
12
+ # Teambox::Project the subject is being invited to
13
+ def project
14
+ get_or_make_reference('Project', @data, 'project_id')
15
+ end
16
+
17
+ def url #:nodoc:
18
+ "/invitations/#{@data['id']}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ module Teambox
2
+ class Membership < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ def organization
8
+ get_or_make_reference('Organization', @data, 'organization_id')
9
+ end
10
+
11
+ def url #:nodoc:
12
+ "/organizations/#{@data['organization_id']}/memberships/#{@data['id']}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Teambox
2
+ class Note < Teambox::Resource
3
+ def page
4
+ get_or_make_reference('Page', @data, 'page_id')
5
+ end
6
+
7
+ def project
8
+ get_or_make_reference('Project', @data, 'project_id')
9
+ end
10
+
11
+ def url #:nodoc:
12
+ "/pages/#{@data['page_id']}/notes/#{@data['id']}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ module Teambox
2
+ class Organization < Teambox::Resource
3
+
4
+ # Gets a Teambox::ResultSet of all Teambox::Project objects belonging to the organization
5
+ def projects
6
+ @list.client.get("#{url}/projects")
7
+ end
8
+
9
+ # Gets a Teambox::ResultSet of all Teambox::Membership objects belonging to the organization
10
+ def memberships
11
+ @list.client.get("#{url}/memberships")
12
+ end
13
+
14
+ def url #:nodoc:
15
+ "/organizations/#{@data['permalink']||@data['id']}"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ module Teambox
2
+ class Page < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ def project
8
+ get_or_make_reference('Project', @data, 'project_id')
9
+ end
10
+
11
+ # Returns an Array of Teambox::PageSlot
12
+ def slots
13
+ get_or_make_references('PageSlot', @data, 'slot_ids', 'slots')
14
+ end
15
+
16
+ def url #:nodoc:
17
+ "/projects/#{@data['project_id']}/pages/#{@data['id']}"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ module Teambox
2
+ class PageSlot < Teambox::Resource
3
+ def page
4
+ get_or_make_reference('Page', @data, 'page_id')
5
+ end
6
+
7
+ # The Teambox::Note, Teambox::Divider, or Teambox::Upload attached to this slot
8
+ def rel_object
9
+ get_or_make_reference(@data['rel_object_type'], @data, 'rel_object_id')
10
+ end
11
+
12
+ def url #:nodoc:
13
+ nil
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module Teambox
2
+ class Person < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ def source_user
8
+ get_or_make_reference('User', @data, 'source_user_id')
9
+ end
10
+
11
+ def project
12
+ get_or_make_reference('Project', @data, 'project_id')
13
+ end
14
+
15
+ def url #:nodoc:
16
+ "/projects/#{@data['project_id']}/people/#{@data['id']}"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,52 @@
1
+ module Teambox
2
+ class Project < Teambox::Resource
3
+ # Teambox::User who created this project
4
+ def owner_user
5
+ get_or_make_reference('User', @data, 'owner_user_id')
6
+ end
7
+
8
+ def url #:nodoc:
9
+ "/projects/#{@data['permalink']||@data['id']}"
10
+ end
11
+
12
+ # Returns a Teambox::ResultSet of conversations in this project
13
+ def conversations(query=nil)
14
+ @list.client.get("#{url}/conversations", query)
15
+ end
16
+
17
+ # Returns a Teambox::ResultSet of task lists in this project
18
+ def task_lists(query=nil)
19
+ @list.client.get("#{url}/task_lists", query)
20
+ end
21
+
22
+ # Returns a Teambox::ResultSet of tasks in this project
23
+ def tasks(query=nil)
24
+ @list.client.get("#{url}/tasks", query)
25
+ end
26
+
27
+ # Returns a Teambox::ResultSet of comments in this project
28
+ def comments(query=nil)
29
+ @list.client.get("#{url}/comments", query)
30
+ end
31
+
32
+ # Creates a new Teambox::Conversation in this project
33
+ def create_conversation(opts={})
34
+ @list.client.post("#{url}/conversations", opts)
35
+ end
36
+
37
+ # Creates a new Teambox::TaskList in this project
38
+ def create_task_list(opts={})
39
+ @list.client.post("#{url}/task_lists", opts)
40
+ end
41
+
42
+ # Creates a new Teambox::Task in this project
43
+ def create_task(task_list, opts={})
44
+ @list.client.post("#{url}/task_lists/#{task_list.id}/tasks", opts)
45
+ end
46
+
47
+ # Creates a new Teambox::Comment in target belonging to this project
48
+ def create_comment(target, opts={})
49
+ @list.client.post("#{url}/comments", opts.merge({'target_type' => target.class.to_s, 'target_id' => target.id}))
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,66 @@
1
+ module Teambox
2
+ class Task < Teambox::Resource
3
+ STATUS_NAMES = [:new, :open, :hold, :resolved, :rejected]
4
+ STATUSES = [0,1,2,3,4]
5
+
6
+ def user
7
+ get_or_make_reference('User', @data, 'user_id')
8
+ end
9
+
10
+ # Teambox::TaskList this task belongs to
11
+ def task_list
12
+ get_or_make_reference('TaskList', @data, 'task_list_id')
13
+ end
14
+
15
+ # First Teambox::Comment of the task
16
+ def first_comment
17
+ get_or_make_reference('Comment', @data, 'first_comment_id')
18
+ end
19
+
20
+ # Last two Teambox::Comment of the task (may include first_comment)
21
+ def recent_comments
22
+ get_or_make_references('Comment', @data, 'recent_comment_ids')
23
+ end
24
+
25
+ # Gets a Teambox::ResultSet of all Teambox::Comment objects belonging to the conversation
26
+ def comments
27
+ @list.client.get("#{url}/comments")
28
+ end
29
+
30
+ # The Teambox::Person assigned this task
31
+ def assigned
32
+ get_or_make_reference('Person', @data, 'assigned_id')
33
+ end
34
+
35
+ # Sets the Teambox::Person assigned this task
36
+ def assigned=(value)
37
+ @data['assigned_id'] = set_reference('Person', value).id
38
+ end
39
+
40
+ # Current due date
41
+ def due_on
42
+ @data['due_on'] ? Date.parse(@data['due_on']) : nil
43
+ end
44
+
45
+ def due_on=(value)
46
+ @data['due_on'] = value.strftime('%Y-%m-%d %H:%M:%S %z')
47
+ end
48
+
49
+ def comment=(value)
50
+ @data['comments_attributes'] = {'0' => {'body' => value}}
51
+ end
52
+
53
+ # Current status
54
+ def status_name
55
+ STATUS_NAMES[@data['status']]
56
+ end
57
+
58
+ def status_name=(value)
59
+ @data['status'] = STATUS_NAMES.index(value.to_sym)
60
+ end
61
+
62
+ def url #:nodoc:
63
+ "/tasks/#{@data['id']}"
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,26 @@
1
+ module Teambox
2
+ class TaskList < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ # Time this task list commences
8
+ def start_on
9
+ @data.has_key?('start_on') ? Time.parse(data['start_on']) : nil
10
+ end
11
+
12
+ # Time this task list finished
13
+ def finish_on
14
+ @data.has_key?('finish_on') ? Time.parse(data['finish_on']) : nil
15
+ end
16
+
17
+ # Time this task list was completed
18
+ def completed_at
19
+ @data.has_key?('completed_at') ? Time.parse(data['completed_at']) : nil
20
+ end
21
+
22
+ def url #:nodoc:
23
+ "/task_lists/#{@data['id']}"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ module Teambox
2
+ class TeamboxData < Teambox::Resource
3
+ def user
4
+ get_or_make_reference('User', @data, 'user_id')
5
+ end
6
+
7
+ # Time this data was processed
8
+ def processed_at
9
+ @data.has_key?('processed_at') ? Time.parse(data['processed_at']) : nil
10
+ end
11
+
12
+ def url #:nodoc:
13
+ nil
14
+ end
15
+ end
16
+ end