1.0.0-rc76
(fix): Fix wire tests for paginated endpoints not triggering HTTP requests.
Cursor and offset pagination endpoints return lazy iterators that don’t make HTTP requests
until iterated. Wire tests now call .pages.next_page on the returned iterator to trigger
the first HTTP request, ensuring WireMock receives the expected request for verification.
(fix): Fix pagination field names to use Ruby-safe method names instead of wire values.
Fields like cursor_field, item_field, and has_next_field are used to call Ruby
methods on response objects via send(). Previously these used wireValue which doesn’t
account for Ruby reserved word escaping (e.g., “next” -> “next_”). Now uses
snakeCase.safeName which matches the actual Ruby accessor names.
1.0.0-rc75
(fix): Fix inconsistent module naming for organization names containing digits (e.g., “auth0”).
Previously, internal types used module Auth0 while public types used module Auth_0 due to
lodash’s snakeCase inserting underscores before digits. Now all code paths use upperFirst
directly on the organization name, producing consistent module names like Auth0.
Also fixes test_helper.rb require path to use the correct folder name (e.g., auth_0)
instead of the module name (e.g., auth0), preventing LoadError when running tests.
1.0.0-rc75
(chore): Update Dockerfile CVE patches to work with newer generator-cli package structures.
1.0.0-rc74
(feat): Add opt-in requirePaths config option for auto-loading user-defined files when the gem
is required. When configured (e.g., requirePaths: ["custom_integration", "sentry_integration"]),
the gem entrypoint will auto-load each file from lib/<gem>/<path>.rb if it exists. This
allows users to add custom code (e.g., Sentry integration) without needing to fernignore
generated files. Uses file existence check to avoid silently swallowing real errors.
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.