Class: RDBr::Metadata::Database

Inherits:
Data
  • Object
show all
Includes:
Relationships
Defined in:
lib/rdbr/metadata/database.rb

Constant Summary

Constants included from RelationshipInference

RelationshipInference::INTEGER_TYPES

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Relationships

#incoming_relationships, #outgoing_relationships, #through_relationships

Constructor Details

#initialize(name:, namespaces: [], adapter: nil) ⇒ Database

Returns a new instance of Database.



6
7
8
9
10
11
12
13
14
15
# File 'lib/rdbr/metadata/database.rb', line 6

def initialize(name:, namespaces: [], adapter: nil)
  database_namespaces = Values.collection(namespaces, member: Namespace, field: 'namespaces')
  Values.unique_names!(database_namespaces, field: 'namespaces')
  @relationship_candidates = build_relationship_candidates(database_namespaces).freeze
  super(
    name: Values.name(name, field: 'database name'),
    adapter: Values.deep_copy_freeze(adapter),
    namespaces: database_namespaces
  )
end

Instance Attribute Details

#adapterObject (readonly)

Returns the value of attribute adapter

Returns:

  • (Object)

    the current value of adapter



3
4
5
# File 'lib/rdbr/metadata/database.rb', line 3

def adapter
  @adapter
end

#nameObject (readonly)

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name



3
4
5
# File 'lib/rdbr/metadata/database.rb', line 3

def name
  @name
end

#namespacesObject (readonly)

Returns the value of attribute namespaces

Returns:

  • (Object)

    the current value of namespaces



3
4
5
# File 'lib/rdbr/metadata/database.rb', line 3

def namespaces
  @namespaces
end

Instance Method Details

#namespace(name) ⇒ Object



17
18
19
# File 'lib/rdbr/metadata/database.rb', line 17

def namespace(name)
  namespaces.find{|namespace| namespace.name == name.to_s }
end

#relation(name, namespace: nil) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/rdbr/metadata/database.rb', line 25

def relation(name, namespace: nil)
  return self.namespace(namespace)&.relation(name) if namespace

  matches = relations.select{|relation| relation.name == name.to_s }
  raise InvalidMetadataError, "relation #{name.inspect} is ambiguous; specify a namespace" if matches.length > 1

  matches.first
end

#relationsObject



21
22
23
# File 'lib/rdbr/metadata/database.rb', line 21

def relations
  namespaces.flat_map(&:relations).freeze
end