Class: Soar::Registry::Staff::Directory::DynamoDb::Identity

Inherits:
Base
  • Object
show all
Defined in:
lib/soar/registry/staff/directory/dynamo_db/identity.rb

Constant Summary collapse

LIMIT =
10
INDEXED_ATTRIBUTES =
['email', 'entity_id']

Instance Attribute Summary

Attributes inherited from Base

#client, #configuration, #credentials

Instance Method Summary collapse

Methods inherited from Base

#authenticate, #bootstrap, #bootstrapped?, #connect, #connected?, #put_identity, #ready?, #uri

Instance Method Details

#fetch_identity(identifier) ⇒ Hash

Returns the identity.

Parameters:

  • identity_id (String)

    primary key of the identity

Returns:

  • (Hash)

    the identity

Raises:

  • (Soar::Registry::Staff::Directory::DynamoDb::Error::UniqueIdentifierNotFoundError)

    if primary key not found



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/soar/registry/staff/directory/dynamo_db/identity.rb', line 21

def fetch_identity(identifier)
  options = {
    table_name: @table_name,
    key: {
      identity_id: identifier
    }
  }
  identity = @client.get_item(options)
  raise Soar::Registry::Staff::Directory::Error::UniqueIdentifierNotFoundError, 'Unable to find identity' if identity.item.nil?
  identity.item
end

#indexed_attributesArray

Returns a list of primary keys and global secondary indexes.

Returns:

  • (Array)

    a list of primary keys and global secondary indexes



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/soar/registry/staff/directory/dynamo_db/identity.rb', line 62

def indexed_attributes
  resp = @client.describe_table({
    table_name: @table_name
  })
  indexed_attributes = []
  resp['table']['key_schema'].each { |key_schema|
    indexed_attributes << key_schema['attribute_name']
  }
  resp['table']['global_secondary_indexes'].each { |index| 
    index['key_schema'].each { |key_schema| 
      indexed_attributes << key_schema['attribute_name']
    }
  }
  indexed_attributes
end

#search_identities(identifier_attribute, identifier_value) ⇒ Array

Returns list of identities.

Parameters:

  • identifier_attribute (String)
  • identifier_value (String)

Returns:

  • (Array)

    list of identities

Raises:

  • (ArgumentError)

    if query or index is not specified



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/soar/registry/staff/directory/dynamo_db/identity.rb', line 39

def search_identities(identifier_attribute, identifier_value)
  raise ArgumentError, "Attribute is required" if identifier_attribute.nil?
  raise ArgumentError, 'Value is required' if identifier_value.nil?
  options = {
    table_name: @table_name,
    select: 'ALL_ATTRIBUTES',
    limit: LIMIT,
    key_condition_expression: "#{identifier_attribute} = :value",
    expression_attribute_values: {
      ":value": identifier_value 
    }
  }

  options.merge!({index_name: "#{identifier_attribute}_index"}) if INDEXED_ATTRIBUTES.include?(identifier_attribute)
  identity = @client.query(options)
  identity.items.map { |item| 
    Hashie.stringify_keys(item)
  }
end