lib/rbbt/tsv/manipulate.rb in rbbt-util-4.3.0 vs lib/rbbt/tsv/manipulate.rb in rbbt-util-4.4.0

- old
+ new

@@ -172,18 +172,20 @@ each do |key, value| progress_monitor.tick if progress_monitor keys, value = traverser.process(key, value) + keys = [keys].compact unless Array === keys + # Annotated with Entity and NamedArray if not @unnamed if not traverser.new_field_names.nil? case type when :double, :list - NamedArray.setup value, traverser.new_field_names + NamedArray.setup value, traverser.new_field_names, key, entity_options when :flat, :single - Entity.formats[traverser.new_field_names.first].setup(value, :format => traverser.new_field_names.first) if defined?(Entity) and Entity.respond_to?(:formats) and Entity.formats.include? traverser.new_field_names + Misc.prepare_entity(value, traverser.new_field_names.first, entity_options) end end end next if keys.nil? @@ -195,22 +197,22 @@ r = v[i] r = v[0] if r.nil? r } - if not @unnamed and defined?(Entity) and not traverser.new_key_field_name.nil? and Entity.respond_to?(:formats) and Entity.formats.include? traverser.new_key_field_name - k = Entity.formats[traverser.new_key_field_name].setup(k.dup, :format => traverser.new_key_field_name) + if not @unnamed + k = Misc.prepare_entity(k, traverser.new_key_field_name, entity_options) end v.key = k if NamedArray === v yield k, v end else keys.each do |key| - if not @unnamed and defined?(Entity) and not traverser.new_key_field_name.nil? and Entity.respond_to?(:formats) and Entity.formats.include? traverser.new_key_field_name - key = Entity.formats[traverser.new_key_field_name].setup(key.dup, :format => traverser.new_key_field_name) + if not @unnamed + k = Misc.prepare_entity(k, traverser.new_key_field_name, entity_options) end value.key = key if NamedArray === value yield key, value end end @@ -316,15 +318,27 @@ new[key] = values if [key,values].flatten.select{|v| v =~ method}.any? end end when String === method if block_given? - pos = identify_field method with_unnamed do - through do |key, values| - new[key] = values if yield((method == key_field or method == :key)? key : values[pos]) + case + when (method == key_field or method == :key) + through do |key, values| + new[key] = values if yield(key) + end + when (type == :single or type == :flat) + through do |key, value| + new[key] = value if yield(value) + end + else + pos = identify_field method + through do |key, values| + new[key] = values if yield(values[pos]) + end end + end else with_unnamed do through do |key, values| new[key] = values if [key,values].flatten.select{|v| v == method}.any? @@ -349,19 +363,19 @@ through :key, key do |key, value| new[key] = self[key] if method.include? value end when :list through :key, key do |key, values| - new[key] = self[key] if method.include? value.first + new[key] = self[key] if method.include? values.first end when :flat #untested through :key, key do |key, values| new[key] = self[key] if (method & values.flatten).any? end else through :key, key do |key, values| - new[key] = self[key] if (method & values.first).any? + new[key] = self[key] if (method & values.flatten).any? end end end when Regexp === method with_unnamed do @@ -446,9 +460,10 @@ when NamedArray === values values += [new_values] else values << new_values end + self[key] = values end @monitor = old_monitor if not fields.nil? and not name.nil?