Sha256: b0b78d71a28e12448b3ee307027a06b6fa9e1f0c3dfdb1a1b39ad0b26dc310a1

Contents?: true

Size: 991 Bytes

Versions: 22

Compression:

Stored size: 991 Bytes

Contents

# frozen_string_literal: true

module Honeycomb
  # Methods for extracting common warden/devise fields from a rack env hash
  module Warden
    COMMON_USER_FIELDS = %i[
      email
      name
      first_name
      last_name
      created_at
      id
    ].freeze

    SCOPE_PATTERN = /^warden\.user\.([^.]+)\.key$/.freeze

    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
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
honeycomb-beeline-3.1.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-3.0.1 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-3.0.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.11.1.pre.dev lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.11.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.10.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.9.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.8.2 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.8.1 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.8.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.7.1 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.7.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.6.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.5.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.4.2 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.4.1 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.4.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.3.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.2.0 lib/honeycomb/integrations/warden.rb
honeycomb-beeline-2.1.2 lib/honeycomb/integrations/warden.rb