Class: Basecamp::ApiClient
- Inherits:
-
Object
- Object
- Basecamp::ApiClient
- Defined in:
- app/services/basecamp/api_client.rb
Overview
HTTP client for Basecamp 4 JSON API.
Features:
- Auto-refreshes expired access tokens
- Respects Basecamp rate limits (429 + Retry-After)
- Retries transient failures (502, 503)
- User-Agent required by Basecamp API
Reference: https://github.com/basecamp/api/blob/master/sections/authentication.md
Defined Under Namespace
Classes: ApiError, NotFoundError, RateLimitError
Constant Summary collapse
- BASE_URL =
URL for base.
'https://3.basecampapi.com'- USER_AGENT =
User agent.
'WarmlyYours CRM (support@warmlyyours.com)'- MAX_RETRIES =
Maximum retries.
3- RATE_LIMIT_SLEEP =
default wait if no Retry-After header
5
Instance Method Summary collapse
-
#campfire_lines(project_id, campfire_id) ⇒ Object
Campfire lines.
-
#card_tables(project_id) ⇒ Object
Card tables.
-
#cards(project_id, column_id) ⇒ Object
Cards.
-
#columns(project_id, card_table_id) ⇒ Object
Columns.
-
#comment(project_id, comment_id) ⇒ Object
Comment.
-
#comments(project_id, recording_id) ⇒ Object
Comments.
-
#complete_todo(project_id, todo_id) ⇒ Object
Complete todo.
-
#create_card(project_id, column_id, title:, content: nil, due_on: nil) ⇒ Object
Create card.
-
#create_comment(project_id, recording_id, content:) ⇒ Object
Create comment.
-
#create_document(project_id, vault_id, title:, content:, status: nil) ⇒ Object
Create document.
-
#create_message(project_id, message_board_id, subject:, status:, content: nil, category_id: nil, subscriptions: nil) ⇒ Object
Create message.
-
#create_project(name:, description: nil) ⇒ Object
Create project.
-
#create_todo(project_id, todolist_id, content:, description: nil, assignee_ids: nil, due_on: nil, starts_on: nil) ⇒ Object
Create todo.
-
#create_todo_group(project_id, todolist_id, name:, color: nil) ⇒ Object
Create todo group.
-
#create_todolist(project_id, todoset_id, name:, description: nil) ⇒ Object
Create todolist.
-
#create_upload(project_id, vault_id, attachable_sgid:, description: nil, base_name: nil) ⇒ Object
Create upload.
-
#document(project_id, document_id) ⇒ Object
Document.
-
#documents(project_id, vault_id) ⇒ Object
Documents.
-
#initialize(account: nil, oauth_service: nil) ⇒ ApiClient
constructor
A new instance of ApiClient.
-
#message(project_id, message_id) ⇒ Object
Message.
-
#message_board(project_id, message_board_id = nil) ⇒ Object
Message board.
-
#messages(project_id, message_board_id) ⇒ Object
Messages.
-
#my_assignments(completed: false, group_by: 'bucket') ⇒ Object
Query tasks assigned to the current authenticated user.
-
#my_profile ⇒ Object
My profile.
-
#overdue_todos ⇒ Object
Overdue todos.
-
#people ⇒ Object
--- People ---.
-
#person(person_id) ⇒ Object
Person.
-
#pin_recording(project_id, recording_id) ⇒ Object
Pin recording.
-
#pingable_people ⇒ Object
Pingable people.
-
#project(project_id) ⇒ Object
Project.
-
#project_people(project_id) ⇒ Object
Project people.
-
#projects(status: nil) ⇒ Object
List projects.
-
#reposition_todo(project_id, todo_id, position:, parent_id: nil) ⇒ Object
Reposition todo.
-
#reposition_todo_group(project_id, group_id, position:) ⇒ Object
Reposition todo group.
-
#search(q:, type: nil, bucket_id: nil, creator_id: nil, file_type: nil, exclude_chat: nil, page: nil, per_page: nil, fetch_all: false) ⇒ Object
Search.
-
#search_metadata ⇒ Object
--- Search ---.
-
#todo(project_id, todo_id) ⇒ Object
Todo.
-
#todo_assignees ⇒ Object
--- Reports ---.
-
#todo_assignments_for_person(person_id, group_by: 'bucket') ⇒ Object
Todo assignments for person.
-
#todo_groups(project_id, todolist_id, status: nil) ⇒ Object
Todo groups.
-
#todolist(project_id, todolist_id) ⇒ Object
Todolist.
-
#todolists(project_id) ⇒ Object
Todolists.
-
#todolists_in_set(project_id, todoset_id, status: nil) ⇒ Object
Todolists in set.
-
#todos(project_id, todolist_id, status: nil, completed: nil) ⇒ Object
Todos.
-
#todoset(project_id, todoset_id) ⇒ Object
Todoset.
-
#trash_project(project_id) ⇒ Object
Trash project.
-
#trash_recording(project_id, recording_id) ⇒ Object
Trash recording.
-
#uncomplete_todo(project_id, todo_id) ⇒ Object
Uncomplete todo.
-
#unpin_recording(project_id, recording_id) ⇒ Object
Unpin recording.
-
#upcoming_schedule(window_starts_on:, window_ends_on:) ⇒ Object
Upcoming schedule.
-
#update_comment(project_id, comment_id, content:) ⇒ Object
Update comment.
-
#update_document(project_id, document_id, title:, content:) ⇒ Object
Update document.
-
#update_message(project_id, message_id, subject: nil, content: nil, category_id: nil) ⇒ Object
Update message.
-
#update_project(project_id, name:, description: nil, admissions: nil, schedule_attributes: nil) ⇒ Object
Update project.
-
#update_project_people(project_id, grant: nil, revoke: nil, create: nil) ⇒ Object
Update project people.
- #update_todo(project_id, todo_id, **attrs) ⇒ Object
-
#update_todolist(project_id, todolist_id, name:, description: nil) ⇒ Object
Update todolist.
-
#update_upload(project_id, upload_id, description: nil, base_name: nil) ⇒ Object
Update upload.
-
#upload(project_id, upload_id) ⇒ Object
Upload.
-
#uploads(project_id, vault_id) ⇒ Object
Uploads.
Constructor Details
#initialize(account: nil, oauth_service: nil) ⇒ ApiClient
Returns a new instance of ApiClient.
47 48 49 |
# File 'app/services/basecamp/api_client.rb', line 47 def initialize(account: nil, oauth_service: nil) @oauth_service = oauth_service || Basecamp::OauthService.new(account: account) end |
Instance Method Details
#campfire_lines(project_id, campfire_id) ⇒ Object
Campfire lines.
355 356 357 |
# File 'app/services/basecamp/api_client.rb', line 355 def campfire_lines(project_id, campfire_id) get("/buckets/#{project_id}/chats/#{campfire_id}/lines.json") end |
#card_tables(project_id) ⇒ Object
Card tables.
364 365 366 |
# File 'app/services/basecamp/api_client.rb', line 364 def card_tables(project_id) get("/buckets/#{project_id}/card_tables.json") end |
#cards(project_id, column_id) ⇒ Object
Cards.
380 381 382 |
# File 'app/services/basecamp/api_client.rb', line 380 def cards(project_id, column_id) get("/buckets/#{project_id}/card_tables/lists/#{column_id}/cards.json") end |
#columns(project_id, card_table_id) ⇒ Object
Columns.
372 373 374 |
# File 'app/services/basecamp/api_client.rb', line 372 def columns(project_id, card_table_id) get("/buckets/#{project_id}/card_tables/#{card_table_id}/columns.json") end |
#comment(project_id, comment_id) ⇒ Object
Comment.
451 452 453 |
# File 'app/services/basecamp/api_client.rb', line 451 def comment(project_id, comment_id) get("/buckets/#{project_id}/comments/#{comment_id}.json") end |
#comments(project_id, recording_id) ⇒ Object
Comments.
443 444 445 |
# File 'app/services/basecamp/api_client.rb', line 443 def comments(project_id, recording_id) get_paginated("/buckets/#{project_id}/recordings/#{recording_id}/comments.json") end |
#complete_todo(project_id, todo_id) ⇒ Object
Complete todo.
229 230 231 |
# File 'app/services/basecamp/api_client.rb', line 229 def complete_todo(project_id, todo_id) post("/buckets/#{project_id}/todos/#{todo_id}/completion.json") end |
#create_card(project_id, column_id, title:, content: nil, due_on: nil) ⇒ Object
Create card.
391 392 393 394 395 396 |
# File 'app/services/basecamp/api_client.rb', line 391 def create_card(project_id, column_id, title:, content: nil, due_on: nil) body = { title: title } body[:content] = content if content body[:due_on] = due_on if due_on post("/buckets/#{project_id}/card_tables/lists/#{column_id}/cards.json", body) end |
#create_comment(project_id, recording_id, content:) ⇒ Object
Create comment.
460 461 462 |
# File 'app/services/basecamp/api_client.rb', line 460 def create_comment(project_id, recording_id, content:) post("/buckets/#{project_id}/recordings/#{recording_id}/comments.json", { content: content }) end |
#create_document(project_id, vault_id, title:, content:, status: nil) ⇒ Object
Create document.
596 597 598 599 600 |
# File 'app/services/basecamp/api_client.rb', line 596 def create_document(project_id, vault_id, title:, content:, status: nil) body = { title: title, content: content } body[:status] = status if status post("/buckets/#{project_id}/vaults/#{vault_id}/documents.json", body) end |
#create_message(project_id, message_board_id, subject:, status:, content: nil, category_id: nil, subscriptions: nil) ⇒ Object
Create message.
312 313 314 315 316 317 318 |
# File 'app/services/basecamp/api_client.rb', line 312 def (project_id, , subject:, status:, content: nil, category_id: nil, subscriptions: nil) body = { subject: subject, status: status } body[:content] = content if content body[:category_id] = category_id if category_id body[:subscriptions] = subscriptions if subscriptions post("/buckets/#{project_id}/message_boards/#{}/messages.json", body) end |
#create_project(name:, description: nil) ⇒ Object
Create project.
73 74 75 76 77 |
# File 'app/services/basecamp/api_client.rb', line 73 def create_project(name:, description: nil) body = { name: name } body[:description] = description if description post('/projects.json', body) end |
#create_todo(project_id, todolist_id, content:, description: nil, assignee_ids: nil, due_on: nil, starts_on: nil) ⇒ Object
Create todo.
191 192 193 194 195 196 197 198 |
# File 'app/services/basecamp/api_client.rb', line 191 def create_todo(project_id, todolist_id, content:, description: nil, assignee_ids: nil, due_on: nil, starts_on: nil) body = { content: content } body[:description] = description if description body[:assignee_ids] = assignee_ids if assignee_ids body[:due_on] = due_on if due_on body[:starts_on] = starts_on if starts_on post("/buckets/#{project_id}/todolists/#{todolist_id}/todos.json", body) end |
#create_todo_group(project_id, todolist_id, name:, color: nil) ⇒ Object
Create todo group.
258 259 260 261 262 |
# File 'app/services/basecamp/api_client.rb', line 258 def create_todo_group(project_id, todolist_id, name:, color: nil) body = { name: name } body[:color] = color if color post("/buckets/#{project_id}/todolists/#{todolist_id}/groups.json", body) end |
#create_todolist(project_id, todoset_id, name:, description: nil) ⇒ Object
Create todolist.
143 144 145 146 147 |
# File 'app/services/basecamp/api_client.rb', line 143 def create_todolist(project_id, todoset_id, name:, description: nil) body = { name: name } body[:description] = description if description post("/buckets/#{project_id}/todosets/#{todoset_id}/todolists.json", body) end |
#create_upload(project_id, vault_id, attachable_sgid:, description: nil, base_name: nil) ⇒ Object
Create upload.
637 638 639 640 641 642 |
# File 'app/services/basecamp/api_client.rb', line 637 def create_upload(project_id, vault_id, attachable_sgid:, description: nil, base_name: nil) body = { attachable_sgid: attachable_sgid } body[:description] = description if description body[:base_name] = base_name if base_name post("/buckets/#{project_id}/vaults/#{vault_id}/uploads.json", body) end |
#document(project_id, document_id) ⇒ Object
Document.
585 586 587 |
# File 'app/services/basecamp/api_client.rb', line 585 def document(project_id, document_id) get("/buckets/#{project_id}/documents/#{document_id}.json") end |
#documents(project_id, vault_id) ⇒ Object
Documents.
577 578 579 |
# File 'app/services/basecamp/api_client.rb', line 577 def documents(project_id, vault_id) get_paginated("/buckets/#{project_id}/vaults/#{vault_id}/documents.json") end |
#message(project_id, message_id) ⇒ Object
Message.
299 300 301 |
# File 'app/services/basecamp/api_client.rb', line 299 def (project_id, ) get("/buckets/#{project_id}/messages/#{}.json") end |
#message_board(project_id, message_board_id = nil) ⇒ Object
Message board.
279 280 281 282 283 284 285 |
# File 'app/services/basecamp/api_client.rb', line 279 def (project_id, = nil) if get("/buckets/#{project_id}/message_boards/#{}.json") else get("/buckets/#{project_id}/message_board.json") end end |
#messages(project_id, message_board_id) ⇒ Object
Messages.
291 292 293 |
# File 'app/services/basecamp/api_client.rb', line 291 def (project_id, ) get_paginated("/buckets/#{project_id}/message_boards/#{}/messages.json") end |
#my_assignments(completed: false, group_by: 'bucket') ⇒ Object
Query tasks assigned to the current authenticated user.
For open assignments we use the reports endpoint, which returns pending to-dos
assigned to a person and matches Basecamp's assignment report behavior.
For completed assignments we fall back to /my/assignments.json.
523 524 525 526 527 528 |
# File 'app/services/basecamp/api_client.rb', line 523 def my_assignments(completed: false, group_by: 'bucket') return get_paginated('/my/assignments.json', params: { completed: true }) if completed person_id = my_profile['id'] todo_assignments_for_person(person_id, group_by: group_by) end |
#my_profile ⇒ Object
My profile.
567 568 569 |
# File 'app/services/basecamp/api_client.rb', line 567 def my_profile get('/my/profile.json') end |
#overdue_todos ⇒ Object
Overdue todos.
547 548 549 |
# File 'app/services/basecamp/api_client.rb', line 547 def overdue_todos get('/reports/todos/overdue.json') end |
#people ⇒ Object
--- People ---
399 400 401 |
# File 'app/services/basecamp/api_client.rb', line 399 def people get_paginated('/people.json') end |
#person(person_id) ⇒ Object
Person.
406 407 408 |
# File 'app/services/basecamp/api_client.rb', line 406 def person(person_id) get("/people/#{person_id}.json") end |
#pin_recording(project_id, recording_id) ⇒ Object
Pin recording.
339 340 341 |
# File 'app/services/basecamp/api_client.rb', line 339 def pin_recording(project_id, recording_id) post("/buckets/#{project_id}/recordings/#{recording_id}/pin.json") end |
#pingable_people ⇒ Object
Pingable people.
433 434 435 |
# File 'app/services/basecamp/api_client.rb', line 433 def pingable_people get('/circles/people.json') end |
#project(project_id) ⇒ Object
Project.
65 66 67 |
# File 'app/services/basecamp/api_client.rb', line 65 def project(project_id) get("/projects/#{project_id}.json") end |
#project_people(project_id) ⇒ Object
Project people.
413 414 415 |
# File 'app/services/basecamp/api_client.rb', line 413 def project_people(project_id) get_paginated("/projects/#{project_id}/people.json") end |
#projects(status: nil) ⇒ Object
List projects.
56 57 58 59 60 |
# File 'app/services/basecamp/api_client.rb', line 56 def projects(status: nil) params = {} params[:status] = status if status.present? get_paginated('/projects.json', params: params.presence) end |
#reposition_todo(project_id, todo_id, position:, parent_id: nil) ⇒ Object
Reposition todo.
219 220 221 222 223 |
# File 'app/services/basecamp/api_client.rb', line 219 def reposition_todo(project_id, todo_id, position:, parent_id: nil) body = { position: position } body[:parent_id] = parent_id if parent_id put("/buckets/#{project_id}/todos/#{todo_id}/position.json", body) end |
#reposition_todo_group(project_id, group_id, position:) ⇒ Object
Reposition todo group.
269 270 271 |
# File 'app/services/basecamp/api_client.rb', line 269 def reposition_todo_group(project_id, group_id, position:) put("/buckets/#{project_id}/todolists/groups/#{group_id}/position.json", { position: position }) end |
#search(q:, type: nil, bucket_id: nil, creator_id: nil, file_type: nil, exclude_chat: nil, page: nil, per_page: nil, fetch_all: false) ⇒ Object
Search.
497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 |
# File 'app/services/basecamp/api_client.rb', line 497 def search(q:, type: nil, bucket_id: nil, creator_id: nil, file_type: nil, exclude_chat: nil, page: nil, per_page: nil, fetch_all: false) params = { q: q } params[:type] = type if type.present? params[:bucket_id] = bucket_id if bucket_id.present? params[:creator_id] = creator_id if creator_id.present? params[:file_type] = file_type if file_type.present? params[:exclude_chat] = exclude_chat unless exclude_chat.nil? params[:page] = page if page.present? params[:per_page] = per_page if per_page.present? if fetch_all get_paginated('/search.json', params: params) else get('/search.json', params: params) end end |
#search_metadata ⇒ Object
--- Search ---
482 483 484 |
# File 'app/services/basecamp/api_client.rb', line 482 def get('/searches/metadata.json') end |
#todo(project_id, todo_id) ⇒ Object
Todo.
178 179 180 |
# File 'app/services/basecamp/api_client.rb', line 178 def todo(project_id, todo_id) get("/buckets/#{project_id}/todos/#{todo_id}.json") end |
#todo_assignees ⇒ Object
--- Reports ---
531 532 533 |
# File 'app/services/basecamp/api_client.rb', line 531 def todo_assignees get_paginated('/reports/todos/assigned.json') end |
#todo_assignments_for_person(person_id, group_by: 'bucket') ⇒ Object
Todo assignments for person.
539 540 541 542 543 |
# File 'app/services/basecamp/api_client.rb', line 539 def todo_assignments_for_person(person_id, group_by: 'bucket') params = {} params[:group_by] = group_by if group_by.present? get("/reports/todos/assigned/#{person_id}.json", params: params.presence) end |
#todo_groups(project_id, todolist_id, status: nil) ⇒ Object
Todo groups.
246 247 248 249 250 |
# File 'app/services/basecamp/api_client.rb', line 246 def todo_groups(project_id, todolist_id, status: nil) params = {} params[:status] = status if status.present? get_paginated("/buckets/#{project_id}/todolists/#{todolist_id}/groups.json", params: params.presence) end |
#todolist(project_id, todolist_id) ⇒ Object
Todolist.
133 134 135 |
# File 'app/services/basecamp/api_client.rb', line 133 def todolist(project_id, todolist_id) get("/buckets/#{project_id}/todolists/#{todolist_id}.json") end |
#todolists(project_id) ⇒ Object
Todolists.
114 115 116 |
# File 'app/services/basecamp/api_client.rb', line 114 def todolists(project_id) get_paginated("/buckets/#{project_id}/todolists.json") end |
#todolists_in_set(project_id, todoset_id, status: nil) ⇒ Object
Todolists in set.
123 124 125 126 127 |
# File 'app/services/basecamp/api_client.rb', line 123 def todolists_in_set(project_id, todoset_id, status: nil) params = {} params[:status] = status if status.present? get_paginated("/buckets/#{project_id}/todosets/#{todoset_id}/todolists.json", params: params.presence) end |
#todos(project_id, todolist_id, status: nil, completed: nil) ⇒ Object
Todos.
167 168 169 170 171 172 |
# File 'app/services/basecamp/api_client.rb', line 167 def todos(project_id, todolist_id, status: nil, completed: nil) params = {} params[:status] = status if status.present? params[:completed] = completed unless completed.nil? get_paginated("/buckets/#{project_id}/todolists/#{todolist_id}/todos.json", params: params.presence) end |
#todoset(project_id, todoset_id) ⇒ Object
Todoset.
107 108 109 |
# File 'app/services/basecamp/api_client.rb', line 107 def todoset(project_id, todoset_id) get("/buckets/#{project_id}/todosets/#{todoset_id}.json") end |
#trash_project(project_id) ⇒ Object
Trash project.
97 98 99 |
# File 'app/services/basecamp/api_client.rb', line 97 def trash_project(project_id) delete("/projects/#{project_id}.json") end |
#trash_recording(project_id, recording_id) ⇒ Object
Trash recording.
477 478 479 |
# File 'app/services/basecamp/api_client.rb', line 477 def trash_recording(project_id, recording_id) post("/buckets/#{project_id}/recordings/#{recording_id}/status/trashed.json") end |
#uncomplete_todo(project_id, todo_id) ⇒ Object
Uncomplete todo.
237 238 239 |
# File 'app/services/basecamp/api_client.rb', line 237 def uncomplete_todo(project_id, todo_id) delete("/buckets/#{project_id}/todos/#{todo_id}/completion.json") end |
#unpin_recording(project_id, recording_id) ⇒ Object
Unpin recording.
347 348 349 |
# File 'app/services/basecamp/api_client.rb', line 347 def unpin_recording(project_id, recording_id) delete("/buckets/#{project_id}/recordings/#{recording_id}/pin.json") end |
#upcoming_schedule(window_starts_on:, window_ends_on:) ⇒ Object
Upcoming schedule.
555 556 557 558 559 560 561 562 563 |
# File 'app/services/basecamp/api_client.rb', line 555 def upcoming_schedule(window_starts_on:, window_ends_on:) get( '/reports/schedules/upcoming.json', params: { window_starts_on: window_starts_on, window_ends_on: window_ends_on } ) end |
#update_comment(project_id, comment_id, content:) ⇒ Object
Update comment.
469 470 471 |
# File 'app/services/basecamp/api_client.rb', line 469 def update_comment(project_id, comment_id, content:) put("/buckets/#{project_id}/comments/#{comment_id}.json", { content: content }) end |
#update_document(project_id, document_id, title:, content:) ⇒ Object
Update document.
608 609 610 |
# File 'app/services/basecamp/api_client.rb', line 608 def update_document(project_id, document_id, title:, content:) put("/buckets/#{project_id}/documents/#{document_id}.json", { title: title, content: content }) end |
#update_message(project_id, message_id, subject: nil, content: nil, category_id: nil) ⇒ Object
Update message.
327 328 329 330 331 332 333 |
# File 'app/services/basecamp/api_client.rb', line 327 def (project_id, , subject: nil, content: nil, category_id: nil) body = {} body[:subject] = subject if subject body[:content] = content if content body[:category_id] = category_id if category_id put("/buckets/#{project_id}/messages/#{}.json", body) end |
#update_project(project_id, name:, description: nil, admissions: nil, schedule_attributes: nil) ⇒ Object
Update project.
86 87 88 89 90 91 92 |
# File 'app/services/basecamp/api_client.rb', line 86 def update_project(project_id, name:, description: nil, admissions: nil, schedule_attributes: nil) body = { name: name } body[:description] = description if description body[:admissions] = admissions if admissions body[:schedule_attributes] = schedule_attributes if schedule_attributes put("/projects/#{project_id}.json", body) end |
#update_project_people(project_id, grant: nil, revoke: nil, create: nil) ⇒ Object
Update project people.
423 424 425 426 427 428 429 |
# File 'app/services/basecamp/api_client.rb', line 423 def update_project_people(project_id, grant: nil, revoke: nil, create: nil) body = {} body[:grant] = grant if grant.present? body[:revoke] = revoke if revoke.present? body[:create] = create if create.present? put("/projects/#{project_id}/people/users.json", body) end |
#update_todo(project_id, todo_id, **attrs) ⇒ Object
209 210 211 |
# File 'app/services/basecamp/api_client.rb', line 209 def update_todo(project_id, todo_id, **attrs) put("/buckets/#{project_id}/todos/#{todo_id}.json", attrs.compact) end |
#update_todolist(project_id, todolist_id, name:, description: nil) ⇒ Object
Update todolist.
155 156 157 158 159 |
# File 'app/services/basecamp/api_client.rb', line 155 def update_todolist(project_id, todolist_id, name:, description: nil) body = { name: name } body[:description] = description if description put("/buckets/#{project_id}/todolists/#{todolist_id}.json", body) end |
#update_upload(project_id, upload_id, description: nil, base_name: nil) ⇒ Object
Update upload.
650 651 652 653 654 655 |
# File 'app/services/basecamp/api_client.rb', line 650 def update_upload(project_id, upload_id, description: nil, base_name: nil) body = {} body[:description] = description if description body[:base_name] = base_name if base_name put("/buckets/#{project_id}/uploads/#{upload_id}.json", body) end |
#upload(project_id, upload_id) ⇒ Object
Upload.
626 627 628 |
# File 'app/services/basecamp/api_client.rb', line 626 def upload(project_id, upload_id) get("/buckets/#{project_id}/uploads/#{upload_id}.json") end |
#uploads(project_id, vault_id) ⇒ Object
Uploads.
618 619 620 |
# File 'app/services/basecamp/api_client.rb', line 618 def uploads(project_id, vault_id) get_paginated("/buckets/#{project_id}/vaults/#{vault_id}/uploads.json") end |