camper 0.0.5 → 0.0.10
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.
- 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  [ [](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)
|