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.


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_token and get_auth_headers methods to token and auth_headers
  • Replaced OpenStruct with Struct in iterator tests