> This page is for SDK, version Legacy.
> For other versions, use one of these documentation indexes:
> - Current (default): https://buildwithfern.com/learn/sdks/current/llms.txt
> - Legacy: https://buildwithfern.com/learn/sdks/legacy/llms.txt

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

# Adding custom code

> Augment your Ruby SDK with custom utilities

> **You're viewing the legacy SDK docs**
>
> These pages cover SDK generation configured with `generators.yml`. New projects use `sdk-config.yml`, so see [the Current version of this page](/learn/sdks/generators/ruby/custom-code) for up-to-date guidance. To move an existing project, follow the [SDK Config migration guide](/learn/sdks/legacy/generators/migration-guides/sdk-config), which walks through `fern sdk migrate`, and review the [`sdk-config.yml` reference](/learn/sdks/reference/sdk-config).

> **Enterprise feature**
>
> This feature is available only for the [Enterprise plan](https://buildwithfern.com/pricing). To get started, reach out to [support@buildwithfern.com](mailto:support@buildwithfern.com).

This page covers how to add custom logic, methods, and dependencies to your Ruby SDK.

## Adding custom logic

To get started adding custom code:

> **Note**
>
> These steps cover adding a new custom file to the SDK. To preserve line-level edits to a generated file, use [Replay](/learn/sdks/legacy/overview/custom-code#replay) instead.

#### Create a new file and add your custom logic

**`lib/<gem_name>/helper.rb`**

```ruby title="lib/<gem_name>/helper.rb"
module YourGem
  class Helper
    def self.my_helper
      puts "Hello World!"
    end
  end
end
```

#### Add your file to \`.fernignore\`

**`.fernignore`**

```yaml {3} title=".fernignore"
# Specify files that shouldn't be modified by Fern

lib/<gem_name>/helper.rb
```

#### Consume the helper

Now your users can consume the helper function by importing it from the SDK.

```ruby
require "your_gem"

YourGem::Helper.my_helper
```

## Adding custom SDK methods

Fern also allows you to add custom methods to the SDK itself (e.g.
`client.my_method()` ) by inheriting the Fern generated client and then
extending it.

#### Update \`generators.yml\` configuration

Name your Fern-generated client something like `BaseClient` to reflect that this client will be extended.

**`generators.yml`**

```yaml {4} title="generators.yml"
- name: fern-ruby-sdk
  version: 1.39.2
  config:
    clientClassName: BaseClient
```

#### Import and extend the generated client

First, import the Fern generated base client and extend it. Then, add whatever methods you want.

**`lib/<gem_name>/my_client.rb`**

```ruby title="lib/<gem_name>/my_client.rb"
require_relative "client"

module YourGem
  class MyClient < BaseClient
    def my_helper
      puts "Hello World!"
    end
  end
end
```

#### Update \`.fernignore\`

Add the `my_client.rb` to `.fernignore`.

**`.fernignore`**

```diff title=".fernignore"
+ lib/<gem_name>/my_client.rb
```

#### Consume the method

Instead of constructing the generated client, your users will want to construct the extended client.

```ruby
require "your_gem"

client = YourGem::MyClient.new
```

Now your users can consume the helper function by importing it from the SDK.

```ruby
client.my_helper
```

## Adding custom dependencies

To add gems that your custom code requires, update your `generators.yml`.

**`generators.yml`**

```yaml {4-7} title="generators.yml"
- name: fern-ruby-sdk
  version: 1.39.2
  config:
    extraDependencies:
      faraday: ">= 1.0"
    extraDevDependencies:
      rspec: "~> 3.0"
```