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-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 publish job in CI that uses rubygems/release-gem@v1 for 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=true env 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.yml with lint and test jobs (triggers on push and pull_request)
  • Generate .gitignore file with *.gem
  • Config-driven wire-tests job: when enableWireTests: true, generates wire-tests CI job
  • Add wire_helper.rb for WireMock container lifecycle management using Minitest’s after_run hook, allowing users to run bundle exec rake test locally 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.