basecamp-sdk 0.9.0 → 0.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e872009b6b4862fca29c9f3d432d1b60c6629b77d6f3a293983b56bb0afc249a
4
- data.tar.gz: 3aa007580b800dde800072fb5b13ef21cc619800194f1a0c1d34f3d76db85ba8
3
+ metadata.gz: 06b1a1a19b501f386b63739724bb50b0f1d778660d2765f04d2c6a0d2214ef14
4
+ data.tar.gz: 3c2b5c8409d5a334eabb01b668e430510ad79b93cefc5ead3c5475f4b8f5d661
5
5
  SHA512:
6
- metadata.gz: e229aad8ab09a80b14abf54abce5d4d205c71b3b2ad2105cd03a3a152ba4d6ee5eefc5d5538bbd6ebf4dda0892fb9073a92e9cd4334d76521533f08c2e47320f
7
- data.tar.gz: ac047d82d5997039b26db6b1848cd151bb662c96837210c233614fdb4e170ee65daad81cf6048d5f3656468bafacad4327f2117c6556c3629973b0470c420087
6
+ metadata.gz: 0d9134c7b9996490c035fccc0c949acd1c05faff5c52b40aa5f30ab913456c10701a8742b74df33aea35539d197dd8c4932df3a1305d73db3efe2ac3de7bfa34
7
+ data.tar.gz: 3a4c47cb7196bd642f1c0863d25ff02fcf8ec607e102a6ce16cafe54aa5a74ef6290561c1897e365ff848e77911bdf8d7b3d31d85395adc4ba0b0753ba21d641
@@ -501,6 +501,11 @@ module Basecamp
501
501
  service(:timeline) { Services::TimelineService.new(self) }
502
502
  end
503
503
 
504
+ # @return [Services::EverythingService]
505
+ def everything
506
+ service(:everything) { Services::EverythingService.new(self) }
507
+ end
508
+
504
509
  # @return [Services::TimesheetsService]
505
510
  def timesheets
506
511
  service(:timesheets) { Services::TimesheetsService.new(self) }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://basecamp.com/schemas/sdk-metadata.json",
3
3
  "version": "1.0.0",
4
- "generated": "2026-07-23T19:34:23Z",
4
+ "generated": "2026-07-28T21:34:14Z",
5
5
  "operations": {
6
6
  "GetAccount": {
7
7
  "retry": {
@@ -67,6 +67,22 @@
67
67
  ]
68
68
  }
69
69
  },
70
+ "GetEverythingBoosts": {
71
+ "retry": {
72
+ "maxAttempts": 3,
73
+ "baseDelayMs": 1000,
74
+ "backoff": "exponential",
75
+ "retryOn": [
76
+ 429,
77
+ 503
78
+ ]
79
+ },
80
+ "pagination": {
81
+ "style": "link",
82
+ "totalCountHeader": "X-Total-Count",
83
+ "maxPageSize": 50
84
+ }
85
+ },
70
86
  "GetBoost": {
71
87
  "retry": {
72
88
  "maxAttempts": 3,
@@ -170,6 +186,72 @@
170
186
  ]
171
187
  }
172
188
  },
189
+ "ListMessageTypes": {
190
+ "retry": {
191
+ "maxAttempts": 3,
192
+ "baseDelayMs": 1000,
193
+ "backoff": "exponential",
194
+ "retryOn": [
195
+ 429,
196
+ 503
197
+ ]
198
+ },
199
+ "pagination": {
200
+ "style": "link",
201
+ "totalCountHeader": "X-Total-Count",
202
+ "maxPageSize": 50
203
+ }
204
+ },
205
+ "CreateMessageType": {
206
+ "retry": {
207
+ "maxAttempts": 2,
208
+ "baseDelayMs": 1000,
209
+ "backoff": "exponential",
210
+ "retryOn": [
211
+ 429,
212
+ 503
213
+ ]
214
+ }
215
+ },
216
+ "GetMessageType": {
217
+ "retry": {
218
+ "maxAttempts": 3,
219
+ "baseDelayMs": 1000,
220
+ "backoff": "exponential",
221
+ "retryOn": [
222
+ 429,
223
+ 503
224
+ ]
225
+ }
226
+ },
227
+ "UpdateMessageType": {
228
+ "retry": {
229
+ "maxAttempts": 3,
230
+ "baseDelayMs": 1000,
231
+ "backoff": "exponential",
232
+ "retryOn": [
233
+ 429,
234
+ 503
235
+ ]
236
+ },
237
+ "idempotent": {
238
+ "natural": true
239
+ }
240
+ },
241
+ "DeleteMessageType": {
242
+ "retry": {
243
+ "maxAttempts": 3,
244
+ "baseDelayMs": 1000,
245
+ "backoff": "exponential",
246
+ "retryOn": [
247
+ 429,
248
+ 503
249
+ ]
250
+ },
251
+ "idempotent": {
252
+ "natural": true
253
+ }
254
+ },
173
255
  "CreateTool": {
174
256
  "retry": {
175
257
  "maxAttempts": 2,
@@ -418,7 +500,7 @@
418
500
  ]
419
501
  }
420
502
  },
421
- "ListMessageTypes": {
503
+ "GetEverythingCompletedCards": {
422
504
  "retry": {
423
505
  "maxAttempts": 3,
424
506
  "baseDelayMs": 1000,
@@ -431,21 +513,26 @@
431
513
  "pagination": {
432
514
  "style": "link",
433
515
  "totalCountHeader": "X-Total-Count",
434
- "maxPageSize": 50
516
+ "maxPageSize": 5
435
517
  }
436
518
  },
437
- "CreateMessageType": {
519
+ "GetEverythingNoDueDateCards": {
438
520
  "retry": {
439
- "maxAttempts": 2,
521
+ "maxAttempts": 3,
440
522
  "baseDelayMs": 1000,
441
523
  "backoff": "exponential",
442
524
  "retryOn": [
443
525
  429,
444
526
  503
445
527
  ]
528
+ },
529
+ "pagination": {
530
+ "style": "link",
531
+ "totalCountHeader": "X-Total-Count",
532
+ "maxPageSize": 5
446
533
  }
447
534
  },
448
- "GetMessageType": {
535
+ "GetEverythingNotNowCards": {
449
536
  "retry": {
450
537
  "maxAttempts": 3,
451
538
  "baseDelayMs": 1000,
@@ -454,9 +541,14 @@
454
541
  429,
455
542
  503
456
543
  ]
544
+ },
545
+ "pagination": {
546
+ "style": "link",
547
+ "totalCountHeader": "X-Total-Count",
548
+ "maxPageSize": 5
457
549
  }
458
550
  },
459
- "UpdateMessageType": {
551
+ "GetEverythingOpenCards": {
460
552
  "retry": {
461
553
  "maxAttempts": 3,
462
554
  "baseDelayMs": 1000,
@@ -466,11 +558,24 @@
466
558
  503
467
559
  ]
468
560
  },
469
- "idempotent": {
470
- "natural": true
561
+ "pagination": {
562
+ "style": "link",
563
+ "totalCountHeader": "X-Total-Count",
564
+ "maxPageSize": 5
471
565
  }
472
566
  },
473
- "DeleteMessageType": {
567
+ "GetEverythingOverdueCards": {
568
+ "retry": {
569
+ "maxAttempts": 3,
570
+ "baseDelayMs": 1000,
571
+ "backoff": "exponential",
572
+ "retryOn": [
573
+ 429,
574
+ 503
575
+ ]
576
+ }
577
+ },
578
+ "GetEverythingUnassignedCards": {
474
579
  "retry": {
475
580
  "maxAttempts": 3,
476
581
  "baseDelayMs": 1000,
@@ -480,8 +585,10 @@
480
585
  503
481
586
  ]
482
587
  },
483
- "idempotent": {
484
- "natural": true
588
+ "pagination": {
589
+ "style": "link",
590
+ "totalCountHeader": "X-Total-Count",
591
+ "maxPageSize": 5
485
592
  }
486
593
  },
487
594
  "ListCampfires": {
@@ -670,6 +777,22 @@
670
777
  ]
671
778
  }
672
779
  },
780
+ "GetEverythingCheckins": {
781
+ "retry": {
782
+ "maxAttempts": 3,
783
+ "baseDelayMs": 1000,
784
+ "backoff": "exponential",
785
+ "retryOn": [
786
+ 429,
787
+ 503
788
+ ]
789
+ },
790
+ "pagination": {
791
+ "style": "link",
792
+ "totalCountHeader": "X-Total-Count",
793
+ "maxPageSize": 50
794
+ }
795
+ },
673
796
  "ListPingablePeople": {
674
797
  "retry": {
675
798
  "maxAttempts": 3,
@@ -767,6 +890,22 @@
767
890
  ]
768
891
  }
769
892
  },
893
+ "GetEverythingComments": {
894
+ "retry": {
895
+ "maxAttempts": 3,
896
+ "baseDelayMs": 1000,
897
+ "backoff": "exponential",
898
+ "retryOn": [
899
+ 429,
900
+ 503
901
+ ]
902
+ },
903
+ "pagination": {
904
+ "style": "link",
905
+ "totalCountHeader": "X-Total-Count",
906
+ "maxPageSize": 50
907
+ }
908
+ },
770
909
  "GetComment": {
771
910
  "retry": {
772
911
  "maxAttempts": 3,
@@ -856,6 +995,38 @@
856
995
  "natural": true
857
996
  }
858
997
  },
998
+ "GetEverythingFiles": {
999
+ "retry": {
1000
+ "maxAttempts": 3,
1001
+ "baseDelayMs": 1000,
1002
+ "backoff": "exponential",
1003
+ "retryOn": [
1004
+ 429,
1005
+ 503
1006
+ ]
1007
+ },
1008
+ "pagination": {
1009
+ "style": "link",
1010
+ "totalCountHeader": "X-Total-Count",
1011
+ "maxPageSize": 50
1012
+ }
1013
+ },
1014
+ "GetEverythingForwards": {
1015
+ "retry": {
1016
+ "maxAttempts": 3,
1017
+ "baseDelayMs": 1000,
1018
+ "backoff": "exponential",
1019
+ "retryOn": [
1020
+ 429,
1021
+ 503
1022
+ ]
1023
+ },
1024
+ "pagination": {
1025
+ "style": "link",
1026
+ "totalCountHeader": "X-Total-Count",
1027
+ "maxPageSize": 50
1028
+ }
1029
+ },
859
1030
  "GetGaugeNeedle": {
860
1031
  "retry": {
861
1032
  "maxAttempts": 3,
@@ -1059,6 +1230,22 @@
1059
1230
  ]
1060
1231
  }
1061
1232
  },
1233
+ "GetEverythingMessages": {
1234
+ "retry": {
1235
+ "maxAttempts": 3,
1236
+ "baseDelayMs": 1000,
1237
+ "backoff": "exponential",
1238
+ "retryOn": [
1239
+ 429,
1240
+ 503
1241
+ ]
1242
+ },
1243
+ "pagination": {
1244
+ "style": "link",
1245
+ "totalCountHeader": "X-Total-Count",
1246
+ "maxPageSize": 50
1247
+ }
1248
+ },
1062
1249
  "GetMessage": {
1063
1250
  "retry": {
1064
1251
  "maxAttempts": 3,
@@ -1193,6 +1380,22 @@
1193
1380
  ]
1194
1381
  }
1195
1382
  },
1383
+ "GetBubbleUps": {
1384
+ "retry": {
1385
+ "maxAttempts": 3,
1386
+ "baseDelayMs": 1000,
1387
+ "backoff": "exponential",
1388
+ "retryOn": [
1389
+ 429,
1390
+ 503
1391
+ ]
1392
+ },
1393
+ "pagination": {
1394
+ "style": "link",
1395
+ "totalCountHeader": "X-Total-Count",
1396
+ "maxPageSize": 50
1397
+ }
1398
+ },
1196
1399
  "MarkAsRead": {
1197
1400
  "retry": {
1198
1401
  "maxAttempts": 2,
@@ -2371,6 +2574,81 @@
2371
2574
  ]
2372
2575
  }
2373
2576
  },
2577
+ "GetEverythingCompletedTodos": {
2578
+ "retry": {
2579
+ "maxAttempts": 3,
2580
+ "baseDelayMs": 1000,
2581
+ "backoff": "exponential",
2582
+ "retryOn": [
2583
+ 429,
2584
+ 503
2585
+ ]
2586
+ },
2587
+ "pagination": {
2588
+ "style": "link",
2589
+ "totalCountHeader": "X-Total-Count",
2590
+ "maxPageSize": 5
2591
+ }
2592
+ },
2593
+ "GetEverythingNoDueDateTodos": {
2594
+ "retry": {
2595
+ "maxAttempts": 3,
2596
+ "baseDelayMs": 1000,
2597
+ "backoff": "exponential",
2598
+ "retryOn": [
2599
+ 429,
2600
+ 503
2601
+ ]
2602
+ },
2603
+ "pagination": {
2604
+ "style": "link",
2605
+ "totalCountHeader": "X-Total-Count",
2606
+ "maxPageSize": 5
2607
+ }
2608
+ },
2609
+ "GetEverythingOpenTodos": {
2610
+ "retry": {
2611
+ "maxAttempts": 3,
2612
+ "baseDelayMs": 1000,
2613
+ "backoff": "exponential",
2614
+ "retryOn": [
2615
+ 429,
2616
+ 503
2617
+ ]
2618
+ },
2619
+ "pagination": {
2620
+ "style": "link",
2621
+ "totalCountHeader": "X-Total-Count",
2622
+ "maxPageSize": 5
2623
+ }
2624
+ },
2625
+ "GetEverythingOverdueTodos": {
2626
+ "retry": {
2627
+ "maxAttempts": 3,
2628
+ "baseDelayMs": 1000,
2629
+ "backoff": "exponential",
2630
+ "retryOn": [
2631
+ 429,
2632
+ 503
2633
+ ]
2634
+ }
2635
+ },
2636
+ "GetEverythingUnassignedTodos": {
2637
+ "retry": {
2638
+ "maxAttempts": 3,
2639
+ "baseDelayMs": 1000,
2640
+ "backoff": "exponential",
2641
+ "retryOn": [
2642
+ 429,
2643
+ 503
2644
+ ]
2645
+ },
2646
+ "pagination": {
2647
+ "style": "link",
2648
+ "totalCountHeader": "X-Total-Count",
2649
+ "maxPageSize": 5
2650
+ }
2651
+ },
2374
2652
  "GetTodo": {
2375
2653
  "retry": {
2376
2654
  "maxAttempts": 3,
@@ -8,7 +8,7 @@ module Basecamp
8
8
  class AutomationService < BaseService
9
9
 
10
10
  # List all lineup markers for the account
11
- # @return [Hash] response data
11
+ # @return [Array<Hash>] response data
12
12
  def list_lineup_markers()
13
13
  with_operation(service: "automation", operation: "list_lineup_markers", is_mutation: false) do
14
14
  http_get("/lineup/markers.json").json
@@ -23,8 +23,8 @@ module Basecamp
23
23
  # @param due_on [String, nil] due on (YYYY-MM-DD)
24
24
  # @param assignee_ids [Array, nil] assignee ids
25
25
  # @return [Hash] response data
26
- def update(card_id:, title: nil, content: nil, due_on: nil, assignee_ids: nil)
27
- with_operation(service: "cards", operation: "update", is_mutation: true, resource_id: card_id) do
26
+ def update_verbatim(card_id:, title: nil, content: nil, due_on: nil, assignee_ids: nil)
27
+ with_operation(service: "cards", operation: "update_verbatim", is_mutation: true, resource_id: card_id) do
28
28
  http_put("/card_tables/cards/#{card_id}", body: compact_params(title: title, content: content, due_on: due_on, assignee_ids: assignee_ids)).json
29
29
  end
30
30
  end
@@ -0,0 +1,179 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basecamp
4
+ module Services
5
+ # Service for Everything operations
6
+ #
7
+ # @generated from OpenAPI spec
8
+ class EverythingService < BaseService
9
+
10
+ # Get every boost across all accessible projects, newest-first (paginated).
11
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
12
+ # @return [Enumerator<Hash>] paginated results
13
+ def get_everything_boosts(page: nil)
14
+ wrap_paginated(service: "everything", operation: "get_everything_boosts", is_mutation: false) do
15
+ params = compact_query_params(page: page)
16
+ paginate("/boosts.json", params: params)
17
+ end
18
+ end
19
+
20
+ # Completed cards across all accessible projects, grouped by project (paginated).
21
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
22
+ # @return [Enumerator<Hash>] paginated results
23
+ def get_everything_completed_cards(page: nil)
24
+ wrap_paginated(service: "everything", operation: "get_everything_completed_cards", is_mutation: false) do
25
+ params = compact_query_params(page: page)
26
+ paginate("/cards/completed.json", params: params)
27
+ end
28
+ end
29
+
30
+ # Open cards with no due date across all accessible projects, grouped by project (paginated).
31
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
32
+ # @return [Enumerator<Hash>] paginated results
33
+ def get_everything_no_due_date_cards(page: nil)
34
+ wrap_paginated(service: "everything", operation: "get_everything_no_due_date_cards", is_mutation: false) do
35
+ params = compact_query_params(page: page)
36
+ paginate("/cards/no_due_date.json", params: params)
37
+ end
38
+ end
39
+
40
+ # Cards parked in a project's "Not now" column across all accessible projects, grouped by project (paginated).
41
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
42
+ # @return [Enumerator<Hash>] paginated results
43
+ def get_everything_not_now_cards(page: nil)
44
+ wrap_paginated(service: "everything", operation: "get_everything_not_now_cards", is_mutation: false) do
45
+ params = compact_query_params(page: page)
46
+ paginate("/cards/not_now.json", params: params)
47
+ end
48
+ end
49
+
50
+ # Incomplete cards in active columns across all accessible projects, grouped by project (paginated).
51
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
52
+ # @return [Enumerator<Hash>] paginated results
53
+ def get_everything_open_cards(page: nil)
54
+ wrap_paginated(service: "everything", operation: "get_everything_open_cards", is_mutation: false) do
55
+ params = compact_query_params(page: page)
56
+ paginate("/cards/open.json", params: params)
57
+ end
58
+ end
59
+
60
+ # Get every overdue card across all accessible projects, oldest-due-date-first.
61
+ # @return [Array<Hash>] response data
62
+ def get_everything_overdue_cards()
63
+ with_operation(service: "everything", operation: "get_everything_overdue_cards", is_mutation: false) do
64
+ http_get("/cards/overdue.json").json
65
+ end
66
+ end
67
+
68
+ # Open, unassigned cards across all accessible projects, grouped by project (paginated).
69
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
70
+ # @return [Enumerator<Hash>] paginated results
71
+ def get_everything_unassigned_cards(page: nil)
72
+ wrap_paginated(service: "everything", operation: "get_everything_unassigned_cards", is_mutation: false) do
73
+ params = compact_query_params(page: page)
74
+ paginate("/cards/unassigned.json", params: params)
75
+ end
76
+ end
77
+
78
+ # Get every automatic check-in answer across all accessible projects, newest-first.
79
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
80
+ # @return [Enumerator<Hash>] paginated results
81
+ def get_everything_checkins(page: nil)
82
+ wrap_paginated(service: "everything", operation: "get_everything_checkins", is_mutation: false) do
83
+ params = compact_query_params(page: page)
84
+ paginate("/checkins.json", params: params)
85
+ end
86
+ end
87
+
88
+ # Get every comment across all accessible projects, newest-first (paginated).
89
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
90
+ # @return [Enumerator<Hash>] paginated results
91
+ def get_everything_comments(page: nil)
92
+ wrap_paginated(service: "everything", operation: "get_everything_comments", is_mutation: false) do
93
+ params = compact_query_params(page: page)
94
+ paginate("/comments.json", params: params)
95
+ end
96
+ end
97
+
98
+ # Get every file recording across all accessible projects, newest-first (paginated).
99
+ # @param kind [String, nil] Filter by file kind: all (default), images, pdfs, documents, or videos.
100
+ # @param people_ids [Array, nil] Restrict to files created by the given people (repeatable).
101
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
102
+ # @return [Enumerator<Hash>] paginated results
103
+ def get_everything_files(kind: nil, people_ids: nil, page: nil)
104
+ wrap_paginated(service: "everything", operation: "get_everything_files", is_mutation: false) do
105
+ params = compact_query_params(kind: kind, people_ids: people_ids, page: page)
106
+ paginate("/files.json", params: params)
107
+ end
108
+ end
109
+
110
+ # Get every inbox forward across all accessible projects, newest-first (paginated).
111
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
112
+ # @return [Enumerator<Hash>] paginated results
113
+ def get_everything_forwards(page: nil)
114
+ wrap_paginated(service: "everything", operation: "get_everything_forwards", is_mutation: false) do
115
+ params = compact_query_params(page: page)
116
+ paginate("/forwards.json", params: params)
117
+ end
118
+ end
119
+
120
+ # Get every message across all accessible projects, newest-first (paginated).
121
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
122
+ # @return [Enumerator<Hash>] paginated results
123
+ def get_everything_messages(page: nil)
124
+ wrap_paginated(service: "everything", operation: "get_everything_messages", is_mutation: false) do
125
+ params = compact_query_params(page: page)
126
+ paginate("/messages.json", params: params)
127
+ end
128
+ end
129
+
130
+ # Completed to-dos across all accessible projects, grouped by project (paginated).
131
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
132
+ # @return [Enumerator<Hash>] paginated results
133
+ def get_everything_completed_todos(page: nil)
134
+ wrap_paginated(service: "everything", operation: "get_everything_completed_todos", is_mutation: false) do
135
+ params = compact_query_params(page: page)
136
+ paginate("/todos/completed.json", params: params)
137
+ end
138
+ end
139
+
140
+ # Open to-dos with no due date across all accessible projects, grouped by project (paginated).
141
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
142
+ # @return [Enumerator<Hash>] paginated results
143
+ def get_everything_no_due_date_todos(page: nil)
144
+ wrap_paginated(service: "everything", operation: "get_everything_no_due_date_todos", is_mutation: false) do
145
+ params = compact_query_params(page: page)
146
+ paginate("/todos/no_due_date.json", params: params)
147
+ end
148
+ end
149
+
150
+ # Active, incomplete to-dos across all accessible projects, grouped by project (paginated).
151
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
152
+ # @return [Enumerator<Hash>] paginated results
153
+ def get_everything_open_todos(page: nil)
154
+ wrap_paginated(service: "everything", operation: "get_everything_open_todos", is_mutation: false) do
155
+ params = compact_query_params(page: page)
156
+ paginate("/todos/open.json", params: params)
157
+ end
158
+ end
159
+
160
+ # Get every overdue to-do across all accessible projects, oldest-due-date-first.
161
+ # @return [Array<Hash>] response data
162
+ def get_everything_overdue_todos()
163
+ with_operation(service: "everything", operation: "get_everything_overdue_todos", is_mutation: false) do
164
+ http_get("/todos/overdue.json").json
165
+ end
166
+ end
167
+
168
+ # Open, unassigned to-dos across all accessible projects, grouped by project (paginated).
169
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1.
170
+ # @return [Enumerator<Hash>] paginated results
171
+ def get_everything_unassigned_todos(page: nil)
172
+ wrap_paginated(service: "everything", operation: "get_everything_unassigned_todos", is_mutation: false) do
173
+ params = compact_query_params(page: page)
174
+ paginate("/todos/unassigned.json", params: params)
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end