1.0.0-rc73
(fix): Fix endpoint header parameters being included in request body instead of HTTP headers.
Header parameters (like Idempotency-Key) are now properly extracted from params and
passed via the headers parameter in Request.new() calls.
(feat): Add normalize_keys utility to accept both snake_case and camelCase parameter keys.
SDK endpoint methods now automatically convert camelCase keys (e.g., refundMethod)
to snake_case (e.g., refund_method) at the start of each method. This allows users
to pass JSON data with camelCase keys directly to SDK methods without manual conversion.
1.0.0-rc72
(chore): Add sdkVersion as a top-level field in the generated metadata.json file.
1.0.0-rc71
(feat): Make the base_url parameter optional in the main client.rb. The parameter now has a default
value of nil, allowing users to instantiate the client without explicitly providing a base_url
when using environment-based configuration.
1.0.0-rc70
(fix): Fix inferred auth base URL resolution and add absolute URL support:
- Auth raw client now properly falls back to default environment when base_url is not provided
- RawClient.build_url now handles absolute URLs (e.g., HATEOAS pagination links) directly
- Added attr_reader :base_url to RawClient for external access
- Removed unnecessary base_url override in InferredAuthProvider.refresh since auth_client is already configured with the correct base URL
1.0.0-rc69
(chore): Improve wire test generation with client reuse and AST-level snippet handling.
The client is now instantiated once in the setup method and reused across all tests,
following the PHP/Python pattern for better performance. Replaced fragile regex-based
snippet patching with AST-level code generation using skipClientInstantiation option.
Helper methods are now centralized in a WireMockTestCase base class.
1.0.0-rc68
(feat): Add RubyGems.org OIDC publishing workflow to generated CI:
- Generates a
publishjob in CI that usesrubygems/release-gem@v1for OIDC trusted publishing - Publish job runs on tag pushes after lint and test jobs pass
- Simplify wire tests execution by running them inline with regular tests using
RUN_WIRE_TESTS=trueenv var instead of a separate CI job
1.0.0-rc67
(feat): Add support for x-fern-server-name (multiple base URLs per environment). APIs with different
endpoints routed to different base URLs (e.g., separate api and identity URLs) now generate
proper Environment classes with hash-based URL mappings. Each endpoint uses its designated
base URL based on the endpoint.baseUrl property from the IR.
1.0.0-rc66
(fix): Fix union type matching for Hash and Array type wrappers. The type_matches? method now
correctly handles Internal::Types::Hash and Internal::Types::Array instances by checking
if the value is a ::Hash or ::Array respectively, instead of using is_a? directly on
the type wrapper classes.
1.0.0-rc65
(feat): Add CI workflow generation, .gitignore file, and wire test infrastructure:
- Generate
.github/workflows/ci.ymlwith lint and test jobs (triggers on push and pull_request) - Generate
.gitignorefile with*.gem - Config-driven wire-tests job: when
enableWireTests: true, generates wire-tests CI job - Add
wire_helper.rbfor WireMock container lifecycle management using Minitest’safter_runhook, allowing users to runbundle exec rake testlocally without manually managing docker compose
1.0.0-rc64
(chore): Improve reference.md generation for parity with TypeScript SDK generator:
- Add request_options parameter documentation to all endpoints
- Add source file links (hyperlinks) to method names in the reference
- Prefer examples with request body data for detailed code snippets, ensuring endpoints show full request bodies with nested objects and arrays instead of minimal one-line examples
- Synthesize requestBody from structured properties when jsonExample is null/empty
1.0.0-rc63
(fix): Fix README.md generation for GitHub, direct publish, and seed test modes.
- Updated shouldGenerateReadme to return true by default instead of requiring snippetFilepath
- Fixed getGitHubConfig to return undefined for uri/token instead of placeholder values that caused invalid git clone attempts
1.0.0-rc62
(feat): Add support for discriminated unions, enums, and undiscriminated unions in dynamic snippets.
This fixes issues where snippet examples were showing empty arrays or missing values for
complex types like union recipients in email/message send operations.
1.0.0-rc61
(fix): Move default environment resolution from request functions to root client instantiation.
Without this change, a non-default base URL set on the client initialization is never
used. The default environment fallback was happening at the request layer, which meant
any base_url passed to individual requests would fall back to the default environment
if not explicitly provided in request_options—even when the root client was initialized
with a custom base_url.
1.0.0-rc60
(feat): Add extraDependencies and extraDevDependencies config flags to Ruby v2 SDK generator.
These options allow users to specify additional gem dependencies to include in the
generated gemspec (extraDependencies) and Gemfile (extraDevDependencies). Values are
written directly as version constraints (e.g., { "my-gem": "~> 6.0" } produces
spec.add_dependency "my-gem", "~> 6.0").
1.0.0-rc59
(feat): Add wire test generation support for Ruby SDK. When enableWireTests is set to true in
custom config, the generator produces Minitest-based integration tests that validate
SDK serialization/deserialization against WireMock. Includes docker-compose.test.yml
and wiremock-mappings.json for running tests locally.
1.0.0-rc58
(fix): Fix additional RuboCop warnings in generated SDK code:
- Disabled Layout/LineLength cop (long type names and require paths are unavoidable)
- Set Naming/VariableNumber to snake_case style (allows
last_4,address_1, etc.) - Renamed
get_tokenandget_auth_headersmethods totokenandauth_headers - Replaced OpenStruct with Struct in iterator tests