Class: ROM::Header::Attribute

Inherits:
Object
  • Object
show all
Defined in:
lib/rom/header/attribute.rb

Overview

An attribute provides information about a specific attribute in a tuple

This may include information about how an attribute should be renamed, or how its value should coerced.

More complex attributes describe how an attribute should be transformed.

Direct Known Subclasses

Embedded

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, meta) ⇒ Attribute

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 Attribute.



69
70
71
72
73
74
# File 'lib/rom/header/attribute.rb', line 69

def initialize(name, meta)
  @name = name
  @meta = meta
  @key = meta.fetch(:from) { name }
  @type = meta.fetch(:type)
end

Instance Attribute Details

#keySymbol (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.

Returns key of an attribute that corresponds to tuple attribute.



24
25
26
# File 'lib/rom/header/attribute.rb', line 24

def key
  @key
end

#metaHash (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.

Returns additional meta information.



34
35
36
# File 'lib/rom/header/attribute.rb', line 34

def meta
  @meta
end

#nameSymbol (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.

Returns name of an attribute.



19
20
21
# File 'lib/rom/header/attribute.rb', line 19

def name
  @name
end

#typeSymbol (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.

Returns type identifier (defaults to :object).



29
30
31
# File 'lib/rom/header/attribute.rb', line 29

def type
  @type
end

Class Method Details

.[](meta) ⇒ Class

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 attribute class for a given meta hash



43
44
45
46
# File 'lib/rom/header/attribute.rb', line 43

def self.[](meta)
  key = (meta.keys & TYPE_MAP.keys).first
  TYPE_MAP.fetch(key || meta[:type], self)
end

.coerce(input) ⇒ Attribute

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 array with attribute meta-data into an attribute object



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/rom/header/attribute.rb', line 55

def self.coerce(input)
  name = input[0]
  meta = (input[1] || {}).dup

  meta[:type] ||= :object

  if meta.key?(:header)
    meta[:header] = Header.coerce(meta[:header], model: meta[:model])
  end

  self[meta].new(name, meta)
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.

Return if an attribute should be aliased



86
87
88
# File 'lib/rom/header/attribute.rb', line 86

def aliased?
  key != name
end

#mappingHash

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 :key-to-:name mapping hash



95
96
97
# File 'lib/rom/header/attribute.rb', line 95

def mapping
  { key => name }
end

#typed?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.

Return if an attribute has a specific type identifier



79
80
81
# File 'lib/rom/header/attribute.rb', line 79

def typed?
  type != :object
end

#union?Boolean



99
100
101
# File 'lib/rom/header/attribute.rb', line 99

def union?
  key.is_a? ::Array
end