asana 0.0.6 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +9 -9
  2. data/.codeclimate.yml +4 -0
  3. data/.gitignore +12 -20
  4. data/.rspec +4 -0
  5. data/.rubocop.yml +18 -0
  6. data/.travis.yml +12 -0
  7. data/.yardopts +5 -0
  8. data/CODE_OF_CONDUCT.md +13 -0
  9. data/Gemfile +17 -0
  10. data/Guardfile +85 -4
  11. data/LICENSE.txt +21 -0
  12. data/README.md +264 -135
  13. data/Rakefile +62 -7
  14. data/asana.gemspec +27 -21
  15. data/examples/Gemfile +6 -0
  16. data/examples/Gemfile.lock +56 -0
  17. data/examples/api_token.rb +21 -0
  18. data/examples/cli_app.rb +25 -0
  19. data/examples/events.rb +38 -0
  20. data/examples/omniauth_integration.rb +54 -0
  21. data/lib/asana.rb +8 -11
  22. data/lib/asana/authentication.rb +8 -0
  23. data/lib/asana/authentication/oauth2.rb +42 -0
  24. data/lib/asana/authentication/oauth2/access_token_authentication.rb +51 -0
  25. data/lib/asana/authentication/oauth2/bearer_token_authentication.rb +32 -0
  26. data/lib/asana/authentication/oauth2/client.rb +50 -0
  27. data/lib/asana/authentication/token_authentication.rb +20 -0
  28. data/lib/asana/client.rb +124 -0
  29. data/lib/asana/client/configuration.rb +165 -0
  30. data/lib/asana/errors.rb +90 -0
  31. data/lib/asana/http_client.rb +155 -0
  32. data/lib/asana/http_client/environment_info.rb +53 -0
  33. data/lib/asana/http_client/error_handling.rb +103 -0
  34. data/lib/asana/http_client/response.rb +32 -0
  35. data/lib/asana/resources.rb +11 -0
  36. data/lib/asana/resources/attachment.rb +44 -0
  37. data/lib/asana/resources/attachment_uploading.rb +33 -0
  38. data/lib/asana/resources/collection.rb +68 -0
  39. data/lib/asana/resources/event.rb +49 -0
  40. data/lib/asana/resources/event_subscription.rb +12 -0
  41. data/lib/asana/resources/events.rb +101 -0
  42. data/lib/asana/resources/project.rb +145 -19
  43. data/lib/asana/resources/registry.rb +62 -0
  44. data/lib/asana/resources/resource.rb +103 -0
  45. data/lib/asana/resources/response_helper.rb +14 -0
  46. data/lib/asana/resources/story.rb +58 -7
  47. data/lib/asana/resources/tag.rb +111 -19
  48. data/lib/asana/resources/task.rb +284 -57
  49. data/lib/asana/resources/team.rb +55 -0
  50. data/lib/asana/resources/user.rb +65 -10
  51. data/lib/asana/resources/workspace.rb +79 -34
  52. data/lib/asana/ruby2_0_0_compatibility.rb +3 -0
  53. data/lib/asana/version.rb +3 -1
  54. data/lib/templates/index.js +8 -0
  55. data/lib/templates/resource.ejs +225 -0
  56. data/package.json +7 -0
  57. metadata +91 -51
  58. data/LICENSE +0 -22
  59. data/lib/asana/config.rb +0 -23
  60. data/lib/asana/resource.rb +0 -52
  61. data/spec/asana/resources/project_spec.rb +0 -63
  62. data/spec/asana/resources/story_spec.rb +0 -39
  63. data/spec/asana/resources/tag_spec.rb +0 -63
  64. data/spec/asana/resources/task_spec.rb +0 -95
  65. data/spec/asana/resources/user_spec.rb +0 -64
  66. data/spec/asana/resources/workspace_spec.rb +0 -108
  67. data/spec/spec_helper.rb +0 -9
@@ -0,0 +1,7 @@
1
+ {
2
+ "devDependencies": {
3
+ "inflect": "^0.3.0",
4
+ "js-yaml": "^3.2.5",
5
+ "lodash": "^2.4.1"
6
+ }
7
+ }
metadata CHANGED
@@ -1,131 +1,178 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asana
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
- - Ryan Bright
7
+ - Txus
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2013-07-18 00:00:00.000000000 Z
11
+ date: 2015-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activeresource
14
+ name: oauth2
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.3
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.3
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: guard-minitest
28
+ name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.0
34
- type: :development
33
+ version: '0.9'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.0
40
+ version: '0.9'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: faraday_middleware
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 2.12.1
48
- type: :development
47
+ version: '0.9'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 2.12.1
54
+ version: '0.9'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: faraday_middleware-multi_json
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 0.9.2.2
61
+ version: '0.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - ~>
67
81
  - !ruby/object:Gem::Version
68
- version: 0.9.2.2
82
+ version: '1.7'
69
83
  - !ruby/object:Gem::Dependency
70
- name: vcr
84
+ name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ~>
74
88
  - !ruby/object:Gem::Version
75
- version: 2.1.0
89
+ version: '10.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - ~>
81
95
  - !ruby/object:Gem::Version
82
- version: 2.1.0
96
+ version: '10.0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: webmock
98
+ name: rspec
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ~>
88
102
  - !ruby/object:Gem::Version
89
- version: 1.8.6
103
+ version: '3.2'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - ~>
95
109
  - !ruby/object:Gem::Version
96
- version: 1.8.6
97
- description: Ruby wrapper for the Asana REST API
110
+ version: '3.2'
111
+ description: Official Ruby client for the Asana API
98
112
  email:
99
- - ryan@rbright.net
113
+ - me@txus.io
100
114
  executables: []
101
115
  extensions: []
102
116
  extra_rdoc_files: []
103
117
  files:
118
+ - .codeclimate.yml
104
119
  - .gitignore
120
+ - .rspec
121
+ - .rubocop.yml
122
+ - .travis.yml
123
+ - .yardopts
124
+ - CODE_OF_CONDUCT.md
105
125
  - Gemfile
106
126
  - Guardfile
107
- - LICENSE
127
+ - LICENSE.txt
108
128
  - README.md
109
129
  - Rakefile
110
130
  - asana.gemspec
131
+ - bin/console
132
+ - bin/setup
133
+ - examples/Gemfile
134
+ - examples/Gemfile.lock
135
+ - examples/api_token.rb
136
+ - examples/cli_app.rb
137
+ - examples/events.rb
138
+ - examples/omniauth_integration.rb
111
139
  - lib/asana.rb
112
- - lib/asana/config.rb
113
- - lib/asana/resource.rb
140
+ - lib/asana/authentication.rb
141
+ - lib/asana/authentication/oauth2.rb
142
+ - lib/asana/authentication/oauth2/access_token_authentication.rb
143
+ - lib/asana/authentication/oauth2/bearer_token_authentication.rb
144
+ - lib/asana/authentication/oauth2/client.rb
145
+ - lib/asana/authentication/token_authentication.rb
146
+ - lib/asana/client.rb
147
+ - lib/asana/client/configuration.rb
148
+ - lib/asana/errors.rb
149
+ - lib/asana/http_client.rb
150
+ - lib/asana/http_client/environment_info.rb
151
+ - lib/asana/http_client/error_handling.rb
152
+ - lib/asana/http_client/response.rb
153
+ - lib/asana/resources.rb
154
+ - lib/asana/resources/attachment.rb
155
+ - lib/asana/resources/attachment_uploading.rb
156
+ - lib/asana/resources/collection.rb
157
+ - lib/asana/resources/event.rb
158
+ - lib/asana/resources/event_subscription.rb
159
+ - lib/asana/resources/events.rb
114
160
  - lib/asana/resources/project.rb
161
+ - lib/asana/resources/registry.rb
162
+ - lib/asana/resources/resource.rb
163
+ - lib/asana/resources/response_helper.rb
115
164
  - lib/asana/resources/story.rb
116
165
  - lib/asana/resources/tag.rb
117
166
  - lib/asana/resources/task.rb
167
+ - lib/asana/resources/team.rb
118
168
  - lib/asana/resources/user.rb
119
169
  - lib/asana/resources/workspace.rb
170
+ - lib/asana/ruby2_0_0_compatibility.rb
120
171
  - lib/asana/version.rb
121
- - spec/asana/resources/project_spec.rb
122
- - spec/asana/resources/story_spec.rb
123
- - spec/asana/resources/tag_spec.rb
124
- - spec/asana/resources/task_spec.rb
125
- - spec/asana/resources/user_spec.rb
126
- - spec/asana/resources/workspace_spec.rb
127
- - spec/spec_helper.rb
128
- homepage: http://github.com/rbright/asana
172
+ - lib/templates/index.js
173
+ - lib/templates/resource.ejs
174
+ - package.json
175
+ homepage: https://github.com/asana/ruby-asana
129
176
  licenses:
130
177
  - MIT
131
178
  metadata: {}
@@ -135,9 +182,9 @@ require_paths:
135
182
  - lib
136
183
  required_ruby_version: !ruby/object:Gem::Requirement
137
184
  requirements:
138
- - - ! '>='
185
+ - - ~>
139
186
  - !ruby/object:Gem::Version
140
- version: '0'
187
+ version: '2.0'
141
188
  required_rubygems_version: !ruby/object:Gem::Requirement
142
189
  requirements:
143
190
  - - ! '>='
@@ -145,15 +192,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
192
  version: '0'
146
193
  requirements: []
147
194
  rubyforge_project:
148
- rubygems_version: 2.0.5
195
+ rubygems_version: 2.4.5
149
196
  signing_key:
150
197
  specification_version: 4
151
- summary: Ruby wrapper for the Asana REST API
152
- test_files:
153
- - spec/asana/resources/project_spec.rb
154
- - spec/asana/resources/story_spec.rb
155
- - spec/asana/resources/tag_spec.rb
156
- - spec/asana/resources/task_spec.rb
157
- - spec/asana/resources/user_spec.rb
158
- - spec/asana/resources/workspace_spec.rb
159
- - spec/spec_helper.rb
198
+ summary: Official Ruby client for the Asana API
199
+ test_files: []
data/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- Copyright (c) 2012-2013 Ryan Bright
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,23 +0,0 @@
1
- require 'asana/resource'
2
- require 'asana/version'
3
-
4
- module Asana
5
- module Config
6
-
7
- API_VERSION = '1.0'
8
- DEFAULT_ENDPOINT = "https://app.asana.com/api/#{API_VERSION}/"
9
- USER_AGENT = "Asana Ruby Gem #{Asana::VERSION}"
10
-
11
- attr_accessor :api_key
12
-
13
- def configure
14
- yield self
15
- Resource.site = DEFAULT_ENDPOINT
16
- Resource.user = self.api_key
17
- Resource.password = ''
18
- Resource.format = :json
19
- self
20
- end
21
-
22
- end
23
- end
@@ -1,52 +0,0 @@
1
- module Asana
2
- class Resource < ActiveResource::Base
3
- class << self
4
-
5
- def check_prefix_options(options)
6
- end
7
-
8
- def custom_method_collection_url(method_name, options = {})
9
- prefix_options, query_options = split_options(options)
10
- if method_name
11
- "#{prefix(prefix_options)}#{collection_name}/#{method_name}.#{format.extension}#{query_string(query_options)}"
12
- else
13
- "#{prefix(prefix_options)}#{collection_name}.#{format.extension}#{query_string(query_options)}"
14
- end
15
- end
16
-
17
- def parent_resources(*resources)
18
- @parent_resources = resources
19
- end
20
-
21
- def prefix(options = {})
22
- if options.any?
23
- self.site.path + options.map { |k, v| "#{k.to_s.chomp('_id').pluralize}/#{v}" }.join + '/'
24
- else
25
- self.site.path
26
- end
27
- end
28
-
29
- def prefix_options
30
- id ? {} : super
31
- end
32
-
33
- def prefix_source
34
- if @parent_resources
35
- self.site.path + @parent_resources.map { |r| "#{r.to_s.pluralize}/:#{r}_id" }.join + '/'
36
- else
37
- self.site.path
38
- end
39
- end
40
-
41
- end
42
-
43
- def method_not_allowed
44
- raise ActiveResource::MethodNotAllowed.new(__method__)
45
- end
46
-
47
- def to_json(options={})
48
- super({ :root => 'data' }.merge(options))
49
- end
50
-
51
- end
52
- end
@@ -1,63 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- module Asana
4
- describe Project do
5
-
6
- before do
7
- VCR.insert_cassette('projects', :record => :all)
8
- Asana.configure do |c|
9
- c.api_key = ENV['ASANA_API_KEY']
10
- end
11
- end
12
-
13
- after do
14
- VCR.eject_cassette
15
- end
16
-
17
- describe '.all' do
18
- it 'should return all of the user\'s projects' do
19
- projects = Project.all
20
- projects.must_be_instance_of Array
21
- projects.first.must_be_instance_of Project
22
- end
23
- end
24
-
25
- describe '.create' do
26
- it 'should raise an ActiveResource::MethodNotAllowed exception' do
27
- project = Project.new
28
- lambda { project.save }.must_raise ActiveResource::MethodNotAllowed
29
- end
30
- end
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 '#modify' do
47
- it 'should modify the given project with a new name' do
48
- project = Workspace.all.first.create_project(:name => 'asana-test-project-foo')
49
- project.modify(:name => 'asana-test-project-bar').name.must_equal 'asana-test-project-bar'
50
- end
51
- end
52
-
53
- describe '#tasks' do
54
- it 'should return all tasks for the given project' do
55
- projects = Project.all.first
56
- tasks = projects.tasks
57
- tasks.must_be_instance_of Array
58
- tasks.first.must_be_instance_of Task
59
- end
60
- end
61
-
62
- end
63
- end
@@ -1,39 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- module Asana
4
- describe Story do
5
-
6
- before do
7
- VCR.insert_cassette('stories', :record => :all)
8
- Asana.configure do |c|
9
- c.api_key = ENV['ASANA_API_KEY']
10
- end
11
- end
12
-
13
- after do
14
- VCR.eject_cassette
15
- end
16
-
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
28
- end
29
- end
30
-
31
- describe '#update' do
32
- it 'should raise an ActiveResource::MethodNotAllowed exception' do
33
- story = Project.all.first.tasks.first.stories.first
34
- lambda { story.save }.must_raise ActiveResource::MethodNotAllowed
35
- end
36
- end
37
-
38
- end
39
- end