Hi!

I'm rather new to Merb, but I thought I'd give it a shot.  I found that
autotest wasn't running my specs when my models were changing.  Maybe this
is because of how I have set up Merb, but in the even that it's not just me,
I've adapted Autotest's mappings for Rails and have attached my efforts to
this email.  Unfortunately, you need to drop this file into the root of your
project as ./.autotest.

James
# Override normal mappings to fit our Merb project. Adapted from Autotest's 
# Rails mapping.

Autotest.add_hook :initialize do |at|

  at.add_exception %r%^\./(?:doc|log|public|tmp)%
  
  at.clear_mappings
  
  # Assumes that anything in the base lib directory is for models
  at.add_mapping %r%^lib\/.*\.rb$% do |filename, _|
    at.files_matching %r%^spec/models/#{File.basename(filename, 
'.rb')}_test.rb$%
  end
  
  # Anytime a fixture is changed, check specs for models, controllers, and views
  at.add_mapping %r%^spec/fixtures/(.*)s.yml% do |_, m|
    [
      "spec/models/#{m[1]}_spec.rb",
      "spec/controllers/#{m[1]}_controller_spec.rb",
      "spec/views/#{m[1]}_view_spec.rb",
    ]
  end
  
  # Run a spec if it changes
  at.add_mapping %r%^spec/(models|controllers|views)/.*rb$% do |filename, _|
    filename
  end

  # If a model changes, run its spec
  at.add_mapping %r%^app/models/(.*)\.rb$% do |_, m|
    "spec/models/#{m[1]}_spec.rb"
  end
  
  # If the global helper changes, run specs for controllers and views
  at.add_mapping %r%^app/helpers/global_helper.rb% do
    at.files_matching %r%^spec/(views|controllers)/.*_spec\.rb$%
  end

  # If a helper changes, run specs for controllers and helpers
  at.add_mapping %r%^app/helpers/(.*)_helper.rb% do |_, m|
    if m[1] == "global" then
      at.files_matching %r%^spec/(views|controllers)/.*_spec\.rb$%
    else
      [
        "spec/views/#{m[1]}_view_spec.rb",
        "spec/controllers/#{m[1]}_controller_spec.rb"
      ]
    end
  end

  # If a view changes, run specs for controllers and views
  at.add_mapping %r%^app/views/(.*)/% do |_, m|
    [
      "spec/views/#{m[1]}_view_spec.rb",
      "spec/functional/#{m[1]}_controller_spec.rb"
    ]
  end
  
  # If the application controller changes, or the exception controller 
  # changes, run all controller and view specs. If any other controller 
  # changes, run its spec.
  at.add_mapping %r%^app/controllers/(.*)\.rb$% do |_, m|
    if %w[application exceptions].include?(m[1]) then
      at.files_matching %r%^spec/(controllers|views)/.*_spec\.rb$%
    else
      ["spec/controllers/#{m[1]}_spec.rb"]
    end
  end
  
  # Not really sure what this is for.
  at.add_mapping %r%^app/views/layouts/% do
    "spec/views/layouts_view_spec.rb"
  end
  
  # If the route changes, run all specs for controllers and views
  at.add_mapping %r%^config/router.rb$% do # FIX <-- message from original 
source
    at.files_matching %r%^spec/(controllers|views)/.*_spec\.rb$%
  end

  # Numerous other things
  at.add_mapping 
%r%^spec/spec_helper.rb|config/((init|rack|environment(s/test)?).rb|database.yml)%
 do
    at.files_matching %r%^spec/(models|controllers|views)/.*_spec\.rb$%
  end

end
_______________________________________________
Merb-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/merb-devel

Reply via email to