module Honeycomb::Warden

Methods for extracting common warden/devise fields from a rack env hash

Constants

COMMON_USER_FIELDS
SCOPE_PATTERN

Public Instance Methods

extract_user_information(env) { |"user.#{field}", send| ... } click to toggle source
# File lib/honeycomb/integrations/warden.rb, line 17
def extract_user_information(env)
  warden = env["warden"]

  return unless warden

  session = env["rack.session"] || {}
  keys = session.keys.select do |key|
    key.match(SCOPE_PATTERN)
  end
  warden_scopes = keys.map do |key|
    key.gsub(SCOPE_PATTERN, "\\1")
  end
  best_scope = warden_scopes.include?("user") ? "user" : warden_scopes.first

  return unless best_scope

  env["warden"].user(scope: best_scope, run_callbacks: false).tap do |user|
    COMMON_USER_FIELDS.each do |field|
      user.respond_to?(field) && yield("user.#{field}", user.send(field))
    end
  end
end