lib/rbbt/util/misc/objects.rb in rbbt-util-5.11.9 vs lib/rbbt/util/misc/objects.rb in rbbt-util-5.12.0

- old
+ new

@@ -1,78 +1,157 @@ \ No newline at end of file +module Misc + + def self.prepare_entity(entity, field, options = {}) + return entity unless defined? Entity + return entity unless String === entity or Array === entity + options ||= {} + + dup_array = options.delete :dup_array + + if Annotated === field or Entity.respond_to?(:formats) and Entity.formats.include? field + params = options.dup + + params[:format] ||= params.delete "format" + params.merge!(:format => field) unless params.include?(:format) and not ((f = params[:format]).nil? or (String === f and f.empty?)) + + mod = Entity === field ? field : Entity.formats[field] + entity = mod.setup( + ((entity.frozen? and not entity.nil?) ? entity.dup : ((Array === entity and dup_array) ? entity.collect{|e| e.nil? ? e : e.dup} : entity) ), + params + ) + end + + entity + end + + def self.consolidate(list) + list.inject(nil){|acc,e| + if acc.nil? + acc = e + else + acc.concat e + acc + end + } + end + + def self.append_zipped(current, new) + current.each do |v| + n = new.shift + if Array === n + v.concat new + else + v << n + end + end + current + end + + def self.zip_fields(array) + return [] if array.empty? or (first = array.first).nil? + first.zip(*array[1..-1]) + end + + def self.field_position(fields, field, quiet = false) + return field if Integer === field or Range === field + raise FieldNotFoundError, "Field information missing" if fields.nil? && ! quiet + fields.each_with_index{|f,i| return i if f == field} + field_re = Regexp.new /^#{field}$/i + fields.each_with_index{|f,i| return i if f =~ field_re} + raise FieldNotFoundError, "Field #{ field.inspect } was not found" unless quiet + end +end + +class Hash + def chunked_values_at(keys, max = 5000) + Misc.ordered_divide(keys, max).inject([]) do |acc,c| + new = self.values_at(*c) + new.annotate acc if new.respond_to? :annotate and acc.empty? + acc.concat(new) + end + end +end + +module LaterString + def to_s + yield + end +end +