Class: ROM::Header

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

Overview

Header provides information about data mapping of a specific relation

Processors use headers to build objects that process raw relations that go through mappers.

Defined Under Namespace

Classes: Attribute, Embedded

Constant Summary collapse

Array =

Array is an embedded attribute type

Class.new(Embedded)
Hash =

Hash is an embedded attribute type

Class.new(Embedded)
Combined =

Combined is an embedded attribute type describing combination of multiple relations

Class.new(Embedded)
Wrap =

Wrap is a special type of Hash attribute that requires wrapping transformation

Class.new(Hash)
Unwrap =

Unwrap is a special type of Hash attribute that requires unwrapping transformation

Class.new(Hash)
Group =

Group is a special type of Array attribute that requires grouping transformation

Class.new(Array)
Ungroup =

Ungroup is a special type of Array attribute that requires ungrouping transformation

Class.new(Array)
Fold =

Fold is a special type of Array attribute that requires folding transformation

Class.new(Array)
Unfold =

Unfold is a special type of Array attribute that requires unfolding transformation

Class.new(Array)
Exclude =

Exclude is a special type of Attribute to be removed

Class.new(Attribute)
TYPE_MAP =

TYPE_MAP is a (hash) map of ROM::Header identifiers to ROM::Header types

{
  combine: Combined,
  wrap: Wrap,
  unwrap: Unwrap,
  group: Group,
  ungroup: Ungroup,
  fold: Fold,
  unfold: Unfold,
  hash: Hash,
  array: Array,
  exclude: Exclude
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes, options = {}) ⇒ Header

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



64
65
66
67
68
69
70
71
72
73
# File 'lib/rom/header.rb', line 64

def initialize(attributes, options = {})
  @options = options
  @model = options[:model]
  @reject_keys = options.fetch(:reject_keys, false)

  @attributes = attributes
  initialize_mapping
  initialize_tuple_keys
  initialize_pop_keys
end

Instance Attribute Details

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



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

def attributes
  @attributes
end

#mappingHash (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 attribute key/name mapping for all primitive attributes.

Returns:

  • (Hash)

    attribute key/name mapping for all primitive attributes



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

def mapping
  @mapping
end

#modelClass (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 optional model associated with a header.

Returns:

  • (Class)

    optional model associated with a header



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

def model
  @model
end

#pop_keysArray (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 all attribute names that are popping from a tuple.

Returns:

  • (Array)

    all attribute names that are popping from a tuple



40
41
42
# File 'lib/rom/header.rb', line 40

def pop_keys
  @pop_keys
end

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



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

def reject_keys
  @reject_keys
end

#tuple_keysArray (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 all attribute keys that are in a tuple.

Returns:

  • (Array)

    all attribute keys that are in a tuple



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

def tuple_keys
  @tuple_keys
end

Class Method Details

.coerce(input, options = {}) ⇒ Header

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 array with attribute definitions into a header object

Parameters:

  • input (Array<Array>)

    attribute name/option pairs

  • model (Class)

    optional

Returns:



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rom/header.rb', line 51

def self.coerce(input, options = {})
  if input.instance_of?(self)
    input
  else
    attributes = input.each_with_object({}) { |pair, h|
      h[pair.first] = Attribute.coerce(pair)
    }

    new(attributes, options)
  end
end

Instance Method Details

#[](name) ⇒ 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.

Return attribute identified by its name

Returns:



105
106
107
# File 'lib/rom/header.rb', line 105

def [](name)
  attributes.fetch(name)
end

#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 there are any aliased attributes

Returns:

  • (Boolean)


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

def aliased?
  any?(&:aliased?)
end

#combinedArray<Combined>

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 all Combined attributes

Returns:



114
115
116
# File 'lib/rom/header.rb', line 114

def combined
  by_type(Combined)
end

#each {|Attribute| ... } ⇒ 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.

Iterate over attributes

Yields:



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

def each
  attributes.each_value { |attribute| yield(attribute) }
end

#keysObject

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 keys

An attribute key corresponds to tuple attribute names



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

def keys
  attributes.keys
end

#non_primitivesArray<Group,Fold,Ungroup,Unfold,Wrap,Unwrap>

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 all non-primitive attributes that don’t require mapping



150
151
152
# File 'lib/rom/header.rb', line 150

def non_primitives
  preprocessed + wraps
end

#postprocessedArray<Ungroup,Unfold>

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 all attributes that require postprocessing

Returns:



132
133
134
# File 'lib/rom/header.rb', line 132

def postprocessed
  by_type(Ungroup, Unfold)
end

#preprocessedArray<Group,Fold>

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 all attributes that require preprocessing

Returns:



123
124
125
# File 'lib/rom/header.rb', line 123

def preprocessed
  by_type(Group, Fold)
end

#primitivesArray<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.

Return all primitive attributes that require mapping

Returns:



159
160
161
# File 'lib/rom/header.rb', line 159

def primitives
  to_a - non_primitives
end

#wrapsArray<Wrap>

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 all Wrap attributes

Returns:



141
142
143
# File 'lib/rom/header.rb', line 141

def wraps
  by_type(Wrap)
end