class Keycard::InstitutionFinder

looks up institution ID(s) by IP address

Constants

IDENTITY_ATTRS
INST_QUERY

Attributes

stmt[R]

Public Class Methods

new(db: Keycard::DB.db) click to toggle source
# File lib/keycard/institution_finder.rb, line 24
def initialize(db: Keycard::DB.db)
  @db = db
  @stmt = @db[INST_QUERY, *[:$client_ip] * 4].prepare(:select, :unused)
end

Public Instance Methods

attributes_for(request) click to toggle source
# File lib/keycard/institution_finder.rb, line 33
def attributes_for(request)
  return {} unless (numeric_ip = numeric_ip(request.client_ip))

  insts = insts_for_ip(numeric_ip)

  if !insts.empty?
    { dlpsInstitutionId: insts }
  else
    {}
  end
end
identity_keys() click to toggle source
# File lib/keycard/institution_finder.rb, line 29
def identity_keys
  IDENTITY_ATTRS
end

Private Instance Methods

insts_for_ip(numeric_ip) click to toggle source
# File lib/keycard/institution_finder.rb, line 49
def insts_for_ip(numeric_ip)
  stmt.call(client_ip: numeric_ip).map { |row| row[:inst] }
end
numeric_ip(dotted_ip) click to toggle source
# File lib/keycard/institution_finder.rb, line 53
def numeric_ip(dotted_ip)
  return unless dotted_ip

  begin
    IPAddr.new(dotted_ip).to_i
  rescue IPAddr::InvalidAddressError
    nil
  end
end