asana-ruby 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,11 @@ module Asana
4
4
  raise ActiveResource::MethodNotAllowed.new(__method__)
5
5
  end
6
6
 
7
+ # override
8
+ def reload
9
+ self.class.find id
10
+ end
11
+
7
12
  # OVERRIDING
8
13
  class << self
9
14
  def remove_json_extension(url)
@@ -2,16 +2,6 @@ class Asana::Project < Asana::Resource
2
2
  alias :create :method_not_allowed
3
3
  alias :destroy :method_not_allowed
4
4
 
5
- def self.all_by_task(*args)
6
- parent_resources :task
7
- all(*args)
8
- end
9
-
10
- def self.all_by_workspace(*args)
11
- parent_resources :workspace
12
- all(*args)
13
- end
14
-
15
5
  def tasks
16
6
  get(:tasks).map{|h| Asana::Task.find h["id"]}
17
7
  end
@@ -1,32 +1,43 @@
1
1
  require 'pry'
2
- class Asana::Workspace < Asana::Resource
3
- def create_task(options = {})
4
- options.merge!(assignee: 'me') unless options[:assignee] or options['assignee']
2
+ module Asana
3
+ class Workspace < Asana::Resource
4
+ def create_task(options = {})
5
+ # options.merge!(assignee: 'me') unless options[:assignee] or options['assignee']
6
+ options.merge!(workspace: self.id)
5
7
 
6
- post_body = { data: options }
7
- response = post("tasks", nil, post_body.to_json)
8
- Asana::Task.new(connection.format.decode(response.body))
9
- rescue Exception => e
10
- $stderr.puts "ERROR: #{e.message}"
11
- $stderr.puts "RESPONSE: #{e.response.body}" if e.respond_to?(:response)
12
- end
8
+ post_body = { data: options }
9
+ response = Task.post(nil, nil, post_body.to_json)
10
+ hash = connection.format.decode(response.body)
13
11
 
14
- # From API docs: If you specify a workspace you must also specify an assignee to filter on.
15
- def tasks(options = {})
16
- options.merge!(assignee: 'me') unless options[:assignee] or options['assignee']
12
+ # want to return a persisted record
13
+ Task.find hash["id"]
14
+ rescue Exception => e
15
+ $stderr.puts "ERROR: #{e.message}"
16
+ $stderr.puts "RESPONSE: #{e.response.body}" if e.respond_to?(:response)
17
+ end
17
18
 
18
- get("tasks?assignee=#{options[:assignee]}").map{|h| Asana::Task.find h["id"]}
19
- rescue Exception => e
20
- $stderr.puts "ERROR: #{e.message}"
21
- $stderr.puts "RESPONSE: #{e.response.body}" if e.respond_to?(:response)
22
- end
19
+ # From API docs: If you specify a workspace you must also specify an assignee to filter on.
20
+ def tasks(options = {})
21
+ options.merge!(assignee: 'me') unless options[:assignee] or options['assignee']
23
22
 
24
- def create_tag(options = {})
25
- response = post("tags", nil, {data: options}.to_json)
26
- Asana::Tag.new(connection.format.decode(response.body))
27
- end
23
+ get("tasks?assignee=#{options[:assignee]}").map{|h| Asana::Task.find h["id"]}
24
+ rescue Exception => e
25
+ $stderr.puts "ERROR: #{e.message}"
26
+ $stderr.puts "RESPONSE: #{e.response.body}" if e.respond_to?(:response)
27
+ end
28
+
29
+ # TODO imporve this when Asana API is more advanced
30
+ def find_or_create_tag(options = {})
31
+ tags.find {|t| t.name == options[:name]} || create_tag(options)
32
+ end
33
+
34
+ def create_tag(options = {})
35
+ response = post("tags", nil, {data: options}.to_json)
36
+ Asana::Tag.new(connection.format.decode(response.body))
37
+ end
28
38
 
29
- def tags
30
- get(:tags).map{|h| Asana::Tag.find h["id"]}
39
+ def tags
40
+ get(:tags).map{|h| Asana::Tag.find h["id"]}
41
+ end
31
42
  end
32
43
  end
@@ -1,3 +1,3 @@
1
1
  module Asana
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -29,8 +29,7 @@ describe Asana::Task do
29
29
  end
30
30
  end
31
31
 
32
- describe ".add_tag and .remove_tag" do
33
- let(:tag)
32
+ pending ".add_tag and .remove_tag"
34
33
 
35
- end
34
+ pending "adding duplicate tags"
36
35
  end
@@ -49,5 +49,17 @@ module Asana
49
49
  workspace.tags.first.should be_instance_of Tag
50
50
  end
51
51
  end
52
+
53
+ describe ".find_or_create_tag" do
54
+ it "should not create two tags of the same name" do
55
+ tag1 = workspace.find_or_create_tag(name: 'test .find_or_create_tag')
56
+ tag2 = workspace.find_or_create_tag(name: 'test .find_or_create_tag')
57
+ tag1.id.should == tag2.id
58
+ end
59
+
60
+ it "should only create tag account by one" do
61
+ expect { 3.times { workspace.find_or_create_tag(name: '3 times') } }.to change { workspace.tags.size }.by(1)
62
+ end
63
+ end
52
64
  end
53
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asana-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activeresource
16
- requirement: &2164303060 !ruby/object:Gem::Requirement
16
+ requirement: &2164496820 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2164303060
24
+ version_requirements: *2164496820
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &2164301940 !ruby/object:Gem::Requirement
27
+ requirement: &2164495280 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2164301940
35
+ version_requirements: *2164495280
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &2164300960 !ruby/object:Gem::Requirement
38
+ requirement: &2164530680 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '2.11'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2164300960
46
+ version_requirements: *2164530680
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: guard
49
- requirement: &2164300320 !ruby/object:Gem::Requirement
49
+ requirement: &2164528100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2164300320
57
+ version_requirements: *2164528100
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: guard-rspec
60
- requirement: &2164299280 !ruby/object:Gem::Requirement
60
+ requirement: &2164525920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2164299280
68
+ version_requirements: *2164525920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: vcr
71
- requirement: &2164297400 !ruby/object:Gem::Requirement
71
+ requirement: &2152078520 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 2.2.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2164297400
79
+ version_requirements: *2152078520
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: webmock
82
- requirement: &2164328280 !ruby/object:Gem::Requirement
82
+ requirement: &2152058920 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.8.8
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2164328280
90
+ version_requirements: *2152058920
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: pry
93
- requirement: &2164326420 !ruby/object:Gem::Requirement
93
+ requirement: &2152053660 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2164326420
101
+ version_requirements: *2152053660
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: pry-debugger
104
- requirement: &2164324800 !ruby/object:Gem::Requirement
104
+ requirement: &2164691420 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *2164324800
112
+ version_requirements: *2164691420
113
113
  description: Ruby API wrapper for Asana, supporting workspaces, projects, tasks, tags,
114
114
  users and stories
115
115
  email:
@@ -158,7 +158,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
158
  version: '0'
159
159
  segments:
160
160
  - 0
161
- hash: 4402489200243794366
161
+ hash: 4158906422461001836
162
162
  required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  none: false
164
164
  requirements:
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  segments:
169
169
  - 0
170
- hash: 4402489200243794366
170
+ hash: 4158906422461001836
171
171
  requirements: []
172
172
  rubyforge_project:
173
173
  rubygems_version: 1.8.17