faker-ruby/faker · error · ArgumentError

length must be an Integer and be lesser than 10

Error message

length must be an Integer and be lesser than 10

What it means

Raised by Faker::PhoneNumber.subscriber_number (aliased as extension) when the length: keyword is not an Integer or is greater than 10. Phone extensions and subscriber numbers are conventionally at most 10 digits, so longer or non-integer lengths are rejected before generation. Note the message says 'lesser than 10' but the code actually allows length == 10.

Source

Thrown at lib/faker/default/phone_number.rb:141

        fetch('phone_number.exchange_code')
      end

      ##
      # Produces a random extension / subscriber number. Can be used for both extensions and last four digits of phone number.
      #
      # @param length [Integer] Specifies the length of the return value. Defaults to 4.
      # @return [String]
      #
      # @example
      #   Faker::PhoneNumber.subscriber_number #=> "3873"
      #   Faker::PhoneNumber.subscriber_number(length: 2) #=> "39"
      #   Faker::PhoneNumber.extension #=> "3764"
      #   Faker::PhoneNumber.extension(length: 2) => "37"
      #
      # @faker.version 1.3.0
      def subscriber_number(length: 4)
        if !length.is_a?(Integer) || length > 10
          raise ArgumentError, 'length must be an Integer and be lesser than 10'
        end

        generate(:string) do |g|
          g.int(length: length)
        end
      end

      alias extension subscriber_number
    end
  end
end

View on GitHub (pinned to cca4184947)

Solutions

  1. Pass an Integer between 1 and 10, e.g. length: 4 (default).
  2. Cast config values: length: ENV['EXT_LEN'].to_i.
  3. If you need more than 10 digits, use Faker::Number.number(digits: n) and format it yourself instead of subscriber_number.

Example fix

# before
Faker::PhoneNumber.subscriber_number(length: ENV['EXTENSION_LENGTH']) # string -> ArgumentError

# after
Faker::PhoneNumber.subscriber_number(length: ENV['EXTENSION_LENGTH'].to_i)
Defensive patterns

Strategy: validation

Validate before calling

length = length.to_i
length = 4 unless length.between?(1, 10)
Faker::PhoneNumber.subscriber_number(length: length)

Type guard

def valid_subscriber_length?(length)
  length.is_a?(Integer) && length <= 10 && length > 0
end

Try / catch

begin
  Faker::PhoneNumber.subscriber_number(length: len)
rescue ArgumentError
  Faker::PhoneNumber.subscriber_number # default length 4
end

Prevention

When it happens

Trigger: Faker::PhoneNumber.subscriber_number(length: 11), length: '4' (string), length: 4.0 (Float), or length: nil raises at lib/faker/default/phone_number.rb:141; length: 4 and length: 10 are fine.

Common situations: Reading the extension length from config/env where it arrives as a string; generating fake numbers that must match a fixed-width column longer than 10 digits; porting code that assumed no length cap.

Related errors


AI-assisted analysis of faker-ruby/faker@cca4184947 (2026-08-21). Data as JSON: /api/errors/ebc06da332a1d376. Report an issue: GitHub.