Class: ROM::Header
- Inherits:
-
Object
- Object
- ROM::Header
- 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
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 }.freeze
Instance Attribute Summary collapse
- #attributes ⇒ Object readonly private
- #copy_keys ⇒ Object readonly private
-
#mapping ⇒ Hash
readonly
private
Attribute key/name mapping for all primitive attributes.
-
#model ⇒ Class
readonly
private
Optional model associated with a header.
-
#pop_keys ⇒ Array
readonly
private
All attribute names that are popping from a tuple.
- #reject_keys ⇒ Object readonly private
-
#tuple_keys ⇒ Array
readonly
private
All attribute keys that are in a tuple.
Class Method Summary collapse
-
.coerce(input, options = {}) ⇒ Header
private
Coerce array with attribute definitions into a header object.
Instance Method Summary collapse
-
#[](name) ⇒ Attribute
private
Return attribute identified by its name.
-
#aliased? ⇒ Boolean
private
Return if there are any aliased attributes.
-
#combined ⇒ Array<Combined>
private
Return all Combined attributes.
-
#each {|Attribute| ... } ⇒ Object
private
Iterate over attributes.
-
#initialize(attributes, options = {}) ⇒ Header
constructor
private
A new instance of Header.
-
#keys ⇒ Object
private
Return attribute keys.
-
#non_primitives ⇒ Array<Group,Fold,Ungroup,Unfold,Wrap,Unwrap>
private
Return all non-primitive attributes that don’t require mapping.
-
#postprocessed ⇒ Array<Ungroup,Unfold>
private
Returns all attributes that require postprocessing.
-
#preprocessed ⇒ Array<Group,Fold>
private
Returns all attributes that require preprocessing.
-
#primitives ⇒ Array<Attribute>
private
Return all primitive attributes that require mapping.
-
#wraps ⇒ Array<Wrap>
private
Return all Wrap attributes.
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 74 |
# File 'lib/rom/header.rb', line 64 def initialize(attributes, = {}) = @model = [:model] @copy_keys = .fetch(:copy_keys, false) @reject_keys = .fetch(:reject_keys, false) @attributes = attributes initialize_mapping initialize_tuple_keys initialize_pop_keys end |
Instance Attribute Details
#attributes ⇒ Object (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.
28 29 30 |
# File 'lib/rom/header.rb', line 28 def attributes @attributes end |
#copy_keys ⇒ Object (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 copy_keys @copy_keys end |
#mapping ⇒ Hash (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.
33 34 35 |
# File 'lib/rom/header.rb', line 33 def mapping @mapping end |
#model ⇒ Class (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.
19 20 21 |
# File 'lib/rom/header.rb', line 19 def model @model end |
#pop_keys ⇒ Array (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.
43 44 45 |
# File 'lib/rom/header.rb', line 43 def pop_keys @pop_keys end |
#reject_keys ⇒ Object (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_keys ⇒ Array (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.
38 39 40 |
# File 'lib/rom/header.rb', line 38 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
53 54 55 56 57 58 59 60 61 |
# File 'lib/rom/header.rb', line 53 def self.coerce(input, = {}) if input.instance_of?(self) input else attributes = input.to_h { [_1.first, Attribute.coerce(_1)] } new(attributes, ) 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
100 |
# File 'lib/rom/header.rb', line 100 def [](name) = attributes.fetch(name) |
#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
86 |
# File 'lib/rom/header.rb', line 86 def aliased? = any?(&:aliased?) |
#combined ⇒ Array<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
107 |
# File 'lib/rom/header.rb', line 107 def combined = by_type(Combined) |
#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
81 |
# File 'lib/rom/header.rb', line 81 def each(&) = attributes.each_value(&) |
#keys ⇒ 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.
Return attribute keys
An attribute key corresponds to tuple attribute names
93 |
# File 'lib/rom/header.rb', line 93 def keys = attributes.keys |
#non_primitives ⇒ Array<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
135 |
# File 'lib/rom/header.rb', line 135 def non_primitives = preprocessed + wraps |
#postprocessed ⇒ Array<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
121 |
# File 'lib/rom/header.rb', line 121 def postprocessed = by_type(Ungroup, Unfold) |
#preprocessed ⇒ Array<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
114 |
# File 'lib/rom/header.rb', line 114 def preprocessed = by_type(Group, Fold) |