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?