basecamp-sdk 0.10.0 → 0.12.0

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +106 -10
  3. data/lib/basecamp/client.rb +28 -8
  4. data/lib/basecamp/config.rb +4 -3
  5. data/lib/basecamp/generated/metadata.json +178 -17
  6. data/lib/basecamp/generated/services/account_service.rb +1 -1
  7. data/lib/basecamp/generated/services/automation_service.rb +1 -1
  8. data/lib/basecamp/generated/services/bookmarks_service.rb +49 -0
  9. data/lib/basecamp/generated/services/boosts_service.rb +3 -3
  10. data/lib/basecamp/generated/services/calendars_service.rb +30 -0
  11. data/lib/basecamp/generated/services/campfires_service.rb +7 -7
  12. data/lib/basecamp/generated/services/card_columns_service.rb +1 -1
  13. data/lib/basecamp/generated/services/card_steps_service.rb +1 -1
  14. data/lib/basecamp/generated/services/card_tables_service.rb +1 -1
  15. data/lib/basecamp/generated/services/cards_service.rb +2 -2
  16. data/lib/basecamp/generated/services/checkins_service.rb +8 -8
  17. data/lib/basecamp/generated/services/client_approvals_service.rb +2 -2
  18. data/lib/basecamp/generated/services/client_correspondences_service.rb +2 -2
  19. data/lib/basecamp/generated/services/client_replies_service.rb +2 -2
  20. data/lib/basecamp/generated/services/comments_service.rb +2 -2
  21. data/lib/basecamp/generated/services/documents_service.rb +2 -2
  22. data/lib/basecamp/generated/services/drafts_service.rb +21 -0
  23. data/lib/basecamp/generated/services/events_service.rb +1 -1
  24. data/lib/basecamp/generated/services/everything_service.rb +69 -46
  25. data/lib/basecamp/generated/services/forwards_service.rb +5 -5
  26. data/lib/basecamp/generated/services/gauges_service.rb +3 -3
  27. data/lib/basecamp/generated/services/hill_charts_service.rb +1 -1
  28. data/lib/basecamp/generated/services/message_boards_service.rb +1 -1
  29. data/lib/basecamp/generated/services/message_types_service.rb +2 -2
  30. data/lib/basecamp/generated/services/messages_service.rb +2 -2
  31. data/lib/basecamp/generated/services/my_assignments_service.rb +34 -3
  32. data/lib/basecamp/generated/services/my_notes_service.rb +28 -0
  33. data/lib/basecamp/generated/services/my_notifications_service.rb +2 -2
  34. data/lib/basecamp/generated/services/people_service.rb +8 -8
  35. data/lib/basecamp/generated/services/projects_service.rb +2 -2
  36. data/lib/basecamp/generated/services/recordings_service.rb +2 -2
  37. data/lib/basecamp/generated/services/reports_service.rb +5 -5
  38. data/lib/basecamp/generated/services/schedules_service.rb +4 -4
  39. data/lib/basecamp/generated/services/search_service.rb +2 -2
  40. data/lib/basecamp/generated/services/subscriptions_service.rb +1 -1
  41. data/lib/basecamp/generated/services/templates_service.rb +3 -3
  42. data/lib/basecamp/generated/services/timeline_service.rb +1 -1
  43. data/lib/basecamp/generated/services/timesheets_service.rb +4 -4
  44. data/lib/basecamp/generated/services/todolist_groups_service.rb +1 -1
  45. data/lib/basecamp/generated/services/todolists_service.rb +2 -2
  46. data/lib/basecamp/generated/services/todos_service.rb +19 -2
  47. data/lib/basecamp/generated/services/todosets_service.rb +1 -1
  48. data/lib/basecamp/generated/services/tools_service.rb +1 -1
  49. data/lib/basecamp/generated/services/uploads_service.rb +3 -3
  50. data/lib/basecamp/generated/services/vaults_service.rb +2 -2
  51. data/lib/basecamp/generated/services/webhooks_service.rb +2 -2
  52. data/lib/basecamp/generated/types.rb +313 -34
  53. data/lib/basecamp/http.rb +47 -19
  54. data/lib/basecamp/oauth/device_authorization.rb +37 -0
  55. data/lib/basecamp/oauth/device_flow.rb +873 -0
  56. data/lib/basecamp/oauth/device_flow_error.rb +46 -0
  57. data/lib/basecamp/oauth/discovery.rb +13 -11
  58. data/lib/basecamp/oauth/exchange.rb +44 -5
  59. data/lib/basecamp/oauth/fetcher.rb +626 -56
  60. data/lib/basecamp/oauth/oauth_error.rb +3 -1
  61. data/lib/basecamp/oauth/refresh_request.rb +8 -2
  62. data/lib/basecamp/oauth/resource.rb +13 -10
  63. data/lib/basecamp/oauth/token.rb +10 -3
  64. data/lib/basecamp/oauth.rb +47 -2
  65. data/lib/basecamp/version.rb +2 -2
  66. data/scripts/generate-services.rb +10 -7
  67. metadata +9 -2
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Enumerator<Hash>] paginated results
13
13
  def list(bucket_id:)
14
14
  wrap_paginated(service: "messagetypes", operation: "list", is_mutation: false, project_id: bucket_id) do
15
- paginate("/buckets/#{bucket_id}/categories.json")
15
+ paginate("/buckets/#{bucket_id}/categories.json", operation: "ListMessageTypes")
16
16
  end
17
17
  end
18
18
 
@@ -33,7 +33,7 @@ module Basecamp
33
33
  # @return [Hash] response data
34
34
  def get(bucket_id:, type_id:)
35
35
  with_operation(service: "messagetypes", operation: "get", is_mutation: false, project_id: bucket_id, resource_id: type_id) do
36
- http_get("/buckets/#{bucket_id}/categories/#{type_id}").json
36
+ http_get("/buckets/#{bucket_id}/categories/#{type_id}", operation: "GetMessageType").json
37
37
  end
38
38
  end
39
39
 
@@ -15,7 +15,7 @@ module Basecamp
15
15
  def list(board_id:, sort: nil, direction: nil)
16
16
  wrap_paginated(service: "messages", operation: "list", is_mutation: false, resource_id: board_id) do
17
17
  params = compact_query_params(sort: sort, direction: direction)
18
- paginate("/message_boards/#{board_id}/messages.json", params: params)
18
+ paginate("/message_boards/#{board_id}/messages.json", params: params, operation: "ListMessages")
19
19
  end
20
20
  end
21
21
 
@@ -39,7 +39,7 @@ module Basecamp
39
39
  # @return [Hash] response data
40
40
  def get(message_id:)
41
41
  with_operation(service: "messages", operation: "get", is_mutation: false, resource_id: message_id) do
42
- http_get("/messages/#{message_id}").json
42
+ http_get("/messages/#{message_id}", operation: "GetMessage").json
43
43
  end
44
44
  end
45
45
 
@@ -11,7 +11,7 @@ module Basecamp
11
11
  # @return [Hash] response data
12
12
  def get_my_assignments()
13
13
  with_operation(service: "myassignments", operation: "get_my_assignments", is_mutation: false) do
14
- http_get("/my/assignments.json").json
14
+ http_get("/my/assignments.json", operation: "GetMyAssignments").json
15
15
  end
16
16
  end
17
17
 
@@ -19,7 +19,7 @@ module Basecamp
19
19
  # @return [Array<Hash>] response data
20
20
  def get_my_completed_assignments()
21
21
  with_operation(service: "myassignments", operation: "get_my_completed_assignments", is_mutation: false) do
22
- http_get("/my/assignments/completed.json").json
22
+ http_get("/my/assignments/completed.json", operation: "GetMyCompletedAssignments").json
23
23
  end
24
24
  end
25
25
 
@@ -29,7 +29,38 @@ module Basecamp
29
29
  # @return [Array<Hash>] response data
30
30
  def get_my_due_assignments(scope: nil)
31
31
  with_operation(service: "myassignments", operation: "get_my_due_assignments", is_mutation: false) do
32
- http_get("/my/assignments/due.json", params: compact_query_params(scope: scope)).json
32
+ http_get("/my/assignments/due.json", params: compact_query_params(scope: scope), operation: "GetMyDueAssignments").json
33
+ end
34
+ end
35
+
36
+ # Add a recording to Up Next — the current user's ordered list of prioritized
37
+ # @param id [Integer] The recording id to prioritize.
38
+ # @return [void]
39
+ def prioritize_assignment(id:)
40
+ with_operation(service: "myassignments", operation: "prioritize_assignment", is_mutation: true) do
41
+ http_post("/my/priorities.json", body: compact_params(id: id))
42
+ nil
43
+ end
44
+ end
45
+
46
+ # Remove a recording from Up Next (returns 204 No Content). Exact-target:
47
+ # @param recording_id [Integer] recording id ID
48
+ # @return [void]
49
+ def deprioritize_assignment(recording_id:)
50
+ with_operation(service: "myassignments", operation: "deprioritize_assignment", is_mutation: true, resource_id: recording_id) do
51
+ http_delete("/my/priorities/#{recording_id}")
52
+ nil
53
+ end
54
+ end
55
+
56
+ # Move an already-prioritized recording to a new 1-based position in Up Next
57
+ # @param source_id [Integer] The recording id to move, chosen the same way as when prioritizing.
58
+ # @param position [Integer] The 1-based position to move it to.
59
+ # @return [void]
60
+ def reorder_up_next(source_id:, position:)
61
+ with_operation(service: "myassignments", operation: "reorder_up_next", is_mutation: true) do
62
+ http_post("/my/priority_moves.json", body: compact_params(source_id: source_id, position: position))
63
+ nil
33
64
  end
34
65
  end
35
66
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for MyNotes operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class MyNotesService < BaseService
9
+
10
+ # Get the authenticated user's note — a per-person notebook singleton at
11
+ # @return [Hash] response data
12
+ def get_my_note()
13
+ with_operation(service: "mynotes", operation: "get_my_note", is_mutation: false) do
14
+ http_get("/my/notes.json", operation: "GetMyNote").json
15
+ end
16
+ end
17
+
18
+ # Replace the note's content, recording a new revision server-side. The first
19
+ # @param note [Hash] note
20
+ # @return [Hash] response data
21
+ def update_my_note(note:)
22
+ with_operation(service: "mynotes", operation: "update_my_note", is_mutation: true) do
23
+ http_put("/my/notes.json", body: compact_params(note: note)).json
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -16,7 +16,7 @@ module Basecamp
16
16
  # @return [Hash] response data
17
17
  def get_my_notifications(page: nil, limit_bubble_ups: nil)
18
18
  with_operation(service: "mynotifications", operation: "get_my_notifications", is_mutation: false) do
19
- http_get("/my/readings.json", params: compact_query_params(page: page, limit_bubble_ups: limit_bubble_ups)).json
19
+ http_get("/my/readings.json", params: compact_query_params(page: page, limit_bubble_ups: limit_bubble_ups), operation: "GetMyNotifications").json
20
20
  end
21
21
  end
22
22
 
@@ -26,7 +26,7 @@ module Basecamp
26
26
  def get_bubble_ups(page: nil)
27
27
  wrap_paginated(service: "mynotifications", operation: "get_bubble_ups", is_mutation: false) do
28
28
  params = compact_query_params(page: page)
29
- paginate("/my/readings/bubble_ups.json", params: params)
29
+ paginate("/my/readings/bubble_ups.json", params: params, operation: "GetBubbleUps")
30
30
  end
31
31
  end
32
32
 
@@ -11,7 +11,7 @@ module Basecamp
11
11
  # @return [Enumerator<Hash>] paginated results
12
12
  def list_pingable()
13
13
  wrap_paginated(service: "people", operation: "list_pingable", is_mutation: false) do
14
- paginate("/circles/people.json")
14
+ paginate("/circles/people.json", operation: "ListPingablePeople")
15
15
  end
16
16
  end
17
17
 
@@ -19,7 +19,7 @@ module Basecamp
19
19
  # @return [Hash] response data
20
20
  def get_my_preferences()
21
21
  with_operation(service: "people", operation: "get_my_preferences", is_mutation: false) do
22
- http_get("/my/preferences.json").json
22
+ http_get("/my/preferences.json", operation: "GetMyPreferences").json
23
23
  end
24
24
  end
25
25
 
@@ -36,7 +36,7 @@ module Basecamp
36
36
  # @return [Hash] response data
37
37
  def my_profile()
38
38
  with_operation(service: "people", operation: "my_profile", is_mutation: false) do
39
- http_get("/my/profile.json").json
39
+ http_get("/my/profile.json", operation: "GetMyProfile").json
40
40
  end
41
41
  end
42
42
 
@@ -61,7 +61,7 @@ module Basecamp
61
61
  # @return [Enumerator<Hash>] paginated results
62
62
  def list()
63
63
  wrap_paginated(service: "people", operation: "list", is_mutation: false) do
64
- paginate("/people.json")
64
+ paginate("/people.json", operation: "ListPeople")
65
65
  end
66
66
  end
67
67
 
@@ -70,7 +70,7 @@ module Basecamp
70
70
  # @return [Hash] response data
71
71
  def get(person_id:)
72
72
  with_operation(service: "people", operation: "get", is_mutation: false, resource_id: person_id) do
73
- http_get("/people/#{person_id}").json
73
+ http_get("/people/#{person_id}", operation: "GetPerson").json
74
74
  end
75
75
  end
76
76
 
@@ -79,7 +79,7 @@ module Basecamp
79
79
  # @return [Hash] response data
80
80
  def get_out_of_office(person_id:)
81
81
  with_operation(service: "people", operation: "get_out_of_office", is_mutation: false, resource_id: person_id) do
82
- http_get("/people/#{person_id}/out_of_office.json").json
82
+ http_get("/people/#{person_id}/out_of_office.json", operation: "GetOutOfOffice").json
83
83
  end
84
84
  end
85
85
 
@@ -108,7 +108,7 @@ module Basecamp
108
108
  # @return [Enumerator<Hash>] paginated results
109
109
  def list_for_project(project_id:)
110
110
  wrap_paginated(service: "people", operation: "list_for_project", is_mutation: false, project_id: project_id) do
111
- paginate("/projects/#{project_id}/people.json")
111
+ paginate("/projects/#{project_id}/people.json", operation: "ListProjectPeople")
112
112
  end
113
113
  end
114
114
 
@@ -128,7 +128,7 @@ module Basecamp
128
128
  # @return [Array<Hash>] response data
129
129
  def list_assignable()
130
130
  with_operation(service: "people", operation: "list_assignable", is_mutation: false) do
131
- http_get("/reports/todos/assigned.json").json
131
+ http_get("/reports/todos/assigned.json", operation: "ListAssignablePeople").json
132
132
  end
133
133
  end
134
134
  end
@@ -13,7 +13,7 @@ module Basecamp
13
13
  def list(status: nil)
14
14
  wrap_paginated(service: "projects", operation: "list", is_mutation: false) do
15
15
  params = compact_query_params(status: status)
16
- paginate("/projects.json", params: params)
16
+ paginate("/projects.json", params: params, operation: "ListProjects")
17
17
  end
18
18
  end
19
19
 
@@ -32,7 +32,7 @@ module Basecamp
32
32
  # @return [Hash] response data
33
33
  def get(project_id:)
34
34
  with_operation(service: "projects", operation: "get", is_mutation: false, project_id: project_id) do
35
- http_get("/projects/#{project_id}").json
35
+ http_get("/projects/#{project_id}", operation: "GetProject").json
36
36
  end
37
37
  end
38
38
 
@@ -17,7 +17,7 @@ module Basecamp
17
17
  def list(type:, bucket: nil, status: nil, sort: nil, direction: nil)
18
18
  wrap_paginated(service: "recordings", operation: "list", is_mutation: false) do
19
19
  params = compact_query_params(type: type, bucket: bucket, status: status, sort: sort, direction: direction)
20
- paginate("/projects/recordings.json", params: params)
20
+ paginate("/projects/recordings.json", params: params, operation: "ListRecordings")
21
21
  end
22
22
  end
23
23
 
@@ -26,7 +26,7 @@ module Basecamp
26
26
  # @return [Hash] response data
27
27
  def get(recording_id:)
28
28
  with_operation(service: "recordings", operation: "get", is_mutation: false, resource_id: recording_id) do
29
- http_get("/recordings/#{recording_id}").json
29
+ http_get("/recordings/#{recording_id}", operation: "GetRecording").json
30
30
  end
31
31
  end
32
32
 
@@ -11,7 +11,7 @@ module Basecamp
11
11
  # @return [Enumerator<Hash>] paginated results
12
12
  def progress()
13
13
  wrap_paginated(service: "reports", operation: "progress", is_mutation: false) do
14
- paginate("/reports/progress.json")
14
+ paginate("/reports/progress.json", operation: "GetProgressReport")
15
15
  end
16
16
  end
17
17
 
@@ -21,7 +21,7 @@ module Basecamp
21
21
  # @return [Hash] response data
22
22
  def upcoming(window_starts_on: nil, window_ends_on: nil)
23
23
  with_operation(service: "reports", operation: "upcoming", is_mutation: false) do
24
- http_get("/reports/schedules/upcoming.json", params: compact_query_params(window_starts_on: window_starts_on, window_ends_on: window_ends_on)).json
24
+ http_get("/reports/schedules/upcoming.json", params: compact_query_params(window_starts_on: window_starts_on, window_ends_on: window_ends_on), operation: "GetUpcomingSchedule").json
25
25
  end
26
26
  end
27
27
 
@@ -31,7 +31,7 @@ module Basecamp
31
31
  # @return [Hash] response data
32
32
  def assigned(person_id:, group_by: nil)
33
33
  with_operation(service: "reports", operation: "assigned", is_mutation: false, resource_id: person_id) do
34
- http_get("/reports/todos/assigned/#{person_id}", params: compact_query_params(group_by: group_by)).json
34
+ http_get("/reports/todos/assigned/#{person_id}", params: compact_query_params(group_by: group_by), operation: "GetAssignedTodos").json
35
35
  end
36
36
  end
37
37
 
@@ -39,7 +39,7 @@ module Basecamp
39
39
  # @return [Hash] response data
40
40
  def overdue()
41
41
  with_operation(service: "reports", operation: "overdue", is_mutation: false) do
42
- http_get("/reports/todos/overdue.json").json
42
+ http_get("/reports/todos/overdue.json", operation: "GetOverdueTodos").json
43
43
  end
44
44
  end
45
45
 
@@ -48,7 +48,7 @@ module Basecamp
48
48
  # @return [Hash] response data
49
49
  def person_progress(person_id:)
50
50
  wrap_paginated_wrapped(key: "events", service: "reports", operation: "person_progress", is_mutation: false, resource_id: person_id) do
51
- paginate_wrapped("/reports/users/progress/#{person_id}.json", key: "events")
51
+ paginate_wrapped("/reports/users/progress/#{person_id}.json", key: "events", operation: "GetPersonProgress")
52
52
  end
53
53
  end
54
54
  end
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Hash] response data
13
13
  def get_entry(entry_id:)
14
14
  with_operation(service: "schedules", operation: "get_entry", is_mutation: false, resource_id: entry_id) do
15
- http_get("/schedule_entries/#{entry_id}").json
15
+ http_get("/schedule_entries/#{entry_id}", operation: "GetScheduleEntry").json
16
16
  end
17
17
  end
18
18
 
@@ -46,7 +46,7 @@ module Basecamp
46
46
  # @return [Hash] response data
47
47
  def get_entry_occurrence(entry_id:, date:)
48
48
  with_operation(service: "schedules", operation: "get_entry_occurrence", is_mutation: false, resource_id: entry_id) do
49
- http_get("/schedule_entries/#{entry_id}/occurrences/#{date}").json
49
+ http_get("/schedule_entries/#{entry_id}/occurrences/#{date}", operation: "GetScheduleEntryOccurrence").json
50
50
  end
51
51
  end
52
52
 
@@ -55,7 +55,7 @@ module Basecamp
55
55
  # @return [Hash] response data
56
56
  def get(schedule_id:)
57
57
  with_operation(service: "schedules", operation: "get", is_mutation: false, resource_id: schedule_id) do
58
- http_get("/schedules/#{schedule_id}").json
58
+ http_get("/schedules/#{schedule_id}", operation: "GetSchedule").json
59
59
  end
60
60
  end
61
61
 
@@ -76,7 +76,7 @@ module Basecamp
76
76
  def list_entries(schedule_id:, status: nil)
77
77
  wrap_paginated(service: "schedules", operation: "list_entries", is_mutation: false, resource_id: schedule_id) do
78
78
  params = compact_query_params(status: status)
79
- paginate("/schedules/#{schedule_id}/entries.json", params: params)
79
+ paginate("/schedules/#{schedule_id}/entries.json", params: params, operation: "ListScheduleEntries")
80
80
  end
81
81
  end
82
82
 
@@ -25,7 +25,7 @@ module Basecamp
25
25
  def search(q:, type_names: nil, bucket_ids: nil, creator_ids: nil, file_type: nil, exclude_chat: nil, since: nil, sort: nil, type: nil, bucket_id: nil, creator_id: nil)
26
26
  wrap_paginated(service: "search", operation: "search", is_mutation: false) do
27
27
  params = compact_query_params(q: q, type_names: type_names, bucket_ids: bucket_ids, creator_ids: creator_ids, file_type: file_type, exclude_chat: exclude_chat, since: since, sort: sort, type: type, bucket_id: bucket_id, creator_id: creator_id)
28
- paginate("/search.json", params: params)
28
+ paginate("/search.json", params: params, operation: "Search")
29
29
  end
30
30
  end
31
31
 
@@ -33,7 +33,7 @@ module Basecamp
33
33
  # @return [Hash] response data
34
34
  def metadata()
35
35
  with_operation(service: "search", operation: "metadata", is_mutation: false) do
36
- http_get("/searches/metadata.json").json
36
+ http_get("/searches/metadata.json", operation: "GetSearchMetadata").json
37
37
  end
38
38
  end
39
39
  end
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Hash] response data
13
13
  def get(recording_id:)
14
14
  with_operation(service: "subscriptions", operation: "get", is_mutation: false, resource_id: recording_id) do
15
- http_get("/recordings/#{recording_id}/subscription.json").json
15
+ http_get("/recordings/#{recording_id}/subscription.json", operation: "GetSubscription").json
16
16
  end
17
17
  end
18
18
 
@@ -13,7 +13,7 @@ module Basecamp
13
13
  def list(status: nil)
14
14
  wrap_paginated(service: "templates", operation: "list", is_mutation: false) do
15
15
  params = compact_query_params(status: status)
16
- paginate("/templates.json", params: params)
16
+ paginate("/templates.json", params: params, operation: "ListTemplates")
17
17
  end
18
18
  end
19
19
 
@@ -32,7 +32,7 @@ module Basecamp
32
32
  # @return [Hash] response data
33
33
  def get(template_id:)
34
34
  with_operation(service: "templates", operation: "get", is_mutation: false, resource_id: template_id) do
35
- http_get("/templates/#{template_id}").json
35
+ http_get("/templates/#{template_id}", operation: "GetTemplate").json
36
36
  end
37
37
  end
38
38
 
@@ -73,7 +73,7 @@ module Basecamp
73
73
  # @return [Hash] response data
74
74
  def get_construction(template_id:, construction_id:)
75
75
  with_operation(service: "templates", operation: "get_construction", is_mutation: false, resource_id: construction_id) do
76
- http_get("/templates/#{template_id}/project_constructions/#{construction_id}").json
76
+ http_get("/templates/#{template_id}/project_constructions/#{construction_id}", operation: "GetProjectConstruction").json
77
77
  end
78
78
  end
79
79
  end
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Enumerator<Hash>] paginated results
13
13
  def get_project_timeline(project_id:)
14
14
  wrap_paginated(service: "timeline", operation: "get_project_timeline", is_mutation: false, project_id: project_id) do
15
- paginate("/projects/#{project_id}/timeline.json")
15
+ paginate("/projects/#{project_id}/timeline.json", operation: "GetProjectTimeline")
16
16
  end
17
17
  end
18
18
  end
@@ -16,7 +16,7 @@ module Basecamp
16
16
  def for_project(project_id:, from: nil, to: nil, person_id: nil)
17
17
  wrap_paginated(service: "timesheets", operation: "for_project", is_mutation: false, project_id: project_id) do
18
18
  params = compact_query_params(from: from, to: to, person_id: person_id)
19
- paginate("/projects/#{project_id}/timesheet.json", params: params)
19
+ paginate("/projects/#{project_id}/timesheet.json", params: params, operation: "GetProjectTimesheet")
20
20
  end
21
21
  end
22
22
 
@@ -29,7 +29,7 @@ module Basecamp
29
29
  def for_recording(recording_id:, from: nil, to: nil, person_id: nil)
30
30
  wrap_paginated(service: "timesheets", operation: "for_recording", is_mutation: false, resource_id: recording_id) do
31
31
  params = compact_query_params(from: from, to: to, person_id: person_id)
32
- paginate("/recordings/#{recording_id}/timesheet.json", params: params)
32
+ paginate("/recordings/#{recording_id}/timesheet.json", params: params, operation: "GetRecordingTimesheet")
33
33
  end
34
34
  end
35
35
 
@@ -53,7 +53,7 @@ module Basecamp
53
53
  # @return [Array<Hash>] response data
54
54
  def report(from: nil, to: nil, person_id: nil)
55
55
  with_operation(service: "timesheets", operation: "report", is_mutation: false) do
56
- http_get("/reports/timesheet.json", params: compact_query_params(from: from, to: to, person_id: person_id)).json
56
+ http_get("/reports/timesheet.json", params: compact_query_params(from: from, to: to, person_id: person_id), operation: "GetTimesheetReport").json
57
57
  end
58
58
  end
59
59
 
@@ -62,7 +62,7 @@ module Basecamp
62
62
  # @return [Hash] response data
63
63
  def get(entry_id:)
64
64
  with_operation(service: "timesheets", operation: "get", is_mutation: false, resource_id: entry_id) do
65
- http_get("/timesheet_entries/#{entry_id}").json
65
+ http_get("/timesheet_entries/#{entry_id}", operation: "GetTimesheetEntry").json
66
66
  end
67
67
  end
68
68
 
@@ -23,7 +23,7 @@ module Basecamp
23
23
  # @return [Enumerator<Hash>] paginated results
24
24
  def list(todolist_id:)
25
25
  wrap_paginated(service: "todolistgroups", operation: "list", is_mutation: false, resource_id: todolist_id) do
26
- paginate("/todolists/#{todolist_id}/groups.json")
26
+ paginate("/todolists/#{todolist_id}/groups.json", operation: "ListTodolistGroups")
27
27
  end
28
28
  end
29
29
 
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Hash] response data
13
13
  def get(id:)
14
14
  with_operation(service: "todolists", operation: "get", is_mutation: false, resource_id: id) do
15
- http_get("/todolists/#{id}").json
15
+ http_get("/todolists/#{id}", operation: "GetTodolistOrGroup").json
16
16
  end
17
17
  end
18
18
 
@@ -45,7 +45,7 @@ module Basecamp
45
45
  def list(todoset_id:, status: nil)
46
46
  wrap_paginated(service: "todolists", operation: "list", is_mutation: false, resource_id: todoset_id) do
47
47
  params = compact_query_params(status: status)
48
- paginate("/todosets/#{todoset_id}/todolists.json", params: params)
48
+ paginate("/todosets/#{todoset_id}/todolists.json", params: params, operation: "ListTodolists")
49
49
  end
50
50
  end
51
51
 
@@ -7,6 +7,23 @@ module Basecamp
7
7
  # @generated from OpenAPI spec
8
8
  class TodosService < BaseService
9
9
 
10
+ # Create a to-do directly under a project's to-do set, outside any to-do list.
11
+ # @param bucket_id [Integer] bucket id ID
12
+ # @param todoset_id [Integer] todoset id ID
13
+ # @param content [String] content
14
+ # @param description [String, nil] description
15
+ # @param assignee_ids [Array, nil] assignee ids
16
+ # @param completion_subscriber_ids [Array, nil] completion subscriber ids
17
+ # @param notify [Boolean, nil] notify
18
+ # @param due_on [String, nil] due on (YYYY-MM-DD)
19
+ # @param starts_on [String, nil] starts on (YYYY-MM-DD)
20
+ # @return [Hash] response data
21
+ def create_todoset_todo(bucket_id:, todoset_id:, content:, description: nil, assignee_ids: nil, completion_subscriber_ids: nil, notify: nil, due_on: nil, starts_on: nil)
22
+ with_operation(service: "todos", operation: "create_todoset_todo", is_mutation: true, project_id: bucket_id, resource_id: todoset_id) do
23
+ http_post("/buckets/#{bucket_id}/todosets/#{todoset_id}/todos.json", body: compact_params(content: content, description: description, assignee_ids: assignee_ids, completion_subscriber_ids: completion_subscriber_ids, notify: notify, due_on: due_on, starts_on: starts_on)).json
24
+ end
25
+ end
26
+
10
27
  # List todos in a todolist
11
28
  # @param todolist_id [Integer] todolist id ID
12
29
  # @param status [String, nil] active|archived|trashed
@@ -15,7 +32,7 @@ module Basecamp
15
32
  def list(todolist_id:, status: nil, completed: nil)
16
33
  wrap_paginated(service: "todos", operation: "list", is_mutation: false, resource_id: todolist_id) do
17
34
  params = compact_query_params(status: status, completed: completed)
18
- paginate("/todolists/#{todolist_id}/todos.json", params: params)
35
+ paginate("/todolists/#{todolist_id}/todos.json", params: params, operation: "ListTodos")
19
36
  end
20
37
  end
21
38
 
@@ -40,7 +57,7 @@ module Basecamp
40
57
  # @return [Hash] response data
41
58
  def get(todo_id:)
42
59
  with_operation(service: "todos", operation: "get", is_mutation: false, resource_id: todo_id) do
43
- http_get("/todos/#{todo_id}").json
60
+ http_get("/todos/#{todo_id}", operation: "GetTodo").json
44
61
  end
45
62
  end
46
63
 
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Hash] response data
13
13
  def get(todoset_id:)
14
14
  with_operation(service: "todosets", operation: "get", is_mutation: false, resource_id: todoset_id) do
15
- http_get("/todosets/#{todoset_id}").json
15
+ http_get("/todosets/#{todoset_id}", operation: "GetTodoset").json
16
16
  end
17
17
  end
18
18
  end
@@ -24,7 +24,7 @@ module Basecamp
24
24
  # @return [Hash] response data
25
25
  def get(tool_id:)
26
26
  with_operation(service: "tools", operation: "get", is_mutation: false, resource_id: tool_id) do
27
- http_get("/dock/tools/#{tool_id}").json
27
+ http_get("/dock/tools/#{tool_id}", operation: "GetTool").json
28
28
  end
29
29
  end
30
30
 
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Hash] response data
13
13
  def get(upload_id:)
14
14
  with_operation(service: "uploads", operation: "get", is_mutation: false, resource_id: upload_id) do
15
- http_get("/uploads/#{upload_id}").json
15
+ http_get("/uploads/#{upload_id}", operation: "GetUpload").json
16
16
  end
17
17
  end
18
18
 
@@ -32,7 +32,7 @@ module Basecamp
32
32
  # @return [Enumerator<Hash>] paginated results
33
33
  def list_versions(upload_id:)
34
34
  wrap_paginated(service: "uploads", operation: "list_versions", is_mutation: false, resource_id: upload_id) do
35
- paginate("/uploads/#{upload_id}/versions.json")
35
+ paginate("/uploads/#{upload_id}/versions.json", operation: "ListUploadVersions")
36
36
  end
37
37
  end
38
38
 
@@ -41,7 +41,7 @@ module Basecamp
41
41
  # @return [Enumerator<Hash>] paginated results
42
42
  def list(vault_id:)
43
43
  wrap_paginated(service: "uploads", operation: "list", is_mutation: false, resource_id: vault_id) do
44
- paginate("/vaults/#{vault_id}/uploads.json")
44
+ paginate("/vaults/#{vault_id}/uploads.json", operation: "ListUploads")
45
45
  end
46
46
  end
47
47
 
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Hash] response data
13
13
  def get(vault_id:)
14
14
  with_operation(service: "vaults", operation: "get", is_mutation: false, resource_id: vault_id) do
15
- http_get("/vaults/#{vault_id}").json
15
+ http_get("/vaults/#{vault_id}", operation: "GetVault").json
16
16
  end
17
17
  end
18
18
 
@@ -31,7 +31,7 @@ module Basecamp
31
31
  # @return [Enumerator<Hash>] paginated results
32
32
  def list(vault_id:)
33
33
  wrap_paginated(service: "vaults", operation: "list", is_mutation: false, resource_id: vault_id) do
34
- paginate("/vaults/#{vault_id}/vaults.json")
34
+ paginate("/vaults/#{vault_id}/vaults.json", operation: "ListVaults")
35
35
  end
36
36
  end
37
37
 
@@ -12,7 +12,7 @@ module Basecamp
12
12
  # @return [Enumerator<Hash>] paginated results
13
13
  def list(bucket_id:)
14
14
  wrap_paginated(service: "webhooks", operation: "list", is_mutation: false, project_id: bucket_id) do
15
- paginate("/buckets/#{bucket_id}/webhooks.json")
15
+ paginate("/buckets/#{bucket_id}/webhooks.json", operation: "ListWebhooks")
16
16
  end
17
17
  end
18
18
 
@@ -33,7 +33,7 @@ module Basecamp
33
33
  # @return [Hash] response data
34
34
  def get(webhook_id:)
35
35
  with_operation(service: "webhooks", operation: "get", is_mutation: false, resource_id: webhook_id) do
36
- http_get("/webhooks/#{webhook_id}").json
36
+ http_get("/webhooks/#{webhook_id}", operation: "GetWebhook").json
37
37
  end
38
38
  end
39
39