def to_memory(permanence = {:new => :new}, exclude_id = true, exclude_timestamps = true)
      return nil unless self.grub
      buccaneers = []
      self.scuttle do |row|
        data_hash = self.data_hash_from_row(row, exclude_id, exclude_timestamps)
        case permanence
          when {:new => :new} then
            buccaneers << self.grub.new(data_hash)
          when {:new => :save} then
            obj = self.grub.new(data_hash)
            buccaneers << obj.save(false)
          when {:new => :create} then
            buccaneers << self.grub.create(data_hash)
        else
          if permanence[:find_or_new]
            obj = self.send_aye(data_hash, permanence[:find_or_new])
            buccaneers << self.grub.new(data_hash) if obj.nil?
          elsif permanence[:find_or_save]
            obj = self.send_aye(data_hash, permanence[:find_or_save])
            if obj.nil?
              obj = self.grub.new(data_hash)
              obj.save(false) if obj.respond_to?(:save)
            end
            buccaneers << obj
          elsif permanence[:find_or_create]
            obj = self.send_aye(data_hash, permanence[:find_or_create])
            if obj.nil?
              self.grub.create(data_hash)
            end
            buccaneers << obj
          elsif permanence[:update_or_new]
            obj = self.send_aye(data_hash, permanence[:update_or_new])
            if obj.nil?
              obj = self.grub.new(data_hash)
            else
              self.save_object(obj, data_hash)
            end
            buccaneers << obj
          elsif permanence[:update_or_save]
            obj = self.send_aye(data_hash, permanence[:update_or_save])
            if obj.nil?
              obj = self.grub.new(data_hash)
              obj.save(false)
            else
              self.save_object(obj, data_hash)
            end
            buccaneers << obj
          elsif permanence[:update_or_create]
            obj = self.send_aye(data_hash, permanence[:update_or_create])
            if obj.nil?
              obj = self.grub.create(data_hash)
            else
              self.save_object(obj, data_hash)
            end
            buccaneers << obj
          end
        end
      end
      buccaneers
    end
def to_memory(permanence = {:new => :new}, exclude_id = true, exclude_timestamps = true)
      return nil unless self.grub
      buccaneers = []
      self.scuttle do |row|
        data_hash = self.data_hash_from_row(row, exclude_id, exclude_timestamps)
        case permanence
          when {:new => :new} then
            buccaneers << self.grub.new(data_hash)
          when {:new => :save} then
            obj = self.grub.new(data_hash)
            buccaneers << obj.save(false)
          when {:new => :create} then
            buccaneers << self.grub.create(data_hash)
        else
          if permanence[:find_or_new]
            obj = self.send_aye(data_hash, permanence[:find_or_new])
            buccaneers << self.grub.new(data_hash) if obj.nil?
          elsif permanence[:find_or_save]
            obj = self.send_aye(data_hash, permanence[:find_or_save])
            if obj.nil?
              obj = self.grub.new(data_hash)
              obj.save(false) if obj.respond_to?(:save)
            end
            buccaneers << obj
          elsif permanence[:find_or_create]
            obj = self.send_aye(data_hash, permanence[:find_or_create])
            if obj.nil?
              self.grub.create(data_hash)
            end
            buccaneers << obj
          elsif permanence[:update_or_new]
            obj = self.send_aye(data_hash, permanence[:update_or_new])
            if obj.nil?
              obj = self.grub.new(data_hash)
            else
              self.save_object(obj, data_hash)
            end
            buccaneers << obj
          elsif permanence[:update_or_save]
            obj = self.send_aye(data_hash, permanence[:update_or_save])
            if obj.nil?
              obj = self.grub.new(data_hash)
              obj.save(false)
            else
              self.save_object(obj, data_hash)
            end
            buccaneers << obj
          elsif permanence[:update_or_create]
            obj = self.send_aye(data_hash, permanence[:update_or_create])
            if obj.nil?
              obj = self.grub.create(data_hash)
            else
              self.save_object(obj, data_hash)
            end
            buccaneers << obj
          end
        end
      end
      buccaneers
    end
permanence can be any of:
   {:new => :new} - only calls the initializer with data hash for each row to instantiate objects (useful with any vanilla Ruby Class)
   {:new => :save} - calls the initializer with the data hash for each row and then calls save on each (useful with ActiveRecord)
   {:new => :create} - calls a create method with the data hash for each row (useful with ActiveRecord)
   {:find_or_new => [column names for find_by]} - see below (returns only the new objects
   {:find_or_save => [column names for find_by]} - see below (returns all found or saved objects)
   {:find_or_create => [column names for find_by]} - looks for existing objects using find_by_#{columns.join('_and_')}, (returns all found or created objects)
       and if not found creates a new object.
       The difference between the new, save and create versions are the same as the various :new hashes above.
   {:update_or_new => [column names for find_by]} - see below (returns only the new objects)
   {:update_or_save => [column names for find_by]} - see below (returns all updated or saved objects)
   {:update_or_create => [column names for find_by]} - looks for existing objects using find_by_#{columns.join('_and_')} , (returns all updated or created objects)
       and updates them with the data hash form the csv row, otherwise creates a new object.
TODO: This is a nasty method.  Just a quick hack to GTD.  Needs to be rethought and refactored. --pboling