asana 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -54,7 +54,7 @@ the API.
54
54
  users = Asana::User.all
55
55
 
56
56
  # Get a specific user
57
- user = Asana::User.find(:id)
57
+ user = Asana::User.find(:user_id)
58
58
 
59
59
  # Get the user associated with the API key being used
60
60
  user = Asana::User.me
@@ -76,19 +76,19 @@ users = workspace.users
76
76
  workspaces = Asana::Workspace.all
77
77
 
78
78
  # Get a specific workspace
79
- workspace = Asana::Workspace.find(:id)
79
+ workspace = Asana::Workspace.find(:workspace_id)
80
80
 
81
81
  # Get all projects in a given workspace
82
82
  projects = workspace.projects
83
83
 
84
- # Get all tasks in a given workspace and assigned to the given user
84
+ # Get all tasks in a given workspace that are assigned to the given user
85
85
  tasks = workspace.tasks(:user_id)
86
86
 
87
87
  # Get all users with access to a given workspace
88
88
  users = workspace.users
89
89
 
90
90
  # Create a new task in a given workspace and assign it to the current user
91
- workspace.create_task(task_settings)
91
+ workspace.create_task(:name => 'Get milk from the grocery store')
92
92
  ```
93
93
 
94
94
  ### [Projects][]
@@ -97,14 +97,14 @@ workspace.create_task(task_settings)
97
97
  > single workspace and is accessible to a subset of users in that workspace
98
98
  > depending on its permissions.
99
99
 
100
- **Note:** It is not possible to create a project from the API.
100
+ **Note:** It is not possible to create or delete a project from the API.
101
101
 
102
102
  ```ruby
103
103
  # Get all projects
104
104
  projects = Asana::Project.all
105
105
 
106
106
  # Get a specific project
107
- project = Asana::Project.find(:id)
107
+ project = Asana::Project.find(:project_id)
108
108
 
109
109
  # Get all projects in a given workspace
110
110
  workspace = Asana::Workspace.find(:workspace_id)
@@ -120,11 +120,11 @@ projects = workspace.projects
120
120
 
121
121
  ```ruby
122
122
  # Get all tasks in a given project
123
- project = Asana::Project(:project_id)
123
+ project = Asana::Project.find(:project_id)
124
124
  tasks = project.tasks
125
125
 
126
126
  # Get all tasks in a given workspace
127
- workspace = Asana::Workspace(:workspace_id)
127
+ workspace = Asana::Workspace.find(:workspace_id)
128
128
  tasks = workspace.tasks
129
129
 
130
130
  # Get all stories for a given task
@@ -132,7 +132,7 @@ task = tasks.first
132
132
  stories = task.stories
133
133
 
134
134
  # Create a new task in a given workspace and assign it to the current user
135
- workspace.create_task(task_settings)
135
+ workspace.create_task(:name => 'Get milk from the grocery store')
136
136
 
137
137
  # Create a new story for the given task
138
138
  task.create_story(story_settings)
@@ -145,14 +145,17 @@ task.create_story(story_settings)
145
145
  > such as creating or assigning tasks, or moving tasks between projects.
146
146
  > Comments are also a form of user-generated story.
147
147
 
148
- **Note:** It is not possible to update a story from the API.
148
+ **Note:** It is not possible to update or delete a story from the API.
149
149
 
150
150
  ```ruby
151
151
  # Get all stories for a given task
152
- project = Asana::Project(:project_id)
152
+ project = Asana::Project.find(:project_id)
153
153
  task = project.tasks.first
154
154
  stories = task.stories
155
155
 
156
+ # Get a specific story
157
+ story = Story.find(:story_id)
158
+
156
159
  # Create a new story for the given task
157
160
  task.create_story(story_settings)
158
161
  ```
data/asana.gemspec CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |gem|
13
13
  gem.add_development_dependency 'growl', '~> 1.0.3'
14
14
  gem.add_development_dependency 'guard-minitest', '~> 0.5.0'
15
15
  gem.add_development_dependency 'minitest', '~> 2.12.1'
16
+ gem.add_development_dependency 'rake', '~> 0.9.2.2'
16
17
  gem.add_development_dependency 'vcr', '~> 2.1.0'
17
18
  gem.add_development_dependency 'webmock', '~> 1.8.6'
18
19
 
data/lib/asana.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'active_resource'
2
+
2
3
  require 'asana/config'
3
4
  require 'asana/version'
4
5
 
@@ -44,5 +44,9 @@ module Asana
44
44
  raise ActiveResource::MethodNotAllowed.new(__method__)
45
45
  end
46
46
 
47
+ def to_json(options={})
48
+ super({ :root => 'data' }.merge(options))
49
+ end
50
+
47
51
  end
48
52
  end
@@ -1,6 +1,13 @@
1
1
  module Asana
2
2
  class Project < Asana::Resource
3
+
3
4
  alias :create :method_not_allowed
5
+ alias :destroy :method_not_allowed
6
+
7
+ def self.all_by_task(*args)
8
+ parent_resources :task
9
+ all(*args)
10
+ end
4
11
 
5
12
  def self.all_by_workspace(*args)
6
13
  parent_resources :workspace
@@ -10,5 +17,6 @@ module Asana
10
17
  def tasks
11
18
  Task.all_by_project(:params => { :project_id => self.id })
12
19
  end
20
+
13
21
  end
14
22
  end
@@ -1,10 +1,13 @@
1
1
  module Asana
2
2
  class Story < Asana::Resource
3
+
4
+ alias :destroy :method_not_allowed
3
5
  alias :update :method_not_allowed
4
6
 
5
7
  def self.all_by_task(*args)
6
8
  parent_resources :task
7
9
  all(*args)
8
10
  end
11
+
9
12
  end
10
13
  end
@@ -1,5 +1,6 @@
1
1
  module Asana
2
2
  class Task < Asana::Resource
3
+
3
4
  def self.all_by_project(*args)
4
5
  parent_resources :project
5
6
  all(*args)
@@ -10,14 +11,21 @@ module Asana
10
11
  all(*args)
11
12
  end
12
13
 
13
- def stories
14
- Story.all_by_task(:params => { :task_id => self.id })
14
+ def projects
15
+ Project.all_by_task(:params => { :task_id => self.id })
15
16
  end
16
17
 
17
18
  def create_story(*args)
18
- story = Story.new
19
- query_options = { :task => self.id }
20
- Task.post("#{self.id}/stories", query_options.merge(args.first), story.to_json)
19
+ path = "#{self.id}/stories"
20
+ options = { :task => self.id }
21
+ story = Story.new(options.merge(args.first))
22
+ response = Task.post(path, nil, story.to_json)
23
+ Story.new(connection.format.decode(response.body))
24
+ end
25
+
26
+ def stories
27
+ Story.all_by_task(:params => { :task_id => self.id })
21
28
  end
29
+
22
30
  end
23
31
  end
@@ -1,5 +1,6 @@
1
1
  module Asana
2
2
  class User < Asana::Resource
3
+
3
4
  alias :save :method_not_allowed
4
5
  alias :destroy :method_not_allowed
5
6
 
@@ -11,5 +12,6 @@ module Asana
11
12
  def self.me
12
13
  User.new(get(:me))
13
14
  end
15
+
14
16
  end
15
17
  end
@@ -1,5 +1,6 @@
1
1
  module Asana
2
2
  class Workspace < Asana::Resource
3
+
3
4
  alias :create :method_not_allowed
4
5
  alias :destroy :method_not_allowed
5
6
 
@@ -13,13 +14,15 @@ module Asana
13
14
  end
14
15
 
15
16
  def create_task(*args)
16
- task = Task.new
17
- query_options = { :workspace => self.id, :assignee => 'me' }
18
- Task.post(nil, query_options.merge(args.first), task.to_json)
17
+ options = { :workspace => self.id, :assignee => 'me' }
18
+ task = Task.new(options.merge(args.first))
19
+ response = Task.post(nil, nil, task.to_json)
20
+ Task.new(connection.format.decode(response.body))
19
21
  end
20
22
 
21
23
  def users
22
24
  User.all_by_workspace(:params => { :workspace_id => self.id })
23
25
  end
26
+
24
27
  end
25
28
  end
data/lib/asana/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Asana
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -4,7 +4,7 @@ module Asana
4
4
  describe Project do
5
5
 
6
6
  before do
7
- VCR.insert_cassette('projects', :record => :new_episodes)
7
+ VCR.insert_cassette('projects', :record => :all)
8
8
  Asana.configure do |c|
9
9
  c.api_key = ENV['ASANA_API_KEY']
10
10
  end
@@ -22,15 +22,6 @@ module Asana
22
22
  end
23
23
  end
24
24
 
25
- describe '.all_by_workspace' do
26
- it 'should return all projects for the given workspace' do
27
- workspace = Workspace.all.first
28
- projects = workspace.projects
29
- projects.must_be_instance_of Array
30
- projects.first.must_be_instance_of Project
31
- end
32
- end
33
-
34
25
  describe '.create' do
35
26
  it 'should raise an ActiveResource::MethodNotAllowed exception' do
36
27
  project = Project.new
@@ -38,6 +29,29 @@ module Asana
38
29
  end
39
30
  end
40
31
 
32
+ describe '.find' do
33
+ it 'should return a single project' do
34
+ project = Project.find(Project.all.first.id)
35
+ project.must_be_instance_of Project
36
+ end
37
+ end
38
+
39
+ describe '#destroy' do
40
+ it 'should raise an ActiveResource::MethodNotAllowed exception' do
41
+ project = Project.all.first
42
+ lambda { project.destroy}.must_raise ActiveResource::MethodNotAllowed
43
+ end
44
+ end
45
+
46
+ describe '#update' do
47
+ it 'should update the given project with a new name' do
48
+ project = Project.all.last
49
+ #project.name.wont_equal 'foo'
50
+ project.update_attribute(:name, 'foo')
51
+ project.name.must_equal 'foo'
52
+ end
53
+ end
54
+
41
55
  describe '#tasks' do
42
56
  it 'should return all tasks for the given project' do
43
57
  projects = Project.all.first
@@ -4,7 +4,7 @@ module Asana
4
4
  describe Story do
5
5
 
6
6
  before do
7
- VCR.insert_cassette('stories', :record => :new_episodes)
7
+ VCR.insert_cassette('stories', :record => :all)
8
8
  Asana.configure do |c|
9
9
  c.api_key = ENV['ASANA_API_KEY']
10
10
  end
@@ -14,11 +14,17 @@ module Asana
14
14
  VCR.eject_cassette
15
15
  end
16
16
 
17
- describe '#create_story' do
18
- it 'should create a new story for the given task' do
19
- task = Project.all.first.tasks.first
20
- story = task.create_story(:text => 'foo')
21
- story.must_be_instance_of Net::HTTPCreated
17
+ describe '.find' do
18
+ it 'should return a single story' do
19
+ story_id = Project.all.first.tasks.first.stories.first.id
20
+ Story.find(story_id).must_be_instance_of Story
21
+ end
22
+ end
23
+
24
+ describe '#destroy' do
25
+ it 'should raise an ActiveResource::MethodNotAllowed exception' do
26
+ story = Project.all.first.tasks.first.stories.first
27
+ lambda { story.destroy }.must_raise ActiveResource::MethodNotAllowed
22
28
  end
23
29
  end
24
30
 
@@ -4,7 +4,7 @@ module Asana
4
4
  describe Task do
5
5
 
6
6
  before do
7
- VCR.insert_cassette('tasks', :record => :new_episodes)
7
+ VCR.insert_cassette('tasks', :record => :all)
8
8
  Asana.configure do |c|
9
9
  c.api_key = ENV['ASANA_API_KEY']
10
10
  end
@@ -14,6 +14,38 @@ module Asana
14
14
  VCR.eject_cassette
15
15
  end
16
16
 
17
+ describe '.find' do
18
+ it 'should return a single task' do
19
+ task = Task.find(Workspace.all.first.tasks(:me).first.id)
20
+ task.must_be_instance_of Task
21
+ end
22
+ end
23
+
24
+ describe '#update' do
25
+ it 'should update the given task with a new name' do
26
+ task = Task.find(Workspace.all.first.tasks(:me).first.id)
27
+ task.update_attribute(:name, 'bar')
28
+ task.name.must_equal 'bar'
29
+ end
30
+ end
31
+
32
+ describe '#projects' do
33
+ it 'should return all projects for the given task' do
34
+ task = Project.all.first.tasks.first
35
+ projects = task.projects
36
+ projects.must_be_instance_of Array
37
+ projects.first.must_be_instance_of Project
38
+ end
39
+ end
40
+
41
+ describe '#create_story' do
42
+ it 'should create a new story for the given task' do
43
+ task = Project.all.first.tasks.first
44
+ story = task.create_story(:text => 'foo')
45
+ story.must_be_instance_of Story
46
+ end
47
+ end
48
+
17
49
  describe '#stories' do
18
50
  it 'should return all stories for the given task' do
19
51
  task = Project.all.first.tasks.first
@@ -4,7 +4,7 @@ module Asana
4
4
  describe User do
5
5
 
6
6
  before do
7
- VCR.insert_cassette('users', :record => :new_episodes)
7
+ VCR.insert_cassette('users', :record => :all)
8
8
  Asana.configure do |c|
9
9
  c.api_key = ENV['ASANA_API_KEY']
10
10
  end
@@ -15,23 +15,13 @@ module Asana
15
15
  end
16
16
 
17
17
  describe '.all' do
18
- it 'should return all users for all of the user\'s workspaces' do
18
+ it 'should return all users for all of the given user\'s workspaces' do
19
19
  users = User.all
20
20
  users.must_be_instance_of Array
21
21
  users.first.must_be_instance_of User
22
22
  end
23
23
  end
24
24
 
25
- describe '.all_by_workspace' do
26
- it 'should return all users for the given workspace' do
27
- user = User.me
28
- workspace = user.workspaces.first
29
- users = workspace.users
30
- users.must_be_instance_of Array
31
- users.first.must_be_instance_of User
32
- end
33
- end
34
-
35
25
  describe '.find' do
36
26
  it 'should return the user with the given ID' do
37
27
  user = User.me
@@ -49,24 +39,24 @@ module Asana
49
39
  end
50
40
  end
51
41
 
52
- describe '#save' do
42
+ describe '#destroy' do
53
43
  it 'should raise an ActiveResource::MethodNotAllowed exception' do
54
44
  user = User.me
55
- lambda { user.save }.must_raise ActiveResource::MethodNotAllowed
45
+ lambda { user.destroy }.must_raise ActiveResource::MethodNotAllowed
56
46
  end
57
47
  end
58
48
 
59
- describe '#update' do
49
+ describe '#save' do
60
50
  it 'should raise an ActiveResource::MethodNotAllowed exception' do
61
51
  user = User.me
62
- lambda { user.update_attribute(:name, 'foo') }.must_raise ActiveResource::MethodNotAllowed
52
+ lambda { user.save }.must_raise ActiveResource::MethodNotAllowed
63
53
  end
64
54
  end
65
55
 
66
- describe '#destroy' do
56
+ describe '#update' do
67
57
  it 'should raise an ActiveResource::MethodNotAllowed exception' do
68
58
  user = User.me
69
- lambda { user.destroy }.must_raise ActiveResource::MethodNotAllowed
59
+ lambda { user.update_attribute(:name, 'foo') }.must_raise ActiveResource::MethodNotAllowed
70
60
  end
71
61
  end
72
62
 
@@ -4,7 +4,7 @@ module Asana
4
4
  describe Workspace do
5
5
 
6
6
  before do
7
- VCR.insert_cassette('workspaces', :record => :new_episodes)
7
+ VCR.insert_cassette('workspaces', :record => :all)
8
8
  Asana.configure do |c|
9
9
  c.api_key = ENV['ASANA_API_KEY']
10
10
  end
@@ -22,11 +22,40 @@ module Asana
22
22
  end
23
23
  end
24
24
 
25
+ describe '.find' do
26
+ it 'should return a single workspace' do
27
+ workspace = Workspace.find(Workspace.all.first.id)
28
+ workspace.must_be_instance_of Workspace
29
+ end
30
+ end
31
+
32
+ describe '#create' do
33
+ it 'should raise an ActiveResource::MethodNotAllowed exception' do
34
+ workspace = Workspace.new
35
+ lambda { workspace.save }.must_raise ActiveResource::MethodNotAllowed
36
+ end
37
+ end
38
+
25
39
  describe '#create_task' do
26
40
  it 'should create a new task for the given workspace' do
27
41
  workspace = Workspace.all.first
28
- task = workspace.create_task(:name => 'foo')
29
- task.must_be_instance_of Net::HTTPCreated
42
+ task = workspace.create_task(:name => 'this is it', :assignee => 'me')
43
+ task.must_be_instance_of Task
44
+ end
45
+ end
46
+
47
+ describe '#update' do
48
+ it 'should update the given workspace with a new name' do
49
+ workspace = Workspace.all.last
50
+ workspace.update_attribute(:name, 'foo')
51
+ workspace.name.must_equal 'foo'
52
+ end
53
+ end
54
+
55
+ describe '#destroy' do
56
+ it 'should raise an ActiveResource::MethodNotAllowed exception' do
57
+ workspace = Workspace.all.first
58
+ lambda { workspace.destroy }.must_raise ActiveResource::MethodNotAllowed
30
59
  end
31
60
  end
32
61
 
@@ -58,19 +87,5 @@ module Asana
58
87
  end
59
88
  end
60
89
 
61
- describe '#create' do
62
- it 'should raise an ActiveResource::MethodNotAllowed exception' do
63
- workspace = Workspace.new
64
- lambda { workspace.save }.must_raise ActiveResource::MethodNotAllowed
65
- end
66
- end
67
-
68
- describe '#destroy' do
69
- it 'should raise an ActiveResource::MethodNotAllowed exception' do
70
- workspace = Workspace.all.first
71
- lambda { workspace.destroy }.must_raise ActiveResource::MethodNotAllowed
72
- end
73
- end
74
-
75
90
  end
76
91
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asana
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-20 00:00:00.000000000 Z
12
+ date: 2012-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activeresource
@@ -75,6 +75,22 @@ dependencies:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: 2.12.1
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.9.2.2
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.9.2.2
78
94
  - !ruby/object:Gem::Dependency
79
95
  name: vcr
80
96
  requirement: !ruby/object:Gem::Requirement