Sha256: 690fc0942cda4ba7ca98ca75908544bcf3a8f278a45c8f27f19ee83f1c4bbc82
Contents?: true
Size: 1.44 KB
Versions: 3
Compression:
Stored size: 1.44 KB
Contents
module Airbrake module Rack ## # Represents an authenticated Warden user, which can be converted to # Airbrake's payload format. class User # Finds the Warden user in the Rack environment and creates a new user # wrapper. # # @param [Hash{String=>Object}] rack_env The Rack environment # @return [Airbrake::Rack::User, nil] def self.extract(rack_env) return unless (warden = rack_env['warden']) new(warden.user(run_callbacks: false)) end ## # @param [Warden::Proxy] warden_user def initialize(warden_user) @warden_user = warden_user end ## # Converts the user to Airbrake payload user. # @return [Hash{Symbol=>String}] the hash with retrieved user details def to_hash user = {} user[:id] = try_to_get(:id) user[:name] = full_name user[:username] = try_to_get(:username) user[:email] = try_to_get(:email) user = user.delete_if { |_key, val| val.nil? } user.empty? ? user : { user: user } end private def try_to_get(key) String(@warden_user.__send__(key)) if @warden_user.respond_to?(key) end def full_name # Try to get first and last names. If that fails, try to get just 'name'. name = [try_to_get(:first_name), try_to_get(:last_name)].compact.join(' ') name.empty? ? try_to_get(:name) : name end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
airbrake-5.0.1 | lib/airbrake/rack/user.rb |
airbrake-5.0.0 | lib/airbrake/rack/user.rb |
airbrake-5.0.0.rc.1 | lib/airbrake/rack/user.rb |