1.4.3

(fix): Fix Ruby dynamic snippet generation to synthesize default values for required properties missing from examples. Previously, empty objects and arrays were rendered as {} and [{}]; now required fields are populated with reasonable placeholder values matching the behavior of the Python generator.


1.4.2

(chore): Bump @fern-api/generator-cli to 0.9.8. Changelog URLs in generated PRs now use the commit SHA instead of the PR branch name, keeping the link valid after the branch is deleted or squash-merged.


1.4.1

(chore): Add Severity to Naming/VariableNumber in generated .rubocop.yml config. Defaults to warning for customer SDKs. Configurable via rubocopSeverity custom config.


1.2.1

(fix): Fix rubocop not running in local mode by running bundle install before bundle exec rubocop -A and clearing conflicting nix/devbox Ruby environment variables. Previously, rubocop ran before dependencies were installed and relied on a system-level rubocop that could be broken or absent outside Docker.


1.3.0-rc.1

(fix): Ensure extraDependencies and extraDevDependencies override bundled dependency versions instead of creating duplicates. Previously, specifying a bundled gem (e.g., base64, rake) in extra dependencies would result in duplicate entries in the gemspec or Gemfile. The user-specified version now takes precedence.


1.4.0

(feat): Support omitting username or password from basic auth when configured via usernameOmit or passwordOmit in the IR. Omitted fields are removed from the SDK’s public API and treated as empty strings internally (e.g., omitting password encodes username:, omitting username encodes :password). When both are omitted, the Authorization header is skipped entirely.

1.2.0

(feat): Add maxRetries custom config option to override the default maximum number of retries for failed requests. The default remains 2 when not specified.

1.1.13

(chore): Remove legacy dollar-sign workaround in generated CI workflow now that Eta template engine does not interpret ${} syntax.

1.1.12

(chore): Migrate template engine from lodash to Eta for consistency with other generators.


1.3.0-rc.0

(feat): Upgrade to IR v66 which compresses the IR Name type, reducing IR size and increasing performance.


1.1.11

(chore): Change default rubocopVariableNumberStyle from snake_case to normalcase, so field names with embedded digits (e.g., recaptcha_v2, office365) no longer trigger RuboCop warnings by default.

1.1.10

(fix): Add explicit return in Boolean.coerce for TrueClass/FalseClass branch and suppress RuboCop Lint/Void warnings on bare value expressions in the utils coerce fallback paths.

1.1.9

(chore): Add rubocopVariableNumberStyle config option to control RuboCop Naming/VariableNumber style. Supported values: snake_case (default, requires underscores before numbers like recaptcha_v_2), normalcase (allows numbers without underscores like recaptcha_v2, office365), or disabled. This allows APIs with field names containing embedded digits to configure the appropriate style.


1.1.8

(fix): Support multiple Basic Auth schemes with AuthSchemesRequirement.Any. When an API defines more than one basic auth scheme (e.g., accountId/authToken and apiKey/apiKeySecret), the generated client now produces conditional if/elsif blocks that check which credential pair was provided and sets the Authorization header accordingly. Previously, only the first basic auth scheme was used.

1.1.7

(fix): Add explicit base64 gem dependency for APIs using Basic Auth. The gemspec now conditionally includes spec.add_dependency "base64" when the API definition contains a basic auth scheme, ensuring the Base64.strict_encode64 call in the generated client works on all Ruby versions where base64 is a bundled gem.


1.1.6

(chore): Pretty-print generated wiremock-mappings.json with 2-space indentation to reduce diff sizes on subsequent SDK generations.

1.1.5

(fix): Prevent additional_headers in request options from overriding SDK-set headers such as Authorization, Content-Type, and SDK metadata. Headers set by the SDK or the API definition are now protected (case-insensitively) and silently filtered from additional_headers.

(fix): Reject HTTP URLs for non-localhost hosts. Requests to http:// URLs now raise ArgumentError unless the host is localhost, 127.0.0.1, or [::1], preventing accidental transmission of authentication credentials in plaintext.

(fix): Explicitly set verify_mode = OpenSSL::SSL::VERIFY_PEER on HTTPS connections. This was already the Ruby default but is now stated in code to satisfy security audits.