faker-ruby/faker · error · ArgumentError
background_color must be a hex value without '#'
Error message
background_color must be a hex value without '#'
What it means
Raised by Faker::Placeholdit.image when background_color is given and is not a bare 3- or 6-digit hexadecimal string. The regex /((?:^\h{3}$)|(?:^\h{6}$)){1}(?!.*\H)/ accepts only exactly 'fff'/'ffffff' shapes, so '#ffffff' (with hash), 'ffff' (4 digits), 'gggggg' (non-hex), or nil-adjacent blanks fail; the special value :random is resolved to a generated color before the check.
Source
Thrown at lib/faker/default/placeholdit.rb:35
#
# @example
# # Keyword arguments: size, format, background_color, text_color, text
# Faker::Placeholdit.image #=> "https://via.placeholder.com/300x300.png"
# Faker::Placeholdit.image(size: '50x50') #=> "https://via.placeholder.com/50x50.png"
# Faker::Placeholdit.image(size: '50x50', format: 'jpg') #=> "https://via.placeholder.com/50x50.jpg"
# Faker::Placeholdit.image(size: '50x50', format: 'gif', background_color: 'ffffff') #=> "https://via.placeholder.com/50x50.gif/ffffff"
# Faker::Placeholdit.image(size: '50x50', format: 'jpeg', background_color: :random) #=> "https://via.placeholder.com/50x50.jpeg/39eba7"
# Faker::Placeholdit.image(size: '50x50', format: 'jpeg', background_color: 'ffffff', text_color: '000') #=> "https://via.placeholder.com/50x50.jpeg/ffffff/000"
# Faker::Placeholdit.image(size: '50x50', format: 'jpg', background_color: 'ffffff', text_color: '000', text: 'Some Custom Text') #=> "https://via.placeholder.com/50x50.jpg/ffffff/000?text=Some Custom Text"
#
# @faker.version 1.6.0
def image(size: '300x300', format: 'png', background_color: nil, text_color: nil, text: nil)
background_color = generate_color if background_color == :random
text_color = generate_color if text_color == :random
raise ArgumentError, 'Size should be specified in format 300x300' unless size =~ /\A[0-9]+x[0-9]+\z$/
raise ArgumentError, "Supported formats are #{SUPPORTED_FORMATS.join(', ')}" unless SUPPORTED_FORMATS.include?(format)
raise ArgumentError, "background_color must be a hex value without '#'" unless background_color.nil? || background_color =~ /((?:^\h{3}$)|(?:^\h{6}$)){1}(?!.*\H)/
raise ArgumentError, "text_color must be a hex value without '#'" unless text_color.nil? || text_color =~ /((?:^\h{3}$)|(?:^\h{6}$)){1}(?!.*\H)/
image_url = "https://via.placeholder.com/#{size}.#{format}"
image_url += "/#{background_color}" if background_color
image_url += "/#{text_color}" if text_color
image_url += "?text=#{text}" if text
image_url
end
private
def generate_color
format('%06x', rand * 0xffffff)
end
end
end
end
View on GitHub (pinned to cca4184947)
Solutions
- Pass the hex without '#': background_color: 'ffffff' or 3-digit 'fff'.
- Strip the hash from CSS values: background_color: css_color.delete('#').
- For random colors use background_color: :random.
Example fix
# before
Faker::Placeholdit.image(background_color: theme[:bg]) # '#f5f5f5' from CSS -> ArgumentError
# after
Faker::Placeholdit.image(background_color: theme[:bg].delete('#')) Defensive patterns
Strategy: validation
Validate before calling
background_color = background_color.to_s.delete('#').downcase
background_color = :random unless background_color.match?(/\A\h{3}\z|\A\h{6}\z/)
Faker::Placeholdit.image(background_color: background_color) Type guard
def bare_hex_color?(value)
value.is_a?(String) && value.match?(/\A(?:\h{3}|\h{6})\z/)
end Try / catch
begin Faker::Placeholdit.image(background_color: bg) rescue ArgumentError Faker::Placeholdit.image(background_color: :random) end
Prevention
- Strip '#' from CSS/design-token colors with delete('#') before passing.
- Only 3- or 6-digit hex is accepted; no names, no 4/8-digit hex.
- Use :random when the exact color is irrelevant.
When it happens
Trigger: Faker::Placeholdit.image(background_color: '#ffffff') (leading '#'), background_color: 'ff' or 'fffff' (wrong length), background_color: 'blue' (color name) raises; 'ffffff', 'fff', and :random are accepted.
Common situations: Reusing CSS hex colors from stylesheets verbatim (they conventionally include '#'); passing HTML color names; trimmed or padded values from user input; 8-digit hex with alpha (#ffffff00).
Related errors
- text_color must be a hex value without '#'
- Size should be specified in format 300x300
- Size should be specified in format 300x300
- Supported formats are #{SUPPORTED_FORMATS.join(', ')}
- Search terms must be specified for grayscale images
AI-assisted analysis of faker-ruby/faker@cca4184947 (2026-08-21).
Data as JSON: /api/errors/432cb92a6a58c496.
Report an issue: GitHub.