1.0.2

(fix): Rename Union#member? to Union#type_member? to avoid rubocop-minitest’s Minitest/AssertIncludes cop incorrectly autocorrecting assert obj.member?(x) to assert_includes obj, x. The autocorrected form calls Module#include? which raises TypeError: wrong argument type Class (expected Module) on union type tests.


1.0.1

(fix): Fix wire test generator to respect clientModuleName custom config instead of hardcoding Client.

1.0.0

(feat): 💎 The Ruby SDK generator v2 is officially stable! 🎉🥂 After 87 release candidates, this ground-up rewrite ships with a modern AST-based architecture and full feature parity. 🔒 Stable, production-ready, and 100% backward-compatible with the legacy generator — existing configs, gem names, and modules just work. ✅

Highlights

  • 🔐 Bearer, API key, OAuth 2.0 & inferred auth with automatic token refresh
  • 🌐 Exponential-backoff retries, per-request base_url override, multipart uploads
  • 📄 Discriminated & undiscriminated unions, correct non-snake_case wire serialization
  • 📦 Cursor & offset pagination with lazy iterators, custom pager support
  • 🏗️ YARD docs, RuboCop-clean output, CI with RubyGems OIDC publishing, wire tests
  • ⚙️ Rich config: moduleName, requirePaths, extraDependencies, enableWireTests, and more
  • 🌍 Multiple named environments and multi-URL environment support
  • 🚀 RubyGems OIDC publishing and self-hosted mode with .fernignore support

1.0.0-rc87

(feat): Add support for useDefaultRequestParameterValues custom config option. When enabled, query parameters and headers with IR-defined default values use Ruby’s params.fetch(:key, default) idiom instead of conditional assignment, matching the behavior of other Fern generators.


1.0.0-rc86

(fix): Fix RuboCop style offenses in generated dynamic snippets. Generated Ruby snippets now use double-quoted strings, omit trailing semicolons, and drop empty parentheses on no-arg method calls. Also normalizes CRLF line endings to LF and adds RuboCop exclusions for snippet-only cops (FrozenStringLiteralComment, FirstHashElementIndentation) in the generated .rubocop.yml.

(fix): Change RuboCop Naming/VariableNumber enforced style from snake_case to normalcase in the generated .rubocop.yml. This eliminates false positives on API-derived identifiers that contain numbers (e.g., :recaptcha_v2, :sha256, :line1, :pkcs7) without requiring underscores before digit sequences.

(fix): Fix seed.yml Docker build command using incorrect package filter (@fern-api/fern-ruby-sdk instead of @fern-api/ruby-sdk).

(fix): Use %w[] syntax for arrays of simple strings in generated snippets, eliminating Style/WordArray RuboCop offenses.


1.0.0-rc85

(fix): Fix detached HEAD error in publish workflow. When triggered by a tag push, the workflow enters detached HEAD state, causing rubygems/release-gem@v1 (which runs rake release) to fail when pushing to a non-existent branch. Replaced with manual build/push steps using rubygems/configure-rubygems-credentials@v1.0.0 for OIDC auth, bundle exec rake build, and gem push pkg/*.gem. Also replaced bundler-cache: true with explicit bundle install for more reliable dependency installation.

1.0.0-rc84

(fix): Fix packageName being incorrectly used for folder/module naming. The packageName from publish config (e.g., output.publish.rubygems.packageName) is now only used for the gemspec spec.name field, not for folder structure or Ruby module names. This fixes issues where gems with special characters in their package name (e.g., “square.rb”) would have incorrect folder structures (lib/square_rb/ instead of lib/square/) and normalized gemspec names. The folder and module naming now correctly uses only the custom config moduleName option or the organization name as fallback.

(fix): Fix organization names with digits (e.g., “auth0”) being incorrectly transformed to “auth_0” in folder names. The snake_case transformation now preserves letter-digit sequences, so “auth0” stays “auth0” and “OAuth2” becomes “oauth2” instead of “o_auth_2”.

1.0.0-rc83

(fix): Fix request body serialization bug where path/query/header parameters were incorrectly serialized as nil values in the request body. For endpoints with inlined request bodies that also have path, query, or header parameters, the wrapper type (which includes all endpoint parameters) was being created with only body properties, causing non-body fields to be nil and serialized as null in the JSON body. The fix uses a serialize-then-split pattern: serialize ALL params through the wrapper type first, then remove non-body params from the serialized result. This ensures proper type conversion while keeping non-body params out of the request body.


1.0.0-rc82

(feat): Implement HTTP status code-based retry logic with exponential backoff. The SDK now automatically retries requests that fail with retryable HTTP status codes (408, 429, 500, 502, 503, 504, 521, 522, 524) using exponential backoff with jitter. The retry logic respects Retry-After headers when present. This addresses the feature gap where the SDK previously only used Net::HTTP’s network-level retries, which don’t handle HTTP status codes like 429 (Too Many Requests). The max_retries parameter now controls application-level retries with proper backoff, enabling compliance with rate-limiting requirements like Square App Marketplace.


1.0.0-rc81

(feat): Add support for self-hosted mode. When enabled, the generator can clone the user’s GitHub repository, generate SDK code, and commit/push changes or create a PR directly to the user’s repo. This feature respects .fernignore files to preserve user customizations. The generator now passes ir.selfHosted to the base generator agent instead of hardcoding false.


1.0.0-rc80

(fix): Add support for clientModuleName config option to customize the root client class name. When clientModuleName is set (e.g., “PinnacleBaseClient”), the generated root client class will use that name instead of the default “Client”. This restores functionality that existed in the original Ruby SDK generator.

(fix): Add support for packageName from publish config to set the gem name and module name. The gem name (folder name) and module name now use the packageName from the RubyGems publish config (e.g., output.publish.rubygems.packageName) as a fallback when the custom config module option is not set. This restores functionality from the original Ruby SDK generator where the gem name could be configured via the publish target.


1.0.0-rc79

(feat): Add support for additional_query_parameters in request options. Users can now pass additional query parameters via request_options[:additional_query_parameters] which will be merged with the endpoint’s query parameters when making HTTP requests.


1.0.0-rc78

(chore): Update Dockerfile to use the latest generator-cli with improve reference.md generation.

1.0.0-rc77

(feat): Add RETRIES, ADDITIONAL_HEADERS, and ADDITIONAL_QUERY_PARAMETERS sections to generated README.md. These sections document how to configure automatic retries, add custom headers, and add custom query parameters to API requests. The features were previously removed because they had Go-specific descriptions; they are now restored with Ruby-specific documentation and code snippets.