camper 0.0.5 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.rubocop.yml +5 -1
- data/.yardopts +4 -0
- data/CHANGELOG.md +44 -1
- data/Gemfile.lock +14 -11
- data/README.md +53 -22
- data/camper.gemspec +2 -0
- data/examples/comments.rb +1 -1
- data/examples/create_and_complete_todo.rb +24 -0
- data/examples/people.rb +11 -0
- data/examples/projects.rb +12 -0
- data/examples/todolists.rb +32 -0
- data/examples/todos.rb +8 -5
- data/lib/camper.rb +1 -0
- data/lib/camper/api/{comment.rb → comments.rb} +5 -3
- data/lib/camper/api/{message.rb → messages.rb} +1 -1
- data/lib/camper/api/people.rb +97 -0
- data/lib/camper/api/projects.rb +120 -0
- data/lib/camper/api/resource.rb +1 -3
- data/lib/camper/api/todolists.rb +81 -0
- data/lib/camper/api/todos.rb +133 -0
- data/lib/camper/authorization.rb +1 -1
- data/lib/camper/client.rb +37 -33
- data/lib/camper/configuration.rb +4 -6
- data/lib/camper/core_extensions/object.rb +156 -0
- data/lib/camper/error.rb +15 -4
- data/lib/camper/pagination_data.rb +0 -3
- data/lib/camper/request.rb +49 -20
- data/lib/camper/resource.rb +0 -2
- data/lib/camper/url_utils.rb +26 -0
- data/lib/camper/version.rb +1 -1
- metadata +44 -7
- data/lib/camper/api/project.rb +0 -20
- data/lib/camper/api/todo.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b8a4cdfcb11473573ac1bb1f600964f12f8722093a8a9446a47d1594e4a0963
|
4
|
+
data.tar.gz: 43810e0cf19d16b5a2a71789401758f497dfa46d43e70ea8c9e9e5a8160bcb51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 261ab2cdc09cae324aef2183d5bba9fa087c87337f2b7fe5e007bb91af4c2a6abb56f32a158437f2f71e1acc5670f76fe612911810402e60647c161733bf6199
|
7
|
+
data.tar.gz: fe517bdf6508916f6cd037424f6e95a589e1ad27303e25b385d44d51c19c722e7d47ad9d1de28bab7f2da5bbe5ffd05f8255cf4400cff980b6cb31f9594e7f59
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -7,9 +7,10 @@ AllCops:
|
|
7
7
|
NewCops: enable
|
8
8
|
Exclude:
|
9
9
|
- 'camper.gemspec'
|
10
|
+
- 'lib/camper/core_extensions/object.rb'
|
10
11
|
|
11
12
|
Layout/LineLength:
|
12
|
-
Max:
|
13
|
+
Max: 120
|
13
14
|
Exclude:
|
14
15
|
- 'lib/camper/client/*'
|
15
16
|
- 'spec/**/*'
|
@@ -18,6 +19,9 @@ Metrics/BlockLength:
|
|
18
19
|
Exclude:
|
19
20
|
- 'spec/**/*'
|
20
21
|
|
22
|
+
Metrics/AbcSize:
|
23
|
+
Max: 20
|
24
|
+
|
21
25
|
Style/Documentation:
|
22
26
|
Enabled: false
|
23
27
|
|
data/.yardopts
ADDED
data/CHANGELOG.md
CHANGED
@@ -4,8 +4,50 @@
|
|
4
4
|
|
5
5
|
**Implemented enhancements:**
|
6
6
|
|
7
|
+
- Complete projects api [\#51](https://github.com/renehernandez/camper/pull/51)
|
8
|
+
|
9
|
+
## [v0.0.9](https://github.com/renehernandez/camper/tree/v0.0.9) (2020-10-28)
|
10
|
+
|
11
|
+
**Implemented enhancements:**
|
12
|
+
|
13
|
+
- Split todos and todolists APIs [\#47](https://github.com/renehernandez/camper/pull/47)
|
14
|
+
|
15
|
+
**Merged pull requests:**
|
16
|
+
|
17
|
+
- Bump rubocop from 0.92.0 to 1.0.0 [\#44](https://github.com/renehernandez/camper/pull/44)
|
18
|
+
|
19
|
+
## [v0.0.8](https://github.com/renehernandez/camper/tree/v0.0.8) (2020-10-27)
|
20
|
+
|
21
|
+
**Implemented enhancements:**
|
22
|
+
|
23
|
+
- Add people API [\#46](https://github.com/renehernandez/camper/pull/46)
|
24
|
+
- Raise error if resource can't be commented [\#45](https://github.com/renehernandez/camper/pull/45)
|
25
|
+
|
26
|
+
## [v0.0.7](https://github.com/renehernandez/camper/tree/v0.0.7) (2020-10-04)
|
27
|
+
|
28
|
+
**Implemented enhancements:**
|
29
|
+
|
30
|
+
- Implement handling error according to Basecamp 3 API specifications [\#21](https://github.com/renehernandez/camper/issues/21)
|
31
|
+
- Add ability to complete a Todo [\#12](https://github.com/renehernandez/camper/issues/12)
|
32
|
+
- Multiple improvements [\#38](https://github.com/renehernandez/camper/pull/38)
|
33
|
+
- Error handling improvements [\#37](https://github.com/renehernandez/camper/pull/37)
|
34
|
+
|
35
|
+
**Documentation:**
|
36
|
+
|
37
|
+
- Enable documentation in RubyDoc [\#6](https://github.com/renehernandez/camper/issues/6)
|
38
|
+
- Add yard documentation [\#41](https://github.com/renehernandez/camper/pull/41)
|
39
|
+
- Fix gem badge [\#39](https://github.com/renehernandez/camper/pull/39)
|
40
|
+
|
41
|
+
**Merged pull requests:**
|
42
|
+
|
43
|
+
- Rename add\_comment to create\_comment [\#40](https://github.com/renehernandez/camper/pull/40)
|
44
|
+
- Bump rubocop from 0.91.0 to 0.92.0 [\#36](https://github.com/renehernandez/camper/pull/36)
|
45
|
+
|
46
|
+
## [v0.0.5](https://github.com/renehernandez/camper/tree/v0.0.5) (2020-09-22)
|
47
|
+
|
48
|
+
**Implemented enhancements:**
|
49
|
+
|
7
50
|
- Enable dependabot [\#22](https://github.com/renehernandez/camper/pull/22)
|
8
|
-
- Retry for new access token [\#16](https://github.com/renehernandez/camper/pull/16)
|
9
51
|
|
10
52
|
**Fixed bugs:**
|
11
53
|
|
@@ -37,6 +79,7 @@
|
|
37
79
|
**Implemented enhancements:**
|
38
80
|
|
39
81
|
- Request a new access token once it expires [\#13](https://github.com/renehernandez/camper/issues/13)
|
82
|
+
- Retry for new access token [\#16](https://github.com/renehernandez/camper/pull/16)
|
40
83
|
|
41
84
|
**Fixed bugs:**
|
42
85
|
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
camper (0.0.
|
4
|
+
camper (0.0.9)
|
5
|
+
concurrent-ruby (~> 1.1)
|
5
6
|
httparty (~> 0.18)
|
6
7
|
rack-oauth2 (~> 1.14)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
10
11
|
specs:
|
11
|
-
activesupport (6.0.3.
|
12
|
+
activesupport (6.0.3.4)
|
12
13
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
14
|
i18n (>= 0.7, < 2)
|
14
15
|
minitest (~> 5.1)
|
@@ -38,7 +39,7 @@ GEM
|
|
38
39
|
minitest (5.14.2)
|
39
40
|
multi_xml (0.6.0)
|
40
41
|
parallel (1.19.2)
|
41
|
-
parser (2.7.
|
42
|
+
parser (2.7.2.0)
|
42
43
|
ast (~> 2.4.1)
|
43
44
|
pry (0.13.1)
|
44
45
|
coderay (~> 1.1)
|
@@ -52,7 +53,7 @@ GEM
|
|
52
53
|
rack (>= 2.1.0)
|
53
54
|
rainbow (3.0.0)
|
54
55
|
rake (13.0.1)
|
55
|
-
regexp_parser (1.8.
|
56
|
+
regexp_parser (1.8.2)
|
56
57
|
rexml (3.2.4)
|
57
58
|
rspec (3.9.0)
|
58
59
|
rspec-core (~> 3.9.0)
|
@@ -67,17 +68,17 @@ GEM
|
|
67
68
|
diff-lcs (>= 1.2.0, < 2.0)
|
68
69
|
rspec-support (~> 3.9.0)
|
69
70
|
rspec-support (3.9.3)
|
70
|
-
rubocop (0.
|
71
|
+
rubocop (1.0.0)
|
71
72
|
parallel (~> 1.10)
|
72
|
-
parser (>= 2.7.1.
|
73
|
+
parser (>= 2.7.1.5)
|
73
74
|
rainbow (>= 2.2.2, < 4.0)
|
74
|
-
regexp_parser (>= 1.
|
75
|
+
regexp_parser (>= 1.8)
|
75
76
|
rexml
|
76
|
-
rubocop-ast (>= 0.
|
77
|
+
rubocop-ast (>= 0.6.0)
|
77
78
|
ruby-progressbar (~> 1.7)
|
78
79
|
unicode-display_width (>= 1.4.0, < 2.0)
|
79
|
-
rubocop-ast (0.
|
80
|
-
parser (>= 2.7.1.
|
80
|
+
rubocop-ast (1.0.0)
|
81
|
+
parser (>= 2.7.1.5)
|
81
82
|
rubocop-performance (1.8.1)
|
82
83
|
rubocop (>= 0.87.0)
|
83
84
|
rubocop-ast (>= 0.4.0)
|
@@ -86,7 +87,8 @@ GEM
|
|
86
87
|
tzinfo (1.2.7)
|
87
88
|
thread_safe (~> 0.1)
|
88
89
|
unicode-display_width (1.7.0)
|
89
|
-
|
90
|
+
yard (0.9.25)
|
91
|
+
zeitwerk (2.4.1)
|
90
92
|
|
91
93
|
PLATFORMS
|
92
94
|
ruby
|
@@ -98,6 +100,7 @@ DEPENDENCIES
|
|
98
100
|
rspec (~> 3.9)
|
99
101
|
rubocop
|
100
102
|
rubocop-performance
|
103
|
+
yard (~> 0.9)
|
101
104
|
|
102
105
|
BUNDLED WITH
|
103
106
|
2.1.4
|
data/README.md
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
# camper ![CI](https://github.com/renehernandez/camper/workflows/CI/badge.svg) [![Gem Version](https://badge.fury.io/rb/
|
1
|
+
# camper ![CI](https://github.com/renehernandez/camper/workflows/CI/badge.svg) [![Gem Version](https://badge.fury.io/rb/camper.svg)](https://badge.fury.io/rb/camper)
|
2
2
|
|
3
3
|
Camper is a Ruby wrapper for the [Basecamp 3 API](https://github.com/basecamp/bc3-api).
|
4
4
|
|
5
|
+
You can check out the gem documentation at [https://www.rubydoc.org/gems/camper](https://www.rubydoc.org/gems/camper)
|
6
|
+
|
5
7
|
## Installation
|
6
8
|
|
7
9
|
Add this line to your application's Gemfile:
|
@@ -22,9 +24,24 @@ Or install it yourself as:
|
|
22
24
|
$ gem install camper
|
23
25
|
```
|
24
26
|
|
27
|
+
## Status of API endpoints
|
28
|
+
|
29
|
+
The up-to-date list of Basecamp API endpoints can be found at [here](https://github.com/basecamp/bc3-api#api-endpoints).
|
30
|
+
|
31
|
+
Currently, Camper supports the following endpoints:
|
32
|
+
|
33
|
+
* [Comments](https://github.com/basecamp/bc3-api/blob/master/sections/comments.md): Implementation at [comments.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/comments.rb) (Partial)
|
34
|
+
* [Messages](https://github.com/basecamp/bc3-api/blob/master/sections/messages.md): Implementation at [messages.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/messages.rb) (Partial)
|
35
|
+
* [People](https://github.com/basecamp/bc3-api/blob/master/sections/people.md): Implementation at [people.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/people.rb) (Complete)
|
36
|
+
* [Projects](https://github.com/basecamp/bc3-api/blob/master/sections/projects.md): Implementation at [projects.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/projects.rb) (Partial)
|
37
|
+
* [To-do list](https://github.com/basecamp/bc3-api/blob/master/sections/todolists.md): Implementation at [todolists.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/todolists.rb) (Almost complete, only missing todolist trashing)
|
38
|
+
* [To-dos](https://github.com/basecamp/bc3-api/blob/master/sections/todos.md): Implementation at [todos.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/todos.rb) (Almost complete, only missing todo trashing)
|
39
|
+
|
25
40
|
## Usage
|
26
41
|
|
27
|
-
|
42
|
+
### Configuration
|
43
|
+
|
44
|
+
Getting a `client` and configuring it:
|
28
45
|
|
29
46
|
```ruby
|
30
47
|
require 'camper'
|
@@ -32,44 +49,58 @@ require 'camper'
|
|
32
49
|
client = Camper.client
|
33
50
|
|
34
51
|
client.configure do |config|
|
35
|
-
config.client_id =
|
36
|
-
config.client_secret =
|
37
|
-
config.account_number =
|
38
|
-
config.refresh_token =
|
39
|
-
config.access_token =
|
52
|
+
config.client_id = 'client_id'
|
53
|
+
config.client_secret = 'client_secret'
|
54
|
+
config.account_number = 'account_number'
|
55
|
+
config.refresh_token = 'refresh_token'
|
56
|
+
config.access_token = 'access_token'
|
40
57
|
end
|
41
|
-
|
42
|
-
projects = client.projects
|
43
58
|
```
|
44
59
|
|
45
|
-
Alternatively, it is possible to invoke the top-level `#configure` method to get a client
|
60
|
+
Alternatively, it is possible to invoke the top-level `#configure` method to get a `client`:
|
46
61
|
|
47
62
|
```ruby
|
48
63
|
require 'camper'
|
49
64
|
|
50
65
|
client = Camper.configure do |config|
|
51
|
-
config.client_id =
|
52
|
-
config.client_secret =
|
53
|
-
config.account_number =
|
54
|
-
config.refresh_token =
|
55
|
-
config.access_token =
|
66
|
+
config.client_id = 'client_id'
|
67
|
+
config.client_secret = 'client_secret'
|
68
|
+
config.account_number = 'account_number'
|
69
|
+
config.refresh_token = 'refresh_token'
|
70
|
+
config.access_token = 'access_token'
|
56
71
|
end
|
72
|
+
```
|
57
73
|
|
58
|
-
|
59
|
-
|
74
|
+
Also, the `client` can read directly the following environment variables:
|
75
|
+
|
76
|
+
* `BASECAMP_CLIENT_ID`
|
77
|
+
* `BASECAMP_CLIENT_SECRET`
|
78
|
+
* `BASECAMP_ACCOUNT_NUMBER`
|
79
|
+
* `BASECAMP_REFRESH_TOKEN`
|
80
|
+
* `BASECAMP_ACCESS_TOKEN`
|
81
|
+
|
82
|
+
then the code would look like:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
require 'camper'
|
86
|
+
|
87
|
+
client = Camper.client
|
60
88
|
```
|
61
89
|
|
90
|
+
|
91
|
+
### Examples
|
92
|
+
|
62
93
|
Example getting list of TODOs:
|
63
94
|
|
64
95
|
```ruby
|
65
96
|
require 'camper'
|
66
97
|
|
67
98
|
client = Camper.configure do |config|
|
68
|
-
config.client_id = ENV['
|
69
|
-
config.client_secret = ENV['
|
70
|
-
config.account_number = ENV['
|
71
|
-
config.refresh_token = ENV['
|
72
|
-
config.access_token = ENV['
|
99
|
+
config.client_id = ENV['BASECAMP_CLIENT_ID']
|
100
|
+
config.client_secret = ENV['BASECAMP_CLIENT_SECRET']
|
101
|
+
config.account_number = ENV['BASECAMP_ACCOUNT_NUMBER']
|
102
|
+
config.refresh_token = ENV['BASECAMP_REFRESH_TOKEN']
|
103
|
+
config.access_token = ENV['BASECAMP_ACCESS_TOKEN']
|
73
104
|
end
|
74
105
|
|
75
106
|
# gets a paginated response
|
data/camper.gemspec
CHANGED
@@ -28,7 +28,9 @@ Gem::Specification.new do |spec|
|
|
28
28
|
|
29
29
|
spec.add_dependency 'httparty', '~> 0.18'
|
30
30
|
spec.add_dependency 'rack-oauth2', '~> 1.14'
|
31
|
+
spec.add_dependency 'concurrent-ruby', '~> 1.1'
|
31
32
|
|
32
33
|
spec.add_development_dependency 'rake', '~> 13.0'
|
33
34
|
spec.add_development_dependency 'rspec', '~> 3.9'
|
35
|
+
spec.add_development_dependency 'yard', '~> 0.9'
|
34
36
|
end
|
data/examples/comments.rb
CHANGED
@@ -25,7 +25,7 @@ projects.auto_paginate do |p|
|
|
25
25
|
# Adds a comment on the first todolist
|
26
26
|
list = client.todolists(todoset).first
|
27
27
|
puts "Todolist: #{list.title}, can be commented on: #{list.can_be_commented?}"
|
28
|
-
client.
|
28
|
+
client.create_comment(list, 'New <b>comment</b> with <i>HTML support</i>')
|
29
29
|
comments = client.comments(list)
|
30
30
|
idx = 0
|
31
31
|
comments.auto_paginate do |c|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'camper'
|
4
|
+
|
5
|
+
# It will configure the client using the basecamp environment variables
|
6
|
+
client = Camper.client
|
7
|
+
|
8
|
+
project = client.project(ENV['PROJECT_ID'])
|
9
|
+
|
10
|
+
todoset = client.todoset(project)
|
11
|
+
|
12
|
+
todolist = client.todolist(todoset, ENV['TODOLIST_ID'])
|
13
|
+
|
14
|
+
puts todolist.title
|
15
|
+
|
16
|
+
client.todos(todolist).auto_paginate do |todo|
|
17
|
+
puts todo.title
|
18
|
+
end
|
19
|
+
|
20
|
+
todo = client.create_todo(todolist, 'TODO from camper', description: 'This is a todo created with camper')
|
21
|
+
|
22
|
+
puts todo.title
|
23
|
+
|
24
|
+
client.complete_todo(todo)
|
data/examples/people.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'camper'
|
4
|
+
|
5
|
+
client = Camper.client
|
6
|
+
|
7
|
+
project = client.project(ENV['PROJECT_ID'])
|
8
|
+
|
9
|
+
puts "Project name: #{project.name}"
|
10
|
+
puts "Project description: #{project.description}"
|
11
|
+
|
12
|
+
client.update_project(project, name: 'Hermes Testing', description: 'Hermes integration testing')
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'camper'
|
4
|
+
|
5
|
+
client = Camper.client
|
6
|
+
|
7
|
+
projects = client.projects
|
8
|
+
|
9
|
+
projects.auto_paginate do |p|
|
10
|
+
puts "Project: #{p.name}"
|
11
|
+
|
12
|
+
todoset = client.todoset(p)
|
13
|
+
|
14
|
+
puts "Ratio of completed Todos in Todoset: #{todoset.completed_ratio}"
|
15
|
+
|
16
|
+
client.todolists(todoset).auto_paginate(5) do |list|
|
17
|
+
puts "Todolist: #{list.title}"
|
18
|
+
|
19
|
+
client.todos(list).auto_paginate do |todo|
|
20
|
+
puts "Todo: #{todo.title}"
|
21
|
+
puts "Get Todo using project id: #{client.todo(p.id, todo.id).title}"
|
22
|
+
puts "Get Todo using project resource: #{client.todo(p, todo.id).title}"
|
23
|
+
puts "Get Todo using todolist resource: #{client.todo(list, todo.id).title}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
begin
|
28
|
+
client.todolists(p)
|
29
|
+
rescue Camper::Error::InvalidParameter
|
30
|
+
puts 'Cannot use a project p to get the todolists'
|
31
|
+
end
|
32
|
+
end
|
data/examples/todos.rb
CHANGED
@@ -11,17 +11,20 @@ end
|
|
11
11
|
projects = client.projects
|
12
12
|
|
13
13
|
projects.auto_paginate do |p|
|
14
|
-
puts "Project: #{p.
|
15
|
-
|
16
|
-
puts "Todo set: #{p.todoset.inspect}"
|
14
|
+
puts "Project: #{p.name}"
|
17
15
|
|
18
16
|
todoset = client.todoset(p)
|
19
17
|
|
18
|
+
puts "Ratio of completed Todos in Todoset: #{todoset.completed_ratio}"
|
19
|
+
|
20
20
|
client.todolists(todoset).auto_paginate(5) do |list|
|
21
21
|
puts "Todolist: #{list.title}"
|
22
22
|
|
23
|
-
client.todos(list).auto_paginate do |todo|
|
24
|
-
puts todo.
|
23
|
+
client.todos(list).auto_paginate(1) do |todo|
|
24
|
+
puts "Todo: #{todo.title}"
|
25
|
+
puts "Get Todo using project id: #{client.todo(p.id, todo.id).title}"
|
26
|
+
puts "Get Todo using project resource: #{client.todo(p, todo.id).title}"
|
27
|
+
puts "Get Todo using todolist resource: #{client.todo(list, todo.id).title}"
|
25
28
|
end
|
26
29
|
end
|
27
30
|
end
|
data/lib/camper.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Camper::Client
|
4
|
-
module
|
5
|
-
def
|
6
|
-
|
4
|
+
module CommentsAPI
|
5
|
+
def create_comment(resource, content)
|
6
|
+
raise Error::ResourceCannotBeCommented, resource unless resource.can_be_commented?
|
7
|
+
|
8
|
+
post(resource.comments_url, override_path: true, body: { content: content })
|
7
9
|
end
|
8
10
|
|
9
11
|
def comments(resource)
|