class Gendered::Guesser
Constants
- ENDPOINT
- USAGE_HEADERS
Attributes
names[RW]
options[RW]
usage[R]
Public Class Methods
new(names, options = {})
click to toggle source
# File lib/gendered/guesser.rb, line 15 def initialize(names, options = {}) @names = Array(names) raise ArgumentError, "names cannot be empty" if @names.empty? @options = Gendered.config.merge(options || {}) @options[:connection] ||= {} @usage = { :limit => nil, :remaining => nil, :reset => nil } end
Public Instance Methods
guess!()
click to toggle source
# File lib/gendered/guesser.rb, line 24 def guess! response = request(request_options) update_usage(response) body = parse(response.body) case response.code when 200 create_names(body) when 429 raise RateLimitError.new(body["error"], *@usage.values_at(:limit, :remaining, :reset)) else raise GenderedError.new(body["error"]) end end
Private Instance Methods
create_names(guesses)
click to toggle source
# File lib/gendered/guesser.rb, line 44 def create_names(guesses) names.collect do |name| name = Name.new(name) if name.is_a?(String) guess = case when guesses.is_a?(Array) guesses.find { |g| g["name"] == name.value } else guesses end if guess["gender"] name.gender = guess["gender"].to_sym name.probability = guess["probability"] name.sample_size = guess["count"] end name end end
parse(response)
click to toggle source
# File lib/gendered/guesser.rb, line 78 def parse(response) JSON.parse(response) rescue JSON::ParserError => e raise GenderedError, "cannot parse response JSON: #{e}" end
request(options)
click to toggle source
# File lib/gendered/guesser.rb, line 72 def request(options) HTTP.get(ENDPOINT, options) rescue => e raise GenderedError, "request failed: #{e}" end
request_options()
click to toggle source
# File lib/gendered/guesser.rb, line 64 def request_options options = {} options[:params] = @options.reject { |k, v| k == :connection || v.nil? } options[:params]["name[]"] = @names options[:connection] = @options[:connection] unless @options[:connection].empty? options end
update_usage(response)
click to toggle source
# File lib/gendered/guesser.rb, line 40 def update_usage(response) USAGE_HEADERS.each { |header, key| @usage[key] = response[header].to_i } end