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.

Returns:

  • (Symbol)

    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.

Returns:

  • (Hash)

    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.

Returns:

  • (Symbol)

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

Returns:

  • (Symbol)

    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

Parameters:

  • meta (Hash)

    hash with type information and optional transformation info

Returns:

  • (Class)


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

Parameters:

  • input (Array<Symbol,Hash>)

    attribute name/options pair

Returns:



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

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

  meta[:type] ||= :object

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

  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

Returns:

  • (Boolean)


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

Returns:



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

Returns:

  • (Boolean)


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

def typed?
  type != :object
end

#union?Boolean

Returns:

  • (Boolean)


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

def union?
  key.is_a? ::Array
end