Sha256: fefeaffbbfb59ef31a4dd2d358e0f2df1358fffa00d9e8f55fc83c316b245a22

Contents?: true

Size: 1.88 KB

Versions: 7

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true
# typed: true

module WorkOS
  # The Profile class provides a lighweight wrapper around
  # a normalized response from the various IDPs WorkOS
  # supports as part of the SSO integration. This class
  # is not meant to be instantiated in user space, and
  # is instantiated internally but exposed.
  class Profile
    extend T::Sig

    sig { returns(String) }
    attr_accessor :id, :email, :first_name, :last_name, :connection_id,
                  :connection_type, :idp_id, :raw_attributes

    sig { params(profile_json: String).void }
    def initialize(profile_json)
      raw = parse_json(profile_json)

      @id = T.let(raw.id, String)
      @email = T.let(raw.email, String)
      @first_name = raw.first_name
      @last_name = raw.last_name
      @connection_id = T.let(raw.connection_id, String)
      @connection_type = T.let(raw.connection_type, String)
      @idp_id = raw.idp_id
      @raw_attributes = raw.raw_attributes
    end

    sig { returns(String) }
    def full_name
      [first_name, last_name].compact.join(' ')
    end

    def to_json(*)
      {
        id: id,
        email: email,
        first_name: first_name,
        last_name: last_name,
        connection_id: connection_id,
        connection_type: connection_type,
        idp_id: idp_id,
        raw_attributes: raw_attributes,
      }
    end

    private

    sig { params(json_string: String).returns(WorkOS::Types::ProfileStruct) }
    def parse_json(json_string)
      hash = JSON.parse(json_string, symbolize_names: true)

      WorkOS::Types::ProfileStruct.new(
        id: hash[:id],
        email: hash[:email],
        first_name: hash[:first_name],
        last_name: hash[:last_name],
        connection_id: hash[:connection_id],
        connection_type: hash[:connection_type],
        idp_id: hash[:idp_id],
        raw_attributes: hash[:raw_attributes],
      )
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
workos-1.5.1 lib/workos/profile.rb
workos-1.5.0 lib/workos/profile.rb
workos-1.4.0 lib/workos/profile.rb
workos-1.3.0 lib/workos/profile.rb
workos-1.2.1 lib/workos/profile.rb
workos-1.2.0 lib/workos/profile.rb
workos-1.1.0 lib/workos/profile.rb