[rspec-users] Error on Autotest start

Don French dhf0820 at gmail.com
Thu Jul 3 04:15:40 EDT 2008


I have been using autotest/zentest 3.5.0  with my rails 2.0.2 and rspec. I
upgraded my gems and got 3.9.3 and had a problem. I went back to 3.5.0 and
it worked. I stayed there until moving to rails 2.1. I again updated my gems
and got 3.10. This one had the same problem. This time I need to figure out
what is wrong. Here is what I get: 

/Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/lib/autotest.rb:394:in
`find_files_to_test': undefined method `values' for #<Array:0x18b2530>
(NoMethodError) 
        from
/Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/lib/autotest.rb:239:in
`run_tests' 
        from
/Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/lib/autotest.rb:228:in
`get_to_green' 
        from
/Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/lib/autotest.rb:208:in `run' 
        from
/Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/lib/autotest.rb:206:in `loop' 
        from
/Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/lib/autotest.rb:206:in `run' 
        from
/Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/lib/autotest.rb:136:in `run' 
        from /Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/bin/autotest:55 
        from /usr/bin/autotest:19:in `load' 
        from /usr/bin/autotest:19 

Here is the failing code: 

  def find_files 
    result = {} 
    targets = self.find_directories + self.extra_files 
    self.find_order.clear 

    targets.each do |target| 
      order = [] 
      Find.find(target) do |f| 
        Find.prune if f =~ self.exceptions 

        next if test ?d, f 
        next if f =~ /(swp|~|rej|orig)$/ # temporary/patch files 
        next if f =~ /\/\.?#/            # Emacs autosave/cvs merge files 

        filename = f.sub(/^\.\//, '') 

        result[filename] = File.stat(filename).mtime rescue next 
        order << filename 
      end 
      self.find_order.push(*order.sort) 
    end 
    return result  # this should return as a hash but is received as an
array 
  end 

  ## 
  # Find the files which have been modified, update the recorded 
  # timestamps, and use this to update the files to test. Returns true 
  # if any file is newer than the previously recorded most recent 
  # file. 

  def find_files_to_test(files=find_files) 
    # for some reason files comes in as a array needs to be hash 
    #myfiles = {} 
    #files.each do |key, value| 
      #myfiles[key] = value 
    #end 
    #files = myfiles 
    updated = files.select { |filename, mtime| self.last_mtime < mtime } 

    p updated if $v unless updated.empty? or self.last_mtime.to_i == 0 

    updated.map { |f,m| test_files_for(f) }.flatten.uniq.each do |filename| 
      self.files_to_test[filename] # creates key with default value 
    end 

    if updated.empty? then 
      nil 
    else 
      files.values.max  <= line 394 
    end 
  end 

For some reason the files is an array instead of a hash.  I added the little
change that is commented out and it works. But that should not have to be
done. 

Any ideas? 


-- 
View this message in context: http://www.nabble.com/Error-on-Autotest-start-tp18254059p18254059.html
Sent from the rspec-users mailing list archive at Nabble.com.



More information about the rspec-users mailing list