lib/rbbt/util/tsv/accessor.rb in rbbt-util-3.0.3 vs lib/rbbt/util/tsv/accessor.rb in rbbt-util-3.1.0

- old
+ new

@@ -83,10 +83,17 @@ def fields_in_namespace(namespace = nil) namespace = self.namespace if namespace == nil or TrueClass === namespace fields.select{|f| f.namespace.nil? or f.namespace == namespace} end + def key_field + return nil if @key_field.nil? + k = @key_field.dup + k.extend Field + k + end + def fields return nil if @fields.nil? fds = @fields fds.each do |f| f.extend Field end if Array === @fields fds.each do |f| f.namespace = namespace end unless namespace.nil? @@ -111,11 +118,15 @@ all_fields.select{|f| f.namespace.nil? or f.namespace == namespace} end def self.identify_field(key, fields, field) return field if Integer === field - return :key if field.nil? or field == 0 or field.to_sym == :key or key == field + if String === field + field = field.dup + field.extend Field + end + return :key if field.nil? or field == 0 or field.to_sym == :key or field == key return nil if fields.nil? return fields.collect{|f| f.to_s}.index field if fields.collect{|f| f.to_s}.index field return fields.index field end @@ -134,11 +145,11 @@ else field end end if Array === new_fields @fields = new_fields - @data.fields = new_fields if @data.respond_to? :fields= + @data.fields = new_fields if @data.respond_to? :fields= and @data.write? end def old_fields=(new_fields) @fields = new_fields @data.fields = new_fields if @data.respond_to? :fields= @@ -194,10 +205,14 @@ key = key.downcase if @case_insensitive and key !~ /^__Ref:/ follow @data[key] end + def delete(key) + @data.delete(key) + end + def values_at(*keys) keys.collect{|k| self[k] } end @@ -256,10 +271,14 @@ if FalseClass === keys or TrueClass === keys no_options = keys keys = nil end + if keys == :sort + keys = self.keys.sort + end + str = "" str << "#: " << Misc.hash2string(EXTRA_ACCESSORS.collect{|key| [key, self.send(key)]}) << "\n" unless no_options if fields str << "#" << key_field << "\t" << fields * "\t" << "\n" @@ -276,7 +295,13 @@ str << key.dup << values_to_s(values) end end str + end + + def value_peek + peek = {} + keys[0..10].zip(values[0..10]).each do |k,v| peek[k] = v end + peek end end