Class: Kiba::Extend::Transforms::Deduplicate::FieldGroup
- Inherits:
-
Object
- Object
- Kiba::Extend::Transforms::Deduplicate::FieldGroup
- Defined in:
- lib/kiba/extend/transforms/deduplicate/field_group.rb
Overview
Note:
Tread with caution, as this has not been used much and is not extensively tested.
Field value deduplication that is at least semi-safe for use with grouped fields that expect the same number of values for each field in the grouping
Instance Method Summary collapse
-
#initialize(grouped_fields: [], delim: Kiba::Extend.delim, ignore_case: false, normalized: false) ⇒ FieldGroup
constructor
A new instance of FieldGroup.
-
#process(row) ⇒ Object
Constructor Details
#initialize(grouped_fields: [], delim: Kiba::Extend.delim, ignore_case: false, normalized: false) ⇒ FieldGroup
Returns a new instance of FieldGroup.
118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/kiba/extend/transforms/deduplicate/field_group.rb', line 118 def initialize(grouped_fields: [], delim: Kiba::Extend.delim, ignore_case: false, normalized: false) @fields = grouped_fields @delim = delim @getter = Kiba::Extend::Transforms::Helpers::FieldValueGetter.new( fields: grouped_fields ) @ignore_case = ignore_case if normalized @normalizer = Utils::StringNormalizer.new(downcased: false) end end |
Instance Method Details
#process(row) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/kiba/extend/transforms/deduplicate/field_group.rb', line 132 def process(row) vals = getter.call(row) return row if vals.empty? return row if vals.values.none? { |v| v.match?(delim) } vals.transform_values! do |v| v.split(delim).map { |v| v.empty? ? nil : v } end keep = indexes_to_keep(vals) deduplicate(vals, keep).each do |field, vals| row[field] = vals.join(delim) end row end |