Skip to content

feat: Ruby SDK update for version 29.0.0 - #79

Open
ChiragAgg5k wants to merge 4 commits into
mainfrom
dev
Open

ChiragAgg5k wants to merge 4 commits into
mainfrom
dev

Conversation

@ChiragAgg5k

@ChiragAgg5k ChiragAgg5k commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

This PR contains updates to the SDK for version 29.0.0.

What's Changed

  • Breaking: requests send X-Appwrite-Response-Format: 2.5.0; responses follow the 2.5 shapes
  • Breaking: removed account.list_logs, users.list_logs and the Log/LogList models
  • Breaking: removed organization.create_key, list_keys, update_key and OrganizationKeyScopes; use project keys
  • Breaking: removed Client#set_dev_key, the DevKey model and Project#dev_keys
  • Breaking: removed BillingPlanGroup::STARTER
  • Breaking: removed DedicatedDatabaseSpecificationPricing and DedicatedDatabaseSpecificationList#pricing
  • Breaking: removed Block fields reason, project_name, region, organization_name, organization_id and billing_plan
  • Breaking: OAuth2 resource: params now take an array
  • Breaking: BackupRestoration#options is now a hash
  • Breaking: some response fields became optional, such as BillingPlan#usage and DedicatedDatabase#engine
  • Added: Topic helper to build MQTT topics for push messages
  • Updated: missing response fields fall back to their documented defaults in more models

@ChiragAgg5k ChiragAgg5k changed the title feat: Ruby SDK update for version 29.0.0 feat: SDK update for version 29.0.0 Oct 14, 2026
@hansi-codes

hansi-codes Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

🔵 Tier A · Mergeable after minor fixes

The new topic builder can emit an invalid MQTT filter for levels containing U+0000, so merge confidence depends on fixing this edge case.

Updates the Ruby SDK to version 29.0.0 for Appwrite 2.5, refreshing generated models and services and revising examples and package documentation for the updated API. It also adds a fluent MQTT topic builder with single- and multi-level wildcard support.

Latest changes: The newest commits add the Appwrite::Topic MQTT topic builder, expose it from the SDK entry point, and note the addition in the changelog.

Verdict New comments Fixed Still open
💬 Commented 1 0 2

Note

Not approving while a bug finding is open: Reject NUL bytes in topic levels

Finding Where
🟡 Reject NUL bytes in topic levels lib/appwrite/topic.rb:57
Fix with agent prompt
### Issue 1
lib/appwrite/topic.rb:57-62
**Reject NUL bytes in topic levels**

MQTT topic filters cannot contain U+0000, but this check accepts it, so `Topic.path(["foo\0bar"])` produces a filter that an MQTT client will reject. Please reject NUL bytes along with the other invalid level characters.

### Issue 2
docs/examples/domains/get-price.md:16
**Use Ruby's nil literal in this example**

`null` is not a Ruby literal, so running this example raises `NameError` instead of making the request. The same replacement appears in the changed `domains/list-prices.md`, `mongo/update.md`, `mysql/update.md`, and `postgresql/update.md` examples; use `nil` in each.

```suggestion
    period_years: nil, # optional
```

### Issue 3
docs/examples/graphql/mutation.md:15
**Escape the quotes in the GraphQL example string**

The inner double quotes around `Walter` terminate the Ruby string, making this example fail to parse. Using a single-quoted Ruby string for the GraphQL document keeps its argument quotes intact.

```suggestion
        "query" => 'mutation { accountUpdateName(name: "Walter") { name } }'
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
📂 Walkthrough · 7
File Change
CHANGELOG.md Adds the MQTT topic helper to the 29.0.0 release notes.
README.md, appwrite.gemspec Updates SDK release documentation, target server version, and gem metadata.
lib/appwrite.rb, lib/appwrite/topic.rb Exports the new fluent MQTT topic builder and adds topic-level validation and wildcard construction.
lib/appwrite/models/* Refreshes generated response models with updated schema fields and defaults.
lib/appwrite/services/*, lib/appwrite/enums/* Updates generated service contracts and enum definitions for Appwrite 2.5.
docs/examples/* Revises API examples for the updated parameters, payloads, and response shapes.
lib/appwrite/client.rb Updates SDK headers and request encoding, and handles absent files and upload thresholds.
⏳ Still open from earlier reviews · 2

Reviewed the commits since 5b5dd69 · Details · Comment @hansi-codes review to re-run, or mention @hansi-codes with a question.

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Tier A · See the inline comments. Summary

result = domains.get_price(
domain: 'example.com',
period_years: nil, # optional
period_years: null, # optional

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use Ruby's nil literal in this example

null is not a Ruby literal, so running this example raises NameError instead of making the request. The same replacement appears in the changed domains/list-prices.md, mongo/update.md, mysql/update.md, and postgresql/update.md examples; use nil in each.

Suggested change
period_years: null, # optional
period_years: nil, # optional
Prompt To Fix With AI
This is a comment left during a code review.
Path: docs/examples/domains/get-price.md
Line: 16

Comment:
**Use Ruby's nil literal in this example**

`null` is not a Ruby literal, so running this example raises `NameError` instead of making the request. The same replacement appears in the changed `domains/list-prices.md`, `mongo/update.md`, `mysql/update.md`, and `postgresql/update.md` examples; use `nil` in each.

```suggestion
    period_years: nil, # optional
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

🟡 Minor · documentation · Reply if this doesn't apply.

result = graphql.mutation(
query: {}
query: {
"query" => "mutation { accountUpdateName(name: "Walter") { name } }"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Escape the quotes in the GraphQL example string

The inner double quotes around Walter terminate the Ruby string, making this example fail to parse. Using a single-quoted Ruby string for the GraphQL document keeps its argument quotes intact.

Suggested change
"query" => "mutation { accountUpdateName(name: "Walter") { name } }"
"query" => 'mutation { accountUpdateName(name: "Walter") { name } }'
Prompt To Fix With AI
This is a comment left during a code review.
Path: docs/examples/graphql/mutation.md
Line: 15

Comment:
**Escape the quotes in the GraphQL example string**

The inner double quotes around `Walter` terminate the Ruby string, making this example fail to parse. Using a single-quoted Ruby string for the GraphQL document keeps its argument quotes intact.

```suggestion
        "query" => 'mutation { accountUpdateName(name: "Walter") { name } }'
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

🟡 Minor · documentation · Reply if this doesn't apply.

@ChiragAgg5k ChiragAgg5k changed the title feat: SDK update for version 29.0.0 feat: Ruby SDK update for version 29.0.0 Oct 14, 2026

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Tier A · See the inline comments. Summary

Comment thread lib/appwrite/topic.rb
Comment on lines +57 to +62
levels.each_with_index do |level, index|
unless level.is_a?(String)
type = level.nil? ? 'null' : level.class.name
raise ArgumentError, "level at index #{index} must be a string, got #{type}"
end
raise ArgumentError, "empty level at index #{index}" if level.empty?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reject NUL bytes in topic levels

MQTT topic filters cannot contain U+0000, but this check accepts it, so Topic.path(["foo\0bar"]) produces a filter that an MQTT client will reject. Please reject NUL bytes along with the other invalid level characters.

Prompt To Fix With AI
This is a comment left during a code review.
Path: lib/appwrite/topic.rb
Line: 57-62

Comment:
**Reject NUL bytes in topic levels**

MQTT topic filters cannot contain U+0000, but this check accepts it, so `Topic.path(["foo\0bar"])` produces a filter that an MQTT client will reject. Please reject NUL bytes along with the other invalid level characters.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

🟡 Minor · bug · Reply if this doesn't apply.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant