Module: Dataflow::Nodes::Mixin::RenameDottedFields
- Included in:
- SnapshotNode, UpsertNode
- Defined in:
- lib/dataflow/nodes/mixin/rename_dotted_fields.rb
Overview
Support tranversing the record and rename fields that contain a dot ‘.’.
Class Method Summary collapse
-
.included(base) ⇒ Object
Add a mixin-specific field to the node.
Instance Method Summary collapse
-
#rename_dotted_fields(records:) ⇒ Object
Rename the specified dotted fields.
-
#traverse_and_rename_dotted_fields(hash) ⇒ Object
Traverse a hash and look for the fields to rename.
-
#traverse_and_rename_dotted_fields_in_array(array) ⇒ Object
Looks for hashs in the array that may require a transformation.
Class Method Details
.included(base) ⇒ Object
Add a mixin-specific field to the node
8 9 10 11 12 |
# File 'lib/dataflow/nodes/mixin/rename_dotted_fields.rb', line 8 def self.included(base) base.class_eval do field :rename_dotted_fields_in, type: Array end end |
Instance Method Details
#rename_dotted_fields(records:) ⇒ Object
Rename the specified dotted fields
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/dataflow/nodes/mixin/rename_dotted_fields.rb', line 15 def rename_dotted_fields(records:) return if rename_dotted_fields_in.blank? traverse_whole_record = rename_dotted_fields_in.include?('.') records.each do |record| if traverse_whole_record traverse_and_rename_dotted_fields(record) else rename_dotted_fields_in.each do |field| value = record[field] if value.is_a?(Array) traverse_and_rename_dotted_fields_in_array(value) elsif value.is_a?(Hash) traverse_and_rename_dotted_fields(value) end end end end end |
#traverse_and_rename_dotted_fields(hash) ⇒ Object
Traverse a hash and look for the fields to rename
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/dataflow/nodes/mixin/rename_dotted_fields.rb', line 37 def traverse_and_rename_dotted_fields(hash) return if hash.blank? hash.keys.each do |k| value = hash[k] if value.is_a?(Array) traverse_and_rename_dotted_fields_in_array(value) elsif value.is_a?(Hash) traverse_and_rename_dotted_fields(value) end next unless k.include?('.') hash[k.tr('.', '_')] = value hash.delete(k) end end |
#traverse_and_rename_dotted_fields_in_array(array) ⇒ Object
Looks for hashs in the array that may require a transformation
55 56 57 58 59 |
# File 'lib/dataflow/nodes/mixin/rename_dotted_fields.rb', line 55 def traverse_and_rename_dotted_fields_in_array(array) array.each do |v| traverse_and_rename_dotted_fields(v) if v.is_a?(Hash) end end |