Class: Soar::Registry::Staff::Directory::DynamoDb::Identity
- Inherits:
-
Base
- Object
- SoarIdm::DirectoryProvider
- Base
- Soar::Registry::Staff::Directory::DynamoDb::Identity
- 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
-
#fetch_identity(identifier) ⇒ Hash
The identity.
-
#indexed_attributes ⇒ Array
A list of primary keys and global secondary indexes.
-
#search_identities(identifier_attribute, identifier_value) ⇒ Array
List of identities.
Methods inherited from Base
#authenticate, #bootstrap, #bootstrapped?, #connect, #connected?, #put_identity, #ready?, #uri
Instance Method Details
#fetch_identity(identifier) ⇒ Hash
Returns the identity.
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) = { table_name: @table_name, key: { identity_id: identifier } } identity = @client.get_item() raise Soar::Registry::Staff::Directory::Error::UniqueIdentifierNotFoundError, 'Unable to find identity' if identity.item.nil? identity.item end |
#indexed_attributes ⇒ Array
Returns 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.
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? = { table_name: @table_name, select: 'ALL_ATTRIBUTES', limit: LIMIT, key_condition_expression: "#{identifier_attribute} = :value", expression_attribute_values: { ":value": identifier_value } } .merge!({index_name: "#{identifier_attribute}_index"}) if INDEXED_ATTRIBUTES.include?(identifier_attribute) identity = @client.query() identity.items.map { |item| Hashie.stringify_keys(item) } end |