basecamp-sdk 0.2.1

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.
Files changed (116) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +14 -0
  3. data/.yardopts +6 -0
  4. data/README.md +293 -0
  5. data/Rakefile +26 -0
  6. data/basecamp-sdk.gemspec +46 -0
  7. data/lib/basecamp/auth_strategy.rb +38 -0
  8. data/lib/basecamp/chain_hooks.rb +45 -0
  9. data/lib/basecamp/client.rb +428 -0
  10. data/lib/basecamp/config.rb +143 -0
  11. data/lib/basecamp/errors.rb +289 -0
  12. data/lib/basecamp/generated/metadata.json +2281 -0
  13. data/lib/basecamp/generated/services/attachments_service.rb +24 -0
  14. data/lib/basecamp/generated/services/boosts_service.rb +70 -0
  15. data/lib/basecamp/generated/services/campfires_service.rb +122 -0
  16. data/lib/basecamp/generated/services/card_columns_service.rb +103 -0
  17. data/lib/basecamp/generated/services/card_steps_service.rb +57 -0
  18. data/lib/basecamp/generated/services/card_tables_service.rb +20 -0
  19. data/lib/basecamp/generated/services/cards_service.rb +66 -0
  20. data/lib/basecamp/generated/services/checkins_service.rb +157 -0
  21. data/lib/basecamp/generated/services/client_approvals_service.rb +28 -0
  22. data/lib/basecamp/generated/services/client_correspondences_service.rb +28 -0
  23. data/lib/basecamp/generated/services/client_replies_service.rb +30 -0
  24. data/lib/basecamp/generated/services/client_visibility_service.rb +21 -0
  25. data/lib/basecamp/generated/services/comments_service.rb +49 -0
  26. data/lib/basecamp/generated/services/documents_service.rb +52 -0
  27. data/lib/basecamp/generated/services/events_service.rb +20 -0
  28. data/lib/basecamp/generated/services/forwards_service.rb +67 -0
  29. data/lib/basecamp/generated/services/lineup_service.rb +44 -0
  30. data/lib/basecamp/generated/services/message_boards_service.rb +20 -0
  31. data/lib/basecamp/generated/services/message_types_service.rb +59 -0
  32. data/lib/basecamp/generated/services/messages_service.rb +75 -0
  33. data/lib/basecamp/generated/services/people_service.rb +73 -0
  34. data/lib/basecamp/generated/services/projects_service.rb +63 -0
  35. data/lib/basecamp/generated/services/recordings_service.rb +64 -0
  36. data/lib/basecamp/generated/services/reports_service.rb +56 -0
  37. data/lib/basecamp/generated/services/schedules_service.rb +92 -0
  38. data/lib/basecamp/generated/services/search_service.rb +31 -0
  39. data/lib/basecamp/generated/services/subscriptions_service.rb +50 -0
  40. data/lib/basecamp/generated/services/templates_service.rb +82 -0
  41. data/lib/basecamp/generated/services/timeline_service.rb +20 -0
  42. data/lib/basecamp/generated/services/timesheets_service.rb +81 -0
  43. data/lib/basecamp/generated/services/todolist_groups_service.rb +41 -0
  44. data/lib/basecamp/generated/services/todolists_service.rb +53 -0
  45. data/lib/basecamp/generated/services/todos_service.rb +106 -0
  46. data/lib/basecamp/generated/services/todosets_service.rb +20 -0
  47. data/lib/basecamp/generated/services/tools_service.rb +80 -0
  48. data/lib/basecamp/generated/services/uploads_service.rb +61 -0
  49. data/lib/basecamp/generated/services/vaults_service.rb +49 -0
  50. data/lib/basecamp/generated/services/webhooks_service.rb +63 -0
  51. data/lib/basecamp/generated/types.rb +3196 -0
  52. data/lib/basecamp/hooks.rb +70 -0
  53. data/lib/basecamp/http.rb +440 -0
  54. data/lib/basecamp/logger_hooks.rb +46 -0
  55. data/lib/basecamp/noop_hooks.rb +9 -0
  56. data/lib/basecamp/oauth/discovery.rb +123 -0
  57. data/lib/basecamp/oauth/errors.rb +35 -0
  58. data/lib/basecamp/oauth/exchange.rb +291 -0
  59. data/lib/basecamp/oauth/pkce.rb +68 -0
  60. data/lib/basecamp/oauth/types.rb +133 -0
  61. data/lib/basecamp/oauth.rb +56 -0
  62. data/lib/basecamp/oauth_token_provider.rb +108 -0
  63. data/lib/basecamp/operation_info.rb +17 -0
  64. data/lib/basecamp/request_info.rb +10 -0
  65. data/lib/basecamp/request_result.rb +14 -0
  66. data/lib/basecamp/security.rb +112 -0
  67. data/lib/basecamp/services/attachments_service.rb +33 -0
  68. data/lib/basecamp/services/authorization_service.rb +47 -0
  69. data/lib/basecamp/services/base_service.rb +146 -0
  70. data/lib/basecamp/services/campfires_service.rb +141 -0
  71. data/lib/basecamp/services/card_columns_service.rb +106 -0
  72. data/lib/basecamp/services/card_steps_service.rb +86 -0
  73. data/lib/basecamp/services/card_tables_service.rb +23 -0
  74. data/lib/basecamp/services/cards_service.rb +93 -0
  75. data/lib/basecamp/services/checkins_service.rb +127 -0
  76. data/lib/basecamp/services/client_approvals_service.rb +33 -0
  77. data/lib/basecamp/services/client_correspondences_service.rb +33 -0
  78. data/lib/basecamp/services/client_replies_service.rb +35 -0
  79. data/lib/basecamp/services/comments_service.rb +63 -0
  80. data/lib/basecamp/services/documents_service.rb +74 -0
  81. data/lib/basecamp/services/events_service.rb +27 -0
  82. data/lib/basecamp/services/forwards_service.rb +80 -0
  83. data/lib/basecamp/services/lineup_service.rb +67 -0
  84. data/lib/basecamp/services/message_boards_service.rb +24 -0
  85. data/lib/basecamp/services/message_types_service.rb +79 -0
  86. data/lib/basecamp/services/messages_service.rb +133 -0
  87. data/lib/basecamp/services/people_service.rb +73 -0
  88. data/lib/basecamp/services/projects_service.rb +67 -0
  89. data/lib/basecamp/services/recordings_service.rb +127 -0
  90. data/lib/basecamp/services/reports_service.rb +80 -0
  91. data/lib/basecamp/services/schedules_service.rb +156 -0
  92. data/lib/basecamp/services/search_service.rb +36 -0
  93. data/lib/basecamp/services/subscriptions_service.rb +67 -0
  94. data/lib/basecamp/services/templates_service.rb +96 -0
  95. data/lib/basecamp/services/timeline_service.rb +62 -0
  96. data/lib/basecamp/services/timesheet_service.rb +68 -0
  97. data/lib/basecamp/services/todolist_groups_service.rb +100 -0
  98. data/lib/basecamp/services/todolists_service.rb +104 -0
  99. data/lib/basecamp/services/todos_service.rb +156 -0
  100. data/lib/basecamp/services/todosets_service.rb +23 -0
  101. data/lib/basecamp/services/tools_service.rb +89 -0
  102. data/lib/basecamp/services/uploads_service.rb +84 -0
  103. data/lib/basecamp/services/vaults_service.rb +84 -0
  104. data/lib/basecamp/services/webhooks_service.rb +88 -0
  105. data/lib/basecamp/static_token_provider.rb +24 -0
  106. data/lib/basecamp/token_provider.rb +42 -0
  107. data/lib/basecamp/version.rb +6 -0
  108. data/lib/basecamp/webhooks/event.rb +52 -0
  109. data/lib/basecamp/webhooks/rack_middleware.rb +49 -0
  110. data/lib/basecamp/webhooks/receiver.rb +161 -0
  111. data/lib/basecamp/webhooks/verify.rb +36 -0
  112. data/lib/basecamp.rb +107 -0
  113. data/scripts/generate-metadata.rb +106 -0
  114. data/scripts/generate-services.rb +778 -0
  115. data/scripts/generate-types.rb +191 -0
  116. metadata +316 -0
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for ClientCorrespondences operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class ClientCorrespondencesService < BaseService
9
+
10
+ # List all client correspondences in a project
11
+ # @return [Enumerator<Hash>] paginated results
12
+ def list()
13
+ wrap_paginated(service: "clientcorrespondences", operation: "list", is_mutation: false) do
14
+ paginate("/client/correspondences.json")
15
+ end
16
+ end
17
+
18
+ # Get a single client correspondence by id
19
+ # @param correspondence_id [Integer] correspondence id ID
20
+ # @return [Hash] response data
21
+ def get(correspondence_id:)
22
+ with_operation(service: "clientcorrespondences", operation: "get", is_mutation: false, resource_id: correspondence_id) do
23
+ http_get("/client/correspondences/#{correspondence_id}").json
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for ClientReplies operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class ClientRepliesService < BaseService
9
+
10
+ # List all client replies for a recording (correspondence or approval)
11
+ # @param recording_id [Integer] recording id ID
12
+ # @return [Enumerator<Hash>] paginated results
13
+ def list(recording_id:)
14
+ wrap_paginated(service: "clientreplies", operation: "list", is_mutation: false, resource_id: recording_id) do
15
+ paginate("/client/recordings/#{recording_id}/replies.json")
16
+ end
17
+ end
18
+
19
+ # Get a single client reply by id
20
+ # @param recording_id [Integer] recording id ID
21
+ # @param reply_id [Integer] reply id ID
22
+ # @return [Hash] response data
23
+ def get(recording_id:, reply_id:)
24
+ with_operation(service: "clientreplies", operation: "get", is_mutation: false, resource_id: reply_id) do
25
+ http_get("/client/recordings/#{recording_id}/replies/#{reply_id}").json
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for ClientVisibility operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class ClientVisibilityService < BaseService
9
+
10
+ # Set client visibility for a recording
11
+ # @param recording_id [Integer] recording id ID
12
+ # @param visible_to_clients [Boolean] visible to clients
13
+ # @return [Hash] response data
14
+ def set_visibility(recording_id:, visible_to_clients:)
15
+ with_operation(service: "clientvisibility", operation: "set_visibility", is_mutation: true, resource_id: recording_id) do
16
+ http_put("/recordings/#{recording_id}/client_visibility.json", body: compact_params(visible_to_clients: visible_to_clients)).json
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Comments operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class CommentsService < BaseService
9
+
10
+ # Get a single comment by id
11
+ # @param comment_id [Integer] comment id ID
12
+ # @return [Hash] response data
13
+ def get(comment_id:)
14
+ with_operation(service: "comments", operation: "get", is_mutation: false, resource_id: comment_id) do
15
+ http_get("/comments/#{comment_id}").json
16
+ end
17
+ end
18
+
19
+ # Update an existing comment
20
+ # @param comment_id [Integer] comment id ID
21
+ # @param content [String] content
22
+ # @return [Hash] response data
23
+ def update(comment_id:, content:)
24
+ with_operation(service: "comments", operation: "update", is_mutation: true, resource_id: comment_id) do
25
+ http_put("/comments/#{comment_id}", body: compact_params(content: content)).json
26
+ end
27
+ end
28
+
29
+ # List comments on a recording
30
+ # @param recording_id [Integer] recording id ID
31
+ # @return [Enumerator<Hash>] paginated results
32
+ def list(recording_id:)
33
+ wrap_paginated(service: "comments", operation: "list", is_mutation: false, resource_id: recording_id) do
34
+ paginate("/recordings/#{recording_id}/comments.json")
35
+ end
36
+ end
37
+
38
+ # Create a new comment on a recording
39
+ # @param recording_id [Integer] recording id ID
40
+ # @param content [String] content
41
+ # @return [Hash] response data
42
+ def create(recording_id:, content:)
43
+ with_operation(service: "comments", operation: "create", is_mutation: true, resource_id: recording_id) do
44
+ http_post("/recordings/#{recording_id}/comments.json", body: compact_params(content: content)).json
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Documents operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class DocumentsService < BaseService
9
+
10
+ # Get a single document by id
11
+ # @param document_id [Integer] document id ID
12
+ # @return [Hash] response data
13
+ def get(document_id:)
14
+ with_operation(service: "documents", operation: "get", is_mutation: false, resource_id: document_id) do
15
+ http_get("/documents/#{document_id}").json
16
+ end
17
+ end
18
+
19
+ # Update an existing document
20
+ # @param document_id [Integer] document id ID
21
+ # @param title [String, nil] title
22
+ # @param content [String, nil] content
23
+ # @return [Hash] response data
24
+ def update(document_id:, title: nil, content: nil)
25
+ with_operation(service: "documents", operation: "update", is_mutation: true, resource_id: document_id) do
26
+ http_put("/documents/#{document_id}", body: compact_params(title: title, content: content)).json
27
+ end
28
+ end
29
+
30
+ # List documents in a vault
31
+ # @param vault_id [Integer] vault id ID
32
+ # @return [Enumerator<Hash>] paginated results
33
+ def list(vault_id:)
34
+ wrap_paginated(service: "documents", operation: "list", is_mutation: false, resource_id: vault_id) do
35
+ paginate("/vaults/#{vault_id}/documents.json")
36
+ end
37
+ end
38
+
39
+ # Create a new document in a vault
40
+ # @param vault_id [Integer] vault id ID
41
+ # @param title [String] title
42
+ # @param content [String, nil] content
43
+ # @param status [String, nil] active|drafted
44
+ # @return [Hash] response data
45
+ def create(vault_id:, title:, content: nil, status: nil)
46
+ with_operation(service: "documents", operation: "create", is_mutation: true, resource_id: vault_id) do
47
+ http_post("/vaults/#{vault_id}/documents.json", body: compact_params(title: title, content: content, status: status)).json
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Events operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class EventsService < BaseService
9
+
10
+ # List all events for a recording
11
+ # @param recording_id [Integer] recording id ID
12
+ # @return [Enumerator<Hash>] paginated results
13
+ def list(recording_id:)
14
+ wrap_paginated(service: "events", operation: "list", is_mutation: false, resource_id: recording_id) do
15
+ paginate("/recordings/#{recording_id}/events.json")
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Forwards operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class ForwardsService < BaseService
9
+
10
+ # Get a forward by ID
11
+ # @param forward_id [Integer] forward id ID
12
+ # @return [Hash] response data
13
+ def get(forward_id:)
14
+ with_operation(service: "forwards", operation: "get", is_mutation: false, resource_id: forward_id) do
15
+ http_get("/inbox_forwards/#{forward_id}").json
16
+ end
17
+ end
18
+
19
+ # List all replies to a forward
20
+ # @param forward_id [Integer] forward id ID
21
+ # @return [Enumerator<Hash>] paginated results
22
+ def list_replies(forward_id:)
23
+ wrap_paginated(service: "forwards", operation: "list_replies", is_mutation: false, resource_id: forward_id) do
24
+ paginate("/inbox_forwards/#{forward_id}/replies.json")
25
+ end
26
+ end
27
+
28
+ # Create a reply to a forward
29
+ # @param forward_id [Integer] forward id ID
30
+ # @param content [String] content
31
+ # @return [Hash] response data
32
+ def create_reply(forward_id:, content:)
33
+ with_operation(service: "forwards", operation: "create_reply", is_mutation: true, resource_id: forward_id) do
34
+ http_post("/inbox_forwards/#{forward_id}/replies.json", body: compact_params(content: content)).json
35
+ end
36
+ end
37
+
38
+ # Get a forward reply by ID
39
+ # @param forward_id [Integer] forward id ID
40
+ # @param reply_id [Integer] reply id ID
41
+ # @return [Hash] response data
42
+ def get_reply(forward_id:, reply_id:)
43
+ with_operation(service: "forwards", operation: "get_reply", is_mutation: false, resource_id: reply_id) do
44
+ http_get("/inbox_forwards/#{forward_id}/replies/#{reply_id}").json
45
+ end
46
+ end
47
+
48
+ # Get an inbox by ID
49
+ # @param inbox_id [Integer] inbox id ID
50
+ # @return [Hash] response data
51
+ def get_inbox(inbox_id:)
52
+ with_operation(service: "forwards", operation: "get_inbox", is_mutation: false, resource_id: inbox_id) do
53
+ http_get("/inboxes/#{inbox_id}").json
54
+ end
55
+ end
56
+
57
+ # List all forwards in an inbox
58
+ # @param inbox_id [Integer] inbox id ID
59
+ # @return [Enumerator<Hash>] paginated results
60
+ def list(inbox_id:)
61
+ wrap_paginated(service: "forwards", operation: "list", is_mutation: false, resource_id: inbox_id) do
62
+ paginate("/inboxes/#{inbox_id}/forwards.json")
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Lineup operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class LineupService < BaseService
9
+
10
+ # Create a new lineup marker
11
+ # @param name [String] name
12
+ # @param date [String] date
13
+ # @return [void]
14
+ def create(name:, date:)
15
+ with_operation(service: "lineup", operation: "create", is_mutation: true) do
16
+ http_post("/lineup/markers.json", body: compact_params(name: name, date: date))
17
+ nil
18
+ end
19
+ end
20
+
21
+ # Update an existing lineup marker
22
+ # @param marker_id [Integer] marker id ID
23
+ # @param name [String, nil] name
24
+ # @param date [String, nil] date
25
+ # @return [void]
26
+ def update(marker_id:, name: nil, date: nil)
27
+ with_operation(service: "lineup", operation: "update", is_mutation: true, resource_id: marker_id) do
28
+ http_put("/lineup/markers/#{marker_id}", body: compact_params(name: name, date: date))
29
+ nil
30
+ end
31
+ end
32
+
33
+ # Delete a lineup marker
34
+ # @param marker_id [Integer] marker id ID
35
+ # @return [void]
36
+ def delete(marker_id:)
37
+ with_operation(service: "lineup", operation: "delete", is_mutation: true, resource_id: marker_id) do
38
+ http_delete("/lineup/markers/#{marker_id}")
39
+ nil
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for MessageBoards operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class MessageBoardsService < BaseService
9
+
10
+ # Get a message board
11
+ # @param board_id [Integer] board id ID
12
+ # @return [Hash] response data
13
+ def get(board_id:)
14
+ with_operation(service: "messageboards", operation: "get", is_mutation: false, resource_id: board_id) do
15
+ http_get("/message_boards/#{board_id}").json
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for MessageTypes operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class MessageTypesService < BaseService
9
+
10
+ # List message types in a project
11
+ # @return [Enumerator<Hash>] paginated results
12
+ def list()
13
+ wrap_paginated(service: "messagetypes", operation: "list", is_mutation: false) do
14
+ paginate("/categories.json")
15
+ end
16
+ end
17
+
18
+ # Create a new message type in a project
19
+ # @param name [String] name
20
+ # @param icon [String] icon
21
+ # @return [Hash] response data
22
+ def create(name:, icon:)
23
+ with_operation(service: "messagetypes", operation: "create", is_mutation: true) do
24
+ http_post("/categories.json", body: compact_params(name: name, icon: icon)).json
25
+ end
26
+ end
27
+
28
+ # Get a single message type by id
29
+ # @param type_id [Integer] type id ID
30
+ # @return [Hash] response data
31
+ def get(type_id:)
32
+ with_operation(service: "messagetypes", operation: "get", is_mutation: false, resource_id: type_id) do
33
+ http_get("/categories/#{type_id}").json
34
+ end
35
+ end
36
+
37
+ # Update an existing message type
38
+ # @param type_id [Integer] type id ID
39
+ # @param name [String, nil] name
40
+ # @param icon [String, nil] icon
41
+ # @return [Hash] response data
42
+ def update(type_id:, name: nil, icon: nil)
43
+ with_operation(service: "messagetypes", operation: "update", is_mutation: true, resource_id: type_id) do
44
+ http_put("/categories/#{type_id}", body: compact_params(name: name, icon: icon)).json
45
+ end
46
+ end
47
+
48
+ # Delete a message type
49
+ # @param type_id [Integer] type id ID
50
+ # @return [void]
51
+ def delete(type_id:)
52
+ with_operation(service: "messagetypes", operation: "delete", is_mutation: true, resource_id: type_id) do
53
+ http_delete("/categories/#{type_id}")
54
+ nil
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Messages operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class MessagesService < BaseService
9
+
10
+ # List messages on a message board
11
+ # @param board_id [Integer] board id ID
12
+ # @return [Enumerator<Hash>] paginated results
13
+ def list(board_id:)
14
+ wrap_paginated(service: "messages", operation: "list", is_mutation: false, resource_id: board_id) do
15
+ paginate("/message_boards/#{board_id}/messages.json")
16
+ end
17
+ end
18
+
19
+ # Create a new message on a message board
20
+ # @param board_id [Integer] board id ID
21
+ # @param subject [String] subject
22
+ # @param content [String, nil] content
23
+ # @param status [String, nil] active|drafted
24
+ # @param category_id [Integer, nil] category id
25
+ # @return [Hash] response data
26
+ def create(board_id:, subject:, content: nil, status: nil, category_id: nil)
27
+ with_operation(service: "messages", operation: "create", is_mutation: true, resource_id: board_id) do
28
+ http_post("/message_boards/#{board_id}/messages.json", body: compact_params(subject: subject, content: content, status: status, category_id: category_id)).json
29
+ end
30
+ end
31
+
32
+ # Get a single message by id
33
+ # @param message_id [Integer] message id ID
34
+ # @return [Hash] response data
35
+ def get(message_id:)
36
+ with_operation(service: "messages", operation: "get", is_mutation: false, resource_id: message_id) do
37
+ http_get("/messages/#{message_id}").json
38
+ end
39
+ end
40
+
41
+ # Update an existing message
42
+ # @param message_id [Integer] message id ID
43
+ # @param subject [String, nil] subject
44
+ # @param content [String, nil] content
45
+ # @param status [String, nil] active|drafted
46
+ # @param category_id [Integer, nil] category id
47
+ # @return [Hash] response data
48
+ def update(message_id:, subject: nil, content: nil, status: nil, category_id: nil)
49
+ with_operation(service: "messages", operation: "update", is_mutation: true, resource_id: message_id) do
50
+ http_put("/messages/#{message_id}", body: compact_params(subject: subject, content: content, status: status, category_id: category_id)).json
51
+ end
52
+ end
53
+
54
+ # Pin a message to the top of the message board
55
+ # @param message_id [Integer] message id ID
56
+ # @return [void]
57
+ def pin(message_id:)
58
+ with_operation(service: "messages", operation: "pin", is_mutation: true, resource_id: message_id) do
59
+ http_post("/recordings/#{message_id}/pin.json")
60
+ nil
61
+ end
62
+ end
63
+
64
+ # Unpin a message from the message board
65
+ # @param message_id [Integer] message id ID
66
+ # @return [void]
67
+ def unpin(message_id:)
68
+ with_operation(service: "messages", operation: "unpin", is_mutation: true, resource_id: message_id) do
69
+ http_delete("/recordings/#{message_id}/pin.json")
70
+ nil
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for People operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class PeopleService < BaseService
9
+
10
+ # List all account users who can be pinged
11
+ # @return [Enumerator<Hash>] paginated results
12
+ def list_pingable()
13
+ wrap_paginated(service: "people", operation: "list_pingable", is_mutation: false) do
14
+ paginate("/circles/people.json")
15
+ end
16
+ end
17
+
18
+ # Get the current authenticated user's profile
19
+ # @return [Hash] response data
20
+ def my_profile()
21
+ with_operation(service: "people", operation: "my_profile", is_mutation: false) do
22
+ http_get("/my/profile.json").json
23
+ end
24
+ end
25
+
26
+ # List all people visible to the current user
27
+ # @return [Enumerator<Hash>] paginated results
28
+ def list()
29
+ wrap_paginated(service: "people", operation: "list", is_mutation: false) do
30
+ paginate("/people.json")
31
+ end
32
+ end
33
+
34
+ # Get a person by ID
35
+ # @param person_id [Integer] person id ID
36
+ # @return [Hash] response data
37
+ def get(person_id:)
38
+ with_operation(service: "people", operation: "get", is_mutation: false, resource_id: person_id) do
39
+ http_get("/people/#{person_id}").json
40
+ end
41
+ end
42
+
43
+ # List all active people on a project
44
+ # @param project_id [Integer] project id ID
45
+ # @return [Enumerator<Hash>] paginated results
46
+ def list_for_project(project_id:)
47
+ wrap_paginated(service: "people", operation: "list_for_project", is_mutation: false, project_id: project_id) do
48
+ paginate("/projects/#{project_id}/people.json")
49
+ end
50
+ end
51
+
52
+ # Update project access (grant/revoke/create people)
53
+ # @param project_id [Integer] project id ID
54
+ # @param grant [Array, nil] grant
55
+ # @param revoke [Array, nil] revoke
56
+ # @param create [Array, nil] create
57
+ # @return [Hash] response data
58
+ def update_project_access(project_id:, grant: nil, revoke: nil, create: nil)
59
+ with_operation(service: "people", operation: "update_project_access", is_mutation: true, project_id: project_id) do
60
+ http_put("/projects/#{project_id}/people/users.json", body: compact_params(grant: grant, revoke: revoke, create: create)).json
61
+ end
62
+ end
63
+
64
+ # List people who can be assigned todos
65
+ # @return [Hash] response data
66
+ def list_assignable()
67
+ with_operation(service: "people", operation: "list_assignable", is_mutation: false) do
68
+ http_get("/reports/todos/assigned.json").json
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Projects operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class ProjectsService < BaseService
9
+
10
+ # List projects (active by default; optionally archived/trashed)
11
+ # @param status [String, nil] active|archived|trashed
12
+ # @return [Enumerator<Hash>] paginated results
13
+ def list(status: nil)
14
+ wrap_paginated(service: "projects", operation: "list", is_mutation: false) do
15
+ params = compact_params(status: status)
16
+ paginate("/projects.json", params: params)
17
+ end
18
+ end
19
+
20
+ # Create a new project
21
+ # @param name [String] name
22
+ # @param description [String, nil] description
23
+ # @return [Hash] response data
24
+ def create(name:, description: nil)
25
+ with_operation(service: "projects", operation: "create", is_mutation: true) do
26
+ http_post("/projects.json", body: compact_params(name: name, description: description)).json
27
+ end
28
+ end
29
+
30
+ # Get a single project by id
31
+ # @param project_id [Integer] project id ID
32
+ # @return [Hash] response data
33
+ def get(project_id:)
34
+ with_operation(service: "projects", operation: "get", is_mutation: false, project_id: project_id) do
35
+ http_get("/projects/#{project_id}").json
36
+ end
37
+ end
38
+
39
+ # Update an existing project
40
+ # @param project_id [Integer] project id ID
41
+ # @param name [String] name
42
+ # @param description [String, nil] description
43
+ # @param admissions [String, nil] invite|employee|team
44
+ # @param schedule_attributes [String, nil] schedule attributes
45
+ # @return [Hash] response data
46
+ def update(project_id:, name:, description: nil, admissions: nil, schedule_attributes: nil)
47
+ with_operation(service: "projects", operation: "update", is_mutation: true, project_id: project_id) do
48
+ http_put("/projects/#{project_id}", body: compact_params(name: name, description: description, admissions: admissions, schedule_attributes: schedule_attributes)).json
49
+ end
50
+ end
51
+
52
+ # Trash a project (returns 204 No Content)
53
+ # @param project_id [Integer] project id ID
54
+ # @return [void]
55
+ def trash(project_id:)
56
+ with_operation(service: "projects", operation: "trash", is_mutation: true, project_id: project_id) do
57
+ http_delete("/projects/#{project_id}")
58
+ nil
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Recordings operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class RecordingsService < BaseService
9
+
10
+ # List recordings of a given type across projects
11
+ # @param type [String] Comment|Document|Kanban::Card|Kanban::Step|Message|Question::Answer|Schedule::Entry|Todo|Todolist|Upload|Vault
12
+ # @param bucket [String, nil] bucket
13
+ # @param status [String, nil] active|archived|trashed
14
+ # @param sort [String, nil] created_at|updated_at
15
+ # @param direction [String, nil] asc|desc
16
+ # @return [Enumerator<Hash>] paginated results
17
+ def list(type:, bucket: nil, status: nil, sort: nil, direction: nil)
18
+ wrap_paginated(service: "recordings", operation: "list", is_mutation: false) do
19
+ params = compact_params(type: type, bucket: bucket, status: status, sort: sort, direction: direction)
20
+ paginate("/projects/recordings.json", params: params)
21
+ end
22
+ end
23
+
24
+ # Get a single recording by id
25
+ # @param recording_id [Integer] recording id ID
26
+ # @return [Hash] response data
27
+ def get(recording_id:)
28
+ with_operation(service: "recordings", operation: "get", is_mutation: false, resource_id: recording_id) do
29
+ http_get("/recordings/#{recording_id}").json
30
+ end
31
+ end
32
+
33
+ # Unarchive a recording (restore to active status)
34
+ # @param recording_id [Integer] recording id ID
35
+ # @return [void]
36
+ def unarchive(recording_id:)
37
+ with_operation(service: "recordings", operation: "unarchive", is_mutation: true, resource_id: recording_id) do
38
+ http_put("/recordings/#{recording_id}/status/active.json")
39
+ nil
40
+ end
41
+ end
42
+
43
+ # Archive a recording
44
+ # @param recording_id [Integer] recording id ID
45
+ # @return [void]
46
+ def archive(recording_id:)
47
+ with_operation(service: "recordings", operation: "archive", is_mutation: true, resource_id: recording_id) do
48
+ http_put("/recordings/#{recording_id}/status/archived.json")
49
+ nil
50
+ end
51
+ end
52
+
53
+ # Trash a recording
54
+ # @param recording_id [Integer] recording id ID
55
+ # @return [void]
56
+ def trash(recording_id:)
57
+ with_operation(service: "recordings", operation: "trash", is_mutation: true, resource_id: recording_id) do
58
+ http_put("/recordings/#{recording_id}/status/trashed.json")
59
+ nil
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end