basecamp-sdk 0.32.0 → 0.34.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: 8790f78e6ea6aaf013903c69ea6283e24803690ae9f70e5c9563101508aa2795
4
- data.tar.gz: 2ccfd7c3355aa84fcb55a81703daf8677f769da32f428115a3539f817dfd4677
3
+ metadata.gz: 25bd52e24df8081b95a01db3a3a77056d0a8a65e690e0873650c594c90a593fb
4
+ data.tar.gz: 41dca454861e8d7be217a4bdaeae17930b09f44f508e5c6928dd169412e4bfa3
5
5
  SHA512:
6
- metadata.gz: f5ede4a0e1833acd898a94557f0ac801368f527e7f08d5c4a1d3eef2764f7f5c49f68cb3690ee0038366442158ce76b2caee70b95d42a52f196b2046b8db3786
7
- data.tar.gz: 00eb0e2f1137ae986b9fa597d021740e7abf8f6bd211d557db67938dca06f8ab21e25ecd35867736a89e40eb1b62edfa5eda1fbc8e13e2dfed4fc0cff4717af9
6
+ metadata.gz: c2cf1ae375b942bfdd03d9e8df6817bbbcf0e6929e2118817f6ddbbc6485d5bfe60705887be1f7058ca355db31bd93629c29f48ae144ca7a610664e1b5589d83
7
+ data.tar.gz: fad0518aa12d9702193fc71aa538b163cbec5d0f0664d0a7b1e2f69a0933e1c43a4f5bede23e1e9e05397ad2d385e599fd55f70fd2c0fffcbc2edd4705bd200a
@@ -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-10-27T22:05:31Z",
4
+ "generated": "2026-10-30T06:06:06Z",
5
5
  "operations": {
6
6
  "GetAccount": {
7
7
  "retry": {
@@ -3613,6 +3613,44 @@
3613
3613
  "natural": true
3614
3614
  }
3615
3615
  },
3616
+ "ListHillChartVersions": {
3617
+ "retry": {
3618
+ "maxAttempts": 3,
3619
+ "baseDelayMs": 1000,
3620
+ "backoff": "exponential",
3621
+ "retryOn": [
3622
+ 429,
3623
+ 503
3624
+ ]
3625
+ },
3626
+ "pagination": {
3627
+ "style": "link",
3628
+ "totalCountHeader": "X-Total-Count",
3629
+ "maxPageSize": 50
3630
+ }
3631
+ },
3632
+ "CreateHillChartVersion": {
3633
+ "retry": {
3634
+ "maxAttempts": 2,
3635
+ "baseDelayMs": 1000,
3636
+ "backoff": "exponential",
3637
+ "retryOn": [
3638
+ 429,
3639
+ 503
3640
+ ]
3641
+ }
3642
+ },
3643
+ "GetHillChartVersion": {
3644
+ "retry": {
3645
+ "maxAttempts": 3,
3646
+ "baseDelayMs": 1000,
3647
+ "backoff": "exponential",
3648
+ "retryOn": [
3649
+ 429,
3650
+ 503
3651
+ ]
3652
+ }
3653
+ },
3616
3654
  "ListTodolists": {
3617
3655
  "retry": {
3618
3656
  "maxAttempts": 3,
@@ -3890,6 +3928,9 @@
3890
3928
  "CreateGoogleDocument": [
3891
3929
  "creator"
3892
3930
  ],
3931
+ "CreateHillChartVersion": [
3932
+ "creator"
3933
+ ],
3893
3934
  "CreateMessage": [
3894
3935
  "creator"
3895
3936
  ],
@@ -4217,6 +4258,9 @@
4217
4258
  "GetGoogleDocument": [
4218
4259
  "creator"
4219
4260
  ],
4261
+ "GetHillChartVersion": [
4262
+ "creator"
4263
+ ],
4220
4264
  "GetInbox": [
4221
4265
  "creator"
4222
4266
  ],
@@ -4453,6 +4497,9 @@
4453
4497
  "ListGauges": [
4454
4498
  "[].creator"
4455
4499
  ],
4500
+ "ListHillChartVersions": [
4501
+ "[].creator"
4502
+ ],
4456
4503
  "ListMessages": [
4457
4504
  "[].creator"
4458
4505
  ],
@@ -26,6 +26,42 @@ module Basecamp
26
26
  http_put("/todosets/#{todoset_id}/hills/settings.json", body: compact_params(tracked: tracked, untracked: untracked)).json(operation: "UpdateHillChartSettings")
27
27
  end
28
28
  end
29
+
30
+ # List the progress updates on a todoset's hill chart, newest first.
31
+ # @param todoset_id [Integer] todoset id ID
32
+ # @param page [Integer, nil] Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8.
33
+ # @param max_items [Integer, nil] cap on items yielded across pages; nil or non-positive means no cap
34
+ # @return [ListEnumerator<Hash>] lazily paginated results (#meta carries pagination metadata)
35
+ def list_versions(todoset_id:, page: nil, max_items: nil)
36
+ wrap_paginated(service: "hillcharts", operation: "list_versions", is_mutation: false, resource_id: todoset_id) do
37
+ params = compact_query_params(page: page)
38
+ paginate("/todosets/#{todoset_id}/hills/versions.json", params: params, operation: "ListHillChartVersions", max_items: max_items)
39
+ end
40
+ end
41
+
42
+ # Post a progress update on a todoset's hill chart.
43
+ # @param todoset_id [Integer] todoset id ID
44
+ # @param description [String, nil] A note about the update, as rich text (HTML).
45
+ # @param dots [Array, nil] Todolists to move, each with its ID and new position. Todolists left
46
+ # out keep their current position.
47
+ # @param subscriptions [Array, nil] People to notify of the update and subscribe to it. If absent, nobody
48
+ # else is notified.
49
+ # @return [Hash] response data
50
+ def create_version(todoset_id:, description: nil, dots: nil, subscriptions: nil)
51
+ with_operation(service: "hillcharts", operation: "create_version", is_mutation: true, resource_id: todoset_id) do
52
+ http_post("/todosets/#{todoset_id}/hills/versions.json", body: compact_params(description: description, dots: dots, subscriptions: subscriptions)).json(operation: "CreateHillChartVersion")
53
+ end
54
+ end
55
+
56
+ # Get one progress update from a todoset's hill chart
57
+ # @param todoset_id [Integer] todoset id ID
58
+ # @param version_id [Integer] version id ID
59
+ # @return [Hash] response data
60
+ def get_version(todoset_id:, version_id:)
61
+ with_operation(service: "hillcharts", operation: "get_version", is_mutation: false, resource_id: version_id) do
62
+ http_get("/todosets/#{todoset_id}/hills/versions/#{version_id}", operation: "GetHillChartVersion").json(operation: "GetHillChartVersion")
63
+ end
64
+ end
29
65
  end
30
66
  end
31
67
  end
@@ -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-10-27T22:05:31Z
4
+ # Generated: 2026-10-30T06:06:06Z
5
5
 
6
6
  require "json"
7
7
  require "time"
@@ -2512,7 +2512,7 @@ module Basecamp
2512
2512
  # HillChart
2513
2513
  class HillChart
2514
2514
  include TypeHelpers
2515
- attr_accessor :enabled, :stale, :app_update_url, :app_versions_url, :dots, :updated_at
2515
+ attr_accessor :enabled, :stale, :app_update_url, :app_versions_url, :dots, :updated_at, :versions_url
2516
2516
 
2517
2517
  # @return [Array<Symbol>]
2518
2518
  def self.required_fields
@@ -2526,6 +2526,7 @@ module Basecamp
2526
2526
  @app_versions_url = data["app_versions_url"]
2527
2527
  @dots = parse_array(data["dots"], "HillChartDot")
2528
2528
  @updated_at = parse_datetime(data["updated_at"])
2529
+ @versions_url = data["versions_url"]
2529
2530
  end
2530
2531
 
2531
2532
  def to_h
@@ -2536,6 +2537,7 @@ module Basecamp
2536
2537
  "app_versions_url" => @app_versions_url,
2537
2538
  "dots" => @dots,
2538
2539
  "updated_at" => @updated_at,
2540
+ "versions_url" => @versions_url,
2539
2541
  }.compact
2540
2542
  end
2541
2543
 
@@ -2579,6 +2581,135 @@ module Basecamp
2579
2581
  end
2580
2582
  end
2581
2583
 
2584
+ # HillChartDotPosition
2585
+ class HillChartDotPosition
2586
+ include TypeHelpers
2587
+ attr_accessor :id, :position
2588
+
2589
+ # @return [Array<Symbol>]
2590
+ def self.required_fields
2591
+ %i[id position].freeze
2592
+ end
2593
+
2594
+ def initialize(data = {})
2595
+ @id = parse_integer(data["id"])
2596
+ @position = parse_integer(data["position"])
2597
+ end
2598
+
2599
+ def to_h
2600
+ {
2601
+ "id" => @id,
2602
+ "position" => @position,
2603
+ }.compact
2604
+ end
2605
+
2606
+ def to_json(*args)
2607
+ to_h.to_json(*args)
2608
+ end
2609
+ end
2610
+
2611
+ # HillChartVersion
2612
+ class HillChartVersion
2613
+ include TypeHelpers
2614
+ attr_accessor :app_url, :bucket, :created_at, :creator, :description_attachments, :dots, :id, :inherits_status, :parent, :status, :title, :type, :updated_at, :url, :visible_to_clients, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :description, :subscription_url
2615
+
2616
+ # @return [Array<Symbol>]
2617
+ def self.required_fields
2618
+ %i[app_url bucket created_at creator description_attachments dots id inherits_status parent status title type updated_at url visible_to_clients].freeze
2619
+ end
2620
+
2621
+ def initialize(data = {})
2622
+ @app_url = data["app_url"]
2623
+ @bucket = parse_type(data["bucket"], "TodoBucket")
2624
+ @created_at = parse_datetime(data["created_at"])
2625
+ @creator = parse_type(data["creator"], "Person")
2626
+ @description_attachments = parse_array(data["description_attachments"], "RichTextAttachment")
2627
+ @dots = parse_array(data["dots"], "HillChartVersionDot")
2628
+ @id = parse_integer(data["id"])
2629
+ @inherits_status = parse_boolean(data["inherits_status"])
2630
+ @parent = parse_type(data["parent"], "RecordingParent")
2631
+ @status = data["status"]
2632
+ @title = data["title"]
2633
+ @type = data["type"]
2634
+ @updated_at = parse_datetime(data["updated_at"])
2635
+ @url = data["url"]
2636
+ @visible_to_clients = parse_boolean(data["visible_to_clients"])
2637
+ @bookmark_url = data["bookmark_url"]
2638
+ @boosts_count = parse_integer(data["boosts_count"])
2639
+ @boosts_url = data["boosts_url"]
2640
+ @comments_count = parse_integer(data["comments_count"])
2641
+ @comments_url = data["comments_url"]
2642
+ @description = data["description"]
2643
+ @subscription_url = data["subscription_url"]
2644
+ end
2645
+
2646
+ def to_h
2647
+ {
2648
+ "app_url" => @app_url,
2649
+ "bucket" => @bucket,
2650
+ "created_at" => @created_at,
2651
+ "creator" => @creator,
2652
+ "description_attachments" => @description_attachments,
2653
+ "dots" => @dots,
2654
+ "id" => @id,
2655
+ "inherits_status" => @inherits_status,
2656
+ "parent" => @parent,
2657
+ "status" => @status,
2658
+ "title" => @title,
2659
+ "type" => @type,
2660
+ "updated_at" => @updated_at,
2661
+ "url" => @url,
2662
+ "visible_to_clients" => @visible_to_clients,
2663
+ "bookmark_url" => @bookmark_url,
2664
+ "boosts_count" => @boosts_count,
2665
+ "boosts_url" => @boosts_url,
2666
+ "comments_count" => @comments_count,
2667
+ "comments_url" => @comments_url,
2668
+ "description" => @description,
2669
+ "subscription_url" => @subscription_url,
2670
+ }.compact
2671
+ end
2672
+
2673
+ def to_json(*args)
2674
+ to_h.to_json(*args)
2675
+ end
2676
+ end
2677
+
2678
+ # HillChartVersionDot
2679
+ class HillChartVersionDot
2680
+ include TypeHelpers
2681
+ attr_accessor :color, :label, :position, :app_url, :id, :url
2682
+
2683
+ # @return [Array<Symbol>]
2684
+ def self.required_fields
2685
+ %i[color label position].freeze
2686
+ end
2687
+
2688
+ def initialize(data = {})
2689
+ @color = data["color"]
2690
+ @label = data["label"]
2691
+ @position = parse_integer(data["position"])
2692
+ @app_url = data["app_url"]
2693
+ @id = data["id"]
2694
+ @url = data["url"]
2695
+ end
2696
+
2697
+ def to_h
2698
+ {
2699
+ "color" => @color,
2700
+ "label" => @label,
2701
+ "position" => @position,
2702
+ "app_url" => @app_url,
2703
+ "id" => @id,
2704
+ "url" => @url,
2705
+ }.compact
2706
+ end
2707
+
2708
+ def to_json(*args)
2709
+ to_h.to_json(*args)
2710
+ end
2711
+ end
2712
+
2582
2713
  # Inbox
2583
2714
  class Inbox
2584
2715
  include TypeHelpers
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Basecamp
4
- VERSION = "0.32.0"
5
- API_VERSION = "2026-10-27"
4
+ VERSION = "0.34.0"
5
+ API_VERSION = "2026-10-30"
6
6
  end
@@ -161,7 +161,7 @@ class ServiceGenerator
161
161
  'Todos' => %w[ListTodos CreateTodo CreateTodosetTodo GetTodo ReplaceTodo CompleteTodo UncompleteTodo],
162
162
  'Todolists' => %w[GetTodolistOrGroup UpdateTodolistOrGroup ListTodolists CreateTodolist RepositionTodolist],
163
163
  'Todosets' => %w[GetTodoset],
164
- 'HillCharts' => %w[GetHillChart UpdateHillChartSettings],
164
+ 'HillCharts' => %w[GetHillChart UpdateHillChartSettings ListHillChartVersions GetHillChartVersion CreateHillChartVersion],
165
165
  'TodolistGroups' => %w[ListTodolistGroups CreateTodolistGroup RepositionTodolistGroup]
166
166
  },
167
167
  'Untagged' => {
@@ -300,7 +300,10 @@ class ServiceGenerator
300
300
  'ListScheduleEntries' => 'list_entries',
301
301
  'GetScheduleEntryOccurrence' => 'get_entry_occurrence',
302
302
  'GetHillChart' => 'get',
303
- 'UpdateHillChartSettings' => 'update_settings'
303
+ 'UpdateHillChartSettings' => 'update_settings',
304
+ 'ListHillChartVersions' => 'list_versions',
305
+ 'GetHillChartVersion' => 'get_version',
306
+ 'CreateHillChartVersion' => 'create_version'
304
307
  }.freeze
305
308
 
306
309
  # Verb patterns for extracting method names
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: basecamp-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.32.0
4
+ version: 0.34.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Basecamp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-10-28 00:00:00.000000000 Z
11
+ date: 2026-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday