basecamp-sdk 0.12.0 → 0.14.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 +4 -4
- data/README.md +128 -8
- data/lib/basecamp/client.rb +35 -11
- data/lib/basecamp/config.rb +69 -0
- data/lib/basecamp/error.rb +1 -0
- data/lib/basecamp/error_code.rb +1 -0
- data/lib/basecamp/exit_code.rb +1 -0
- data/lib/basecamp/generated/metadata.json +291 -141
- data/lib/basecamp/generated/services/base_service.rb +37 -16
- data/lib/basecamp/generated/services/bookmarks_service.rb +5 -4
- data/lib/basecamp/generated/services/boosts_service.rb +12 -6
- data/lib/basecamp/generated/services/campfires_service.rb +54 -41
- data/lib/basecamp/generated/services/cards_service.rb +6 -3
- data/lib/basecamp/generated/services/checkins_service.rb +28 -15
- data/lib/basecamp/generated/services/client_approvals_service.rb +8 -5
- data/lib/basecamp/generated/services/client_correspondences_service.rb +8 -5
- data/lib/basecamp/generated/services/client_replies_service.rb +12 -7
- data/lib/basecamp/generated/services/cloud_files_service.rb +57 -0
- data/lib/basecamp/generated/services/comments_service.rb +6 -3
- data/lib/basecamp/generated/services/documents_service.rb +9 -6
- data/lib/basecamp/generated/services/drafts_service.rb +5 -4
- data/lib/basecamp/generated/services/events_service.rb +6 -3
- data/lib/basecamp/generated/services/everything_service.rb +70 -56
- data/lib/basecamp/generated/services/folders_service.rb +62 -0
- data/lib/basecamp/generated/services/forwards_service.rb +12 -17
- data/lib/basecamp/generated/services/gauges_service.rb +12 -7
- data/lib/basecamp/generated/services/google_documents_service.rb +61 -0
- data/lib/basecamp/generated/services/message_types_service.rb +4 -3
- data/lib/basecamp/generated/services/messages_service.rb +6 -4
- data/lib/basecamp/generated/services/my_notes_service.rb +1 -1
- data/lib/basecamp/generated/services/my_notifications_service.rb +8 -5
- data/lib/basecamp/generated/services/people_service.rb +17 -10
- data/lib/basecamp/generated/services/projects_service.rb +26 -4
- data/lib/basecamp/generated/services/recordings_service.rb +6 -13
- data/lib/basecamp/generated/services/reports_service.rb +15 -9
- data/lib/basecamp/generated/services/schedules_service.rb +90 -16
- data/lib/basecamp/generated/services/search_service.rb +6 -4
- data/lib/basecamp/generated/services/templates_service.rb +6 -4
- data/lib/basecamp/generated/services/timeline_service.rb +6 -3
- data/lib/basecamp/generated/services/timesheets_service.rb +22 -8
- data/lib/basecamp/generated/services/todolist_groups_service.rb +7 -4
- data/lib/basecamp/generated/services/todolists_service.rb +11 -9
- data/lib/basecamp/generated/services/todos_service.rb +6 -14
- data/lib/basecamp/generated/services/uploads_service.rb +28 -6
- data/lib/basecamp/generated/services/vaults_service.rb +6 -3
- data/lib/basecamp/generated/services/webhooks_service.rb +4 -3
- data/lib/basecamp/generated/types.rb +603 -139
- data/lib/basecamp/http.rb +352 -163
- data/lib/basecamp/limit_exceeded_error.rb +22 -0
- data/lib/basecamp/list_enumerator.rb +29 -0
- data/lib/basecamp/list_meta.rb +44 -0
- data/lib/basecamp/services/authorization_service.rb +11 -2
- data/lib/basecamp/services/cards_extensions.rb +35 -27
- data/lib/basecamp/services/documents_extensions.rb +136 -0
- data/lib/basecamp/services/merge_safe.rb +255 -0
- data/lib/basecamp/services/schedules_extensions.rb +354 -0
- data/lib/basecamp/services/todolists_extensions.rb +274 -0
- data/lib/basecamp/services/todos_extensions.rb +22 -6
- data/lib/basecamp/validation_error.rb +11 -1
- data/lib/basecamp/version.rb +2 -2
- data/lib/basecamp.rb +98 -4
- data/scripts/generate-metadata.rb +3 -1
- data/scripts/generate-services.rb +78 -27
- data/scripts/generate-types.rb +4 -2
- data/scripts/go_type_spellings.rb +26 -0
- metadata +13 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Auto-generated from OpenAPI spec. Do not edit manually.
|
|
4
|
-
# Generated: 2026-
|
|
4
|
+
# Generated: 2026-08-07T11:12:00Z
|
|
5
5
|
|
|
6
6
|
require "json"
|
|
7
7
|
require "time"
|
|
@@ -217,44 +217,6 @@ module Basecamp
|
|
|
217
217
|
end
|
|
218
218
|
end
|
|
219
219
|
|
|
220
|
-
# Assignable
|
|
221
|
-
class Assignable
|
|
222
|
-
include TypeHelpers
|
|
223
|
-
attr_accessor :app_url, :assignees, :bucket, :due_on, :id, :parent, :starts_on, :title, :type, :url
|
|
224
|
-
|
|
225
|
-
def initialize(data = {})
|
|
226
|
-
@app_url = data["app_url"]
|
|
227
|
-
@assignees = parse_array(data["assignees"], "Person")
|
|
228
|
-
@bucket = parse_type(data["bucket"], "TodoBucket")
|
|
229
|
-
@due_on = data["due_on"]
|
|
230
|
-
@id = parse_integer(data["id"])
|
|
231
|
-
@parent = parse_type(data["parent"], "TodoParent")
|
|
232
|
-
@starts_on = data["starts_on"]
|
|
233
|
-
@title = data["title"]
|
|
234
|
-
@type = data["type"]
|
|
235
|
-
@url = data["url"]
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
def to_h
|
|
239
|
-
{
|
|
240
|
-
"app_url" => @app_url,
|
|
241
|
-
"assignees" => @assignees,
|
|
242
|
-
"bucket" => @bucket,
|
|
243
|
-
"due_on" => @due_on,
|
|
244
|
-
"id" => @id,
|
|
245
|
-
"parent" => @parent,
|
|
246
|
-
"starts_on" => @starts_on,
|
|
247
|
-
"title" => @title,
|
|
248
|
-
"type" => @type,
|
|
249
|
-
"url" => @url,
|
|
250
|
-
}.compact
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
def to_json(*args)
|
|
254
|
-
to_h.to_json(*args)
|
|
255
|
-
end
|
|
256
|
-
end
|
|
257
|
-
|
|
258
220
|
# Bookmark
|
|
259
221
|
class Bookmark
|
|
260
222
|
include TypeHelpers
|
|
@@ -1251,6 +1213,108 @@ module Basecamp
|
|
|
1251
1213
|
end
|
|
1252
1214
|
end
|
|
1253
1215
|
|
|
1216
|
+
# CloudFile
|
|
1217
|
+
class CloudFile
|
|
1218
|
+
include TypeHelpers
|
|
1219
|
+
attr_accessor :app_url, :bucket, :created_at, :creator, :description_attachments, :id, :inherits_status, :parent, :service, :status, :title, :type, :updated_at, :url, :visible_to_clients, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :description, :position, :subscription_url
|
|
1220
|
+
|
|
1221
|
+
# @return [Array<Symbol>]
|
|
1222
|
+
def self.required_fields
|
|
1223
|
+
%i[app_url bucket created_at creator description_attachments id inherits_status parent service status title type updated_at url visible_to_clients].freeze
|
|
1224
|
+
end
|
|
1225
|
+
|
|
1226
|
+
def initialize(data = {})
|
|
1227
|
+
@app_url = data["app_url"]
|
|
1228
|
+
@bucket = parse_type(data["bucket"], "TodoBucket")
|
|
1229
|
+
@created_at = parse_datetime(data["created_at"])
|
|
1230
|
+
@creator = parse_type(data["creator"], "Person")
|
|
1231
|
+
@description_attachments = parse_array(data["description_attachments"], "RichTextAttachment")
|
|
1232
|
+
@id = parse_integer(data["id"])
|
|
1233
|
+
@inherits_status = parse_boolean(data["inherits_status"])
|
|
1234
|
+
@parent = parse_type(data["parent"], "RecordingParent")
|
|
1235
|
+
@service = parse_type(data["service"], "CloudFileService")
|
|
1236
|
+
@status = data["status"]
|
|
1237
|
+
@title = data["title"]
|
|
1238
|
+
@type = data["type"]
|
|
1239
|
+
@updated_at = parse_datetime(data["updated_at"])
|
|
1240
|
+
@url = data["url"]
|
|
1241
|
+
@visible_to_clients = parse_boolean(data["visible_to_clients"])
|
|
1242
|
+
@bookmark_url = data["bookmark_url"]
|
|
1243
|
+
@boosts_count = parse_integer(data["boosts_count"])
|
|
1244
|
+
@boosts_url = data["boosts_url"]
|
|
1245
|
+
@comments_count = parse_integer(data["comments_count"])
|
|
1246
|
+
@comments_url = data["comments_url"]
|
|
1247
|
+
@description = data["description"]
|
|
1248
|
+
@position = parse_integer(data["position"])
|
|
1249
|
+
@subscription_url = data["subscription_url"]
|
|
1250
|
+
end
|
|
1251
|
+
|
|
1252
|
+
def to_h
|
|
1253
|
+
{
|
|
1254
|
+
"app_url" => @app_url,
|
|
1255
|
+
"bucket" => @bucket,
|
|
1256
|
+
"created_at" => @created_at,
|
|
1257
|
+
"creator" => @creator,
|
|
1258
|
+
"description_attachments" => @description_attachments,
|
|
1259
|
+
"id" => @id,
|
|
1260
|
+
"inherits_status" => @inherits_status,
|
|
1261
|
+
"parent" => @parent,
|
|
1262
|
+
"service" => @service,
|
|
1263
|
+
"status" => @status,
|
|
1264
|
+
"title" => @title,
|
|
1265
|
+
"type" => @type,
|
|
1266
|
+
"updated_at" => @updated_at,
|
|
1267
|
+
"url" => @url,
|
|
1268
|
+
"visible_to_clients" => @visible_to_clients,
|
|
1269
|
+
"bookmark_url" => @bookmark_url,
|
|
1270
|
+
"boosts_count" => @boosts_count,
|
|
1271
|
+
"boosts_url" => @boosts_url,
|
|
1272
|
+
"comments_count" => @comments_count,
|
|
1273
|
+
"comments_url" => @comments_url,
|
|
1274
|
+
"description" => @description,
|
|
1275
|
+
"position" => @position,
|
|
1276
|
+
"subscription_url" => @subscription_url,
|
|
1277
|
+
}.compact
|
|
1278
|
+
end
|
|
1279
|
+
|
|
1280
|
+
def to_json(*args)
|
|
1281
|
+
to_h.to_json(*args)
|
|
1282
|
+
end
|
|
1283
|
+
end
|
|
1284
|
+
|
|
1285
|
+
# CloudFileService
|
|
1286
|
+
class CloudFileService
|
|
1287
|
+
include TypeHelpers
|
|
1288
|
+
attr_accessor :code, :example_url, :name, :valid_patterns, :supporting_text
|
|
1289
|
+
|
|
1290
|
+
# @return [Array<Symbol>]
|
|
1291
|
+
def self.required_fields
|
|
1292
|
+
%i[code example_url name valid_patterns].freeze
|
|
1293
|
+
end
|
|
1294
|
+
|
|
1295
|
+
def initialize(data = {})
|
|
1296
|
+
@code = data["code"]
|
|
1297
|
+
@example_url = data["example_url"]
|
|
1298
|
+
@name = data["name"]
|
|
1299
|
+
@valid_patterns = data["valid_patterns"]
|
|
1300
|
+
@supporting_text = data["supporting_text"]
|
|
1301
|
+
end
|
|
1302
|
+
|
|
1303
|
+
def to_h
|
|
1304
|
+
{
|
|
1305
|
+
"code" => @code,
|
|
1306
|
+
"example_url" => @example_url,
|
|
1307
|
+
"name" => @name,
|
|
1308
|
+
"valid_patterns" => @valid_patterns,
|
|
1309
|
+
"supporting_text" => @supporting_text,
|
|
1310
|
+
}.compact
|
|
1311
|
+
end
|
|
1312
|
+
|
|
1313
|
+
def to_json(*args)
|
|
1314
|
+
to_h.to_json(*args)
|
|
1315
|
+
end
|
|
1316
|
+
end
|
|
1317
|
+
|
|
1254
1318
|
# Comment
|
|
1255
1319
|
class Comment
|
|
1256
1320
|
include TypeHelpers
|
|
@@ -1490,7 +1554,7 @@ module Basecamp
|
|
|
1490
1554
|
@excerpt = data["excerpt"]
|
|
1491
1555
|
@id = parse_integer(data["id"])
|
|
1492
1556
|
@parent = data["parent"]
|
|
1493
|
-
@scheduled_posting_at = data["scheduled_posting_at"]
|
|
1557
|
+
@scheduled_posting_at = parse_datetime(data["scheduled_posting_at"])
|
|
1494
1558
|
@title = data["title"]
|
|
1495
1559
|
@type = data["type"]
|
|
1496
1560
|
@updated_at = parse_datetime(data["updated_at"])
|
|
@@ -1744,6 +1808,102 @@ module Basecamp
|
|
|
1744
1808
|
end
|
|
1745
1809
|
end
|
|
1746
1810
|
|
|
1811
|
+
# Folder
|
|
1812
|
+
class Folder
|
|
1813
|
+
include TypeHelpers
|
|
1814
|
+
attr_accessor :bucket_ids, :color, :created_at, :gauges_url, :id, :image_url, :is_emoji_only_name, :name, :star_url, :type, :updated_at, :url
|
|
1815
|
+
|
|
1816
|
+
# @return [Array<Symbol>]
|
|
1817
|
+
def self.required_fields
|
|
1818
|
+
%i[bucket_ids color created_at gauges_url id image_url is_emoji_only_name name star_url type updated_at url].freeze
|
|
1819
|
+
end
|
|
1820
|
+
|
|
1821
|
+
def initialize(data = {})
|
|
1822
|
+
@bucket_ids = data["bucket_ids"]
|
|
1823
|
+
@color = data["color"]
|
|
1824
|
+
@created_at = parse_datetime(data["created_at"])
|
|
1825
|
+
@gauges_url = data["gauges_url"]
|
|
1826
|
+
@id = parse_integer(data["id"])
|
|
1827
|
+
@image_url = data["image_url"]
|
|
1828
|
+
@is_emoji_only_name = parse_boolean(data["is_emoji_only_name"])
|
|
1829
|
+
@name = data["name"]
|
|
1830
|
+
@star_url = data["star_url"]
|
|
1831
|
+
@type = data["type"]
|
|
1832
|
+
@updated_at = parse_datetime(data["updated_at"])
|
|
1833
|
+
@url = data["url"]
|
|
1834
|
+
end
|
|
1835
|
+
|
|
1836
|
+
def to_h
|
|
1837
|
+
{
|
|
1838
|
+
"bucket_ids" => @bucket_ids,
|
|
1839
|
+
"color" => @color,
|
|
1840
|
+
"created_at" => @created_at,
|
|
1841
|
+
"gauges_url" => @gauges_url,
|
|
1842
|
+
"id" => @id,
|
|
1843
|
+
"image_url" => @image_url,
|
|
1844
|
+
"is_emoji_only_name" => @is_emoji_only_name,
|
|
1845
|
+
"name" => @name,
|
|
1846
|
+
"star_url" => @star_url,
|
|
1847
|
+
"type" => @type,
|
|
1848
|
+
"updated_at" => @updated_at,
|
|
1849
|
+
"url" => @url,
|
|
1850
|
+
}.reject { |k, v| v.nil? && !["color", "gauges_url", "image_url"].include?(k) }
|
|
1851
|
+
end
|
|
1852
|
+
|
|
1853
|
+
def to_json(*args)
|
|
1854
|
+
to_h.to_json(*args)
|
|
1855
|
+
end
|
|
1856
|
+
end
|
|
1857
|
+
|
|
1858
|
+
# FolderWithProjects
|
|
1859
|
+
class FolderWithProjects
|
|
1860
|
+
include TypeHelpers
|
|
1861
|
+
attr_accessor :bucket_ids, :color, :created_at, :gauges_url, :id, :image_url, :is_emoji_only_name, :name, :projects, :star_url, :type, :updated_at, :url
|
|
1862
|
+
|
|
1863
|
+
# @return [Array<Symbol>]
|
|
1864
|
+
def self.required_fields
|
|
1865
|
+
%i[bucket_ids color created_at gauges_url id image_url is_emoji_only_name name projects star_url type updated_at url].freeze
|
|
1866
|
+
end
|
|
1867
|
+
|
|
1868
|
+
def initialize(data = {})
|
|
1869
|
+
@bucket_ids = data["bucket_ids"]
|
|
1870
|
+
@color = data["color"]
|
|
1871
|
+
@created_at = parse_datetime(data["created_at"])
|
|
1872
|
+
@gauges_url = data["gauges_url"]
|
|
1873
|
+
@id = parse_integer(data["id"])
|
|
1874
|
+
@image_url = data["image_url"]
|
|
1875
|
+
@is_emoji_only_name = parse_boolean(data["is_emoji_only_name"])
|
|
1876
|
+
@name = data["name"]
|
|
1877
|
+
@projects = parse_array(data["projects"], "Project")
|
|
1878
|
+
@star_url = data["star_url"]
|
|
1879
|
+
@type = data["type"]
|
|
1880
|
+
@updated_at = parse_datetime(data["updated_at"])
|
|
1881
|
+
@url = data["url"]
|
|
1882
|
+
end
|
|
1883
|
+
|
|
1884
|
+
def to_h
|
|
1885
|
+
{
|
|
1886
|
+
"bucket_ids" => @bucket_ids,
|
|
1887
|
+
"color" => @color,
|
|
1888
|
+
"created_at" => @created_at,
|
|
1889
|
+
"gauges_url" => @gauges_url,
|
|
1890
|
+
"id" => @id,
|
|
1891
|
+
"image_url" => @image_url,
|
|
1892
|
+
"is_emoji_only_name" => @is_emoji_only_name,
|
|
1893
|
+
"name" => @name,
|
|
1894
|
+
"projects" => @projects,
|
|
1895
|
+
"star_url" => @star_url,
|
|
1896
|
+
"type" => @type,
|
|
1897
|
+
"updated_at" => @updated_at,
|
|
1898
|
+
"url" => @url,
|
|
1899
|
+
}.reject { |k, v| v.nil? && !["color", "gauges_url", "image_url"].include?(k) }
|
|
1900
|
+
end
|
|
1901
|
+
|
|
1902
|
+
def to_json(*args)
|
|
1903
|
+
to_h.to_json(*args)
|
|
1904
|
+
end
|
|
1905
|
+
end
|
|
1906
|
+
|
|
1747
1907
|
# Forward
|
|
1748
1908
|
class Forward
|
|
1749
1909
|
include TypeHelpers
|
|
@@ -2072,33 +2232,67 @@ module Basecamp
|
|
|
2072
2232
|
end
|
|
2073
2233
|
end
|
|
2074
2234
|
|
|
2075
|
-
#
|
|
2076
|
-
class
|
|
2235
|
+
# GoogleDocument
|
|
2236
|
+
class GoogleDocument
|
|
2077
2237
|
include TypeHelpers
|
|
2078
|
-
attr_accessor :
|
|
2238
|
+
attr_accessor :app_url, :bucket, :created_at, :creator, :description_attachments, :document_type, :id, :inherits_status, :parent, :status, :title, :type, :updated_at, :url, :visible_to_clients, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :description, :position, :subscription_url
|
|
2079
2239
|
|
|
2080
2240
|
# @return [Array<Symbol>]
|
|
2081
2241
|
def self.required_fields
|
|
2082
|
-
%i[
|
|
2242
|
+
%i[app_url bucket created_at creator description_attachments document_type id inherits_status parent status title type updated_at url visible_to_clients].freeze
|
|
2083
2243
|
end
|
|
2084
2244
|
|
|
2085
2245
|
def initialize(data = {})
|
|
2086
|
-
@
|
|
2087
|
-
@
|
|
2088
|
-
@
|
|
2089
|
-
@
|
|
2090
|
-
@
|
|
2246
|
+
@app_url = data["app_url"]
|
|
2247
|
+
@bucket = parse_type(data["bucket"], "TodoBucket")
|
|
2248
|
+
@created_at = parse_datetime(data["created_at"])
|
|
2249
|
+
@creator = parse_type(data["creator"], "Person")
|
|
2250
|
+
@description_attachments = parse_array(data["description_attachments"], "RichTextAttachment")
|
|
2251
|
+
@document_type = data["document_type"]
|
|
2252
|
+
@id = parse_integer(data["id"])
|
|
2253
|
+
@inherits_status = parse_boolean(data["inherits_status"])
|
|
2254
|
+
@parent = parse_type(data["parent"], "RecordingParent")
|
|
2255
|
+
@status = data["status"]
|
|
2256
|
+
@title = data["title"]
|
|
2257
|
+
@type = data["type"]
|
|
2091
2258
|
@updated_at = parse_datetime(data["updated_at"])
|
|
2259
|
+
@url = data["url"]
|
|
2260
|
+
@visible_to_clients = parse_boolean(data["visible_to_clients"])
|
|
2261
|
+
@bookmark_url = data["bookmark_url"]
|
|
2262
|
+
@boosts_count = parse_integer(data["boosts_count"])
|
|
2263
|
+
@boosts_url = data["boosts_url"]
|
|
2264
|
+
@comments_count = parse_integer(data["comments_count"])
|
|
2265
|
+
@comments_url = data["comments_url"]
|
|
2266
|
+
@description = data["description"]
|
|
2267
|
+
@position = parse_integer(data["position"])
|
|
2268
|
+
@subscription_url = data["subscription_url"]
|
|
2092
2269
|
end
|
|
2093
2270
|
|
|
2094
2271
|
def to_h
|
|
2095
2272
|
{
|
|
2096
|
-
"
|
|
2097
|
-
"
|
|
2098
|
-
"
|
|
2099
|
-
"
|
|
2100
|
-
"
|
|
2273
|
+
"app_url" => @app_url,
|
|
2274
|
+
"bucket" => @bucket,
|
|
2275
|
+
"created_at" => @created_at,
|
|
2276
|
+
"creator" => @creator,
|
|
2277
|
+
"description_attachments" => @description_attachments,
|
|
2278
|
+
"document_type" => @document_type,
|
|
2279
|
+
"id" => @id,
|
|
2280
|
+
"inherits_status" => @inherits_status,
|
|
2281
|
+
"parent" => @parent,
|
|
2282
|
+
"status" => @status,
|
|
2283
|
+
"title" => @title,
|
|
2284
|
+
"type" => @type,
|
|
2101
2285
|
"updated_at" => @updated_at,
|
|
2286
|
+
"url" => @url,
|
|
2287
|
+
"visible_to_clients" => @visible_to_clients,
|
|
2288
|
+
"bookmark_url" => @bookmark_url,
|
|
2289
|
+
"boosts_count" => @boosts_count,
|
|
2290
|
+
"boosts_url" => @boosts_url,
|
|
2291
|
+
"comments_count" => @comments_count,
|
|
2292
|
+
"comments_url" => @comments_url,
|
|
2293
|
+
"description" => @description,
|
|
2294
|
+
"position" => @position,
|
|
2295
|
+
"subscription_url" => @subscription_url,
|
|
2102
2296
|
}.compact
|
|
2103
2297
|
end
|
|
2104
2298
|
|
|
@@ -2107,8 +2301,43 @@ module Basecamp
|
|
|
2107
2301
|
end
|
|
2108
2302
|
end
|
|
2109
2303
|
|
|
2110
|
-
#
|
|
2111
|
-
class
|
|
2304
|
+
# HillChart
|
|
2305
|
+
class HillChart
|
|
2306
|
+
include TypeHelpers
|
|
2307
|
+
attr_accessor :enabled, :stale, :app_update_url, :app_versions_url, :dots, :updated_at
|
|
2308
|
+
|
|
2309
|
+
# @return [Array<Symbol>]
|
|
2310
|
+
def self.required_fields
|
|
2311
|
+
%i[enabled stale].freeze
|
|
2312
|
+
end
|
|
2313
|
+
|
|
2314
|
+
def initialize(data = {})
|
|
2315
|
+
@enabled = parse_boolean(data["enabled"])
|
|
2316
|
+
@stale = parse_boolean(data["stale"])
|
|
2317
|
+
@app_update_url = data["app_update_url"]
|
|
2318
|
+
@app_versions_url = data["app_versions_url"]
|
|
2319
|
+
@dots = parse_array(data["dots"], "HillChartDot")
|
|
2320
|
+
@updated_at = parse_datetime(data["updated_at"])
|
|
2321
|
+
end
|
|
2322
|
+
|
|
2323
|
+
def to_h
|
|
2324
|
+
{
|
|
2325
|
+
"enabled" => @enabled,
|
|
2326
|
+
"stale" => @stale,
|
|
2327
|
+
"app_update_url" => @app_update_url,
|
|
2328
|
+
"app_versions_url" => @app_versions_url,
|
|
2329
|
+
"dots" => @dots,
|
|
2330
|
+
"updated_at" => @updated_at,
|
|
2331
|
+
}.compact
|
|
2332
|
+
end
|
|
2333
|
+
|
|
2334
|
+
def to_json(*args)
|
|
2335
|
+
to_h.to_json(*args)
|
|
2336
|
+
end
|
|
2337
|
+
end
|
|
2338
|
+
|
|
2339
|
+
# HillChartDot
|
|
2340
|
+
class HillChartDot
|
|
2112
2341
|
include TypeHelpers
|
|
2113
2342
|
attr_accessor :color, :id, :label, :position, :app_url, :url
|
|
2114
2343
|
|
|
@@ -2541,10 +2770,10 @@ module Basecamp
|
|
|
2541
2770
|
@app_url = data["app_url"]
|
|
2542
2771
|
@content = data["content"]
|
|
2543
2772
|
@content_attachments = parse_array(data["content_attachments"], "RichTextAttachment")
|
|
2544
|
-
@created_at = data["created_at"]
|
|
2773
|
+
@created_at = parse_datetime(data["created_at"])
|
|
2545
2774
|
@id = data["id"]
|
|
2546
2775
|
@type = data["type"]
|
|
2547
|
-
@updated_at = data["updated_at"]
|
|
2776
|
+
@updated_at = parse_datetime(data["updated_at"])
|
|
2548
2777
|
@url = data["url"]
|
|
2549
2778
|
end
|
|
2550
2779
|
|
|
@@ -3680,22 +3909,25 @@ module Basecamp
|
|
|
3680
3909
|
# ScheduleEntry
|
|
3681
3910
|
class ScheduleEntry
|
|
3682
3911
|
include TypeHelpers
|
|
3683
|
-
attr_accessor :app_url, :bucket, :created_at, :creator, :description_attachments, :id, :inherits_status, :parent, :status, :summary, :title, :type, :updated_at, :url, :visible_to_clients, :
|
|
3912
|
+
attr_accessor :all_day, :app_url, :bucket, :created_at, :creator, :description_attachments, :ends_at, :id, :inherits_status, :parent, :starts_at, :status, :summary, :title, :type, :updated_at, :url, :visible_to_clients, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :description, :highlighted, :join_url, :participants, :subscription_url
|
|
3684
3913
|
|
|
3685
3914
|
# @return [Array<Symbol>]
|
|
3686
3915
|
def self.required_fields
|
|
3687
|
-
%i[app_url bucket created_at creator description_attachments id inherits_status parent status summary title type updated_at url visible_to_clients].freeze
|
|
3916
|
+
%i[all_day app_url bucket created_at creator description_attachments ends_at id inherits_status parent starts_at status summary title type updated_at url visible_to_clients].freeze
|
|
3688
3917
|
end
|
|
3689
3918
|
|
|
3690
3919
|
def initialize(data = {})
|
|
3920
|
+
@all_day = parse_boolean(data["all_day"])
|
|
3691
3921
|
@app_url = data["app_url"]
|
|
3692
3922
|
@bucket = parse_type(data["bucket"], "TodoBucket")
|
|
3693
3923
|
@created_at = parse_datetime(data["created_at"])
|
|
3694
3924
|
@creator = parse_type(data["creator"], "Person")
|
|
3695
3925
|
@description_attachments = parse_array(data["description_attachments"], "RichTextAttachment")
|
|
3926
|
+
@ends_at = data["ends_at"]
|
|
3696
3927
|
@id = parse_integer(data["id"])
|
|
3697
3928
|
@inherits_status = parse_boolean(data["inherits_status"])
|
|
3698
3929
|
@parent = parse_type(data["parent"], "RecordingParent")
|
|
3930
|
+
@starts_at = data["starts_at"]
|
|
3699
3931
|
@status = data["status"]
|
|
3700
3932
|
@summary = data["summary"]
|
|
3701
3933
|
@title = data["title"]
|
|
@@ -3703,29 +3935,31 @@ module Basecamp
|
|
|
3703
3935
|
@updated_at = parse_datetime(data["updated_at"])
|
|
3704
3936
|
@url = data["url"]
|
|
3705
3937
|
@visible_to_clients = parse_boolean(data["visible_to_clients"])
|
|
3706
|
-
@all_day = parse_boolean(data["all_day"])
|
|
3707
3938
|
@bookmark_url = data["bookmark_url"]
|
|
3708
3939
|
@boosts_count = parse_integer(data["boosts_count"])
|
|
3709
3940
|
@boosts_url = data["boosts_url"]
|
|
3710
3941
|
@comments_count = parse_integer(data["comments_count"])
|
|
3711
3942
|
@comments_url = data["comments_url"]
|
|
3712
3943
|
@description = data["description"]
|
|
3713
|
-
@
|
|
3944
|
+
@highlighted = parse_boolean(data["highlighted"])
|
|
3945
|
+
@join_url = data["join_url"]
|
|
3714
3946
|
@participants = parse_array(data["participants"], "Person")
|
|
3715
|
-
@starts_at = data["starts_at"]
|
|
3716
3947
|
@subscription_url = data["subscription_url"]
|
|
3717
3948
|
end
|
|
3718
3949
|
|
|
3719
3950
|
def to_h
|
|
3720
3951
|
{
|
|
3952
|
+
"all_day" => @all_day,
|
|
3721
3953
|
"app_url" => @app_url,
|
|
3722
3954
|
"bucket" => @bucket,
|
|
3723
3955
|
"created_at" => @created_at,
|
|
3724
3956
|
"creator" => @creator,
|
|
3725
3957
|
"description_attachments" => @description_attachments,
|
|
3958
|
+
"ends_at" => @ends_at,
|
|
3726
3959
|
"id" => @id,
|
|
3727
3960
|
"inherits_status" => @inherits_status,
|
|
3728
3961
|
"parent" => @parent,
|
|
3962
|
+
"starts_at" => @starts_at,
|
|
3729
3963
|
"status" => @status,
|
|
3730
3964
|
"summary" => @summary,
|
|
3731
3965
|
"title" => @title,
|
|
@@ -3733,16 +3967,15 @@ module Basecamp
|
|
|
3733
3967
|
"updated_at" => @updated_at,
|
|
3734
3968
|
"url" => @url,
|
|
3735
3969
|
"visible_to_clients" => @visible_to_clients,
|
|
3736
|
-
"all_day" => @all_day,
|
|
3737
3970
|
"bookmark_url" => @bookmark_url,
|
|
3738
3971
|
"boosts_count" => @boosts_count,
|
|
3739
3972
|
"boosts_url" => @boosts_url,
|
|
3740
3973
|
"comments_count" => @comments_count,
|
|
3741
3974
|
"comments_url" => @comments_url,
|
|
3742
3975
|
"description" => @description,
|
|
3743
|
-
"
|
|
3976
|
+
"highlighted" => @highlighted,
|
|
3977
|
+
"join_url" => @join_url,
|
|
3744
3978
|
"participants" => @participants,
|
|
3745
|
-
"starts_at" => @starts_at,
|
|
3746
3979
|
"subscription_url" => @subscription_url,
|
|
3747
3980
|
}.compact
|
|
3748
3981
|
end
|
|
@@ -4331,19 +4564,22 @@ module Basecamp
|
|
|
4331
4564
|
# Todolist
|
|
4332
4565
|
class Todolist
|
|
4333
4566
|
include TypeHelpers
|
|
4334
|
-
attr_accessor :app_url, :bubble_up_url, :bucket, :created_at, :creator, :description_attachments, :id, :inherits_status, :name, :parent, :status, :title, :type, :updated_at, :url, :visible_to_clients, :app_todos_url, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :completed, :completed_ratio, :
|
|
4567
|
+
attr_accessor :app_url, :bubble_up_url, :bucket, :color, :comments_app_url, :created_at, :creator, :description, :description_attachments, :id, :inherits_status, :name, :parent, :status, :title, :type, :updated_at, :url, :visible_to_clients, :app_todos_url, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :completed, :completed_ratio, :group_position_url, :groups_url, :position, :subscription_url, :todos_url
|
|
4335
4568
|
|
|
4336
4569
|
# @return [Array<Symbol>]
|
|
4337
4570
|
def self.required_fields
|
|
4338
|
-
%i[app_url bubble_up_url bucket created_at creator description_attachments id inherits_status name parent status title type updated_at url visible_to_clients].freeze
|
|
4571
|
+
%i[app_url bubble_up_url bucket color comments_app_url created_at creator description description_attachments id inherits_status name parent status title type updated_at url visible_to_clients].freeze
|
|
4339
4572
|
end
|
|
4340
4573
|
|
|
4341
4574
|
def initialize(data = {})
|
|
4342
4575
|
@app_url = data["app_url"]
|
|
4343
4576
|
@bubble_up_url = data["bubble_up_url"]
|
|
4344
4577
|
@bucket = parse_type(data["bucket"], "TodoBucket")
|
|
4578
|
+
@color = data["color"]
|
|
4579
|
+
@comments_app_url = data["comments_app_url"]
|
|
4345
4580
|
@created_at = parse_datetime(data["created_at"])
|
|
4346
4581
|
@creator = parse_type(data["creator"], "Person")
|
|
4582
|
+
@description = data["description"]
|
|
4347
4583
|
@description_attachments = parse_array(data["description_attachments"], "RichTextAttachment")
|
|
4348
4584
|
@id = parse_integer(data["id"])
|
|
4349
4585
|
@inherits_status = parse_boolean(data["inherits_status"])
|
|
@@ -4363,7 +4599,7 @@ module Basecamp
|
|
|
4363
4599
|
@comments_url = data["comments_url"]
|
|
4364
4600
|
@completed = parse_boolean(data["completed"])
|
|
4365
4601
|
@completed_ratio = data["completed_ratio"]
|
|
4366
|
-
@
|
|
4602
|
+
@group_position_url = data["group_position_url"]
|
|
4367
4603
|
@groups_url = data["groups_url"]
|
|
4368
4604
|
@position = parse_integer(data["position"])
|
|
4369
4605
|
@subscription_url = data["subscription_url"]
|
|
@@ -4375,8 +4611,11 @@ module Basecamp
|
|
|
4375
4611
|
"app_url" => @app_url,
|
|
4376
4612
|
"bubble_up_url" => @bubble_up_url,
|
|
4377
4613
|
"bucket" => @bucket,
|
|
4614
|
+
"color" => @color,
|
|
4615
|
+
"comments_app_url" => @comments_app_url,
|
|
4378
4616
|
"created_at" => @created_at,
|
|
4379
4617
|
"creator" => @creator,
|
|
4618
|
+
"description" => @description,
|
|
4380
4619
|
"description_attachments" => @description_attachments,
|
|
4381
4620
|
"id" => @id,
|
|
4382
4621
|
"inherits_status" => @inherits_status,
|
|
@@ -4396,12 +4635,12 @@ module Basecamp
|
|
|
4396
4635
|
"comments_url" => @comments_url,
|
|
4397
4636
|
"completed" => @completed,
|
|
4398
4637
|
"completed_ratio" => @completed_ratio,
|
|
4399
|
-
"
|
|
4638
|
+
"group_position_url" => @group_position_url,
|
|
4400
4639
|
"groups_url" => @groups_url,
|
|
4401
4640
|
"position" => @position,
|
|
4402
4641
|
"subscription_url" => @subscription_url,
|
|
4403
4642
|
"todos_url" => @todos_url,
|
|
4404
|
-
}.
|
|
4643
|
+
}.reject { |k, v| v.nil? && !["color"].include?(k) }
|
|
4405
4644
|
end
|
|
4406
4645
|
|
|
4407
4646
|
def to_json(*args)
|
|
@@ -4409,68 +4648,68 @@ module Basecamp
|
|
|
4409
4648
|
end
|
|
4410
4649
|
end
|
|
4411
4650
|
|
|
4412
|
-
#
|
|
4413
|
-
class
|
|
4651
|
+
# Todoset
|
|
4652
|
+
class Todoset
|
|
4414
4653
|
include TypeHelpers
|
|
4415
|
-
attr_accessor :app_url, :
|
|
4654
|
+
attr_accessor :app_url, :bucket, :created_at, :creator, :id, :inherits_status, :name, :status, :title, :type, :updated_at, :url, :visible_to_clients, :app_todolists_url, :app_todos_url, :bookmark_url, :completed, :completed_loose_todos_count, :completed_ratio, :position, :todolists_count, :todolists_url, :todos_count, :todos_url
|
|
4416
4655
|
|
|
4417
4656
|
# @return [Array<Symbol>]
|
|
4418
4657
|
def self.required_fields
|
|
4419
|
-
%i[app_url
|
|
4658
|
+
%i[app_url bucket created_at creator id inherits_status name status title type updated_at url visible_to_clients].freeze
|
|
4420
4659
|
end
|
|
4421
4660
|
|
|
4422
4661
|
def initialize(data = {})
|
|
4423
4662
|
@app_url = data["app_url"]
|
|
4424
|
-
@bubble_up_url = data["bubble_up_url"]
|
|
4425
4663
|
@bucket = parse_type(data["bucket"], "TodoBucket")
|
|
4426
4664
|
@created_at = parse_datetime(data["created_at"])
|
|
4427
4665
|
@creator = parse_type(data["creator"], "Person")
|
|
4428
4666
|
@id = parse_integer(data["id"])
|
|
4429
4667
|
@inherits_status = parse_boolean(data["inherits_status"])
|
|
4430
4668
|
@name = data["name"]
|
|
4431
|
-
@parent = parse_type(data["parent"], "TodoParent")
|
|
4432
4669
|
@status = data["status"]
|
|
4433
4670
|
@title = data["title"]
|
|
4434
4671
|
@type = data["type"]
|
|
4435
4672
|
@updated_at = parse_datetime(data["updated_at"])
|
|
4436
4673
|
@url = data["url"]
|
|
4437
4674
|
@visible_to_clients = parse_boolean(data["visible_to_clients"])
|
|
4675
|
+
@app_todolists_url = data["app_todolists_url"]
|
|
4438
4676
|
@app_todos_url = data["app_todos_url"]
|
|
4439
4677
|
@bookmark_url = data["bookmark_url"]
|
|
4440
|
-
@comments_count = parse_integer(data["comments_count"])
|
|
4441
|
-
@comments_url = data["comments_url"]
|
|
4442
4678
|
@completed = parse_boolean(data["completed"])
|
|
4679
|
+
@completed_loose_todos_count = parse_integer(data["completed_loose_todos_count"])
|
|
4443
4680
|
@completed_ratio = data["completed_ratio"]
|
|
4444
4681
|
@position = parse_integer(data["position"])
|
|
4445
|
-
@
|
|
4682
|
+
@todolists_count = parse_integer(data["todolists_count"])
|
|
4683
|
+
@todolists_url = data["todolists_url"]
|
|
4684
|
+
@todos_count = parse_integer(data["todos_count"])
|
|
4446
4685
|
@todos_url = data["todos_url"]
|
|
4447
4686
|
end
|
|
4448
4687
|
|
|
4449
4688
|
def to_h
|
|
4450
4689
|
{
|
|
4451
4690
|
"app_url" => @app_url,
|
|
4452
|
-
"bubble_up_url" => @bubble_up_url,
|
|
4453
4691
|
"bucket" => @bucket,
|
|
4454
4692
|
"created_at" => @created_at,
|
|
4455
4693
|
"creator" => @creator,
|
|
4456
4694
|
"id" => @id,
|
|
4457
4695
|
"inherits_status" => @inherits_status,
|
|
4458
4696
|
"name" => @name,
|
|
4459
|
-
"parent" => @parent,
|
|
4460
4697
|
"status" => @status,
|
|
4461
4698
|
"title" => @title,
|
|
4462
4699
|
"type" => @type,
|
|
4463
4700
|
"updated_at" => @updated_at,
|
|
4464
4701
|
"url" => @url,
|
|
4465
4702
|
"visible_to_clients" => @visible_to_clients,
|
|
4703
|
+
"app_todolists_url" => @app_todolists_url,
|
|
4466
4704
|
"app_todos_url" => @app_todos_url,
|
|
4467
4705
|
"bookmark_url" => @bookmark_url,
|
|
4468
|
-
"comments_count" => @comments_count,
|
|
4469
|
-
"comments_url" => @comments_url,
|
|
4470
4706
|
"completed" => @completed,
|
|
4707
|
+
"completed_loose_todos_count" => @completed_loose_todos_count,
|
|
4471
4708
|
"completed_ratio" => @completed_ratio,
|
|
4472
4709
|
"position" => @position,
|
|
4473
|
-
"
|
|
4710
|
+
"todolists_count" => @todolists_count,
|
|
4711
|
+
"todolists_url" => @todolists_url,
|
|
4712
|
+
"todos_count" => @todos_count,
|
|
4474
4713
|
"todos_url" => @todos_url,
|
|
4475
4714
|
}.compact
|
|
4476
4715
|
end
|
|
@@ -4480,69 +4719,100 @@ module Basecamp
|
|
|
4480
4719
|
end
|
|
4481
4720
|
end
|
|
4482
4721
|
|
|
4483
|
-
#
|
|
4484
|
-
class
|
|
4722
|
+
# Tool
|
|
4723
|
+
class Tool
|
|
4485
4724
|
include TypeHelpers
|
|
4486
|
-
attr_accessor :
|
|
4725
|
+
attr_accessor :created_at, :enabled, :id, :name, :title, :updated_at, :app_url, :bucket, :position, :status, :url
|
|
4487
4726
|
|
|
4488
4727
|
# @return [Array<Symbol>]
|
|
4489
4728
|
def self.required_fields
|
|
4490
|
-
%i[
|
|
4729
|
+
%i[created_at enabled id name title updated_at].freeze
|
|
4491
4730
|
end
|
|
4492
4731
|
|
|
4493
4732
|
def initialize(data = {})
|
|
4494
|
-
@app_url = data["app_url"]
|
|
4495
|
-
@bucket = parse_type(data["bucket"], "TodoBucket")
|
|
4496
4733
|
@created_at = parse_datetime(data["created_at"])
|
|
4497
|
-
@
|
|
4734
|
+
@enabled = parse_boolean(data["enabled"])
|
|
4498
4735
|
@id = parse_integer(data["id"])
|
|
4499
|
-
@inherits_status = parse_boolean(data["inherits_status"])
|
|
4500
4736
|
@name = data["name"]
|
|
4501
|
-
@status = data["status"]
|
|
4502
4737
|
@title = data["title"]
|
|
4503
|
-
@type = data["type"]
|
|
4504
4738
|
@updated_at = parse_datetime(data["updated_at"])
|
|
4739
|
+
@app_url = data["app_url"]
|
|
4740
|
+
@bucket = parse_type(data["bucket"], "RecordingBucket")
|
|
4741
|
+
@position = parse_integer(data["position"])
|
|
4742
|
+
@status = data["status"]
|
|
4505
4743
|
@url = data["url"]
|
|
4506
|
-
|
|
4507
|
-
|
|
4508
|
-
|
|
4509
|
-
|
|
4744
|
+
end
|
|
4745
|
+
|
|
4746
|
+
def to_h
|
|
4747
|
+
{
|
|
4748
|
+
"created_at" => @created_at,
|
|
4749
|
+
"enabled" => @enabled,
|
|
4750
|
+
"id" => @id,
|
|
4751
|
+
"name" => @name,
|
|
4752
|
+
"title" => @title,
|
|
4753
|
+
"updated_at" => @updated_at,
|
|
4754
|
+
"app_url" => @app_url,
|
|
4755
|
+
"bucket" => @bucket,
|
|
4756
|
+
"position" => @position,
|
|
4757
|
+
"status" => @status,
|
|
4758
|
+
"url" => @url,
|
|
4759
|
+
}.compact
|
|
4760
|
+
end
|
|
4761
|
+
|
|
4762
|
+
def to_json(*args)
|
|
4763
|
+
to_h.to_json(*args)
|
|
4764
|
+
end
|
|
4765
|
+
end
|
|
4766
|
+
|
|
4767
|
+
# UpcomingAssignable
|
|
4768
|
+
class UpcomingAssignable
|
|
4769
|
+
include TypeHelpers
|
|
4770
|
+
attr_accessor :app_url, :assignees, :bucket, :comments_count, :completed, :completion_url, :content, :id, :parent, :repeating, :status, :type, :url, :visible_to_clients, :completion, :due_on, :starts_on
|
|
4771
|
+
|
|
4772
|
+
# @return [Array<Symbol>]
|
|
4773
|
+
def self.required_fields
|
|
4774
|
+
%i[app_url assignees bucket comments_count completed completion_url content id parent repeating status type url visible_to_clients].freeze
|
|
4775
|
+
end
|
|
4776
|
+
|
|
4777
|
+
def initialize(data = {})
|
|
4778
|
+
@app_url = data["app_url"]
|
|
4779
|
+
@assignees = parse_array(data["assignees"], "UpcomingSchedulePerson")
|
|
4780
|
+
@bucket = parse_type(data["bucket"], "UpcomingScheduleBucket")
|
|
4781
|
+
@comments_count = parse_integer(data["comments_count"])
|
|
4510
4782
|
@completed = parse_boolean(data["completed"])
|
|
4511
|
-
@
|
|
4512
|
-
@
|
|
4513
|
-
@
|
|
4514
|
-
@
|
|
4515
|
-
@
|
|
4516
|
-
@
|
|
4517
|
-
@
|
|
4783
|
+
@completion_url = data["completion_url"]
|
|
4784
|
+
@content = data["content"]
|
|
4785
|
+
@id = parse_integer(data["id"])
|
|
4786
|
+
@parent = parse_type(data["parent"], "UpcomingAssignableParent")
|
|
4787
|
+
@repeating = parse_boolean(data["repeating"])
|
|
4788
|
+
@status = data["status"]
|
|
4789
|
+
@type = data["type"]
|
|
4790
|
+
@url = data["url"]
|
|
4791
|
+
@visible_to_clients = parse_boolean(data["visible_to_clients"])
|
|
4792
|
+
@completion = parse_type(data["completion"], "UpcomingAssignableCompletion")
|
|
4793
|
+
@due_on = data["due_on"]
|
|
4794
|
+
@starts_on = data["starts_on"]
|
|
4518
4795
|
end
|
|
4519
4796
|
|
|
4520
4797
|
def to_h
|
|
4521
4798
|
{
|
|
4522
4799
|
"app_url" => @app_url,
|
|
4800
|
+
"assignees" => @assignees,
|
|
4523
4801
|
"bucket" => @bucket,
|
|
4524
|
-
"
|
|
4525
|
-
"
|
|
4802
|
+
"comments_count" => @comments_count,
|
|
4803
|
+
"completed" => @completed,
|
|
4804
|
+
"completion_url" => @completion_url,
|
|
4805
|
+
"content" => @content,
|
|
4526
4806
|
"id" => @id,
|
|
4527
|
-
"
|
|
4528
|
-
"
|
|
4807
|
+
"parent" => @parent,
|
|
4808
|
+
"repeating" => @repeating,
|
|
4529
4809
|
"status" => @status,
|
|
4530
|
-
"title" => @title,
|
|
4531
4810
|
"type" => @type,
|
|
4532
|
-
"updated_at" => @updated_at,
|
|
4533
4811
|
"url" => @url,
|
|
4534
4812
|
"visible_to_clients" => @visible_to_clients,
|
|
4535
|
-
"
|
|
4536
|
-
"
|
|
4537
|
-
"
|
|
4538
|
-
"completed" => @completed,
|
|
4539
|
-
"completed_loose_todos_count" => @completed_loose_todos_count,
|
|
4540
|
-
"completed_ratio" => @completed_ratio,
|
|
4541
|
-
"position" => @position,
|
|
4542
|
-
"todolists_count" => @todolists_count,
|
|
4543
|
-
"todolists_url" => @todolists_url,
|
|
4544
|
-
"todos_count" => @todos_count,
|
|
4545
|
-
"todos_url" => @todos_url,
|
|
4813
|
+
"completion" => @completion,
|
|
4814
|
+
"due_on" => @due_on,
|
|
4815
|
+
"starts_on" => @starts_on,
|
|
4546
4816
|
}.compact
|
|
4547
4817
|
end
|
|
4548
4818
|
|
|
@@ -4551,43 +4821,161 @@ module Basecamp
|
|
|
4551
4821
|
end
|
|
4552
4822
|
end
|
|
4553
4823
|
|
|
4554
|
-
#
|
|
4555
|
-
class
|
|
4824
|
+
# UpcomingAssignableCompletion
|
|
4825
|
+
class UpcomingAssignableCompletion
|
|
4556
4826
|
include TypeHelpers
|
|
4557
|
-
attr_accessor :created_at, :
|
|
4827
|
+
attr_accessor :created_at, :creator
|
|
4558
4828
|
|
|
4559
4829
|
# @return [Array<Symbol>]
|
|
4560
4830
|
def self.required_fields
|
|
4561
|
-
%i[created_at
|
|
4831
|
+
%i[created_at creator].freeze
|
|
4562
4832
|
end
|
|
4563
4833
|
|
|
4564
4834
|
def initialize(data = {})
|
|
4565
4835
|
@created_at = parse_datetime(data["created_at"])
|
|
4566
|
-
@
|
|
4836
|
+
@creator = parse_type(data["creator"], "UpcomingSchedulePerson")
|
|
4837
|
+
end
|
|
4838
|
+
|
|
4839
|
+
def to_h
|
|
4840
|
+
{
|
|
4841
|
+
"created_at" => @created_at,
|
|
4842
|
+
"creator" => @creator,
|
|
4843
|
+
}.compact
|
|
4844
|
+
end
|
|
4845
|
+
|
|
4846
|
+
def to_json(*args)
|
|
4847
|
+
to_h.to_json(*args)
|
|
4848
|
+
end
|
|
4849
|
+
end
|
|
4850
|
+
|
|
4851
|
+
# UpcomingAssignableParent
|
|
4852
|
+
class UpcomingAssignableParent
|
|
4853
|
+
include TypeHelpers
|
|
4854
|
+
attr_accessor :id, :title
|
|
4855
|
+
|
|
4856
|
+
# @return [Array<Symbol>]
|
|
4857
|
+
def self.required_fields
|
|
4858
|
+
%i[id title].freeze
|
|
4859
|
+
end
|
|
4860
|
+
|
|
4861
|
+
def initialize(data = {})
|
|
4567
4862
|
@id = parse_integer(data["id"])
|
|
4568
|
-
@name = data["name"]
|
|
4569
4863
|
@title = data["title"]
|
|
4570
|
-
|
|
4864
|
+
end
|
|
4865
|
+
|
|
4866
|
+
def to_h
|
|
4867
|
+
{
|
|
4868
|
+
"id" => @id,
|
|
4869
|
+
"title" => @title,
|
|
4870
|
+
}.compact
|
|
4871
|
+
end
|
|
4872
|
+
|
|
4873
|
+
def to_json(*args)
|
|
4874
|
+
to_h.to_json(*args)
|
|
4875
|
+
end
|
|
4876
|
+
end
|
|
4877
|
+
|
|
4878
|
+
# UpcomingScheduleBucket
|
|
4879
|
+
class UpcomingScheduleBucket
|
|
4880
|
+
include TypeHelpers
|
|
4881
|
+
attr_accessor :id, :name
|
|
4882
|
+
|
|
4883
|
+
# @return [Array<Symbol>]
|
|
4884
|
+
def self.required_fields
|
|
4885
|
+
%i[id name].freeze
|
|
4886
|
+
end
|
|
4887
|
+
|
|
4888
|
+
def initialize(data = {})
|
|
4889
|
+
@id = parse_integer(data["id"])
|
|
4890
|
+
@name = data["name"]
|
|
4891
|
+
end
|
|
4892
|
+
|
|
4893
|
+
def to_h
|
|
4894
|
+
{
|
|
4895
|
+
"id" => @id,
|
|
4896
|
+
"name" => @name,
|
|
4897
|
+
}.compact
|
|
4898
|
+
end
|
|
4899
|
+
|
|
4900
|
+
def to_json(*args)
|
|
4901
|
+
to_h.to_json(*args)
|
|
4902
|
+
end
|
|
4903
|
+
end
|
|
4904
|
+
|
|
4905
|
+
# UpcomingScheduleEntry
|
|
4906
|
+
class UpcomingScheduleEntry
|
|
4907
|
+
include TypeHelpers
|
|
4908
|
+
attr_accessor :all_day, :app_url, :bucket, :comments_count, :creator, :ends_at, :id, :participants, :recurring, :starts_at, :status, :summary, :type, :url, :visible_to_clients
|
|
4909
|
+
|
|
4910
|
+
# @return [Array<Symbol>]
|
|
4911
|
+
def self.required_fields
|
|
4912
|
+
%i[all_day app_url bucket comments_count creator ends_at id participants recurring starts_at status summary type url visible_to_clients].freeze
|
|
4913
|
+
end
|
|
4914
|
+
|
|
4915
|
+
def initialize(data = {})
|
|
4916
|
+
@all_day = parse_boolean(data["all_day"])
|
|
4571
4917
|
@app_url = data["app_url"]
|
|
4572
|
-
@bucket = parse_type(data["bucket"], "
|
|
4573
|
-
@
|
|
4918
|
+
@bucket = parse_type(data["bucket"], "UpcomingScheduleBucket")
|
|
4919
|
+
@comments_count = parse_integer(data["comments_count"])
|
|
4920
|
+
@creator = parse_type(data["creator"], "UpcomingSchedulePerson")
|
|
4921
|
+
@ends_at = data["ends_at"]
|
|
4922
|
+
@id = parse_integer(data["id"])
|
|
4923
|
+
@participants = parse_array(data["participants"], "UpcomingSchedulePerson")
|
|
4924
|
+
@recurring = parse_boolean(data["recurring"])
|
|
4925
|
+
@starts_at = data["starts_at"]
|
|
4574
4926
|
@status = data["status"]
|
|
4927
|
+
@summary = data["summary"]
|
|
4928
|
+
@type = data["type"]
|
|
4575
4929
|
@url = data["url"]
|
|
4930
|
+
@visible_to_clients = parse_boolean(data["visible_to_clients"])
|
|
4576
4931
|
end
|
|
4577
4932
|
|
|
4578
4933
|
def to_h
|
|
4579
4934
|
{
|
|
4580
|
-
"
|
|
4581
|
-
"enabled" => @enabled,
|
|
4582
|
-
"id" => @id,
|
|
4583
|
-
"name" => @name,
|
|
4584
|
-
"title" => @title,
|
|
4585
|
-
"updated_at" => @updated_at,
|
|
4935
|
+
"all_day" => @all_day,
|
|
4586
4936
|
"app_url" => @app_url,
|
|
4587
4937
|
"bucket" => @bucket,
|
|
4588
|
-
"
|
|
4938
|
+
"comments_count" => @comments_count,
|
|
4939
|
+
"creator" => @creator,
|
|
4940
|
+
"ends_at" => @ends_at,
|
|
4941
|
+
"id" => @id,
|
|
4942
|
+
"participants" => @participants,
|
|
4943
|
+
"recurring" => @recurring,
|
|
4944
|
+
"starts_at" => @starts_at,
|
|
4589
4945
|
"status" => @status,
|
|
4946
|
+
"summary" => @summary,
|
|
4947
|
+
"type" => @type,
|
|
4590
4948
|
"url" => @url,
|
|
4949
|
+
"visible_to_clients" => @visible_to_clients,
|
|
4950
|
+
}.compact
|
|
4951
|
+
end
|
|
4952
|
+
|
|
4953
|
+
def to_json(*args)
|
|
4954
|
+
to_h.to_json(*args)
|
|
4955
|
+
end
|
|
4956
|
+
end
|
|
4957
|
+
|
|
4958
|
+
# UpcomingSchedulePerson
|
|
4959
|
+
class UpcomingSchedulePerson
|
|
4960
|
+
include TypeHelpers
|
|
4961
|
+
attr_accessor :avatar_url, :id, :name
|
|
4962
|
+
|
|
4963
|
+
# @return [Array<Symbol>]
|
|
4964
|
+
def self.required_fields
|
|
4965
|
+
%i[avatar_url id name].freeze
|
|
4966
|
+
end
|
|
4967
|
+
|
|
4968
|
+
def initialize(data = {})
|
|
4969
|
+
@avatar_url = data["avatar_url"]
|
|
4970
|
+
@id = parse_integer(data["id"])
|
|
4971
|
+
@name = data["name"]
|
|
4972
|
+
end
|
|
4973
|
+
|
|
4974
|
+
def to_h
|
|
4975
|
+
{
|
|
4976
|
+
"avatar_url" => @avatar_url,
|
|
4977
|
+
"id" => @id,
|
|
4978
|
+
"name" => @name,
|
|
4591
4979
|
}.compact
|
|
4592
4980
|
end
|
|
4593
4981
|
|
|
@@ -4675,6 +5063,82 @@ module Basecamp
|
|
|
4675
5063
|
end
|
|
4676
5064
|
end
|
|
4677
5065
|
|
|
5066
|
+
# UploadVersion
|
|
5067
|
+
class UploadVersion
|
|
5068
|
+
include TypeHelpers
|
|
5069
|
+
attr_accessor :action, :created_at, :creator, :id, :recording_id, :boosts_count, :boosts_url, :details, :upload
|
|
5070
|
+
|
|
5071
|
+
# @return [Array<Symbol>]
|
|
5072
|
+
def self.required_fields
|
|
5073
|
+
%i[action created_at creator id recording_id].freeze
|
|
5074
|
+
end
|
|
5075
|
+
|
|
5076
|
+
def initialize(data = {})
|
|
5077
|
+
@action = data["action"]
|
|
5078
|
+
@created_at = parse_datetime(data["created_at"])
|
|
5079
|
+
@creator = parse_type(data["creator"], "Person")
|
|
5080
|
+
@id = parse_integer(data["id"])
|
|
5081
|
+
@recording_id = parse_integer(data["recording_id"])
|
|
5082
|
+
@boosts_count = parse_integer(data["boosts_count"])
|
|
5083
|
+
@boosts_url = data["boosts_url"]
|
|
5084
|
+
@details = parse_type(data["details"], "EventDetails")
|
|
5085
|
+
@upload = parse_type(data["upload"], "UploadVersionFile")
|
|
5086
|
+
end
|
|
5087
|
+
|
|
5088
|
+
def to_h
|
|
5089
|
+
{
|
|
5090
|
+
"action" => @action,
|
|
5091
|
+
"created_at" => @created_at,
|
|
5092
|
+
"creator" => @creator,
|
|
5093
|
+
"id" => @id,
|
|
5094
|
+
"recording_id" => @recording_id,
|
|
5095
|
+
"boosts_count" => @boosts_count,
|
|
5096
|
+
"boosts_url" => @boosts_url,
|
|
5097
|
+
"details" => @details,
|
|
5098
|
+
"upload" => @upload,
|
|
5099
|
+
}.compact
|
|
5100
|
+
end
|
|
5101
|
+
|
|
5102
|
+
def to_json(*args)
|
|
5103
|
+
to_h.to_json(*args)
|
|
5104
|
+
end
|
|
5105
|
+
end
|
|
5106
|
+
|
|
5107
|
+
# UploadVersionFile
|
|
5108
|
+
class UploadVersionFile
|
|
5109
|
+
include TypeHelpers
|
|
5110
|
+
attr_accessor :app_download_url, :current, :download_url, :filename, :byte_size, :content_type
|
|
5111
|
+
|
|
5112
|
+
# @return [Array<Symbol>]
|
|
5113
|
+
def self.required_fields
|
|
5114
|
+
%i[app_download_url current download_url filename].freeze
|
|
5115
|
+
end
|
|
5116
|
+
|
|
5117
|
+
def initialize(data = {})
|
|
5118
|
+
@app_download_url = data["app_download_url"]
|
|
5119
|
+
@current = parse_boolean(data["current"])
|
|
5120
|
+
@download_url = data["download_url"]
|
|
5121
|
+
@filename = data["filename"]
|
|
5122
|
+
@byte_size = parse_integer(data["byte_size"])
|
|
5123
|
+
@content_type = data["content_type"]
|
|
5124
|
+
end
|
|
5125
|
+
|
|
5126
|
+
def to_h
|
|
5127
|
+
{
|
|
5128
|
+
"app_download_url" => @app_download_url,
|
|
5129
|
+
"current" => @current,
|
|
5130
|
+
"download_url" => @download_url,
|
|
5131
|
+
"filename" => @filename,
|
|
5132
|
+
"byte_size" => @byte_size,
|
|
5133
|
+
"content_type" => @content_type,
|
|
5134
|
+
}.compact
|
|
5135
|
+
end
|
|
5136
|
+
|
|
5137
|
+
def to_json(*args)
|
|
5138
|
+
to_h.to_json(*args)
|
|
5139
|
+
end
|
|
5140
|
+
end
|
|
5141
|
+
|
|
4678
5142
|
# Vault
|
|
4679
5143
|
class Vault
|
|
4680
5144
|
include TypeHelpers
|