camper 0.0.11 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -0
- data/CHANGELOG.md +18 -0
- data/Gemfile.lock +16 -16
- data/README.md +5 -3
- data/examples/comments.rb +12 -1
- data/examples/message_types.rb +29 -0
- data/examples/messages.rb +13 -2
- data/lib/camper/api/comments.rb +80 -8
- data/lib/camper/api/message_board.rb +23 -0
- data/lib/camper/api/message_types.rb +90 -0
- data/lib/camper/api/messages.rb +103 -4
- data/lib/camper/api/people.rb +86 -84
- data/lib/camper/api/projects.rb +101 -101
- data/lib/camper/api/resource.rb +6 -4
- data/lib/camper/api/todolists.rb +84 -92
- data/lib/camper/api/todos.rb +161 -183
- data/lib/camper/client.rb +3 -1
- data/lib/camper/error.rb +2 -0
- data/lib/camper/paginated_response.rb +2 -0
- data/lib/camper/request.rb +1 -0
- data/lib/camper/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a55ed04d219593d0ed46a16a84c1993eab9b51d1cbc6b55386bd23068f002668
|
4
|
+
data.tar.gz: 1bf654df624233c32289b132ee58dabe05158088f4fc970a8b2ebdf7ddfae229
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a56723911f5687789ae0078d62dd2ffc3ce5df0af7edd844ec2a4942098f26dcec1931a21d9731983af62134d331e6958526d910df68a1959e5794e3fd9a292
|
7
|
+
data.tar.gz: c076b430f753ab8b2021b64e7811b05bfb9e7669a842638df47a7fd2ab6a0536c54ccdc449bbdf81b2a3be86950c3554e11866e45dbd8f2dd612fe18d499f2d5
|
data/.rubocop.yml
CHANGED
@@ -15,6 +15,9 @@ Layout/LineLength:
|
|
15
15
|
- 'lib/camper/client/*'
|
16
16
|
- 'spec/**/*'
|
17
17
|
|
18
|
+
Layout/FirstHashElementIndentation:
|
19
|
+
EnforcedStyle: consistent
|
20
|
+
|
18
21
|
Metrics/BlockLength:
|
19
22
|
Exclude:
|
20
23
|
- 'spec/**/*'
|
@@ -25,6 +28,12 @@ Metrics/AbcSize:
|
|
25
28
|
Style/Documentation:
|
26
29
|
Enabled: false
|
27
30
|
|
31
|
+
Style/AsciiComments:
|
32
|
+
Enabled: false
|
33
|
+
|
34
|
+
Style/ParallelAssignment:
|
35
|
+
Enabled: false
|
36
|
+
|
28
37
|
Style/ClassAndModuleChildren:
|
29
38
|
Exclude:
|
30
39
|
- 'lib/camper/*'
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,20 @@
|
|
4
4
|
|
5
5
|
**Implemented enhancements:**
|
6
6
|
|
7
|
+
- Complete messages and message types APIs [\#66](https://github.com/renehernandez/camper/pull/66)
|
8
|
+
- Complete comments api [\#65](https://github.com/renehernandez/camper/pull/65)
|
9
|
+
|
10
|
+
**Merged pull requests:**
|
11
|
+
|
12
|
+
- Refactor check for valid basecamp url [\#67](https://github.com/renehernandez/camper/pull/67)
|
13
|
+
- Bump rspec from 3.9.0 to 3.10.0 [\#64](https://github.com/renehernandez/camper/pull/64)
|
14
|
+
- Rewrite API modules to use module nesting [\#63](https://github.com/renehernandez/camper/pull/63)
|
15
|
+
- Bump rubocop from 1.0.0 to 1.1.0 [\#48](https://github.com/renehernandez/camper/pull/48)
|
16
|
+
|
17
|
+
## [v0.0.11](https://github.com/renehernandez/camper/tree/v0.0.11) (2020-11-01)
|
18
|
+
|
19
|
+
**Implemented enhancements:**
|
20
|
+
|
7
21
|
- Implement trash\_todo endpoint [\#58](https://github.com/renehernandez/camper/issues/58)
|
8
22
|
- Implement trash\_todolist endpoint [\#57](https://github.com/renehernandez/camper/issues/57)
|
9
23
|
- To-do API is missing update\_todo endpoint [\#49](https://github.com/renehernandez/camper/issues/49)
|
@@ -20,6 +34,10 @@
|
|
20
34
|
- Update endpoints documentation to use PaginatedResponse [\#59](https://github.com/renehernandez/camper/pull/59)
|
21
35
|
- Fix query string generation in get endpoints [\#55](https://github.com/renehernandez/camper/pull/55)
|
22
36
|
|
37
|
+
**Documentation:**
|
38
|
+
|
39
|
+
- update\_todolist needs to call out that description will be cleared if not specified [\#50](https://github.com/renehernandez/camper/issues/50)
|
40
|
+
|
23
41
|
## [v0.0.10](https://github.com/renehernandez/camper/tree/v0.0.10) (2020-10-30)
|
24
42
|
|
25
43
|
**Implemented enhancements:**
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
camper (0.0.
|
4
|
+
camper (0.0.11)
|
5
5
|
concurrent-ruby (~> 1.1)
|
6
6
|
httparty (~> 0.18)
|
7
7
|
rack-oauth2 (~> 1.14)
|
@@ -21,7 +21,7 @@ GEM
|
|
21
21
|
bindata (2.4.8)
|
22
22
|
coderay (1.1.3)
|
23
23
|
concurrent-ruby (1.1.7)
|
24
|
-
diff-lcs (1.
|
24
|
+
diff-lcs (1.4.4)
|
25
25
|
httparty (0.18.1)
|
26
26
|
mime-types (~> 3.0)
|
27
27
|
multi_xml (>= 0.5.2)
|
@@ -55,29 +55,29 @@ GEM
|
|
55
55
|
rake (13.0.1)
|
56
56
|
regexp_parser (1.8.2)
|
57
57
|
rexml (3.2.4)
|
58
|
-
rspec (3.
|
59
|
-
rspec-core (~> 3.
|
60
|
-
rspec-expectations (~> 3.
|
61
|
-
rspec-mocks (~> 3.
|
62
|
-
rspec-core (3.
|
63
|
-
rspec-support (~> 3.
|
64
|
-
rspec-expectations (3.
|
58
|
+
rspec (3.10.0)
|
59
|
+
rspec-core (~> 3.10.0)
|
60
|
+
rspec-expectations (~> 3.10.0)
|
61
|
+
rspec-mocks (~> 3.10.0)
|
62
|
+
rspec-core (3.10.0)
|
63
|
+
rspec-support (~> 3.10.0)
|
64
|
+
rspec-expectations (3.10.0)
|
65
65
|
diff-lcs (>= 1.2.0, < 2.0)
|
66
|
-
rspec-support (~> 3.
|
67
|
-
rspec-mocks (3.
|
66
|
+
rspec-support (~> 3.10.0)
|
67
|
+
rspec-mocks (3.10.0)
|
68
68
|
diff-lcs (>= 1.2.0, < 2.0)
|
69
|
-
rspec-support (~> 3.
|
70
|
-
rspec-support (3.
|
71
|
-
rubocop (1.
|
69
|
+
rspec-support (~> 3.10.0)
|
70
|
+
rspec-support (3.10.0)
|
71
|
+
rubocop (1.1.0)
|
72
72
|
parallel (~> 1.10)
|
73
73
|
parser (>= 2.7.1.5)
|
74
74
|
rainbow (>= 2.2.2, < 4.0)
|
75
75
|
regexp_parser (>= 1.8)
|
76
76
|
rexml
|
77
|
-
rubocop-ast (>= 0.
|
77
|
+
rubocop-ast (>= 1.0.1)
|
78
78
|
ruby-progressbar (~> 1.7)
|
79
79
|
unicode-display_width (>= 1.4.0, < 2.0)
|
80
|
-
rubocop-ast (1.
|
80
|
+
rubocop-ast (1.1.0)
|
81
81
|
parser (>= 2.7.1.5)
|
82
82
|
rubocop-performance (1.8.1)
|
83
83
|
rubocop (>= 0.87.0)
|
data/README.md
CHANGED
@@ -30,11 +30,13 @@ The up-to-date list of Basecamp API endpoints can be found at [here](https://git
|
|
30
30
|
|
31
31
|
Currently, Camper supports the following endpoints:
|
32
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) (
|
34
|
-
* [
|
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) (Complete)
|
34
|
+
* [Message Types](https://github.com/basecamp/bc3-api/blob/master/sections/message_types.md): Implementation at [messages.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/message_types.rb) (Complete)
|
35
|
+
* [Message Boards](https://github.com/basecamp/bc3-api/blob/master/sections/message_boards.md): Implementation at [message_boards.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/message_boards.rb) (Complete)
|
36
|
+
* [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) (Complete)
|
35
37
|
* [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
38
|
* [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) (Complete)
|
37
|
-
* [Recordings](https://github.com/basecamp/bc3-api/blob/master/sections/recordings.md): Implementation at [recordings.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/recordings.rb)
|
39
|
+
* [Recordings](https://github.com/basecamp/bc3-api/blob/master/sections/recordings.md): Implementation at [recordings.rb](https://github.com/renehernandez/camper/blob/main/lib/camper/api/recordings.rb) (Complete)
|
38
40
|
* [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) (Complete)
|
39
41
|
* [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) (Complete)
|
40
42
|
|
data/examples/comments.rb
CHANGED
@@ -25,11 +25,22 @@ 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
|
-
|
28
|
+
|
29
|
+
puts 'Create a new comment'
|
30
|
+
new_comment = client.create_comment(list, 'New temporary comment')
|
29
31
|
comments = client.comments(list)
|
30
32
|
idx = 0
|
31
33
|
comments.auto_paginate do |c|
|
32
34
|
puts "Comment #{idx} content: #{c.content}"
|
33
35
|
idx += 1
|
34
36
|
end
|
37
|
+
|
38
|
+
puts 'Get single comment'
|
39
|
+
single_comment = client.comment(list, new_comment.id)
|
40
|
+
|
41
|
+
puts 'Update comment'
|
42
|
+
client.update_comment(single_comment, 'New content')
|
43
|
+
|
44
|
+
puts 'Delete comment'
|
45
|
+
client.trash_comment(single_comment)
|
35
46
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'camper'
|
4
|
+
|
5
|
+
client = Camper.client
|
6
|
+
|
7
|
+
project = client.projects.first
|
8
|
+
|
9
|
+
puts 'List all messages types'
|
10
|
+
client.message_types(project).auto_paginate do |type|
|
11
|
+
puts "Name: #{type.name}; Icon: #{type.icon}"
|
12
|
+
end
|
13
|
+
|
14
|
+
puts 'Create new message type'
|
15
|
+
type = client.create_message_type(project, 'Farewell', '👋')
|
16
|
+
puts "Message Type:\n#{type.inspect}"
|
17
|
+
|
18
|
+
puts 'Update message type name'
|
19
|
+
type = client.update_message_type(project, type, name: 'Bye bye')
|
20
|
+
puts "Message Type:\n#{type.inspect}"
|
21
|
+
|
22
|
+
puts 'Update message type icon'
|
23
|
+
type = client.update_message_type(project, type, icon: '🙌')
|
24
|
+
puts "Message Type:\n#{type.inspect}"
|
25
|
+
|
26
|
+
puts 'Delete message type'
|
27
|
+
client.delete_message_type(project, type)
|
28
|
+
|
29
|
+
|
data/examples/messages.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'camper'
|
2
4
|
|
3
5
|
client = Camper.configure do |config|
|
@@ -16,9 +18,18 @@ projects.auto_paginate do |p|
|
|
16
18
|
message_board = client.message_board(p)
|
17
19
|
puts "Message Board: #{message_board.title}"
|
18
20
|
|
21
|
+
puts 'List messages using the message board'
|
19
22
|
messages = client.messages(message_board)
|
20
23
|
|
21
24
|
messages.auto_paginate do |msg|
|
22
|
-
puts msg.
|
25
|
+
puts "Title: #{msg.title}; Content: #{msg.content}"
|
26
|
+
end
|
27
|
+
|
28
|
+
puts 'List messages using the project'
|
29
|
+
messages = client.messages(p)
|
30
|
+
|
31
|
+
messages.auto_paginate do |msg|
|
32
|
+
puts "Title: #{msg.title}; Content: #{msg.content}"
|
33
|
+
puts "Message:\n#{msg.inspect}"
|
23
34
|
end
|
24
|
-
end
|
35
|
+
end
|
data/lib/camper/api/comments.rb
CHANGED
@@ -1,15 +1,87 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Camper
|
4
|
+
class Client
|
5
|
+
# Defines methods related to comments.
|
6
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/comments.md
|
7
|
+
module CommentsAPI
|
8
|
+
# Get a paginated list of active comments for a given resource
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# client.comments(todo)
|
12
|
+
#
|
13
|
+
# @param resource [Resource] resource to gets the comments from
|
14
|
+
# @return [PaginatedResponse<Resource>]
|
15
|
+
# @raise [Error::ResourceCannotBeCommented] if the resource doesn't support comments
|
16
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/comments.md#get-comments
|
17
|
+
def comments(resource)
|
18
|
+
raise Error::ResourceCannotBeCommented, resource unless resource.can_be_commented?
|
7
19
|
|
8
|
-
|
9
|
-
|
20
|
+
get(resource.comments_url, override_path: true)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Get a comment within a resource
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# client.comment(todo, 10)
|
27
|
+
# @example
|
28
|
+
# client.comment(my_message, '23')
|
29
|
+
#
|
30
|
+
# @param resource [Resource] resource to get the comment from
|
31
|
+
# @param comment_id [Integer|String] id of comment ot retrieve
|
32
|
+
# @return [Resource]
|
33
|
+
# @raise [Error::ResourceCannotBeCommented] if the resource doesn't support comments
|
34
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/comments.md#get-a-comment
|
35
|
+
def comment(resource, comment_id)
|
36
|
+
raise Error::ResourceCannotBeCommented, resource unless resource.can_be_commented?
|
37
|
+
|
38
|
+
bucket_id = resource.bucket.id
|
39
|
+
|
40
|
+
get("/buckets/#{bucket_id}/comments/#{comment_id}")
|
41
|
+
end
|
42
|
+
|
43
|
+
# Create a new comment for a given resource
|
44
|
+
#
|
45
|
+
# @example
|
46
|
+
# client.create_comment(my_message, 'We are ready to start the project')
|
47
|
+
#
|
48
|
+
# @param resource [Resource] resource to create the comment on
|
49
|
+
# @param content [String] content of the comment
|
50
|
+
# @return [Resource]
|
51
|
+
# @raise [Error::ResourceCannotBeCommented] if the resource doesn't support comments
|
52
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/comments.md#create-a-comment
|
53
|
+
def create_comment(resource, content)
|
54
|
+
raise Error::ResourceCannotBeCommented, resource unless resource.can_be_commented?
|
55
|
+
|
56
|
+
post(resource.comments_url, override_path: true, body: { content: content })
|
57
|
+
end
|
58
|
+
|
59
|
+
# Update the content in a comment
|
60
|
+
#
|
61
|
+
# @example
|
62
|
+
# client.update_comment(comment, 'Fixed grammar mistakes')
|
63
|
+
#
|
64
|
+
# @param comment [Resource] comment to modify
|
65
|
+
# @param content [String] new content of the comment
|
66
|
+
# @return [Resource]
|
67
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/comments.md#update-a-comment
|
68
|
+
def update_comment(comment, content)
|
69
|
+
bucket_id = comment.bucket.id
|
70
|
+
|
71
|
+
put("/buckets/#{bucket_id}/comments/#{comment.id}", body: { content: content })
|
72
|
+
end
|
10
73
|
|
11
|
-
|
12
|
-
|
74
|
+
# Trash a comment
|
75
|
+
# it calls the trash_recording endpoint under the hood
|
76
|
+
#
|
77
|
+
# @example
|
78
|
+
# client.trash_comment(current_comment)
|
79
|
+
#
|
80
|
+
# @param comment [Resource] the comment to be trashed
|
81
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/recordings.md#trash-a-recording
|
82
|
+
def trash_comment(comment)
|
83
|
+
trash_recording(comment)
|
84
|
+
end
|
13
85
|
end
|
14
86
|
end
|
15
87
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Camper
|
4
|
+
class Client
|
5
|
+
# Defines methods related to message boards.
|
6
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_boards.md
|
7
|
+
module MessageBoardsAPI
|
8
|
+
# Get a message board for a given project
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# client.message_board(project)
|
12
|
+
#
|
13
|
+
# @param project [Project] project to get the associated message board on
|
14
|
+
# @return [Resource]
|
15
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_boards.md#message-boards
|
16
|
+
def message_board(project)
|
17
|
+
board = project.message_board
|
18
|
+
|
19
|
+
get(board.url, override_path: true)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Camper
|
4
|
+
class Client
|
5
|
+
# Defines methods related to message types.
|
6
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_types.md
|
7
|
+
module MessageTypesAPI
|
8
|
+
# Get a paginated list of all messages types in a given project
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# client.messages_types(my_project)
|
12
|
+
#
|
13
|
+
# @param project [Project] project to get the messages types from
|
14
|
+
# @return [PaginatedResponse<Resource>]
|
15
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_types.md#get-message-types
|
16
|
+
def message_types(project)
|
17
|
+
get("/buckets/#{project.id}/categories")
|
18
|
+
end
|
19
|
+
|
20
|
+
# Get a messages type in a given project
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
# client.message_type(my_project, '10')
|
24
|
+
# @example
|
25
|
+
# client.message_type(my_project, 64926)
|
26
|
+
#
|
27
|
+
# @param project [Project] project to get the messages type from
|
28
|
+
# @param message_type_id [Integer|String] id of the message type to retrieve
|
29
|
+
# @return [Resource]
|
30
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_types.md#get-a-message-type
|
31
|
+
def message_type(project, message_type_id)
|
32
|
+
get("/buckets/#{project.id}/categories/#{message_type_id}")
|
33
|
+
end
|
34
|
+
|
35
|
+
# Create a messages type in a given project
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# client.create_message_type(my_project, 'Farewell', '👋')
|
39
|
+
#
|
40
|
+
# @param project [Project] project where the message type belongs to
|
41
|
+
# @param name [String] name of the new message type
|
42
|
+
# @param icon [String] icon to associate with the new message type
|
43
|
+
# @return [Resource]
|
44
|
+
# @raise [Error::InvalidParameter] if either name or icon is blank
|
45
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_types.md#create-a-message-type
|
46
|
+
def create_message_type(project, name, icon)
|
47
|
+
raise Error::InvalidParameter, 'Name and icon parameters cannot be blank' if name.blank? || icon.blank?
|
48
|
+
|
49
|
+
post("/buckets/#{project.id}/categories", body: { name: name, icon: icon })
|
50
|
+
end
|
51
|
+
|
52
|
+
# Update a message type in a given project
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# client.update_message_type(my_project, type, name: 'Quick Update')
|
56
|
+
# @example
|
57
|
+
# client.update_message_type(my_project, type, icon: '🤙')
|
58
|
+
#
|
59
|
+
# @param project [Project] project where the message type belongs to
|
60
|
+
# @param type [Resource|Integer|String] resource or id representing a message type
|
61
|
+
# @param options [Hash] hash containing the name and/or icon to modify
|
62
|
+
# @return [Resource]
|
63
|
+
# @raise [Error::InvalidParameter] if options parameter is empty
|
64
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_types.md#destroy-a-message-type
|
65
|
+
def update_message_type(project, type, options = {})
|
66
|
+
raise Error::InvalidParameter, 'options cannot be empty' if options.empty?
|
67
|
+
|
68
|
+
type_id = type.respond_to?(:id) ? type.id : type
|
69
|
+
|
70
|
+
put("/buckets/#{project.id}/categories/#{type_id}", body: options)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Delete a message type in a given project
|
74
|
+
#
|
75
|
+
# @example
|
76
|
+
# client.delete_message_type(my_project, type)
|
77
|
+
#
|
78
|
+
# @param project [Project] project where the message type belongs to
|
79
|
+
# @param type [Resource|Integer|String] resource or id representing a message type
|
80
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/message_types.md#destroy-a-message-type
|
81
|
+
def delete_message_type(project, type)
|
82
|
+
type_id = type.respond_to?(:id) ? type.id : type
|
83
|
+
|
84
|
+
delete("/buckets/#{project.id}/categories/#{type_id}")
|
85
|
+
end
|
86
|
+
|
87
|
+
alias trash_message_type delete_message_type
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/camper/api/messages.rb
CHANGED
@@ -1,9 +1,108 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Camper
|
4
|
+
class Client
|
5
|
+
# Defines methods related to messages.
|
6
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/messages.md
|
7
|
+
module MessagesAPI
|
8
|
+
# Get a paginated list of active messages under the given message board or project
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# client.messages(message_board)
|
12
|
+
# @example
|
13
|
+
# client.messages(my_project)
|
14
|
+
#
|
15
|
+
# @param parent [Project|Resource] either a project or message board resource
|
16
|
+
# @return [PaginatedResponse<Resource>]
|
17
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/messages.md#get-messages
|
18
|
+
def messages(parent)
|
19
|
+
if parent.is_a?(Project)
|
20
|
+
bucket_id, board_id = parent.id, parent.message_board.id
|
21
|
+
else
|
22
|
+
bucket_id, board_id = parent.bucket.id, parent.id
|
23
|
+
end
|
24
|
+
|
25
|
+
get("/buckets/#{bucket_id}/message_boards/#{board_id}/messages")
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get a paginated list of active messages under the given message board or project
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
# client.message(my_project, '2343')
|
32
|
+
# @example
|
33
|
+
# client.message(message_board, 234)
|
34
|
+
#
|
35
|
+
# @param parent [Project|Resource] either a project or message board resource
|
36
|
+
# @param message_id [Integer|String] id of the message to retrieve
|
37
|
+
# @return [Resource]
|
38
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/messages.md#get-a-message
|
39
|
+
def message(parent, message_id)
|
40
|
+
bucket_id = parent.is_a?(Project) ? parent.id : parent.bucket.id
|
41
|
+
|
42
|
+
get("/buckets/#{bucket_id}/messages/#{message_id}")
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create a message
|
46
|
+
#
|
47
|
+
# @example
|
48
|
+
# client.create_message(my_project, 'New Infrastructure')
|
49
|
+
# @example
|
50
|
+
# client.create_message(message_board, 'New Launch',
|
51
|
+
# content: 'This launch will be awesome',
|
52
|
+
# category_id: '23'
|
53
|
+
# )
|
54
|
+
#
|
55
|
+
# @param parent [Project|Resource] either a project or message board resource
|
56
|
+
# @param subject [String] subject of the new message
|
57
|
+
# @param options [Hash] hash containing the content and/or category id for the new message
|
58
|
+
# @return [Resource]
|
59
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/messages.md#create-a-message
|
60
|
+
def create_message(parent, subject, options = {})
|
61
|
+
if parent.is_a?(Project)
|
62
|
+
bucket_id, board_id = parent.id, parent.message_board.id
|
63
|
+
else
|
64
|
+
bucket_id, board_id = parent.bucket.id, parent.id
|
65
|
+
end
|
66
|
+
|
67
|
+
post(
|
68
|
+
"/buckets/#{bucket_id}/message_boards/#{board_id}/messages",
|
69
|
+
body: options.merge({ subject: subject, status: 'active' })
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Update a message
|
74
|
+
#
|
75
|
+
# @example
|
76
|
+
# client.update_message(message, subject: 'New Infrastructure')
|
77
|
+
# @example
|
78
|
+
# client.update_message(message, content: 'This launch will be awesome')
|
79
|
+
# @example
|
80
|
+
# client.update_message(message, category_id: '6918641') # message type id
|
81
|
+
#
|
82
|
+
# @param message [Resource] message to update
|
83
|
+
# @param options [Hash] subject of the new message
|
84
|
+
# @param options [Hash] hash containing subject, content and/or category_id to update
|
85
|
+
# @return [Resource]
|
86
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/messages.md#update-a-message
|
87
|
+
def update_message(message, options = {})
|
88
|
+
raise Error::InvalidParameter, 'options cannot be empty' if options.empty?
|
89
|
+
|
90
|
+
update("/buckets/#{message.bucket.id}/messages/#{message.id}", body: options)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Trash message
|
94
|
+
# it calls the trash_recording endpoint under the hood
|
95
|
+
#
|
96
|
+
# @example
|
97
|
+
# client.trash_message(message)
|
98
|
+
#
|
99
|
+
# @param todo [Resource] the message to be trashed
|
100
|
+
# @raise [Error::InvalidParameter] if url field in todo param
|
101
|
+
# is not a valid basecamp url
|
102
|
+
# @see https://github.com/basecamp/bc3-api/blob/master/sections/recordings.md#trash-a-recording
|
103
|
+
def trash_message(message)
|
104
|
+
trash_recording(message)
|
105
|
+
end
|
7
106
|
end
|
8
107
|
end
|
9
108
|
end
|