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.



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

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.



26
27
28
# File 'lib/rom/header/attribute.rb', line 26

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.



36
37
38
# File 'lib/rom/header/attribute.rb', line 36

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.



21
22
23
# File 'lib/rom/header/attribute.rb', line 21

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



31
32
33
# File 'lib/rom/header/attribute.rb', line 31

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



45
46
47
48
# File 'lib/rom/header/attribute.rb', line 45

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



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

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



88
89
90
# File 'lib/rom/header/attribute.rb', line 88

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



97
98
99
# File 'lib/rom/header/attribute.rb', line 97

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



81
82
83
# File 'lib/rom/header/attribute.rb', line 81

def typed?
  type != :object
end

#union?Boolean



101
102
103
# File 'lib/rom/header/attribute.rb', line 101

def union?
  key.is_a? ::Array
end