asana-ruby 0.0.1 → 0.0.2

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