From e0841147deb69cd9b13fc918c686945f2d6ba632 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 Feb 2026 10:28:32 +0000 Subject: [PATCH 1/4] regenerate --- CHANGELOG.md | 23 --- README.md | 2 +- appwrite.gemspec | 2 +- .../get-event.md} | 6 +- .../list-events.md} | 6 +- .../databases/create-longtext-attribute.md | 3 +- .../databases/create-mediumtext-attribute.md | 3 +- .../databases/create-text-attribute.md | 3 +- .../databases/create-varchar-attribute.md | 3 +- .../get-queue-billing-project-aggregation.md | 16 -- .../get-queue-billing-team-aggregation.md | 16 -- .../health/get-queue-priority-builds.md | 16 -- .../tablesdb/create-longtext-column.md | 3 +- .../tablesdb/create-mediumtext-column.md | 3 +- docs/examples/tablesdb/create-text-column.md | 3 +- .../tablesdb/create-varchar-column.md | 3 +- lib/appwrite.rb | 3 + lib/appwrite/client.rb | 2 +- lib/appwrite/enums/build_runtime.rb | 20 ++ lib/appwrite/enums/runtime.rb | 20 ++ lib/appwrite/enums/scopes.rb | 3 + lib/appwrite/models/activity_event.rb | 182 ++++++++++++++++++ lib/appwrite/models/activity_event_list.rb | 32 +++ lib/appwrite/models/attribute_longtext.rb | 11 +- lib/appwrite/models/attribute_mediumtext.rb | 11 +- lib/appwrite/models/attribute_text.rb | 11 +- lib/appwrite/models/attribute_varchar.rb | 11 +- lib/appwrite/models/column_longtext.rb | 11 +- lib/appwrite/models/column_mediumtext.rb | 11 +- lib/appwrite/models/column_text.rb | 11 +- lib/appwrite/models/column_varchar.rb | 11 +- lib/appwrite/query.rb | 18 ++ lib/appwrite/services/activities.rb | 64 ++++++ lib/appwrite/services/databases.rb | 16 +- lib/appwrite/services/tables_db.rb | 16 +- 35 files changed, 455 insertions(+), 120 deletions(-) rename docs/examples/{health/get-queue-threats.md => activities/get-event.md} (73%) rename docs/examples/{health/get-queue-region-manager.md => activities/list-events.md} (72%) delete mode 100644 docs/examples/health/get-queue-billing-project-aggregation.md delete mode 100644 docs/examples/health/get-queue-billing-team-aggregation.md delete mode 100644 docs/examples/health/get-queue-priority-builds.md create mode 100644 lib/appwrite/models/activity_event.rb create mode 100644 lib/appwrite/models/activity_event_list.rb create mode 100644 lib/appwrite/services/activities.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index ee6d263..c4b0df5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,28 +1,5 @@ # Change Log -## 21.1.0 - -* Fix doc examples with proper formatting -* Add support for the new `Backups` service - -## 21.0.0 - -* Add array-based enum parameters (e.g., `permissions: Array`). -* Breaking change: `Output` enum has been removed; use `ImageFormat` instead. -* Add `getQueueAudits` support to `Health` service. -* Add longtext/mediumtext/text/varchar attribute and column helpers to `Databases` and `TablesDB` services. - -## 20.1.0 - -* Added ability to create columns and indexes synchronously while creating a table - -## 20.0.0 - -* Rename `VCSDeploymentType` enum to `VCSReferenceType` -* Change `create_template_deployment` method signature: replace `version` parameter with `type` (TemplateReferenceType) and `reference` parameters -* Add `get_screenshot` method to `Avatars` service -* Add `Theme`, `Timezone` and `Output` enums - ## 19.3.0 * Add `total` parameter to list queries allowing skipping counting rows in a table for improved performance diff --git a/README.md b/README.md index 18ece0d..dcf2d09 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Twitter Account](https://img.shields.io/twitter/follow/appwrite?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite) [![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord) -**This SDK is compatible with Appwrite server version latest. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-ruby/releases).** +**This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-ruby/releases).** Appwrite is an open-source backend as a service server that abstracts and simplifies complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the Ruby SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) diff --git a/appwrite.gemspec b/appwrite.gemspec index d4f2c87..98657b3 100644 --- a/appwrite.gemspec +++ b/appwrite.gemspec @@ -1,7 +1,7 @@ Gem::Specification.new do |spec| spec.name = 'appwrite' - spec.version = '21.1.0' + spec.version = '21.0.1' spec.license = 'BSD-3-Clause' spec.summary = 'Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API' spec.author = 'Appwrite Team' diff --git a/docs/examples/health/get-queue-threats.md b/docs/examples/activities/get-event.md similarity index 73% rename from docs/examples/health/get-queue-threats.md rename to docs/examples/activities/get-event.md index 825ea5f..b2cf059 100644 --- a/docs/examples/health/get-queue-threats.md +++ b/docs/examples/activities/get-event.md @@ -8,9 +8,9 @@ client = Client.new .set_project('') # Your project ID .set_key('') # Your secret API key -health = Health.new(client) +activities = Activities.new(client) -result = health.get_queue_threats( - threshold: null # optional +result = activities.get_event( + event_id: '' ) ``` diff --git a/docs/examples/health/get-queue-region-manager.md b/docs/examples/activities/list-events.md similarity index 72% rename from docs/examples/health/get-queue-region-manager.md rename to docs/examples/activities/list-events.md index d30b710..1d7fddd 100644 --- a/docs/examples/health/get-queue-region-manager.md +++ b/docs/examples/activities/list-events.md @@ -8,9 +8,9 @@ client = Client.new .set_project('') # Your project ID .set_key('') # Your secret API key -health = Health.new(client) +activities = Activities.new(client) -result = health.get_queue_region_manager( - threshold: null # optional +result = activities.list_events( + queries: '' # optional ) ``` diff --git a/docs/examples/databases/create-longtext-attribute.md b/docs/examples/databases/create-longtext-attribute.md index f6ebd0a..b7a8f4d 100644 --- a/docs/examples/databases/create-longtext-attribute.md +++ b/docs/examples/databases/create-longtext-attribute.md @@ -16,6 +16,7 @@ result = databases.create_longtext_attribute( key: '', required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/docs/examples/databases/create-mediumtext-attribute.md b/docs/examples/databases/create-mediumtext-attribute.md index d39db15..5806ff6 100644 --- a/docs/examples/databases/create-mediumtext-attribute.md +++ b/docs/examples/databases/create-mediumtext-attribute.md @@ -16,6 +16,7 @@ result = databases.create_mediumtext_attribute( key: '', required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/docs/examples/databases/create-text-attribute.md b/docs/examples/databases/create-text-attribute.md index 77a5f92..bc3f4fb 100644 --- a/docs/examples/databases/create-text-attribute.md +++ b/docs/examples/databases/create-text-attribute.md @@ -16,6 +16,7 @@ result = databases.create_text_attribute( key: '', required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/docs/examples/databases/create-varchar-attribute.md b/docs/examples/databases/create-varchar-attribute.md index 63b50ab..fe56f85 100644 --- a/docs/examples/databases/create-varchar-attribute.md +++ b/docs/examples/databases/create-varchar-attribute.md @@ -17,6 +17,7 @@ result = databases.create_varchar_attribute( size: 1, required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/docs/examples/health/get-queue-billing-project-aggregation.md b/docs/examples/health/get-queue-billing-project-aggregation.md deleted file mode 100644 index acd4962..0000000 --- a/docs/examples/health/get-queue-billing-project-aggregation.md +++ /dev/null @@ -1,16 +0,0 @@ -```ruby -require 'appwrite' - -include Appwrite - -client = Client.new - .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint - .set_project('') # Your project ID - .set_key('') # Your secret API key - -health = Health.new(client) - -result = health.get_queue_billing_project_aggregation( - threshold: null # optional -) -``` diff --git a/docs/examples/health/get-queue-billing-team-aggregation.md b/docs/examples/health/get-queue-billing-team-aggregation.md deleted file mode 100644 index 46c2c8b..0000000 --- a/docs/examples/health/get-queue-billing-team-aggregation.md +++ /dev/null @@ -1,16 +0,0 @@ -```ruby -require 'appwrite' - -include Appwrite - -client = Client.new - .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint - .set_project('') # Your project ID - .set_key('') # Your secret API key - -health = Health.new(client) - -result = health.get_queue_billing_team_aggregation( - threshold: null # optional -) -``` diff --git a/docs/examples/health/get-queue-priority-builds.md b/docs/examples/health/get-queue-priority-builds.md deleted file mode 100644 index 92dacf3..0000000 --- a/docs/examples/health/get-queue-priority-builds.md +++ /dev/null @@ -1,16 +0,0 @@ -```ruby -require 'appwrite' - -include Appwrite - -client = Client.new - .set_endpoint('https://.cloud.appwrite.io/v1') # Your API Endpoint - .set_project('') # Your project ID - .set_key('') # Your secret API key - -health = Health.new(client) - -result = health.get_queue_priority_builds( - threshold: null # optional -) -``` diff --git a/docs/examples/tablesdb/create-longtext-column.md b/docs/examples/tablesdb/create-longtext-column.md index 4d0eca6..0dac5eb 100644 --- a/docs/examples/tablesdb/create-longtext-column.md +++ b/docs/examples/tablesdb/create-longtext-column.md @@ -16,6 +16,7 @@ result = tables_db.create_longtext_column( key: '', required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/docs/examples/tablesdb/create-mediumtext-column.md b/docs/examples/tablesdb/create-mediumtext-column.md index 8902159..d7fdd04 100644 --- a/docs/examples/tablesdb/create-mediumtext-column.md +++ b/docs/examples/tablesdb/create-mediumtext-column.md @@ -16,6 +16,7 @@ result = tables_db.create_mediumtext_column( key: '', required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/docs/examples/tablesdb/create-text-column.md b/docs/examples/tablesdb/create-text-column.md index adc935e..e1133b1 100644 --- a/docs/examples/tablesdb/create-text-column.md +++ b/docs/examples/tablesdb/create-text-column.md @@ -16,6 +16,7 @@ result = tables_db.create_text_column( key: '', required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/docs/examples/tablesdb/create-varchar-column.md b/docs/examples/tablesdb/create-varchar-column.md index 033fb51..04fc6c6 100644 --- a/docs/examples/tablesdb/create-varchar-column.md +++ b/docs/examples/tablesdb/create-varchar-column.md @@ -17,6 +17,7 @@ result = tables_db.create_varchar_column( size: 1, required: false, default: '', # optional - array: false # optional + array: false, # optional + encrypt: false # optional ) ``` diff --git a/lib/appwrite.rb b/lib/appwrite.rb index 5fdcb81..8bc6cfd 100644 --- a/lib/appwrite.rb +++ b/lib/appwrite.rb @@ -144,9 +144,11 @@ require_relative 'appwrite/models/transaction' require_relative 'appwrite/models/subscriber' require_relative 'appwrite/models/target' +require_relative 'appwrite/models/activity_event' require_relative 'appwrite/models/backup_archive' require_relative 'appwrite/models/backup_policy' require_relative 'appwrite/models/backup_restoration' +require_relative 'appwrite/models/activity_event_list' require_relative 'appwrite/models/backup_archive_list' require_relative 'appwrite/models/backup_policy_list' require_relative 'appwrite/models/backup_restoration_list' @@ -194,6 +196,7 @@ require_relative 'appwrite/enums/message_status' require_relative 'appwrite/services/account' +require_relative 'appwrite/services/activities' require_relative 'appwrite/services/avatars' require_relative 'appwrite/services/backups' require_relative 'appwrite/services/databases' diff --git a/lib/appwrite/client.rb b/lib/appwrite/client.rb index 0cd7d62..209791c 100644 --- a/lib/appwrite/client.rb +++ b/lib/appwrite/client.rb @@ -15,7 +15,7 @@ def initialize 'x-sdk-name'=> 'Ruby', 'x-sdk-platform'=> 'server', 'x-sdk-language'=> 'ruby', - 'x-sdk-version'=> '21.1.0', + 'x-sdk-version'=> '21.0.1', 'X-Appwrite-Response-Format' => '1.8.0' } @endpoint = 'https://cloud.appwrite.io/v1' diff --git a/lib/appwrite/enums/build_runtime.rb b/lib/appwrite/enums/build_runtime.rb index 73dc435..4ac437c 100644 --- a/lib/appwrite/enums/build_runtime.rb +++ b/lib/appwrite/enums/build_runtime.rb @@ -8,24 +8,35 @@ module BuildRuntime NODE_20_0 = 'node-20.0' NODE_21_0 = 'node-21.0' NODE_22 = 'node-22' + NODE_23 = 'node-23' + NODE_24 = 'node-24' + NODE_25 = 'node-25' PHP_8_0 = 'php-8.0' PHP_8_1 = 'php-8.1' PHP_8_2 = 'php-8.2' PHP_8_3 = 'php-8.3' + PHP_8_4 = 'php-8.4' RUBY_3_0 = 'ruby-3.0' RUBY_3_1 = 'ruby-3.1' RUBY_3_2 = 'ruby-3.2' RUBY_3_3 = 'ruby-3.3' + RUBY_3_4 = 'ruby-3.4' + RUBY_4_0 = 'ruby-4.0' PYTHON_3_8 = 'python-3.8' PYTHON_3_9 = 'python-3.9' PYTHON_3_10 = 'python-3.10' PYTHON_3_11 = 'python-3.11' PYTHON_3_12 = 'python-3.12' + PYTHON_3_13 = 'python-3.13' + PYTHON_3_14 = 'python-3.14' PYTHON_ML_3_11 = 'python-ml-3.11' PYTHON_ML_3_12 = 'python-ml-3.12' + PYTHON_ML_3_13 = 'python-ml-3.13' DENO_1_40 = 'deno-1.40' DENO_1_46 = 'deno-1.46' DENO_2_0 = 'deno-2.0' + DENO_2_5 = 'deno-2.5' + DENO_2_6 = 'deno-2.6' DART_2_15 = 'dart-2.15' DART_2_16 = 'dart-2.16' DART_2_17 = 'dart-2.17' @@ -41,25 +52,34 @@ module BuildRuntime DOTNET_6_0 = 'dotnet-6.0' DOTNET_7_0 = 'dotnet-7.0' DOTNET_8_0 = 'dotnet-8.0' + DOTNET_10 = 'dotnet-10' JAVA_8_0 = 'java-8.0' JAVA_11_0 = 'java-11.0' JAVA_17_0 = 'java-17.0' JAVA_18_0 = 'java-18.0' JAVA_21_0 = 'java-21.0' JAVA_22 = 'java-22' + JAVA_25 = 'java-25' SWIFT_5_5 = 'swift-5.5' SWIFT_5_8 = 'swift-5.8' SWIFT_5_9 = 'swift-5.9' SWIFT_5_10 = 'swift-5.10' + SWIFT_6_2 = 'swift-6.2' KOTLIN_1_6 = 'kotlin-1.6' KOTLIN_1_8 = 'kotlin-1.8' KOTLIN_1_9 = 'kotlin-1.9' KOTLIN_2_0 = 'kotlin-2.0' + KOTLIN_2_3 = 'kotlin-2.3' CPP_17 = 'cpp-17' CPP_20 = 'cpp-20' BUN_1_0 = 'bun-1.0' BUN_1_1 = 'bun-1.1' + BUN_1_2 = 'bun-1.2' + BUN_1_3 = 'bun-1.3' GO_1_23 = 'go-1.23' + GO_1_24 = 'go-1.24' + GO_1_25 = 'go-1.25' + GO_1_26 = 'go-1.26' STATIC_1 = 'static-1' FLUTTER_3_24 = 'flutter-3.24' FLUTTER_3_27 = 'flutter-3.27' diff --git a/lib/appwrite/enums/runtime.rb b/lib/appwrite/enums/runtime.rb index 08a8edd..f12d975 100644 --- a/lib/appwrite/enums/runtime.rb +++ b/lib/appwrite/enums/runtime.rb @@ -8,24 +8,35 @@ module Runtime NODE_20_0 = 'node-20.0' NODE_21_0 = 'node-21.0' NODE_22 = 'node-22' + NODE_23 = 'node-23' + NODE_24 = 'node-24' + NODE_25 = 'node-25' PHP_8_0 = 'php-8.0' PHP_8_1 = 'php-8.1' PHP_8_2 = 'php-8.2' PHP_8_3 = 'php-8.3' + PHP_8_4 = 'php-8.4' RUBY_3_0 = 'ruby-3.0' RUBY_3_1 = 'ruby-3.1' RUBY_3_2 = 'ruby-3.2' RUBY_3_3 = 'ruby-3.3' + RUBY_3_4 = 'ruby-3.4' + RUBY_4_0 = 'ruby-4.0' PYTHON_3_8 = 'python-3.8' PYTHON_3_9 = 'python-3.9' PYTHON_3_10 = 'python-3.10' PYTHON_3_11 = 'python-3.11' PYTHON_3_12 = 'python-3.12' + PYTHON_3_13 = 'python-3.13' + PYTHON_3_14 = 'python-3.14' PYTHON_ML_3_11 = 'python-ml-3.11' PYTHON_ML_3_12 = 'python-ml-3.12' + PYTHON_ML_3_13 = 'python-ml-3.13' DENO_1_40 = 'deno-1.40' DENO_1_46 = 'deno-1.46' DENO_2_0 = 'deno-2.0' + DENO_2_5 = 'deno-2.5' + DENO_2_6 = 'deno-2.6' DART_2_15 = 'dart-2.15' DART_2_16 = 'dart-2.16' DART_2_17 = 'dart-2.17' @@ -41,25 +52,34 @@ module Runtime DOTNET_6_0 = 'dotnet-6.0' DOTNET_7_0 = 'dotnet-7.0' DOTNET_8_0 = 'dotnet-8.0' + DOTNET_10 = 'dotnet-10' JAVA_8_0 = 'java-8.0' JAVA_11_0 = 'java-11.0' JAVA_17_0 = 'java-17.0' JAVA_18_0 = 'java-18.0' JAVA_21_0 = 'java-21.0' JAVA_22 = 'java-22' + JAVA_25 = 'java-25' SWIFT_5_5 = 'swift-5.5' SWIFT_5_8 = 'swift-5.8' SWIFT_5_9 = 'swift-5.9' SWIFT_5_10 = 'swift-5.10' + SWIFT_6_2 = 'swift-6.2' KOTLIN_1_6 = 'kotlin-1.6' KOTLIN_1_8 = 'kotlin-1.8' KOTLIN_1_9 = 'kotlin-1.9' KOTLIN_2_0 = 'kotlin-2.0' + KOTLIN_2_3 = 'kotlin-2.3' CPP_17 = 'cpp-17' CPP_20 = 'cpp-20' BUN_1_0 = 'bun-1.0' BUN_1_1 = 'bun-1.1' + BUN_1_2 = 'bun-1.2' + BUN_1_3 = 'bun-1.3' GO_1_23 = 'go-1.23' + GO_1_24 = 'go-1.24' + GO_1_25 = 'go-1.25' + GO_1_26 = 'go-1.26' STATIC_1 = 'static-1' FLUTTER_3_24 = 'flutter-3.24' FLUTTER_3_27 = 'flutter-3.27' diff --git a/lib/appwrite/enums/scopes.rb b/lib/appwrite/enums/scopes.rb index f2e5fb7..616a7f6 100644 --- a/lib/appwrite/enums/scopes.rb +++ b/lib/appwrite/enums/scopes.rb @@ -49,6 +49,8 @@ module Scopes TARGETS_WRITE = 'targets.write' RULES_READ = 'rules.read' RULES_WRITE = 'rules.write' + SCHEDULES_READ = 'schedules.read' + SCHEDULES_WRITE = 'schedules.write' MIGRATIONS_READ = 'migrations.read' MIGRATIONS_WRITE = 'migrations.write' VCS_READ = 'vcs.read' @@ -64,6 +66,7 @@ module Scopes RESTORATIONS_WRITE = 'restorations.write' DOMAINS_READ = 'domains.read' DOMAINS_WRITE = 'domains.write' + EVENTS_READ = 'events.read' end end end \ No newline at end of file diff --git a/lib/appwrite/models/activity_event.rb b/lib/appwrite/models/activity_event.rb new file mode 100644 index 0000000..28fadeb --- /dev/null +++ b/lib/appwrite/models/activity_event.rb @@ -0,0 +1,182 @@ +#frozen_string_literal: true + +module Appwrite + module Models + class ActivityEvent + attr_reader :id + attr_reader :user_type + attr_reader :user_id + attr_reader :user_email + attr_reader :user_name + attr_reader :resource_parent + attr_reader :resource_type + attr_reader :resource_id + attr_reader :resource + attr_reader :event + attr_reader :user_agent + attr_reader :ip + attr_reader :mode + attr_reader :country + attr_reader :time + attr_reader :project_id + attr_reader :team_id + attr_reader :hostname + attr_reader :os_code + attr_reader :os_name + attr_reader :os_version + attr_reader :client_type + attr_reader :client_code + attr_reader :client_name + attr_reader :client_version + attr_reader :client_engine + attr_reader :client_engine_version + attr_reader :device_name + attr_reader :device_brand + attr_reader :device_model + attr_reader :country_code + attr_reader :country_name + + def initialize( + id:, + user_type:, + user_id:, + user_email:, + user_name:, + resource_parent:, + resource_type:, + resource_id:, + resource:, + event:, + user_agent:, + ip:, + mode:, + country:, + time:, + project_id:, + team_id:, + hostname:, + os_code:, + os_name:, + os_version:, + client_type:, + client_code:, + client_name:, + client_version:, + client_engine:, + client_engine_version:, + device_name:, + device_brand:, + device_model:, + country_code:, + country_name: + ) + @id = id + @user_type = user_type + @user_id = user_id + @user_email = user_email + @user_name = user_name + @resource_parent = resource_parent + @resource_type = resource_type + @resource_id = resource_id + @resource = resource + @event = event + @user_agent = user_agent + @ip = ip + @mode = mode + @country = country + @time = time + @project_id = project_id + @team_id = team_id + @hostname = hostname + @os_code = os_code + @os_name = os_name + @os_version = os_version + @client_type = client_type + @client_code = client_code + @client_name = client_name + @client_version = client_version + @client_engine = client_engine + @client_engine_version = client_engine_version + @device_name = device_name + @device_brand = device_brand + @device_model = device_model + @country_code = country_code + @country_name = country_name + end + + def self.from(map:) + ActivityEvent.new( + id: map["$id"], + user_type: map["userType"], + user_id: map["userId"], + user_email: map["userEmail"], + user_name: map["userName"], + resource_parent: map["resourceParent"], + resource_type: map["resourceType"], + resource_id: map["resourceId"], + resource: map["resource"], + event: map["event"], + user_agent: map["userAgent"], + ip: map["ip"], + mode: map["mode"], + country: map["country"], + time: map["time"], + project_id: map["projectId"], + team_id: map["teamId"], + hostname: map["hostname"], + os_code: map["osCode"], + os_name: map["osName"], + os_version: map["osVersion"], + client_type: map["clientType"], + client_code: map["clientCode"], + client_name: map["clientName"], + client_version: map["clientVersion"], + client_engine: map["clientEngine"], + client_engine_version: map["clientEngineVersion"], + device_name: map["deviceName"], + device_brand: map["deviceBrand"], + device_model: map["deviceModel"], + country_code: map["countryCode"], + country_name: map["countryName"] + ) + end + + def to_map + { + "$id": @id, + "userType": @user_type, + "userId": @user_id, + "userEmail": @user_email, + "userName": @user_name, + "resourceParent": @resource_parent, + "resourceType": @resource_type, + "resourceId": @resource_id, + "resource": @resource, + "event": @event, + "userAgent": @user_agent, + "ip": @ip, + "mode": @mode, + "country": @country, + "time": @time, + "projectId": @project_id, + "teamId": @team_id, + "hostname": @hostname, + "osCode": @os_code, + "osName": @os_name, + "osVersion": @os_version, + "clientType": @client_type, + "clientCode": @client_code, + "clientName": @client_name, + "clientVersion": @client_version, + "clientEngine": @client_engine, + "clientEngineVersion": @client_engine_version, + "deviceName": @device_name, + "deviceBrand": @device_brand, + "deviceModel": @device_model, + "countryCode": @country_code, + "countryName": @country_name + } + end + end + end +end diff --git a/lib/appwrite/models/activity_event_list.rb b/lib/appwrite/models/activity_event_list.rb new file mode 100644 index 0000000..2465bac --- /dev/null +++ b/lib/appwrite/models/activity_event_list.rb @@ -0,0 +1,32 @@ +#frozen_string_literal: true + +module Appwrite + module Models + class ActivityEventList + attr_reader :total + attr_reader :events + + def initialize( + total:, + events: + ) + @total = total + @events = events + end + + def self.from(map:) + ActivityEventList.new( + total: map["total"], + events: map["events"].map { |it| ActivityEvent.from(map: it) } + ) + end + + def to_map + { + "total": @total, + "events": @events.map { |it| it.to_map } + } + end + end + end +end diff --git a/lib/appwrite/models/attribute_longtext.rb b/lib/appwrite/models/attribute_longtext.rb index 65990d8..51607c8 100644 --- a/lib/appwrite/models/attribute_longtext.rb +++ b/lib/appwrite/models/attribute_longtext.rb @@ -12,6 +12,7 @@ class AttributeLongtext attr_reader :created_at attr_reader :updated_at attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -22,7 +23,8 @@ def initialize( array: , created_at:, updated_at:, - default: + default: , + encrypt: ) @key = key @type = type @@ -33,6 +35,7 @@ def initialize( @created_at = created_at @updated_at = updated_at @default = default + @encrypt = encrypt end def self.from(map:) @@ -45,7 +48,8 @@ def self.from(map:) array: map["array"], created_at: map["$createdAt"], updated_at: map["$updatedAt"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -59,7 +63,8 @@ def to_map "array": @array, "$createdAt": @created_at, "$updatedAt": @updated_at, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/models/attribute_mediumtext.rb b/lib/appwrite/models/attribute_mediumtext.rb index 22f296f..eafa3cf 100644 --- a/lib/appwrite/models/attribute_mediumtext.rb +++ b/lib/appwrite/models/attribute_mediumtext.rb @@ -12,6 +12,7 @@ class AttributeMediumtext attr_reader :created_at attr_reader :updated_at attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -22,7 +23,8 @@ def initialize( array: , created_at:, updated_at:, - default: + default: , + encrypt: ) @key = key @type = type @@ -33,6 +35,7 @@ def initialize( @created_at = created_at @updated_at = updated_at @default = default + @encrypt = encrypt end def self.from(map:) @@ -45,7 +48,8 @@ def self.from(map:) array: map["array"], created_at: map["$createdAt"], updated_at: map["$updatedAt"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -59,7 +63,8 @@ def to_map "array": @array, "$createdAt": @created_at, "$updatedAt": @updated_at, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/models/attribute_text.rb b/lib/appwrite/models/attribute_text.rb index 91c0b2f..7a45111 100644 --- a/lib/appwrite/models/attribute_text.rb +++ b/lib/appwrite/models/attribute_text.rb @@ -12,6 +12,7 @@ class AttributeText attr_reader :created_at attr_reader :updated_at attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -22,7 +23,8 @@ def initialize( array: , created_at:, updated_at:, - default: + default: , + encrypt: ) @key = key @type = type @@ -33,6 +35,7 @@ def initialize( @created_at = created_at @updated_at = updated_at @default = default + @encrypt = encrypt end def self.from(map:) @@ -45,7 +48,8 @@ def self.from(map:) array: map["array"], created_at: map["$createdAt"], updated_at: map["$updatedAt"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -59,7 +63,8 @@ def to_map "array": @array, "$createdAt": @created_at, "$updatedAt": @updated_at, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/models/attribute_varchar.rb b/lib/appwrite/models/attribute_varchar.rb index 40f9e67..c318b9a 100644 --- a/lib/appwrite/models/attribute_varchar.rb +++ b/lib/appwrite/models/attribute_varchar.rb @@ -13,6 +13,7 @@ class AttributeVarchar attr_reader :updated_at attr_reader :size attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -24,7 +25,8 @@ def initialize( created_at:, updated_at:, size:, - default: + default: , + encrypt: ) @key = key @type = type @@ -36,6 +38,7 @@ def initialize( @updated_at = updated_at @size = size @default = default + @encrypt = encrypt end def self.from(map:) @@ -49,7 +52,8 @@ def self.from(map:) created_at: map["$createdAt"], updated_at: map["$updatedAt"], size: map["size"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -64,7 +68,8 @@ def to_map "$createdAt": @created_at, "$updatedAt": @updated_at, "size": @size, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/models/column_longtext.rb b/lib/appwrite/models/column_longtext.rb index 5e2357a..9efbcec 100644 --- a/lib/appwrite/models/column_longtext.rb +++ b/lib/appwrite/models/column_longtext.rb @@ -12,6 +12,7 @@ class ColumnLongtext attr_reader :created_at attr_reader :updated_at attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -22,7 +23,8 @@ def initialize( array: , created_at:, updated_at:, - default: + default: , + encrypt: ) @key = key @type = type @@ -33,6 +35,7 @@ def initialize( @created_at = created_at @updated_at = updated_at @default = default + @encrypt = encrypt end def self.from(map:) @@ -45,7 +48,8 @@ def self.from(map:) array: map["array"], created_at: map["$createdAt"], updated_at: map["$updatedAt"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -59,7 +63,8 @@ def to_map "array": @array, "$createdAt": @created_at, "$updatedAt": @updated_at, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/models/column_mediumtext.rb b/lib/appwrite/models/column_mediumtext.rb index a7d7180..5260dca 100644 --- a/lib/appwrite/models/column_mediumtext.rb +++ b/lib/appwrite/models/column_mediumtext.rb @@ -12,6 +12,7 @@ class ColumnMediumtext attr_reader :created_at attr_reader :updated_at attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -22,7 +23,8 @@ def initialize( array: , created_at:, updated_at:, - default: + default: , + encrypt: ) @key = key @type = type @@ -33,6 +35,7 @@ def initialize( @created_at = created_at @updated_at = updated_at @default = default + @encrypt = encrypt end def self.from(map:) @@ -45,7 +48,8 @@ def self.from(map:) array: map["array"], created_at: map["$createdAt"], updated_at: map["$updatedAt"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -59,7 +63,8 @@ def to_map "array": @array, "$createdAt": @created_at, "$updatedAt": @updated_at, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/models/column_text.rb b/lib/appwrite/models/column_text.rb index e90d60a..d6f9ea1 100644 --- a/lib/appwrite/models/column_text.rb +++ b/lib/appwrite/models/column_text.rb @@ -12,6 +12,7 @@ class ColumnText attr_reader :created_at attr_reader :updated_at attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -22,7 +23,8 @@ def initialize( array: , created_at:, updated_at:, - default: + default: , + encrypt: ) @key = key @type = type @@ -33,6 +35,7 @@ def initialize( @created_at = created_at @updated_at = updated_at @default = default + @encrypt = encrypt end def self.from(map:) @@ -45,7 +48,8 @@ def self.from(map:) array: map["array"], created_at: map["$createdAt"], updated_at: map["$updatedAt"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -59,7 +63,8 @@ def to_map "array": @array, "$createdAt": @created_at, "$updatedAt": @updated_at, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/models/column_varchar.rb b/lib/appwrite/models/column_varchar.rb index c6c2e5a..532686d 100644 --- a/lib/appwrite/models/column_varchar.rb +++ b/lib/appwrite/models/column_varchar.rb @@ -13,6 +13,7 @@ class ColumnVarchar attr_reader :updated_at attr_reader :size attr_reader :default + attr_reader :encrypt def initialize( key:, @@ -24,7 +25,8 @@ def initialize( created_at:, updated_at:, size:, - default: + default: , + encrypt: ) @key = key @type = type @@ -36,6 +38,7 @@ def initialize( @updated_at = updated_at @size = size @default = default + @encrypt = encrypt end def self.from(map:) @@ -49,7 +52,8 @@ def self.from(map:) created_at: map["$createdAt"], updated_at: map["$updatedAt"], size: map["size"], - default: map["default"] + default: map["default"], + encrypt: map["encrypt"] ) end @@ -64,7 +68,8 @@ def to_map "$createdAt": @created_at, "$updatedAt": @updated_at, "size": @size, - "default": @default + "default": @default, + "encrypt": @encrypt } end diff --git a/lib/appwrite/query.rb b/lib/appwrite/query.rb index cc58d5c..6ac666b 100644 --- a/lib/appwrite/query.rb +++ b/lib/appwrite/query.rb @@ -133,10 +133,28 @@ def offset(offset) return Query.new("offset", nil, offset).to_s end + # Filter resources where attribute contains the specified value. + # For string attributes, checks if the string contains the substring. + # + # Note: For array attributes, use contains_any or contains_all instead. def contains(attribute, value) return Query.new("contains", attribute, value).to_s end + # Filter resources where attribute contains ANY of the specified values. + # For array and relationship attributes, matches documents where the attribute + # contains at least one of the given values. + def contains_any(attribute, value) + return Query.new("containsAny", attribute, value).to_s + end + + # Filter resources where attribute contains ALL of the specified values. + # For array and relationship attributes, matches documents where the attribute + # contains every one of the given values. + def contains_all(attribute, value) + return Query.new("containsAll", attribute, value).to_s + end + def not_contains(attribute, value) return Query.new("notContains", attribute, value).to_s end diff --git a/lib/appwrite/services/activities.rb b/lib/appwrite/services/activities.rb new file mode 100644 index 0000000..cd1b576 --- /dev/null +++ b/lib/appwrite/services/activities.rb @@ -0,0 +1,64 @@ +#frozen_string_literal: true + +module Appwrite + class Activities < Service + + def initialize(client) + @client = client + end + + # List all events for selected filters. + # + # @param [String] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/databases#querying-documents). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on attributes such as userId, teamId, etc. + # + # @return [ActivityEventList] + def list_events(queries: nil) + api_path = '/activities/events' + + api_params = { + queries: queries, + } + + api_headers = { + } + + @client.call( + method: 'GET', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::ActivityEventList + ) + end + + # Get event by ID. + # + # + # @param [String] event_id Event ID. + # + # @return [ActivityEvent] + def get_event(event_id:) + api_path = '/activities/events/{eventId}' + .gsub('{eventId}', event_id) + + if event_id.nil? + raise Appwrite::Exception.new('Missing required parameter: "eventId"') + end + + api_params = { + } + + api_headers = { + } + + @client.call( + method: 'GET', + path: api_path, + headers: api_headers, + params: api_params, + response_type: Models::ActivityEvent + ) + end + + end +end \ No newline at end of file diff --git a/lib/appwrite/services/databases.rb b/lib/appwrite/services/databases.rb index bbaefaf..871412f 100644 --- a/lib/appwrite/services/databases.rb +++ b/lib/appwrite/services/databases.rb @@ -1556,9 +1556,10 @@ def update_line_attribute(database_id:, collection_id:, key:, required:, default # @param [] required Is attribute required? # @param [String] default Default value for attribute when not provided. Cannot be set when attribute is required. # @param [] array Is attribute an array? + # @param [] encrypt Toggle encryption for the attribute. Encryption enhances security by not storing any plain text values in the database. However, encrypted attributes cannot be queried. # # @return [AttributeLongtext] - def create_longtext_attribute(database_id:, collection_id:, key:, required:, default: nil, array: nil) + def create_longtext_attribute(database_id:, collection_id:, key:, required:, default: nil, array: nil, encrypt: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/attributes/longtext' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -1584,6 +1585,7 @@ def create_longtext_attribute(database_id:, collection_id:, key:, required:, def required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { @@ -1665,9 +1667,10 @@ def update_longtext_attribute(database_id:, collection_id:, key:, required:, def # @param [] required Is attribute required? # @param [String] default Default value for attribute when not provided. Cannot be set when attribute is required. # @param [] array Is attribute an array? + # @param [] encrypt Toggle encryption for the attribute. Encryption enhances security by not storing any plain text values in the database. However, encrypted attributes cannot be queried. # # @return [AttributeMediumtext] - def create_mediumtext_attribute(database_id:, collection_id:, key:, required:, default: nil, array: nil) + def create_mediumtext_attribute(database_id:, collection_id:, key:, required:, default: nil, array: nil, encrypt: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/attributes/mediumtext' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -1693,6 +1696,7 @@ def create_mediumtext_attribute(database_id:, collection_id:, key:, required:, d required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { @@ -2173,9 +2177,10 @@ def update_string_attribute(database_id:, collection_id:, key:, required:, defau # @param [] required Is attribute required? # @param [String] default Default value for attribute when not provided. Cannot be set when attribute is required. # @param [] array Is attribute an array? + # @param [] encrypt Toggle encryption for the attribute. Encryption enhances security by not storing any plain text values in the database. However, encrypted attributes cannot be queried. # # @return [AttributeText] - def create_text_attribute(database_id:, collection_id:, key:, required:, default: nil, array: nil) + def create_text_attribute(database_id:, collection_id:, key:, required:, default: nil, array: nil, encrypt: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/attributes/text' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2201,6 +2206,7 @@ def create_text_attribute(database_id:, collection_id:, key:, required:, default required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { @@ -2398,9 +2404,10 @@ def update_url_attribute(database_id:, collection_id:, key:, required:, default: # @param [] required Is attribute required? # @param [String] default Default value for attribute when not provided. Cannot be set when attribute is required. # @param [] array Is attribute an array? + # @param [] encrypt Toggle encryption for the attribute. Encryption enhances security by not storing any plain text values in the database. However, encrypted attributes cannot be queried. # # @return [AttributeVarchar] - def create_varchar_attribute(database_id:, collection_id:, key:, size:, required:, default: nil, array: nil) + def create_varchar_attribute(database_id:, collection_id:, key:, size:, required:, default: nil, array: nil, encrypt: nil) api_path = '/databases/{databaseId}/collections/{collectionId}/attributes/varchar' .gsub('{databaseId}', database_id) .gsub('{collectionId}', collection_id) @@ -2431,6 +2438,7 @@ def create_varchar_attribute(database_id:, collection_id:, key:, size:, required required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { diff --git a/lib/appwrite/services/tables_db.rb b/lib/appwrite/services/tables_db.rb index eaf3e9f..e116733 100644 --- a/lib/appwrite/services/tables_db.rb +++ b/lib/appwrite/services/tables_db.rb @@ -1474,9 +1474,10 @@ def update_line_column(database_id:, table_id:, key:, required:, default: nil, n # @param [] required Is column required? # @param [String] default Default value for column when not provided. Cannot be set when column is required. # @param [] array Is column an array? + # @param [] encrypt Toggle encryption for the column. Encryption enhances security by not storing any plain text values in the database. However, encrypted columns cannot be queried. # # @return [ColumnLongtext] - def create_longtext_column(database_id:, table_id:, key:, required:, default: nil, array: nil) + def create_longtext_column(database_id:, table_id:, key:, required:, default: nil, array: nil, encrypt: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/columns/longtext' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -1502,6 +1503,7 @@ def create_longtext_column(database_id:, table_id:, key:, required:, default: ni required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { @@ -1583,9 +1585,10 @@ def update_longtext_column(database_id:, table_id:, key:, required:, default:, n # @param [] required Is column required? # @param [String] default Default value for column when not provided. Cannot be set when column is required. # @param [] array Is column an array? + # @param [] encrypt Toggle encryption for the column. Encryption enhances security by not storing any plain text values in the database. However, encrypted columns cannot be queried. # # @return [ColumnMediumtext] - def create_mediumtext_column(database_id:, table_id:, key:, required:, default: nil, array: nil) + def create_mediumtext_column(database_id:, table_id:, key:, required:, default: nil, array: nil, encrypt: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/columns/mediumtext' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -1611,6 +1614,7 @@ def create_mediumtext_column(database_id:, table_id:, key:, required:, default: required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { @@ -2076,9 +2080,10 @@ def update_string_column(database_id:, table_id:, key:, required:, default:, siz # @param [] required Is column required? # @param [String] default Default value for column when not provided. Cannot be set when column is required. # @param [] array Is column an array? + # @param [] encrypt Toggle encryption for the column. Encryption enhances security by not storing any plain text values in the database. However, encrypted columns cannot be queried. # # @return [ColumnText] - def create_text_column(database_id:, table_id:, key:, required:, default: nil, array: nil) + def create_text_column(database_id:, table_id:, key:, required:, default: nil, array: nil, encrypt: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/columns/text' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2104,6 +2109,7 @@ def create_text_column(database_id:, table_id:, key:, required:, default: nil, a required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { @@ -2295,9 +2301,10 @@ def update_url_column(database_id:, table_id:, key:, required:, default:, new_ke # @param [] required Is column required? # @param [String] default Default value for column when not provided. Cannot be set when column is required. # @param [] array Is column an array? + # @param [] encrypt Toggle encryption for the column. Encryption enhances security by not storing any plain text values in the database. However, encrypted columns cannot be queried. # # @return [ColumnVarchar] - def create_varchar_column(database_id:, table_id:, key:, size:, required:, default: nil, array: nil) + def create_varchar_column(database_id:, table_id:, key:, size:, required:, default: nil, array: nil, encrypt: nil) api_path = '/tablesdb/{databaseId}/tables/{tableId}/columns/varchar' .gsub('{databaseId}', database_id) .gsub('{tableId}', table_id) @@ -2328,6 +2335,7 @@ def create_varchar_column(database_id:, table_id:, key:, size:, required:, defau required: required, default: default, array: array, + encrypt: encrypt, } api_headers = { From e352cd301738bf3dea1e88a69c13217b0cfbabb5 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 Feb 2026 11:06:20 +0000 Subject: [PATCH 2/4] release --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4b0df5..f3f11a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 21.0.1 + +* Remove obsolete GitHub issue templates (bug.yaml, documentation.yaml, feature.yaml) to simplify repository maintenance. +* Remove CI workflows for auto-closing external PRs (autoclose.yml) and publishing to RubyGems (publish.yml). +* Cleanup of documentation examples: several outdated docs under docs/examples/health, docs/examples/tablesdb, and docs/examples/databases have been deleted. +* Documentation improvements: updated several create_* attribute example blocks to include encrypt: false where applicable (e.g., longtext/mediumtext/text/varchar attribute examples and related columns). +* Note: This release aligns the gemspec/versioning for a patch release (bump to 21.0.1 in a real patch) to reflect these internal maintenance changes. + ## 19.3.0 * Add `total` parameter to list queries allowing skipping counting rows in a table for improved performance From 37db787a98f8755da02e3999edce9e87c00a8f4a Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 Feb 2026 11:21:04 +0000 Subject: [PATCH 3/4] regen --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3f11a9..352e72a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,24 @@ * Documentation improvements: updated several create_* attribute example blocks to include encrypt: false where applicable (e.g., longtext/mediumtext/text/varchar attribute examples and related columns). * Note: This release aligns the gemspec/versioning for a patch release (bump to 21.0.1 in a real patch) to reflect these internal maintenance changes. +## 21.0.0 + +* Add array-based enum parameters (e.g., `permissions: Array`). +* Breaking change: `Output` enum has been removed; use `ImageFormat` instead. +* Add `getQueueAudits` support to `Health` service. +* Add longtext/mediumtext/text/varchar attribute and column helpers to `Databases` and `TablesDB` services. + +## 20.1.0 + +* Added ability to create columns and indexes synchronously while creating a table + +## 20.0.0 + +* Rename `VCSDeploymentType` enum to `VCSReferenceType` +* Change `create_template_deployment` method signature: replace `version` parameter with `type` (TemplateReferenceType) and `reference` parameters +* Add `get_screenshot` method to `Avatars` service +* Add `Theme`, `Timezone` and `Output` enums + ## 19.3.0 * Add `total` parameter to list queries allowing skipping counting rows in a table for improved performance From e938e10d3f6a29611d4445b659bb9e272317da9f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 Feb 2026 11:41:52 +0000 Subject: [PATCH 4/4] add missing entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 352e72a..54d8c9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * Cleanup of documentation examples: several outdated docs under docs/examples/health, docs/examples/tablesdb, and docs/examples/databases have been deleted. * Documentation improvements: updated several create_* attribute example blocks to include encrypt: false where applicable (e.g., longtext/mediumtext/text/varchar attribute examples and related columns). * Note: This release aligns the gemspec/versioning for a patch release (bump to 21.0.1 in a real patch) to reflect these internal maintenance changes. +* Add support for the new `Backups` service ## 21.0.0