Class: ROM::Relation::Name Private

Inherits:
Object
  • Object
show all
Defined in:
core/lib/rom/relation/name.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Relation name container

This is a simple struct with two fields. It handles both relation registration name (i.e. Symbol) and dataset name. The reason we need it is a simplification of passing around these two objects. It is quite common to have a dataset named differently from a relation built on top if you are dealing with a legacy DB and often you need both to support things such as associations (rom-sql as an example).

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relation, dataset = relation, aliaz = nil) ⇒ Name

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Name.



61
62
63
64
65
66
# File 'core/lib/rom/relation/name.rb', line 61

def initialize(relation, dataset = relation, aliaz = nil)
  @relation = relation
  @dataset = dataset || relation
  @key = aliaz || relation
  @aliaz = aliaz
end

Instance Attribute Details

#aliazObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



56
57
58
# File 'core/lib/rom/relation/name.rb', line 56

def aliaz
  @aliaz
end

#datasetSymbol (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Underlying dataset name

Returns:

  • (Symbol)


54
55
56
# File 'core/lib/rom/relation/name.rb', line 54

def dataset
  @dataset
end

#keyObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



58
59
60
# File 'core/lib/rom/relation/name.rb', line 58

def key
  @key
end

#relationSymbol (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Relation registration name

Returns:

  • (Symbol)


47
48
49
# File 'core/lib/rom/relation/name.rb', line 47

def relation
  @relation
end

Class Method Details

.[](*args) ⇒ ROM::Relation::Name

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Coerce an object to a Name instance

Returns:



25
26
27
28
29
30
31
32
33
34
35
# File 'core/lib/rom/relation/name.rb', line 25

def self.[](*args)
  cache.fetch_or_store(args.hash) do
    relation, dataset, aliaz = args

    if relation.is_a?(Name)
      relation
    else
      new(relation, dataset, aliaz)
    end
  end
end

.cacheObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



38
39
40
# File 'core/lib/rom/relation/name.rb', line 38

def self.cache
  @cache ||= Concurrent::Map.new
end

Instance Method Details

#aliased?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


74
75
76
# File 'core/lib/rom/relation/name.rb', line 74

def aliased?
  aliaz && aliaz != relation
end

#as(aliaz) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



69
70
71
# File 'core/lib/rom/relation/name.rb', line 69

def as(aliaz)
  self.class[relation, dataset, aliaz]
end

#inspectString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return inspected relation

Returns:

  • (String)


107
108
109
# File 'core/lib/rom/relation/name.rb', line 107

def inspect
  "#{self.class.name}(#{self})"
end

#to_sString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return relation name

Returns:

  • (String)


83
84
85
86
87
88
89
90
91
# File 'core/lib/rom/relation/name.rb', line 83

def to_s
  if aliased?
    "#{relation} on #{dataset} as #{aliaz}"
  elsif relation == dataset
    relation.to_s
  else
    "#{relation} on #{dataset}"
  end
end

#to_symSymbol

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Alias for registration key implicitly called by ROM::Registry

Returns:

  • (Symbol)


98
99
100
# File 'core/lib/rom/relation/name.rb', line 98

def to_sym
  relation
end