module BehindTheName

Constants

VERSION

Public Class Methods

lookup(name:, exact: 'no') click to toggle source
# File lib/behind_the_name.rb, line 22
def self.lookup(name:, exact: 'no')
  params = {
    name: name,
    exact: normalize_boolean(exact),
    key: api_key
  }

  RestClient.get(uri(:lookup), params: params).parse_as_json
end
random(gender: nil, usage: nil, number: nil, randomsurname: nil) click to toggle source
# File lib/behind_the_name.rb, line 32
def self.random(gender: nil, usage: nil, number: nil, randomsurname: nil)
  usage = validate_and_normalize_usage!(usage, :appendix2)
  validate_number!(number)

  params = {
    gender: normalize_gender(gender),
    usage: usage,
    number: number,
    randomsurname: normalize_boolean(randomsurname),
    key: api_key
  }.compact

  RestClient.get(uri(:random), params: params).parse_as_json
end

Private Class Methods

normalize_boolean(boolean) click to toggle source
# File lib/behind_the_name.rb, line 94
                     def self.normalize_boolean(boolean)
  case boolean
  when true, /^y/ then 'yes'
  else 'no'
  end
end
normalize_gender(gender) click to toggle source
# File lib/behind_the_name.rb, line 83
                     def self.normalize_gender(gender)
  return if gender.nil?
  case gender.to_sym
  when :m, :masculine then :m
  when :f, :feminine then :f
  when :u, :unisex then :u
  else raise ParamError, "`#{gender.inspect}` is not a valid key for gender; " \
                         'use :masculine, :feminine, or :unisex'
  end
end
uri(endpoint) click to toggle source
# File lib/behind_the_name.rb, line 61
                     def self.uri(endpoint)
  URI::HTTPS.build({ host: 'www.behindthename.com', path: "/api/#{endpoint}.json" }).to_s
end
validate_and_normalize_usage!(usage, appendix) click to toggle source
# File lib/behind_the_name.rb, line 66
                     def self.validate_and_normalize_usage!(usage, appendix)
  return if usage.nil?
  Usages.from(appendix).normalize(usage)
rescue Errno::ENOENT
  raise RuntimeError, 'Requested an appendix that does not exist.'
rescue KeyError
  raise ParamError, "`#{usage.inspect}` is not a valid key for usage"
end
validate_number!(number) click to toggle source
# File lib/behind_the_name.rb, line 75
                     def self.validate_number!(number)
  return if number.nil?
  unless number.kind_of?(Integer) && (1..6).include?(number)
    raise ParamError, "`#{number.inspect}` is not a valid key for numberi; " \
                      'try an integer between 1 and 6'
  end
end

Public Instance Methods

api_key() click to toggle source
# File lib/behind_the_name.rb, line 15
def api_key
  (@api_key ||= ENV['BEHINDTHENAME_API_KEY']).tap do |key|
    raise 'Need an API KEY.' if key.nil?
  end
end