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_urloverride, 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
.fernignoresupport
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.