<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitignore</filename>
    </added>
    <added>
      <filename>Capfile</filename>
    </added>
    <added>
      <filename>Commands/Autocomplete Foreign Key Fixture Reference (habtm).tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Autocomplete Foreign Key Fixture Reference.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Go To Model.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Go to Fixture.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Redo Last Migration.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Test All.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Test Functionals.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Test Integration.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Test Plugins.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Test Recent.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Test Uncommitted.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/Test Units.tmCommand</filename>
    </added>
    <added>
      <filename>Commands/View demo help.tmCommand</filename>
    </added>
    <added>
      <filename>Macros/Add %3A Remove Column.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Add %3A Remove Index.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Add %3A Remove Named Index.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Add %3A Remove Several Columns (marcc).tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Add %3A Remove Several Columns.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Add %3A Remove Unique Index.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Create %3A Drop Table.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Drop %3A Create Table.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Remove %3A Add Column.tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Rename %3A Rename Several Columns (mncc).tmMacro</filename>
    </added>
    <added>
      <filename>Macros/Rename %3A Rename Several Columns.tmMacro</filename>
    </added>
    <added>
      <filename>Preferences/Template (ERB).tmPreferences</filename>
    </added>
    <added>
      <filename>Preferences/Template (Haml).tmPreferences</filename>
    </added>
    <added>
      <filename>README</filename>
    </added>
    <added>
      <filename>Rakefile</filename>
    </added>
    <added>
      <filename>Snippets/$LABEL.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/%3C%= Fixtures_identify(%3Asymbol) %%3E.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create binary column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create boolean column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create controller class.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create date column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create datetime column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create decimal column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create float column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create functional test class.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create integer column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create lock_version column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create references column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create string column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create text column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create time column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create timestamp column.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/Create timestamps columns.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/after_create.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/after_destroy.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/after_save.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/after_update.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/after_validation.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/after_validation_on_create.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/after_validation_on_update.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert(var = assigns(%3Avar)).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_difference.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_no_difference.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_redirected_to (nested path plural).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_redirected_to (nested path).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_redirected_to (path plural).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_redirected_to (path).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_rjs.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/assert_select.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/before_create.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/before_destroy.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/before_save.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/before_update.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/before_validation.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/before_validation_on_create.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/before_validation_on_update.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/cattr_accessor.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/def create - resource.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/def get request.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/def post request.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/end.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/find(%3Aall).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/find(%3Afirst).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/find(id).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/for loop erb.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/for loop in rhtml.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for check_box.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for checkbox.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for file_field 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for file_field.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for hidden_field 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for hidden_field.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for label 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for label.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for password_field 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for password_field.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for radio_box 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for radio_box.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for submit 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for submit.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for text_area 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for text_area.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for text_field 2.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for text_field.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for with errors.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/form_for.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/has_many (through).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/image_submit_tag.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/javascript_include_tag.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/link_to (nested path plural).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/link_to (nested path).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/link_to (path plural).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/link_to (path).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/link_to model.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/map(&amp;%3Asym_proc).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/map_catch_all.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/map_named_route.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/map_resource.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/map_resources.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/map_with_options.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/mattr_accessor.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/page_hide (%2Aids).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/page_insert_html (position, id, partial).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/page_replace (id, partial).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/page_replace_html (id, partial).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/page_show (%2Aids).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/page_toggle (%2Aids).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/page_visual_effect (effect, id).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/redirect_to (nested path plural).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/redirect_to (nested path).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/redirect_to (path plural).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/redirect_to (path).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/render (text,layout=%3Etrue) (rtlt).plist</filename>
    </added>
    <added>
      <filename>Snippets/render (update).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/respond_to (html).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/respond_to.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/returning do %7Cvariable%7C %E2%80%A6 end.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/stylesheet_link_tag.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/submit_tag.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_binary (tcbi).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_boolean (tcb).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_date (tcda).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_datetime (tcdt).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_decimal (tcd).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_float (tcf).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_integer (tci).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_lock_version (tcl).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_references (tcr).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_string (tcs).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_text (tct).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_time (tcti).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_timestamp (tcts).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/t_timestamps (tctss).tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/validates_format_of if.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/validates_format_of.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/validates_inclusion_of if.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/validates_inclusion_of.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/validates_length_of if.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/validates_numericality_of if.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/validates_numericality_of.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/wants_format.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/xhr delete.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/xhr get.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/xhr post.tmSnippet</filename>
    </added>
    <added>
      <filename>Snippets/xhr put.tmSnippet</filename>
    </added>
    <added>
      <filename>Support/bin/fixture_auto_complete.rb</filename>
    </added>
    <added>
      <filename>Support/bin/show_schema.rb</filename>
    </added>
    <added>
      <filename>Support/lib/rails/command_go_to_file.rb</filename>
    </added>
    <added>
      <filename>Support/lib/rails/generate.rb</filename>
    </added>
    <added>
      <filename>Support/lib/rails/inflections.rb</filename>
    </added>
    <added>
      <filename>Support/lib/rails/inflector.rb</filename>
    </added>
    <added>
      <filename>Support/plugins/footnotes-edge/templates/rescues/template_error.erb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/controllers/admin/base_controller.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/controllers/posts_controller.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/controllers/user_controller.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/controllers/users_controller.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/helpers/user_helper.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/models/notifier.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/models/person.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/models/user.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/admin/base/action.html.erb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/notifier/forgot_password.html.erb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/user/new.rhtml</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/users/create.html.erb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/users/existing_views.html.erb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/users/existing_views.js.rjs</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/users/existing_views.wacky.erb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/users/existing_views.xml.builder</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/app/views/users/new.html.erb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/config/boot.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/config/environment.rb</filename>
    </added>
    <added>
      <filename>Support/test/app_fixtures/script/generate</filename>
    </added>
    <added>
      <filename>Support/test/fixtures/app/controllers/posts_controller.rb</filename>
    </added>
    <added>
      <filename>Support/test/fixtures/vendor/plugins/haml/init.rb</filename>
    </added>
    <added>
      <filename>Support/test/generator_test.rb</filename>
    </added>
    <added>
      <filename>Syntaxes/JavaScript (Rails).tmLanguage</filename>
    </added>
    <added>
      <filename>Syntaxes/RJS.tmLanguage</filename>
    </added>
    <added>
      <filename>config/deploy.rb</filename>
    </added>
    <added>
      <filename>config/slicehost.yml.sample</filename>
    </added>
    <added>
      <filename>config/website.yml.sample</filename>
    </added>
    <added>
      <filename>script/clean_bundle_file_names</filename>
    </added>
    <added>
      <filename>script/destroy</filename>
    </added>
    <added>
      <filename>script/generate</filename>
    </added>
    <added>
      <filename>script/txt2html</filename>
    </added>
    <added>
      <filename>tasks/dist.rake</filename>
    </added>
    <added>
      <filename>tasks/website.rake</filename>
    </added>
    <added>
      <filename>website/demo.html</filename>
    </added>
    <added>
      <filename>website/demo.txt</filename>
    </added>
    <added>
      <filename>website/images/logo_bundle.png</filename>
    </added>
    <added>
      <filename>website/index.html</filename>
    </added>
    <added>
      <filename>website/index.txt</filename>
    </added>
    <added>
      <filename>website/javascripts/rounded_corners_lite.inc.js</filename>
    </added>
    <added>
      <filename>website/peepcode.html</filename>
    </added>
    <added>
      <filename>website/peepcode.txt</filename>
    </added>
    <added>
      <filename>website/stylesheets/screen.css</filename>
    </added>
    <added>
      <filename>website/template.html.erb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,10 +1,36 @@
-== Rails Bundle 1.0
+== Rails Bundle 1.0 -&gt; 2.0 SOON
 This bundle is (c) 2006 syncPEOPLE, LLC.
 As of version 1.0, it is distributed under the terms of the MIT License.
 
 http://syncpeople.com/ - We develop social interaction tools for online and real-world conferences and events.
 
-== Author(s) ==
+== Maintained by ==
+Dr Nic Williams
+drnicwilliams@gmail.com
+http://drnicwilliams.com
+
+== Created by ==
 Duane Johnson
 duane.johnson@gmail.com
 http://blog.inquirylabs.com/
+
+== Contributors (no doubt missing many) ==
+Sami Samhuri
+James Edward Grey II
+Michael Sheets
+Allan Odgaard
+Cliff Matthews
+Kent Siblev
+Stephen Touset
+Lawrence Pit
+Dean Strelau
+Daniel Kristensen
+Simon Jefford
+James Deville
+Stephen Bannasch
+Tom Morris
+David Lowenfels
+Sam Granieri
+Jacob Swanner
+Steve Ross
+Charles Roper
\ No newline at end of file</diff>
      <filename>ABOUT</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,85 @@
+[Edge] Trundle to Rails 2.0 Bundle
+Ruby on Rails bundle maintenance has been taken over by Dr Nic Williams from its initial legendary creator Duane Johnson.
+See git branch two_point_ooh for initial drive to upgrade bundle for Rails 2.0 conventions (http://github.com/drnic/ruby-on-rails-tmbundle/tree/two_point_ooh)
+
+Added so far:
+  * Snippets/Commands for:
+    * Tests
+      * assert_select (ass)
+      * assert_difference/assert_no_difference (asd/asnd)
+      * GET+POST test method stubs (deftg+deftp)
+      * posts(:) + Alt+Esc allows you to select a posts.yml fixture
+    * Controllers
+      * respond_to (rest) and respond_to(html) (Shift+Cmd+H)
+      * 'Go To View' within a respond_to will use the format/wants type as the default
+      * REMOVED: render_component snippets
+      * loggers - pass a block instead of raw string to save time if
+        logging not used (e.g. production) [Stephen Touset]
+      * redirect_to for resource paths (rep, repp, renp, renpp)
+      * render :update (ru) [Simon Jefford]
+    * Views
+      * form_for and form_for(with errors) (ff,ffe)
+      * Various form_for helpers in a drop-down list, e.g. f.text_field (f.)
+      * Various form_for helpers with own tab completion, e.g. f.text_field (fftf)
+      * link_to for resource paths (lip, lipp, linp, linpp)
+      * &lt;% end -%&gt; (end)
+      * for-loop (for)
+      * link_to(@model.name, @model) (ltm)
+    * Layouts
+      * javascript_include_tag - jit
+      * stylesheet_link_tag - slt
+    * Models
+      * has_many :though (hmt)
+      * association snippets give better defaults (e.g. bt + hm)
+      * validates_format_of (vf,vfif) [Dean Strelau]
+      * validates_numericality_of (vn,vnif) [Tom Morris]
+      * before/after callbacks (prefix bef/aft + 1st letter of words) [Sam Granieri]
+    * Migrations
+      * Sexy Migrations now available as &quot;t.&quot; snippets and regular snippets [Lawrence Pit]
+      * Migration classes have own textmate scope
+      * Add/Remove Columns - the 'down' statements are in reverse
+        order [Lawrence Pit, Daniel Kristensen]
+      * Added 'Redo Last Migration' [Simon Jefford]
+    * Functional Tests
+      * assert_redirect_to for resource paths (artp, artpp, artnp, artnpp)
+      * assert(assigns(:model)) (asg)
+    * Routes
+      * named routes, resources snippets (map, mapr, maprs)
+      * catch_all (mapca) [Sam Granieri]
+    * Active Support
+      * cattr_accessor/mattr_accessor (crw/mrw) [Jacob Swanner]
+      * returning (returning) [Jacob Swanner]
+  * Language/Syntax
+    * New keywords: rescue_from, alias_method_chain, alias_attribute, delegate, respond_to [David Lowenfels, Jacob Swanner]
+    * Added rb as a valid Rails file type [James Deville]
+  * Commands
+    * Auto-completion for Foxy Fixtures
+    * html.erb is the default for new templates (backwards compatibility
+      is being worked on too)
+    * 'Go To XXX' - available for wide range of permutations.
+      Fixtures -&gt; Models; Models -&gt; Controllers, etc
+    * haml is a valid file extension [Steve Ross]
+    * specify alternate default file extensions for: [Steve Ross]
+      * javascript - ENV['RAILS_JS_EXT']
+      * stylesheet - ENV['RAILS_CSS_EXT']
+      * view - ENV['RAILS_VIEW_EXT']
+    * 'Call Generate Script' now accesses all a project's generators
+  * Plugins
+    * Footnote
+      * footnote-edge uses .erb for templates [Stephen Bannasch]
+  * Internals
+    * Rakefile - test runner [Steve Ross]
+    * Added generator_test
+    * Removed unnecessary misc_test
+    * script/clean_bundle_file_names - rename non-os-agnostic file names [Charles Roper]
+  * Haml support [Lawrence Pit]
+
+For thoughts and patches, email drnicwilliams@gmail.com
+
+* BLACKHOLE OF CHANGELOG *
+...
+
+* END OF BLACKHOLE *
 2006-09-28 Added &quot;Rake Migrate to Version&quot;, changed &quot;rake migrate&quot; to &quot;rake db:migrate&quot; to remove warning message.
 2006-02-22 Changed key bindings to TextMate conventions (http://macromates.com/textmate/manual/key_bindings#conventions)
 2006-02-22 Footnotes can be turned off for specific pages:</diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.helper, meta.rails.functional_test, source.js, source.css&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.helper, meta.rails.functional_test, source.js, source.css, source.yaml, meta.rails.model, meta.rails.unit_test, text.haml&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;9453F0B3-B946-445F-BDB0-B01DE70732FC&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To Alternate File.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails, text.html.ruby, source.ruby.rails.embedded.html&lt;/string&gt;
+	&lt;string&gt;source.ruby.rails, text.html.ruby, source.ruby.rails.embedded.html, text.haml&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;09BB96F2-75FD-48A7-8314-B5B56B09B477&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To File on This Line.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails, text.html.ruby, source.ruby.rails.embedded.html&lt;/string&gt;
+	&lt;string&gt;source.ruby.rails, text.html.ruby, source.ruby.rails.embedded.html, source.yaml, text.haml, source.css, source.js, source.sass&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;0CCC8443-40F3-4BAB-9440-D737562B5F45&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To File.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;meta.rails.controller&lt;/string&gt;
+	&lt;string&gt;meta.rails.controller, meta.rails.helper, meta.rails.model, source.yaml, meta.rails.unit_test&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;DFE393BE-0764-49FE-B464-6350A50921E6&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To Functional Test.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.controller, meta.rails.unit_test&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.controller, meta.rails.model, meta.rails.unit_test, meta.rails.functional_test, text.haml&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;51C9C27A-D931-49F9-B6D8-C0E7ABEC992D&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To Helper.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.controller, meta.rails.helper&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.controller, meta.rails.helper, text.haml&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;B078346F-61D8-4E75-9427-80720FBC67F7&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To Javascript.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.controller, meta.rails.helper&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, source.ruby.rails.embedded.html, meta.rails.controller, meta.rails.helper, text.haml&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;B207BBD4-D6AA-41E9-9530-27210F2D7B66&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To Stylesheet.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;meta.rails.model, meta.rails.helper&lt;/string&gt;
+	&lt;string&gt;meta.rails.controller, meta.rails.helper, meta.rails.model, meta.rails.functional_test, source.yaml&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;BDBB15A4-2824-4BEC-93A5-7475F9C46A39&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To Unit Test.plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;beforeRunningCommand&lt;/key&gt;
@@ -16,7 +16,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;showAsTooltip&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;meta.rails.controller, meta.rails.mailer, source.js, source.css, meta.rails.functional_test&lt;/string&gt;
+	&lt;string&gt;meta.rails.controller, meta.rails.mailer, source.js, source.css&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;EE862691-A624-4797-90CF-EDD39EFB2D8E&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Go To View.plist</filename>
    </modified>
    <modified>
      <diff>@@ -19,7 +19,7 @@
 	&lt;key&gt;output&lt;/key&gt;
 	&lt;string&gt;replaceSelectedText&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails, text.html.ruby&lt;/string&gt;
+	&lt;string&gt;source.ruby.rails, text.html.ruby, text.haml&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;1DD8A214-1C97-45BA-ADEE-8F888DDE8570&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Commands/Make Selection in to Partial.plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,40 +1,12 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;beforeRunningCommand&lt;/key&gt;
 	&lt;string&gt;nop&lt;/string&gt;
 	&lt;key&gt;command&lt;/key&gt;
-	&lt;string&gt;#!/usr/bin/env ruby
-
-require &quot;#{ENV['TM_SUPPORT_PATH']}/lib/progress&quot;
-TextMate.call_with_progress(:title =&amp;gt; &quot;Contacting SQL Server&quot;, :message =&amp;gt; &quot;Fetching database schema&#8230;&quot;) do
-
-  project = ENV['TM_PROJECT_DIRECTORY']
-  word = ENV['TM_CURRENT_WORD']
-
-  require &quot;#{project}/config/boot&quot;
-  require &quot;#{project}/config/environment&quot;
-
-  klass = Object.const_get(word) rescue nil
-  if klass and klass.class == Class and klass.ancestors.include?(ActiveRecord::Base)
-    columns = klass.columns_hash
-
-    data = []
-    data += [%w[column primary sql_type default]]
-    data += [%w[------ ------- -------- -------]]
-    data += columns.collect { |col, attrs| [col, attrs.primary.to_s, attrs.sql_type.to_s, attrs.default.to_s] }
-
-    STDOUT &amp;lt;&amp;lt; data.inject('') do |output, array| 
-      output + array.inject('') { |row_str, value| row_str + value.ljust(20) } + &quot;\n&quot;
-    end
-  elsif klass and klass.class == Class and not klass.ancestors.include?(ActiveRecord::Base)
-    STDOUT &amp;lt;&amp;lt; &quot;#{word} is not an Active Record derived class&quot;
-  else
-    STDOUT &amp;lt;&amp;lt; &quot;#{word} was not recognised as a class&quot;
-  end
-
-end
+	&lt;string&gt;RUBYLIB=&quot;$TM_BUNDLE_SUPPORT/lib:$RUBYLIB&quot;
+&quot;${TM_RUBY:=ruby}&quot; -- &quot;${TM_BUNDLE_SUPPORT}/bin/show_schema.rb&quot;
 &lt;/string&gt;
 	&lt;key&gt;input&lt;/key&gt;
 	&lt;string&gt;none&lt;/string&gt;</diff>
      <filename>Commands/Show DB Schema.tmCommand</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;Rename / Rename Column&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
+	&lt;string&gt;meta.rails.migration - meta.rails.migration.create_table&lt;/string&gt;
 	&lt;key&gt;scopeType&lt;/key&gt;
 	&lt;string&gt;local&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;</diff>
      <filename>Macros/Rename Column.tmMacro</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;Rename / Rename Table&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
+	&lt;string&gt;meta.rails.migration - meta.rails.migration.create_table&lt;/string&gt;
 	&lt;key&gt;scopeType&lt;/key&gt;
 	&lt;string&gt;local&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;</diff>
      <filename>Macros/Rename Table.tmMacro</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,13 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;&amp;lt;%= form_tag :action =&amp;gt; &quot;${1:update}&quot; %&amp;gt;&lt;/string&gt;
+	&lt;string&gt;${RAILS_TEMPLATE_START_RUBY_INLINE}form_tag(${1::action =&amp;gt; &quot;${5:update}&quot;}${6:, {:${8:class} =&amp;gt; &quot;${9:form}&quot;\}}) do${RAILS_TEMPLATE_END_RUBY_EXPR}
+  $0
+${RAILS_TEMPLATE_END_RUBY_BLOCK}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;form_tag&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, text.haml&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;ft&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/180 rails form_tag.plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,12 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;t.column :${1:title}, :${2:string}$0&lt;/string&gt;
+	&lt;string&gt;t.column ${1:title}, :${2:string}
+$0&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;Create Column in Table&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
+	&lt;string&gt;meta.rails.migration.create_table&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;mcol&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/Migration Create Column (mcc).plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,12 +3,12 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;t.column :${1:title}, :${2:string}
+	&lt;string&gt;t.column ${1:title}, :${2:string}
 mccc$0&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
-	&lt;string&gt;Create Several Columns&lt;/string&gt;
+	&lt;string&gt;Create Several Columns in Table&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
+	&lt;string&gt;meta.rails.migration.create_table&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;mccc&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/Migration Create Column Continue (mccc).plist</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;Drop / Create Table&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
+	&lt;string&gt;meta.rails.migration - meta.rails.migration.create_table&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;mtab&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/Migration Drop Create Table (mdct).plist</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;Remove / Add Column&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
+	&lt;string&gt;meta.rails.migration - meta.rails.migration.create_table&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;mcol&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/Migration Remove and Add Column (mrac).plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;belongs_to :${1:object}${2:, :class_name =&amp;gt; &quot;${3:ClassName}&quot;, :foreign_key =&amp;gt; &quot;${4:${1}_id}&quot;}&lt;/string&gt;
+	&lt;string&gt;belongs_to :${1:object}${2:, :class_name =&amp;gt; &quot;${3:${1/[[:alpha:]]+|(_)/(?1::\u$0)/g}}&quot;, :foreign_key =&amp;gt; &quot;${4:${1}_id}&quot;}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;belongs_to&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/belongs_to (bt).plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;has_many :${1:objects}${2:, :class_name =&amp;gt; &quot;${3:ClassName}&quot;, :foreign_key =&amp;gt; &quot;${4:${1}_id}&quot;}&lt;/string&gt;
+	&lt;string&gt;has_many :${1:object}s${2:, :class_name =&amp;gt; &quot;${1}&quot;, :foreign_key =&amp;gt; &quot;${4:reference}_id&quot;}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;has_many&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/has_many (hm).plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;has_one :${1:object}${2:, :class_name =&amp;gt; &quot;${3:ClassName}&quot;, :foreign_key =&amp;gt; &quot;${4:${1}_id}&quot;}&lt;/string&gt;
+	&lt;string&gt;has_one :${1:object}${2:, :class_name =&amp;gt; &quot;${3:${1/[[:alpha:]]+|(_)/(?1::\u$0)/g}}&quot;, :foreign_key =&amp;gt; &quot;${4:${1}_id}&quot;}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;has_one&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/has_one (ho).plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,11 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;&amp;lt;%= link_to &quot;${1:link text...}&quot;, :action =&amp;gt; &quot;${2:index}&quot; %&amp;gt;&lt;/string&gt;
+	&lt;string&gt;${RAILS_TEMPLATE_START_RUBY_EXPR}link_to &quot;${1:link text...}&quot;, :action =&amp;gt; &quot;${2:index}&quot;${RAILS_TEMPLATE_END_RUBY_EXPR}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;link_to (action)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, text.haml&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;lia&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/lia.plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,11 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;&amp;lt;%= link_to &quot;${1:link text...}&quot;, :action =&amp;gt; &quot;${2:edit}&quot;, :id =&amp;gt; ${3:@item} %&amp;gt;&lt;/string&gt;
+	&lt;string&gt;${RAILS_TEMPLATE_START_RUBY_EXPR}link_to &quot;${1:link text...}&quot;, :action =&amp;gt; &quot;${2:edit}&quot;, :id =&amp;gt; ${3:@item}${RAILS_TEMPLATE_END_RUBY_EXPR}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;link_to (action, id)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, text.haml&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;liai&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/liai.plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,11 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;&amp;lt;%= link_to &quot;${1:link text...}&quot;, :controller =&amp;gt; &quot;${2:items}&quot; %&amp;gt;&lt;/string&gt;
+	&lt;string&gt;${RAILS_TEMPLATE_START_RUBY_EXPR}link_to &quot;${1:link text...}&quot;, :controller =&amp;gt; &quot;${2:items}&quot;${RAILS_TEMPLATE_END_RUBY_EXPR}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;link_to (controller)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, text.haml&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;lic&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/lic.plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,11 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;&amp;lt;%= link_to &quot;${1:link text...}&quot;, :controller =&amp;gt; &quot;${2:items}&quot;, :action =&amp;gt; &quot;${3:index}&quot; %&amp;gt;&lt;/string&gt;
+	&lt;string&gt;${RAILS_TEMPLATE_START_RUBY_EXPR}link_to &quot;${1:link text...}&quot;, :controller =&amp;gt; &quot;${2:items}&quot;, :action =&amp;gt; &quot;${3:index}&quot;${RAILS_TEMPLATE_END_RUBY_EXPR}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;link_to (controller, action)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, text.haml&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;lica&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/lica.plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,11 +3,11 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;&amp;lt;%= link_to &quot;${1:link text...}&quot;, :controller =&amp;gt; &quot;${2:items}&quot;, :action =&amp;gt; &quot;${3:edit}&quot;, :id =&amp;gt; ${4:@item} %&amp;gt;&lt;/string&gt;
+	&lt;string&gt;${RAILS_TEMPLATE_START_RUBY_EXPR}link_to &quot;${1:link text...}&quot;, :controller =&amp;gt; &quot;${2:items}&quot;, :action =&amp;gt; &quot;${3:edit}&quot;, :id =&amp;gt; ${4:@item}${RAILS_TEMPLATE_END_RUBY_EXPR}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;link_to (controller, action, id)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;text.html.ruby&lt;/string&gt;
+	&lt;string&gt;text.html.ruby, text.haml&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
 	&lt;string&gt;licai&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;</diff>
      <filename>Snippets/licai.plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,13 +3,13 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;logger.debug &quot;${1:message}&quot;$0&lt;/string&gt;
+	&lt;string&gt;logger.debug { &quot;${1:message}&quot; }$0&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;logger.debug&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
 	&lt;string&gt;source.ruby.rails&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;log&lt;/string&gt;
+	&lt;string&gt;logd&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;D975E5C1-42C2-40F1-8960-0DA533B18113&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Snippets/logger_debug.tmSnippet</filename>
    </modified>
    <modified>
      <diff>@@ -3,13 +3,13 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;logger.error &quot;${1:message}&quot;$0&lt;/string&gt;
+	&lt;string&gt;logger.error { &quot;${1:message}&quot; }$0&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;logger.error&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
 	&lt;string&gt;source.ruby.rails&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;log&lt;/string&gt;
+	&lt;string&gt;loge&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;7053B86A-9B81-4154-AB3C-61B8035C5D33&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Snippets/logger_error.tmSnippet</filename>
    </modified>
    <modified>
      <diff>@@ -3,13 +3,13 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;logger.fatal &quot;${1:message}&quot;$0&lt;/string&gt;
+	&lt;string&gt;logger.fatal { &quot;${1:message}&quot; }$0&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;logger.fatal&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
 	&lt;string&gt;source.ruby.rails&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;log&lt;/string&gt;
+	&lt;string&gt;logf&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;35E95C81-22F7-4C40-8297-ED21086DDA81&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Snippets/logger_fatal.tmSnippet</filename>
    </modified>
    <modified>
      <diff>@@ -3,13 +3,13 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;logger.info &quot;${1:message}&quot;$0&lt;/string&gt;
+	&lt;string&gt;logger.info { &quot;${1:message}&quot; }$0&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;logger.info&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
 	&lt;string&gt;source.ruby.rails&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;log&lt;/string&gt;
+	&lt;string&gt;logi&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;36E2A3EE-E9CC-4B7F-A4CF-AFAF970B8699&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Snippets/logger_info.tmSnippet</filename>
    </modified>
    <modified>
      <diff>@@ -3,13 +3,13 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;logger.warn &quot;${1:message}&quot;$0&lt;/string&gt;
+	&lt;string&gt;logger.warn { &quot;${1:message}&quot; }$0&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;logger.warn&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;
 	&lt;string&gt;source.ruby.rails&lt;/string&gt;
 	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;log&lt;/string&gt;
+	&lt;string&gt;logw&lt;/string&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;38D5CA05-E219-4399-A244-609AF40B1D0B&lt;/string&gt;
 &lt;/dict&gt;</diff>
      <filename>Snippets/logger_warn.tmSnippet</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +0,0 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
-&lt;plist version=&quot;1.0&quot;&gt;
-&lt;dict&gt;
-	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;render_component :action =&amp;gt; &quot;${1:index}&quot;&lt;/string&gt;
-	&lt;key&gt;name&lt;/key&gt;
-	&lt;string&gt;render_component (action)&lt;/string&gt;
-	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
-	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;rcea&lt;/string&gt;
-	&lt;key&gt;uuid&lt;/key&gt;
-	&lt;string&gt;EB781D86-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
-&lt;/dict&gt;
-&lt;/plist&gt;</diff>
      <filename>Snippets/rcea.plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +0,0 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
-&lt;plist version=&quot;1.0&quot;&gt;
-&lt;dict&gt;
-	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;render_component :controller =&amp;gt; &quot;${1:items}&quot;&lt;/string&gt;
-	&lt;key&gt;name&lt;/key&gt;
-	&lt;string&gt;render_component (controller)&lt;/string&gt;
-	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
-	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;rcec&lt;/string&gt;
-	&lt;key&gt;uuid&lt;/key&gt;
-	&lt;string&gt;F8EE4249-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
-&lt;/dict&gt;
-&lt;/plist&gt;</diff>
      <filename>Snippets/rcec.plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +0,0 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
-&lt;plist version=&quot;1.0&quot;&gt;
-&lt;dict&gt;
-	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;render_component :controller =&amp;gt; &quot;${1:items}&quot;, :action =&amp;gt; &quot;${2:index}&quot;&lt;/string&gt;
-	&lt;key&gt;name&lt;/key&gt;
-	&lt;string&gt;render_component (controller, action)&lt;/string&gt;
-	&lt;key&gt;scope&lt;/key&gt;
-	&lt;string&gt;source.ruby.rails&lt;/string&gt;
-	&lt;key&gt;tabTrigger&lt;/key&gt;
-	&lt;string&gt;rceca&lt;/string&gt;
-	&lt;key&gt;uuid&lt;/key&gt;
-	&lt;string&gt;060DC5CD-84C6-11D9-A094-000D932CD5BA&lt;/string&gt;
-&lt;/dict&gt;
-&lt;/plist&gt;</diff>
      <filename>Snippets/rceca.plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;render :partial =&amp;gt; &quot;${1:item}&quot;, :collection =&amp;gt; ${2:items}&lt;/string&gt;
+	&lt;string&gt;render :partial =&amp;gt; &quot;${1:item}&quot;, :collection =&amp;gt; ${2:@$1s}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;render (partial, collection)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/render (partial,collection) (rpc).plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;render :partial =&amp;gt; &quot;${1:item}&quot;, :locals =&amp;gt; { :${2:name} =&amp;gt; &quot;${3:value}&quot;$4 }&lt;/string&gt;
+	&lt;string&gt;render :partial =&amp;gt; &quot;${1:item}&quot;, :locals =&amp;gt; { :${2:$1} =&amp;gt; ${3:@$1}$0 }&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;render (partial, locals)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/render (partial,locals) (rpl).plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;render :partial =&amp;gt; &quot;${1:item}&quot;, :object =&amp;gt; ${2:object}&lt;/string&gt;
+	&lt;string&gt;render :partial =&amp;gt; &quot;${1:item}&quot;, :object =&amp;gt; ${2:@$1}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;render (partial, object)&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/render (partial,object) (rpo).plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;validates_exclusion_of :${1:attribute}${2:, :in =&amp;gt; ${3:enumerable}, :on =&amp;gt; :${4:create}, :message =&amp;gt; &quot;${5:is not allowed}&quot;}&lt;/string&gt;
+	&lt;string&gt;validates_exclusion_of :${1:attribute}${2:, :in =&amp;gt; ${3:%w( ${4:mov avi} )}, :on =&amp;gt; :${5:create}, :message =&amp;gt; &quot;${6:extension %s is not allowed}&quot;}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;validates_exclusion_of&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/validates_exclusion_of (ve).plist</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;
-	&lt;string&gt;validates_exclusion_of :${1:attribute}${2:, :in =&amp;gt; ${3:enumerable}, :on =&amp;gt; :${4:create}, :message =&amp;gt; &quot;${5:is not allowed}&quot;, :if =&amp;gt; proc { |obj| ${6:obj.condition?} }}&lt;/string&gt;
+	&lt;string&gt;validates_exclusion_of :${1:attribute}${2:, :in =&amp;gt; ${3:%w( ${4:mov avi} )}, :on =&amp;gt; :${5:create}, :message =&amp;gt; &quot;${6:extension %s is not allowed}&quot;}, :if =&amp;gt; proc { |obj| ${7:obj.condition?} }}&lt;/string&gt;
 	&lt;key&gt;name&lt;/key&gt;
 	&lt;string&gt;validates_exclusion_of if&lt;/string&gt;
 	&lt;key&gt;scope&lt;/key&gt;</diff>
      <filename>Snippets/validates_exclusion_of if (veif).plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;content&lt;/key&gt;</diff>
      <filename>Snippets/validates_presence_of (vp).plist</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,7 @@ if TextMate.selected_text
   if partial_name
     path = current_file.dirname
     partial = File.join(path, &quot;_#{partial_name}.html.erb&quot;)
-  
+
     # Create the partial file
     if File.exist?(partial)
       unless TextMate.message_ok_cancel(&quot;The partial file already exists.&quot;, &quot;Do you want to overwrite it?&quot;)
@@ -37,7 +37,8 @@ if TextMate.selected_text
     end
 
     file = File.open(partial, &quot;w&quot;) { |f| f.write(TextMate.selected_text) }
-  
+    TextMate.refresh_project_drawer
+
     # Return the new render :partial line
     print &quot;&lt;%= render :partial =&gt; '#{partial_name}' %&gt;\n&quot;
   else</diff>
      <filename>Support/bin/create_partial_from_selection.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,52 +9,24 @@
 
 require 'rails_bundle_tools'
 require 'fileutils'
+require File.dirname(__FILE__) + &quot;/../lib/rails/generate&quot;
 
 # Look for (created) files and return an array of them
 def files_from_generator_output(output, type = 'create')
   output.to_a.map { |line| line.scan(/#{type}\s+([^\s]+)$/).flatten.first }.compact.select { |f| File.exist?(f) and !File.directory?(f) }
 end
 
-def ruby(command)
-  `/usr/bin/env ruby #{command}`
-end
-
-class Generator
-  @@list = []
-  attr_accessor :name, :question, :default_answer
-  
-  def initialize(name, question, default_answer = &quot;&quot;)
-    @@list &lt;&lt; self
-    @name, @question, @default_answer = name, question, default_answer
-  end
-  
-  def self.[](name, question, default_answer = &quot;&quot;)
-    g = new(name, question, default_answer)
-  end
+Generator.setup
 
-  # Collect the names from each generator
-  def self.names
-    @@list.map { |g| g.name.capitalize }
-  end
-end
-
-generators = [
-  Generator[&quot;scaffold&quot;,   &quot;Name of the model to scaffold:&quot;, &quot;User&quot;],
-  Generator[&quot;controller&quot;, &quot;Name the new controller:&quot;,       &quot;admin/user_accounts&quot;],
-  Generator[&quot;model&quot;,      &quot;Name the new model:&quot;,            &quot;User&quot;],
-  Generator[&quot;mailer&quot;,     &quot;Name the new mailer:&quot;,           &quot;Notify&quot;],
-  Generator[&quot;migration&quot;,  &quot;Name the new migration:&quot;,        &quot;CreateUserTable&quot;],
-  Generator[&quot;plugin&quot;,     &quot;Name the new plugin:&quot;,           &quot;ActsAsPlugin&quot;]
-]
-
-if choice = TextMate.choose(&quot;Generate:&quot;, Generator.names, :title =&gt; &quot;Rails Generator&quot;)
-  name =
+if choice = TextMate.choose(&quot;Generate:&quot;, Generator.names.map { |name| Inflector.humanize name }, :title =&gt; &quot;Rails Generator&quot;)
+  arguments =
     TextMate.input(
-      generators[choice].question, generators[choice].default_answer,
-      :title =&gt; &quot;#{generators[choice].name.capitalize} Generator&quot;)
-  if name
+      Generator.generators[choice].question,
+      Generator.generators[choice].default_answer,
+      :title =&gt; &quot;#{Inflector.humanize Generator.generators[choice].name} Generator&quot;)
+  if arguments
     options = &quot;&quot;
-    
+
     case choice
     when 0
       options = TextMate.input(&quot;Name the new controller for the scaffold:&quot;, &quot;&quot;, :title =&gt; &quot;Scaffold Controller Name&quot;)
@@ -63,7 +35,7 @@ if choice = TextMate.choose(&quot;Generate:&quot;, Generator.names, :title =&gt; &quot;Rails Gener
       options = TextMate.input(&quot;List any actions you would like created for the controller:&quot;,
         &quot;index new create edit update destroy&quot;, :title =&gt; &quot;Controller Actions&quot;)
     end
-    
+
     # add the --svn option, if needed
     proj_dir = ENV[&quot;TM_PROJECT_DIRECTORY&quot;]
     if proj_dir and File.exist?(File.join(proj_dir, &quot;.svn&quot;))
@@ -72,14 +44,14 @@ if choice = TextMate.choose(&quot;Generate:&quot;, Generator.names, :title =&gt; &quot;Rails Gener
 
     rails_root = RailsPath.new.rails_root
     FileUtils.cd rails_root
-    command = &quot;\&quot;script/generate\&quot; #{generators[choice].name} #{name} #{options}&quot;
+    command = &quot;script/generate #{Generator.generators[choice].name} #{arguments} #{options}&quot;
     $logger.debug &quot;Command: #{command}&quot;
-    
+
     output = ruby(command)
     $logger.debug &quot;Output: #{output}&quot;
     TextMate.refresh_project_drawer
     files = files_from_generator_output(output)
     files.each { |f| TextMate.open(File.join(rails_root, f)) }
-    TextMate.textbox(&quot;Done generating #{generators[choice].name}&quot;, output, :title =&gt; &quot;Done&quot;)
+    TextMate.textbox(&quot;Done generating #{Generator.generators[choice].name}&quot;, output, :title =&gt; &quot;Done&quot;)
   end
 end</diff>
      <filename>Support/bin/generate.rb</filename>
    </modified>
    <modified>
      <diff>@@ -42,6 +42,7 @@ end
 generated_code = &lt;&lt;-RUBY
 class #{camelized} &lt; ActiveRecord::Migration
   def self.up
+    mtab
   end
 
   def self.down
@@ -49,7 +50,8 @@ class #{camelized} &lt; ActiveRecord::Migration
 end
 RUBY
 
+FileUtils.mkdir_p migration_dir
 new_migration_filename = File.join(migration_dir, number + &quot;_&quot; + underscored + &quot;.rb&quot;)
 File.open(new_migration_filename, &quot;w&quot;) { |f| f.write generated_code }
 TextMate.refresh_project_drawer
-TextMate.open(new_migration_filename)
+TextMate.open(new_migration_filename, 2, 8)</diff>
      <filename>Support/bin/generate_quick_migration.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,49 +7,7 @@
 # Description:
 #   Makes an intelligent decision on which file to go to based on the current line or current context.
 
-require 'rails_bundle_tools'
+require 'rails_bundle_tools'  
+require 'rails/command_go_to_file'
 
-
-current_file = RailsPath.new
-
-if ARGV.empty?
-  # Best match
-  choice = 
-    case current_file.file_type
-    when :controller
-      if current_file.action_name
-        :view
-      else
-        if current_file.rails_path_for(:functional_test).exists?
-          :functional_test
-        elsif current_file.rails_path_for(:helper).exists?
-          :helper
-        end
-      end
-    when :model
-      if current_file.rails_path_for(:view).exists?
-        :view
-      else
-        current_file.associations[current_file.file_type].first
-      end
-    else
-      current_file.associations[current_file.file_type].first
-    end
-else
-  choice = ARGV.shift
-end
-
-if rails_path = current_file.rails_path_for(choice.to_sym)
-  if choice == :view and !rails_path.exists?
-    if filename = TextMate.input(&quot;Enter the name of the new view file:&quot;, rails_path.basename)
-      rails_path = RailsPath.new(File.join(rails_path.dirname, filename))
-      rails_path.touch
-    else
-      TextMate.exit_discard
-    end
-  end
-  
-  TextMate.open rails_path
-else
-  puts &quot;#{current_file.basename} does not have a #{choice}&quot;
-end
+CommandGoToFile.alternate(ARGV)
\ No newline at end of file</diff>
      <filename>Support/bin/go_to_alternate_file.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,133 +7,7 @@
 # Description:
 #   Makes an intelligent decision on which file to go to based on the current line or current context.
 
-require 'rails_bundle_tools'
+require 'rails_bundle_tools'             
+require 'rails/command_go_to_file'
 
-def strip_erb(string)
-  string.gsub('&lt;%=', '').gsub('&lt;%', '').gsub('%&gt;', '')
-end
-
-def remove_quotes_or_colon(string_or_array)
-  if string_or_array.is_a? Array
-    string_or_array.map { |s| (s.scan(/^['&quot;](.+)['&quot;]$/).flatten.first || s.scan(/^:(.+)$/).flatten.first || s).strip }
-  else
-    (string_or_array.scan(/^['&quot;](.+)['&quot;]$/).flatten.first ||
-     string_or_array.scan(/^:(.+)$/).flatten.first ||
-     string_or_array).strip
-  end
-end
-
-current_file = RailsPath.new
-
-# If the current line contains &quot;render :partial&quot;, then open the partial.
-case TextMate.current_line
-
-  # Example: render :partial =&gt; 'account/login'
-  when /render[\s\(].*:partial\s*=&gt;\s*['&quot;](.+?)['&quot;]/
-    partial_name = $1
-    modules = current_file.modules + [current_file.controller_name]
-  
-    # Check for absolute path to partial
-    if partial_name.include?('/')
-      pieces = partial_name.split('/')
-      partial_name = pieces.pop
-      modules = pieces
-    end
-
-    partial = File.join(current_file.rails_root, 'app', 'views', modules, &quot;_#{partial_name}.html.erb&quot;)
-    TextMate.open(partial)
-
-  # Example: render :action =&gt; 'login'
-  when /render[\s\(].*:action\s*=&gt;\s*['&quot;](.+?)['&quot;]/
-    action = $1
-    if current_file.file_type == :controller
-      current_file.buffer.line_number = 0
-      if search = current_file.buffer.find { /def\s+#{action}\b/ }
-        TextMate.open(current_file, search[1])
-      end
-    else
-      puts &quot;Don't know where to go when rendering an action from outside a controller&quot;
-      exit
-    end
-
-  # Example: redirect_to :action =&gt; 'login'
-  when /(redirect_to|redirect_back_or_default)[\s\(]/
-    controller = action = nil
-    controller = $1 if TextMate.current_line =~ /.*:controller\s*=&gt;\s*['&quot;](.+?)['&quot;]/
-    action = $1 if TextMate.current_line =~ /.*:action\s*=&gt;\s*['&quot;](.+?)['&quot;]/
-
-    unless current_file.file_type == :controller
-      puts &quot;Don't know where to go when redirecting from outside a controller&quot;
-      exit
-    end
-    
-    if controller.nil?
-      controller_file = current_file
-    else
-      # Check for modules
-      if controller.include?('/')
-        pieces = controller.split('/')
-        controller = pieces.pop
-        modules = pieces
-      end
-      other_path = File.join(current_file.rails_root, 'app', 'controllers', modules, &quot;#{controller}_controller.rb&quot;)
-      controller_file = RailsPath.new(other_path)
-    end
-
-    if search = controller_file.buffer.find(:direction =&gt; :backwards) { /def\s+#{action}\b/ }
-      TextMate.open(controller_file, search[1])
-    else
-      puts &quot;Couldn't find the #{action} action inside '#{controller_file.basename}'&quot;
-      exit
-    end
-
-  # Example: &lt;script src=&quot;/javascripts/controls.js&quot;&gt;
-  when /\&lt;script.+src=['&quot;](.+\.js)['&quot;]/
-    javascript = $1
-    if javascript =~ %r{^https?://}
-      TextMate.open_url javascript
-    else
-      full_path = File.join(current_file.rails_root, 'public', javascript)
-      TextMate.open full_path
-    end
-
-  # Example: &lt;%= javascript_include_tag 'general' %&gt;
-  # require_javascript is used by bundled_resource plugin
-  when /(require_javascript|javascript_include_tag)\b/
-    if match = TextMate.current_line.unstringify_hash_arguments.find_nearest_string_or_symbol(TextMate.column_number)
-      javascript = match[0]
-      javascript += '.js' if not javascript =~ /\.js$/
-      # If there is no leading slash, assume it's a js from the public/javascripts dir
-      public_file = javascript[0..0] == &quot;/&quot; ? javascript[1..-1] : &quot;javascripts/#{javascript}&quot;
-      TextMate.open File.join(current_file.rails_root, 'public', public_file)
-    else
-      puts &quot;No javascript identified&quot;
-    end
-
-  # Example: &lt;link href=&quot;/stylesheets/application.css&quot;&gt;
-  # Example: @import url(/stylesheets/conferences.css);
-  when /\&lt;link.+href=['&quot;](.+\.css)['&quot;]/, /\@import.+url\((.+\.css)\)/
-    stylesheet = $1
-    if stylesheet =~ %r{^https?://}
-      TextMate.open_url stylesheet
-    else
-      full_path = File.join(current_file.rails_root, 'public', stylesheet[1..-1])
-      TextMate.open full_path
-    end
-
-  # Example: &lt;%= stylesheet_link_tag 'application' %&gt;
-  when /(require_stylesheet|stylesheet_link_tag)\b/
-    if match = TextMate.current_line.unstringify_hash_arguments.find_nearest_string_or_symbol(TextMate.column_number)
-      stylesheet = match[0]
-      stylesheet += '.css' if not stylesheet =~ /\.css$/
-      # If there is no leading slash, assume it's a js from the public/javascripts dir
-      public_file = stylesheet[0..0] == &quot;/&quot; ? stylesheet[1..-1] : &quot;stylesheets/#{stylesheet}&quot;
-      TextMate.open File.join(current_file.rails_root, 'public', public_file)
-    else
-      puts &quot;No stylesheet identified&quot;
-    end
-  
-  else
-    puts &quot;No 'go to file' directives found on this line.&quot;
-    # Do nothing -- beep?
-end
+CommandGoToFile.on_current_line
\ No newline at end of file</diff>
      <filename>Support/bin/go_to_file_on_current_line.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,35 +22,35 @@ else
   TextMate.exit_show_tool_tip
 end
 
-# Find 'self.down' method and matching 'end'
-if self_down = buffer.find { /^(\s*)def self\.down\b/ }
-  indentation = self_down[0]
-  self_down_end = buffer.find(:from =&gt; (self_down[1] + 1)) { %r{^#{indentation}end\b} }
+# Find 'self.down' method
+if self_down = buffer.find { /^(\s*)def\s+self\.down\b/ }
+  indentation = self_down[1]
 
   # Find the matching create_table clause in the schema.rb file
   schema = RailsPath.new('db/schema.rb')
   schema.buffer.line_number = schema.buffer.column_number = 0
   if schema.exists?
     if insert_text = schema.buffer.find { %r{^(\s*)create_table\s+[&quot;']#{table_name}['&quot;]} }
-      from = insert_text[1] + 1
-      insert_text_indentation = insert_text[0]
-      insert_text_end = schema.buffer.find(:from =&gt; from) { %r{^#{indentation}end\b} }
+      from = insert_text[0] + 1
+      insert_text_indentation = insert_text[1]
+      insert_text_end = schema.buffer.find(:from =&gt; from) { %r{^#{insert_text_indentation}end\b} }
 
       # If a column is specified, get just the column, not the whole create_table
       if column_name
-        to = insert_text_end[1]
-        if insert_text = schema.buffer.find { %r{^\s*\w+\.column\s+['&quot;]#{column_name}['&quot;](.+)$} }
-          column_params = insert_text[0]
-          
-          insert_text = &quot;add_column :#{table_name}, :#{column_name}#{column_params}\n&quot;
-          buffer.lines.insert self_down_end[1], prepend(insert_text, indentation + &quot;  &quot;)
+        to = insert_text_end[0]
+        if insert_text = schema.buffer.find { %r{^\s*\w+\.(column|primary_key|string|text|integer|float|decimal|datetime|timestamp|time|date|binary|boolean)\s+['&quot;]#{column_name}['&quot;](.*)$} }
+          column_type = &quot;, :#{insert_text[1]}&quot; unless insert_text[1] == &quot;column&quot;
+          column_params = insert_text[2]
+          insert_text = &quot;add_column :#{table_name}, :#{column_name}#{column_type}#{column_params}\n&quot;
+
+          buffer.lines.insert self_down[0] + 1, prepend(insert_text, indentation + &quot;  &quot;)
         else
           puts &quot;The db/schema.rb does not have a column matching \&quot;#{column_name}\&quot; within create_table \&quot;#{table_name}\&quot;.&quot;
           TextMate.exit_show_tool_tip
         end
       else
-        insert_text = unprepend(schema.buffer.lines[insert_text[1]..insert_text_end[1]], insert_text_indentation)
-        buffer.lines.insert self_down_end[1], prepend(&quot;\n&quot; + insert_text, indentation + &quot;  &quot;)
+        insert_text = unprepend(schema.buffer.lines[insert_text[0]..insert_text_end[0]], insert_text_indentation)
+        buffer.lines.insert self_down[0] + 1, prepend(insert_text + &quot;\n&quot;, indentation + &quot;  &quot;)
       end
       print buffer.lines.join.gsub(/\[press tab twice to generate (create_table|add_column)\]/, &quot;&quot;)
     else
@@ -64,4 +64,4 @@ if self_down = buffer.find { /^(\s*)def self\.down\b/ }
 else
   puts &quot;No self.down method found in below the caret.&quot;
   TextMate.exit_show_tool_tip
-end
+end
\ No newline at end of file</diff>
      <filename>Support/bin/insert_add_column_or_create_table.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 #!/usr/bin/env ruby
-# 
+#
 # Copyright (c) 2006 Sami Samhuri
 # Distributed under the MIT license
-# 
+#
 # Inserts a migration snippet into 2 places in the document, one
 # piece in self.up and one in self.down.
 
@@ -10,33 +10,34 @@ snippets = {
   'rename_column' =&gt;
     { :up   =&gt; 'rename_column :${1:table_name}, :${2:column_name}, :${3:new_column_name}$0',
       :down =&gt; 'rename_column :$1, :$3, :$2' },
-  
+
   'rename_column_continue' =&gt;
     { :up   =&gt; 'rename_column :${1:table_name}, :${2:column_name}, :${3:new_column_name}
 mncc$0',
       :down =&gt; 'rename_column :$1, :$3, :$2' },
-  
+
   'rename_table' =&gt;
     { :up   =&gt; 'rename_table :${1:old_table_name}, :${2:new_table_name}$0',
       :down =&gt; 'rename_table :$2, :$1' },
-  
+
   'rename_table_continue' =&gt;
     { :up   =&gt; 'rename_table :${1:old_table_name}, :${2:new_table_name}
 mntc$0',
       :down =&gt; 'rename_table :$2, :$1' },
-  
+
   'add_remove_column' =&gt;
     { :up   =&gt; 'add_column :${1:table_name}, :${2:column_name}, :${3:string}$0',
       :down =&gt; 'remove_column :$1, :$2' },
-  
+
   'add_remove_column_continue' =&gt;
     { :up   =&gt; 'add_column :${1:table_name}, :${2:column_name}, :${3:string}
 marcc$0',
       :down =&gt; 'remove_column :$1, :$2' },
 
   'create_drop_table' =&gt;
-    { :up   =&gt; 'create_table :${1:table_name} do |t|
-  mccc$0
+    { :up   =&gt; 'create_table :${1:table_name}, :force =&gt; true do |t|
+  t.$0
+  t.timestamps
 end',
       :down =&gt; 'drop_table :$1' },
 
@@ -45,8 +46,8 @@ end',
       :down =&gt; 'remove_index :$1, :$2' },
 
   'add_remove_unique_index' =&gt;
-    { :up   =&gt; 'add_index :${1:table_name}, [:${2:column_name}${3:, :${4:column_name}}], :unique =&gt; true$0',
-      :down =&gt; 'remove_index :$1, :column =&gt; :$2' },
+    { :up   =&gt; 'add_index :${1:table_name}, ${2:[:${3:column_name}${4:, :${5:column_name}}]}, :unique =&gt; true$0',
+      :down =&gt; 'remove_index :$1, :column =&gt; $2' },
 
   'add_remove_named_index' =&gt;
     { :up   =&gt; 'add_index :${1:table_name}, [:${2:column_name}${3:, :${4:column_name}}], :name =&gt; &quot;${5:index_name}&quot;${6:, :unique =&gt; true}$0',
@@ -60,25 +61,23 @@ def indent(code)
 end
 
 def insert_migration(snippet, text)
-  lines = text.to_a.reverse
-  
+  lines = text.to_a
+
   up_code = indent(snippet[:up])
   down_code = indent(snippet[:down])
 
   # insert the self.up part of the snippet
-  lines[-1] = up_code
-  
-  # find the end of self.down and insert 2nd line, this is hardly robust.
-  # i'm assuming self.down is the last method in the class, but it works
-  ends_seen = 0
+  lines[0] = up_code
+
+  # find the beginning of self.down and insert down code, this is hardly robust.
+  # assuming self.down is after self.up in the class
   lines.each_with_index do |line, i|
-    ends_seen += 1    if line =~ /^\s*end\b/
-    if ends_seen == 2
+    if line =~ /^\s*def\s+self\.down\b/
       lines[i, 1] = [lines[i], down_code]
       break
     end
   end
-  lines.reverse.to_s
+  lines.to_s
 end
 
 snippet = ARGV.shift</diff>
      <filename>Support/bin/intelligent_migration_snippet.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@ OptionParser.new do |opts|
   opts.on(&quot;-a&quot;, &quot;--answer [ANSWER TEXT]&quot;, &quot;Default answer for the question.&quot;) do |answer|
     options[:answer] = answer
   end
-  
+
   opts.on(&quot;-v&quot;, &quot;--variable [VARIABLE]&quot;, &quot;Variable to assign the ANSWER to.&quot;) do |variable|
     options[:variable] = variable
   end</diff>
      <filename>Support/bin/rake_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -24,18 +24,18 @@ class Buffer
     @column_number = column_number || TextMate.column_number
     @stack = []
   end
-  
+
   # Init from a String (filename) or FilePath
   def self.new_from_file(filepath, line_number = nil, column_number = nil)
     # In case it's a RailsPath, get the string representing the filepath
     filepath = filepath.filepath if filepath.respond_to?(:filepath)
     new(IO.read(filepath, line_number, column_number))
   end
-  
+
   def index
     @lines.slice(0...line_number).join.length
   end
-  
+
   def current_line
     lines[line_number]
   end
@@ -43,11 +43,11 @@ class Buffer
   def push_position
     @stack.push [@line_number, @column_number]
   end
-  
+
   def pop_position
     @line_number, @column_number = @stack.pop
   end
-  
+
   def to_a
     @lines
   end
@@ -55,7 +55,7 @@ class Buffer
   def text
     @text ||= lines.join
   end
-  
+
   def text=(buffer)
     @text = buffer.gsub(&quot;\r\n&quot;, &quot;\n&quot;)
     @lines = @text.to_a
@@ -71,7 +71,7 @@ class Buffer
   # An optional :direction of :backward is also accepted if the search is to be reversed.
   def find(options = {}, &amp;block)
     options = {:direction =&gt; :forward}.update(options)
-    
+
     # Use some sensible defaults if just a direction is given
     if direction = options[:direction] == :forward
       from = options[:from] || line_number
@@ -87,20 +87,30 @@ class Buffer
 
     from.step(to, direction) do |i|
       value = yield(lines[i])
-      value = lines[i].scan(value).flatten.compact.first if value.is_a? Regexp
-      return [value, i] if value
+      value = lines[i].scan(value) if value.is_a? Regexp
+      return [i, value].flatten.compact if value.first
     end
     return nil
   end
 
   # Search for the nearest &quot;def [method]&quot; declaration
   def find_method(options = {})
-    options = {:direction =&gt; :backwards}.update(options)
+    options = {:direction =&gt; :backward}.update(options)
     find(options) { %r{def\s+(\w+)} }
   end
 
+  # Search for the nearest &quot;wants.&quot; declaration within a &quot;respond_to&quot; section.
+  def find_respond_to_format
+    m = find_method
+    return nil if m.nil?
+    from, wants = find(:direction =&gt; :backward, :from =&gt; m.first) { %r{\brespond_to\s.+\|\s*(\w+)\s*\|} }
+    return nil if wants.nil?
+    options = {:direction =&gt; lines[from] == current_line ? :forward : :backward, :from =&gt; from}
+    find(options) { Regexp.new(wants + '\.(\w+)') }
+  end
+
   def find_nearest_string_or_symbol(current_line = current_line)
     current_line.find_nearest_string_or_symbol(column_number)
   end
-  
+
 end</diff>
      <filename>Support/lib/rails/buffer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@ class String
   def line_from_index(i)
     slice(0..i).count(&quot;\n&quot;)
   end
-  
+
   # Gets the index of the beginning of line number +l+ (0-base index)
   def index_from_line(l)
     to_a.slice(0...l).join.length
@@ -44,7 +44,7 @@ class String
     end
     (nearest_token.nil?) ? nil : [nearest_token, nearest_index]
   end
-  
+
   def underscore
     gsub(/::/, '/').
       gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
@@ -52,7 +52,7 @@ class String
       tr(&quot;-&quot;, &quot;_&quot;).
       downcase
   end
-  
+
   def camelize
     gsub(/\/(.?)/) { &quot;::&quot; + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
   end</diff>
      <filename>Support/lib/rails/misc.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,8 +8,25 @@
 require 'rails/misc'
 require 'rails/text_mate'
 require 'rails/buffer'
+require 'rails/inflector'
+require 'fileutils'
 
 module AssociationMessages
+  @@associations = {
+    :controller =&gt; [:functional_test, :helper, :model, :javascript, :stylesheet, :fixture],
+    :helper =&gt; [:controller, :model, :unit_test, :functional_test, :javascript, :stylesheet, :fixture],
+    :view =&gt; [:controller, :javascript, :stylesheet, :helper, :model],
+    :model =&gt; [:unit_test, :functional_test, :controller, :helper, :fixture],
+    :fixture =&gt; [:unit_test, :functional_test, :controller, :helper, :model],
+    :functional_test =&gt; [:controller, :helper, :model, :unit_test, :fixture],
+    :unit_test =&gt; [:model, :controller, :helper, :functional_test, :fixture],
+    :javascript =&gt; [:helper, :controller],
+    :stylesheet =&gt; [:helper, :controller]
+  }
+
+  # Make associations hash publicly available to each object
+  def associations; self.class.class_eval(&quot;@@associations&quot;) end
+
   # Return associated_with_*? methods
   def method_missing(method, *args)
     case method.to_s
@@ -20,23 +37,17 @@ module AssociationMessages
     end
   end
 
-  @@associations = {
-    :controller =&gt; [:view, :helper, :functional_test, :javascript, :stylesheet],
-    :helper =&gt; [:controller, :unit_test, :javascript, :stylesheet],
-    :view =&gt; [:controller, :javascript, :stylesheet, :model],
-    :model =&gt; [:unit_test, :fixture, :view],
-    :fixture =&gt; [:unit_test],
-    :functional_test =&gt; [:controller],
-    :unit_test =&gt; [:model, :helper],
-    :javascript =&gt; [:helper, :controller],
-    :stylesheet =&gt; [:helper, :controller] }
-
-  # Make associations hash publicly available to each object
-  def associations; self.class.class_eval(&quot;@@associations&quot;) end
+  def best_match
+    return nil if associations[file_type].nil?
+    return :view if file_type == :controller &amp;&amp; action_name
+    associations[file_type].each { |x| return x if rails_path_for(x).exists? }
+    return associations[file_type].first
+  end
 end
 
 class RailsPath
   attr_reader :filepath
+  attr_reader :path_name, :file_name, :content_type, :extension
 
   include AssociationMessages
 
@@ -48,6 +59,9 @@ class RailsPath
       # Relative file, prepend rails_root
       @filepath = File.join(rails_root, filepath)
     end
+
+    # Put parts into instance variables to make retrieval more uniform.
+    parse_file_parts
   end
 
   def buffer
@@ -57,36 +71,29 @@ class RailsPath
   def exists?
     File.file?(@filepath)
   end
-  
+
   def basename
     File.basename(@filepath)
   end
-  
+
   def dirname
     File.dirname(@filepath)
   end
 
-  def touch_directories
-    return if dirname[0..0] != '/'
-    dirs = dirname[1..-1].split('/')
-    for i in 0..(dirs.size)
-      new_dir = '/' + File.join(dirs[0..i])
-      Dir.mkdir(new_dir) if !File.exist?(new_dir)
-    end
-  end
-  
   # Make sure the file exists by creating it if it doesn't
   def touch
     if !exists?
-      touch_directories
-      f = File.open(@filepath, &quot;w&quot;); f.close
+      FileUtils.mkdir_p dirname
+      FileUtils.touch @filepath
     end
   end
-  
+
+  def append(str)
+    File.open(@filepath, &quot;a&quot;) { |f| f.write str }
+  end
+
   def controller_name
-    name = basename
-    # Remove extension
-    name.sub!(/\.\w+$/, '')
+    name = @file_name
     # Remove extras
     case file_type
     when :controller then name.sub!(/_controller$/, '')
@@ -94,26 +101,34 @@ class RailsPath
     when :unit_test  then name.sub!(/_test$/, '')
     when :view       then name = dirname.split('/').pop
     when :functional_test then name.sub!(/_controller_test$/, '')
+    else
+      if !File.file?(File.join(rails_root, stubs[:controller], '/', name + '_controller.rb'))
+        name = Inflector.pluralize(name)
+      end
     end
-    
     return name
   end
-  
+
   def action_name
     name =
       case file_type
       when :controller, :model
-        buffer.find_method(:direction =&gt; :backwards).first rescue nil
+        buffer.find_method(:direction =&gt; :backward).last rescue nil
       when :view
         basename
       when :functional_test
-        buffer.find_method(:direction =&gt; :backwards).first.sub('^test_', '')
+        buffer.find_method(:direction =&gt; :backward).last.sub('^test_', '')
       else nil
       end
-    
-    return name.sub(/\.\w+$/, '') rescue nil # Remove extension
+
+    return parse_file_name(name)[:file_name] rescue nil # Remove extension
   end
-  
+
+  def respond_to_format
+    return nil unless file_type == :controller
+    buffer.find_respond_to_format
+  end
+
   def rails_root
     return TextMate.project_directory
     # TODO: Look for the root_indicators inside TM_PROJECT_DIRECTORY and return nil if not found
@@ -124,13 +139,13 @@ class RailsPath
     #  end
     #end
   end
-  
+
   # This is used in :file_type and :rails_path_for_view
-  VIEW_EXTENSIONS = %w( rhtml rxhtml rxml rjs erb builder )
+  VIEW_EXTENSIONS = %w( erb builder rhtml rxhtml rxml rjs haml )
 
   def file_type
     return @file_type if @file_type
-    
+
     @file_type =
       case @filepath
       when %r{/controllers/(.+_controller\.(rb))$}      then :controller
@@ -138,11 +153,11 @@ class RailsPath
       when %r{/helpers/(.+_helper\.rb)$}                then :helper
       when %r{/views/(.+\.(#{VIEW_EXTENSIONS * '|'}))$} then :view
       when %r{/models/(.+\.(rb))$}                      then :model
-      when %r{/test/fixtures/(.+\.(yml|csv))$}          then :fixture
+      when %r{/.+/fixtures/(.+\.(yml|csv))$}            then :fixture
       when %r{/test/functional/(.+\.(rb))$}             then :functional_test
       when %r{/test/unit/(.+\.(rb))$}                   then :unit_test
       when %r{/public/javascripts/(.+\.(js))$}          then :javascript
-      when %r{/public/stylesheets/(.+\.(css))$}         then :stylesheet
+      when %r{/public/stylesheets/(?:sass/)?(.+\.(css|sass))$}  then :stylesheet
       else nil
       end
     # Store the tail (modules + file) after the regexp
@@ -152,107 +167,150 @@ class RailsPath
     @extension = $2
     return @file_type
   end
-  
+
   def tail
     # Get the tail if it's not set yet
     file_type unless @tail
     return @tail
   end
-  
+
   def extension
     # Get the extension if it's not set yet
     file_type unless @extension
     return @extension
   end
-  
+
   # View file that does not begin with _
   def partial?
     file_type == :view and basename !~ /^_/
   end
-  
-  def modules
-    case file_type
-    when :view
-      @tail.split('/').slice(0...-2)
+
+  def modules 
+    return nil if tail.nil? 
+    if file_type == :view
+      tail.split('/').slice(0...-2)
     else
-      @tail.split('/').slice(0...-1)
+      tail.split('/').slice(0...-1)
     end
   end
-  
-  def controller_name_modified_for(type)
+
+  def controller_name_possibles_modified_for(type)
     case type
     when :controller
       if controller_name == 'application'
         controller_name
       else
-        controller_name + '_controller'
+        [Inflector.pluralize(controller_name), Inflector.singularize(controller_name)].
+         map { |name| name + '_controller' }
       end
     when :helper     then controller_name + '_helper'
     when :functional_test then controller_name + '_controller_test'
-    when :unit_test  then controller_name + '_test'
+    when :unit_test  then Inflector.singularize(controller_name) + '_test'
+    when :model      then Inflector.singularize(controller_name)
+    when :fixture    then Inflector.pluralize(controller_name)
     else controller_name
     end
   end
 
-  def default_extension_for(type)
+  def select_controller_name(type, base_path, extn)
+    controller_names = controller_name_possibles_modified_for(type)
+    if controller_names.is_a?(Array)
+      for name in controller_names
+        return name if File.exists?(File.join(base_path, name + extn))
+      end
+      controller_names = controller_names.first
+    end
+    controller_names
+  end
+  
+  def default_extension_for(type, view_format = nil)
     case type
-    when :javascript then '.js'
-    when :stylesheet then '.css'
-    when :view       then '.html.erb'
+    when :javascript then ENV['RAILS_JS_EXT'] || '.js'
+    when :stylesheet then ENV['RAILS_CSS_EXT'] || (wants_haml ? '.sass' : '.css')
+    when :view       then                    
+      view_format = :html if view_format.nil?
+      case view_format.to_sym
+      when :xml, :rss, :atom then &quot;.#{view_format}.builder&quot;
+      when :js  then '.js.rjs'
+      else 
+        rails_view_ext = ENV['RAILS_VIEW_EXT'] || (wants_haml ? '.haml' : '.erb')
+        &quot;.#{view_format}#{rails_view_ext}&quot;
+      end
+    when :fixture    then '.yml'
     else '.rb'
     end
   end
-  
-  def rails_path_for(type)
+
+  def rails_path_for(type)    
+    return nil if file_type.nil?
     return rails_path_for_view if type == :view
     if TextMate.project_directory
-      RailsPath.new(File.join(rails_root, stubs[type], modules, controller_name_modified_for(type) + default_extension_for(type)))
+      base_path = File.join(rails_root, stubs[type], modules)
+      extn      = default_extension_for(type)
+      file_name = select_controller_name(type, base_path, extn)
+      RailsPath.new(File.join(base_path, file_name + extn))
     else
       puts &quot;There needs to be a project associated with this file.&quot;
     end
   end
-  
+
   def rails_path_for_view
     return nil if action_name.nil?
-    
-    file_exists = false
-    VIEW_EXTENSIONS.each do |e|
-      filename_with_extension = action_name + &quot;.&quot; + e
+    line, view_format = respond_to_format
+
+    if view_format
+      VIEW_EXTENSIONS.each do |ext|
+        filename_with_extension = &quot;#{action_name}.#{view_format}.#{ext}&quot;
+        existing_view = File.join(rails_root, stubs[:view], modules, controller_name, filename_with_extension)
+        return RailsPath.new(existing_view) if File.exist?(existing_view)
+      end
+    end
+    VIEW_EXTENSIONS.each do |ext|
+      filename_with_extension = &quot;#{action_name}.#{ext}&quot;
       existing_view = File.join(rails_root, stubs[:view], modules, controller_name, filename_with_extension)
       return RailsPath.new(existing_view) if File.exist?(existing_view)
     end
-    default_view = File.join(rails_root, stubs[:view], modules, controller_name, action_name + default_extension_for(:view))
+    default_view = File.join(rails_root, stubs[:view], modules, controller_name, action_name + default_extension_for(:view, view_format))
     return RailsPath.new(default_view)
   end
-  
-  def ask_for_view(default_name = action_name)
-    if designated_name = TextMate.input(&quot;Enter the name of the new view file:&quot;, default_name + default_extension_for(:view))
-      view_file = File.join(rails_root, stubs[:view], modules, controller_name, designated_name)
-      f = File.open(view_file, &quot;w&quot;); f.close
-      # FIXME: For some reason the following line freezes TextMate
-      # TextMate.refresh_project_drawer
-      return RailsPath.new(view_file)
-    end
-    return nil
+
+  def parse_file_parts
+    @path_name, @file_name = File.split(@filepath)
+    file_part_hash = parse_file_name(@file_name)
+    @file_name = file_part_hash[:file_name]
+    @content_type = file_part_hash[:content_type]
+    @extension = file_part_hash[:extension]
+    return [@path_name, @file_name, @content_type, @extension]
   end
-  
-  def self.stubs
+
+  # File name parser that has no side-effects on object state
+  def parse_file_name(file_name)
+    path_parts = file_name.split('.')
+    extension = path_parts.pop if path_parts.length &gt; 1
+    content_type = path_parts.pop if path_parts.length &gt; 1
+    file_name = path_parts.join('.')
+    return {:extension =&gt; extension, :content_type =&gt; content_type, :file_name =&gt; file_name}
+  end
+
+  def wants_haml
+    @wants_html ||= File.file?(File.join(rails_root, &quot;vendor/plugins/haml/&quot;, &quot;init.rb&quot;))
+  end
+
+  def stubs
     { :controller =&gt; 'app/controllers',
       :model =&gt; 'app/models',
-      :helper =&gt; '/app/helpers/',
-      :view =&gt; '/app/views/',
+      :helper =&gt; 'app/helpers/',
+      :view =&gt; 'app/views/',
       :config =&gt; 'config',
       :lib =&gt; 'lib',
       :log =&gt; 'log',
       :javascript =&gt; 'public/javascripts',
-      :stylesheet =&gt; 'public/stylesheets',
+      :stylesheet =&gt; wants_haml ? 'public/stylesheets/sass' : 'public/stylesheets',
       :functional_test =&gt; 'test/functional',
       :unit_test =&gt; 'test/unit',
       :fixture =&gt; 'test/fixtures'}
   end
-  
-  def stubs; self.class.stubs end
-    
+
   def ==(other)
     other = other.filepath if other.respond_to?(:filepath)
     @filepath == other</diff>
      <filename>Support/lib/rails/rails_path.rb</filename>
    </modified>
    <modified>
      <diff>@@ -41,12 +41,12 @@ module TextMate
     def selected_text
       env(:selected_text)
     end
-    
+
     # Make line_number 0-base index
     def line_number
       env(:line_number).to_i - 1
     end
-    
+
     # Make column_number 0-base as well
     def column_number
       env(:column_number).to_i - 1
@@ -55,11 +55,11 @@ module TextMate
     def project_directory
       env(:project_directory)
     end
-    
+
     def env(var)
       ENV['TM_' + var.to_s.upcase]
     end
-    
+
     # Forward to the TM_* environment variables if method is missing.  Some useful variables include:
     #   selected_text, current_line, column_number, line_number, support_path
     def method_missing(method, *args)
@@ -71,15 +71,15 @@ module TextMate
     end
 
     # TODO: Move cocoa dialog stuff to its own class or module
-    
+
     def cocoa_dialog_command
       &quot;#{support_path}/bin/CocoaDialog.app/Contents/MacOS/CocoaDialog&quot;
     end
-    
+
     # See http://cocoadialog.sourceforge.net/documentation.html for documentation
     def cocoa_dialog(command, options = {})
       options_list = []
-      options.each_pair do |k, v| 
+      options.each_pair do |k, v|
         k = k.to_s.gsub('_', '-')
         value = v.is_a?(Array) ? %Q{&quot;#{v.join('&quot; &quot;')}&quot;} : &quot;\&quot;#{v}\&quot;&quot;
         if v
@@ -94,7 +94,7 @@ module TextMate
       # $logger.debug &quot;Dialog command: #{dialog_command}&quot;
       `#{dialog_command}`.to_a.map { |v| v.strip }
     end
-    
+
     # Shows an information bubble with a nice gradient background
     #
     def message(text, options = {})
@@ -126,7 +126,7 @@ module TextMate
         return nil
       end
     end
-    
+
     def choose(text, choices = [&quot;none&quot;], options = {})
       options = {:title =&gt; &quot;Choose&quot;, :text =&gt; text, :items =&gt; choices, :button1 =&gt; 'Ok', :button2 =&gt; 'Cancel'}.update(options)
       button, choice = cocoa_dialog('dropdown', options)
@@ -144,10 +144,10 @@ module TextMate
 
 	def TextMate.call_with_progress( args, &amp;block )
 		output_filepath	= args[:output_filepath]		# path to open after execution
-		
+
 		title			= args[:title] || 'Progress'
 		message			= args[:message] || 'Frobbing the widget...'
-		
+
 		cocoa_dialog	= &quot;#{ENV['TM_SUPPORT_PATH']}/bin/CocoaDialog.app/Contents/MacOS/CocoaDialog&quot;
 
 		tempdir = &quot;/tmp/TextMate_progress_cmd_tmp.#{$PID}&quot;
@@ -164,7 +164,7 @@ module TextMate
 		end
 
 		sleep 0.1
-		
+
 	end
 
 end</diff>
      <filename>Support/lib/rails/text_mate.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,4 +11,10 @@ $LOAD_PATH.unshift(bundle_lib) if ENV['TM_BUNDLE_SUPPORT'] and !$LOAD_PATH.inclu
 require 'rails/text_mate'
 require 'rails/rails_path'
 require 'rails/unobtrusive_logger'
-require 'rails/misc'
\ No newline at end of file
+require 'rails/misc'
+require 'rails/inflector'   
+
+def ruby(command)
+  `/usr/bin/env ruby #{command}`
+end
+</diff>
      <filename>Support/lib/rails_bundle_tools.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,6 @@ if (ENV['RAILS_ENV'] == 'development')
   ::MAC_OS_X = (`uname`.chomp == &quot;Darwin&quot;) rescue false
   require 'textmate_footnotes'
   require 'textmate_initialize'
-  
+
   require 'textmate_backtracer' if ::MAC_OS_X
 end
\ No newline at end of file</diff>
      <filename>Support/plugins/footnotes-edge/init.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 class Exception
   alias :original_clean_backtrace :clean_backtrace
-  
+
   def add_links_to_backtrace(lines)
     lines.collect do |line|
       expanded = line.gsub '#{RAILS_ROOT}', RAILS_ROOT
@@ -33,11 +33,10 @@ protected
   alias backtracer_original_template_path_for_local_rescue template_path_for_local_rescue
   def template_path_for_local_rescue(exception)
     if ActionView::TemplateError === exception
-      File.dirname(__FILE__) + &quot;/../templates/rescues/template_error.rhtml&quot;
+      File.dirname(__FILE__) + &quot;/../templates/rescues/template_error.erb&quot;
     else
       backtracer_original_template_path_for_local_rescue(exception)
     end
   end
-  
+
 end
-  
\ No newline at end of file</diff>
      <filename>Support/plugins/footnotes-edge/lib/textmate_backtracer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,15 +15,15 @@ class FootnoteFilter
   cattr_accessor :no_style, :abs_root, :textmate_prefix
   self.no_style = false
   self.textmate_prefix = &quot;txmt://open?url=file://&quot;
-  
+
   attr_accessor :body, :abs_root
-  
+
   def self.filter(controller)
     return if controller.render_without_footnotes
     filter = FootnoteFilter.new(controller)
     filter.add_footnotes!
   end
-  
+
   def initialize(controller)
     @controller = controller
     @template = controller.instance_variable_get(&quot;@template&quot;)
@@ -31,7 +31,7 @@ class FootnoteFilter
     @extra_html = &quot;&quot;
     self.abs_root = File.expand_path(RAILS_ROOT)
   end
-  
+
   def add_footnotes!
     if performed_render? and first_render?
       if [&quot;html.erb&quot;, &quot;haml&quot;, &quot;rhtml&quot;, &quot;rxhtml&quot;].include?(template_extension) &amp;&amp; (content_type =~ /html/ || content_type.nil?) &amp;&amp; !xhr?
@@ -44,70 +44,70 @@ class FootnoteFilter
     # Discard footnotes if there are any problems
     RAILS_DEFAULT_LOGGER.error &quot;Textmate Footnotes Exception: #{e}\n#{e.backtrace.join(&quot;\n&quot;)}&quot;
   end
-  
+
   # Some controller classes come with the Controller:: module and some don't
   # (anyone know why? -- Duane)
   def controller_filename
     File.join(abs_root, &quot;app&quot;, &quot;controllers&quot;, &quot;#{@controller.class.to_s.underscore}.rb&quot;).
     sub('/controllers/controllers/', '/controllers/')
   end
-  
+
   def controller_text
     @controller_text ||= IO.read(controller_filename)
   end
-  
+
   def index_of_method
     (controller_text =~ /def\s+#{@controller.action_name}[\s\(]/)
   end
-  
+
   def controller_line_number
     controller_text.line_from_index(index_of_method)
   end
-  
+
   def performed_render?
     @controller.instance_variable_get(&quot;@performed_render&quot;)
   end
-  
+
   def first_render?
     @template.respond_to?(:first_render) and @template.first_render
   end
-  
+
   def xhr?
     @controller.request.xhr?
   end
-  
+
   def template_path
     @template.first_render.sub(/\.(html\.erb|rhtml|rxhtml|rxml|rjs)$/, &quot;&quot;)
   end
-  
+
   def template_extension
     @template.first_render.scan(/\.(html\.erb|rhtml|rxhtml|rxml|rjs)$/).flatten.first ||
     @template.pick_template_extension(template_path).to_s
   end
-  
+
   def template_file_name
     File.expand_path(@template.send(:full_template_path, template_path, template_extension))
   end
-  
+
   def layout_file_name
     [&quot;html.erb&quot;, &quot;rhtml&quot;].each do |extension|
       path = File.expand_path(@template.send(:full_template_path, @controller.active_layout, extension))
       return path if File.exist?(path)
     end
   end
-  
+
   def content_type
     @controller.response.headers['Content-Type']
   end
-  
+
   def stylesheet_files
     @stylesheet_files ||= @body.scan(/&lt;link[^&gt;]+href\s*=\s*['&quot;]([^&gt;?'&quot;]+)/im).flatten
   end
-  
+
   def javascript_files
     @javascript_files ||= @body.scan(/&lt;script[^&gt;]+src\s*=\s*['&quot;]([^&gt;?'&quot;]+)/im).flatten
   end
-  
+
   def controller_url
     escape(
       textmate_prefix +
@@ -115,15 +115,15 @@ class FootnoteFilter
       (index_of_method ? &quot;&amp;line=#{controller_line_number + 1}&amp;column=3&quot; : &quot;&quot;)
     )
   end
-  
+
   def view_url
     escape(textmate_prefix + template_file_name)
   end
-  
+
   def layout_url
     escape(textmate_prefix + layout_file_name)
   end
-  
+
   def insert_styles
     insert_text :before, /&lt;\/head&gt;/i, &lt;&lt;-HTML
     &lt;!-- TextMate Footnotes Style --&gt;
@@ -136,13 +136,13 @@ class FootnoteFilter
     &lt;!-- End TextMate Footnotes Style --&gt;
     HTML
   end
-  
+
   def insert_footnotes
-    
+
     def tm_footnotes_toggle(id)
       &quot;s = document.getElementById('#{id}').style; if(s.display == 'none') { s.display = '' } else { s.display = 'none' }&quot;
     end
-    
+
     footnotes_html = &lt;&lt;-HTML
     &lt;!-- TextMate Footnotes --&gt;
     &lt;div style=&quot;clear:both&quot;&gt;&lt;/div&gt;
@@ -182,7 +182,7 @@ class FootnoteFilter
       insert_text :before, /&lt;\/body&gt;/i, footnotes_html
     end
   end
-  
+
   def textmate_links
     html = &quot;&quot;
     if ::MAC_OS_X
@@ -198,7 +198,7 @@ class FootnoteFilter
     end
     html
   end
-  
+
   def asset_file_links(link_text, files)
     return '' if files.size == 0
     links = files.map do |filename|
@@ -218,7 +218,7 @@ class FootnoteFilter
     # Return the link that will open the 'extra html' div
     %{ | &lt;a href=&quot;#&quot; onclick=&quot;#{tm_footnotes_toggle('tm_footnotes_' + link_text.underscore.gsub(' ', '_') )}; return false&quot;&gt;#{link_text}&lt;/a&gt;}
   end
-  
+
   def indent(indentation, text)
     lines = text.to_a
     initial_indentation = lines.first.scan(/^(\s+)/).flatten.first
@@ -250,7 +250,7 @@ class FootnoteFilter
       end
     @body.insert index, indent(indentation, new_text)
   end
-  
+
   def escape(text)
     text.gsub(&quot;&amp;&quot;, &quot;&amp;amp;&quot;).gsub(&quot;&lt;&quot;, &quot;&amp;lt;&quot;).gsub(&quot;&gt;&quot;, &quot;&amp;gt;&quot;)
   end</diff>
      <filename>Support/plugins/footnotes-edge/lib/textmate_footnotes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ RAILS_ROOT.replace File.dirname(__FILE__)
 
 class MockController
   attr_accessor :template, :session, :params, :cookies
-  
+
   def initialize(body = &quot;&quot;)
     @body = body
     @performed_render = true
@@ -14,23 +14,23 @@ class MockController
     @cookies = {}
     template
   end
-  
+
   def template
     @template ||= MockTemplate.new(self)
   end
-  
+
   def response
     @response ||= OpenStruct.new(:body =&gt; @body, :headers =&gt; {})
   end
-    
+
   def first_render
     @body
   end
-  
+
   def request
     @request ||= MockRequest.new(false)
   end
-  
+
   def action_name
     @params[:action]
   end
@@ -40,7 +40,7 @@ class MockTemplate
   def initialize(controller)
     @controller = controller
   end
-  
+
   def first_render
     &quot;example.rhtml&quot;
   end
@@ -54,11 +54,11 @@ class FootnoteFilter
   def controller_filename
     __FILE__
   end
-  
+
   def template_file_name
     __FILE__
   end
-  
+
   def layout_file_name
     __FILE__
   end</diff>
      <filename>Support/plugins/footnotes-edge/test/mock_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,52 +11,52 @@ class TextmateFootnotesTest &lt; Test::Unit::TestCase
     @controller = MockController.new $html.dup
     @footnote = FootnoteFilter.new(@controller)
   end
-  
+
   def test_mock_controller
     index = @controller.response.body.index(/This is the HTML page/)
     assert_equal 334, index
   end
-  
+
   def test_footnote_not_included_when_request_is_xhr
     @controller.request.xhr = true
     @footnote.add_footnotes!
     assert_equal $html, @controller.response.body
   end
-  
+
   def test_footnote_not_included_when_content_type_is_javascript
     @controller.response.headers['Content-Type'] = 'text/javascript'
     @footnote.add_footnotes!
     assert_equal $html, @controller.response.body
   end
-  
+
   def test_footnote_included_when_content_type_is_html
     @controller.response.headers['Content-Type'] = 'text/html'
     @footnote.add_footnotes!
     assert_not_equal $html, @controller.response.body
   end
-  
+
   def test_footnote_included_when_content_type_is_nil
     @footnote.add_footnotes!
     assert_not_equal $html, @controller.response.body
   end
-  
+
   def test_indent
     before = &quot;text\n  one\n  two&quot;
     after  = &quot;  text\n    one\n    two&quot;
-    
+
     assert_equal after, @footnote.indent(2, before)
 
     before = &quot; text\n  one\n  two&quot;
     after  = &quot;  text\n   one\n   two&quot;
-    
+
     assert_equal after, @footnote.indent(2, before)
 
     before = &quot;  text\none\ntwo&quot;
     after  = &quot;  text\n  one\n  two&quot;
-    
+
     assert_equal after, @footnote.indent(2, before)
   end
-  
+
   def test_insert_text
     @footnote.insert_text :after, /&lt;head&gt;/, &quot;Graffiti&quot;, 0
     after = &quot;    &lt;head&gt;Graffiti\n&quot;
@@ -77,8 +77,8 @@ __END__
         &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=UTF-8&quot;&gt;
     &lt;/head&gt;
     &lt;body&gt;
-        &lt;p&gt;This is the HTML page. It works and is encoded just like any HTML page you    
-         have previously done. View &lt;a href=&quot;htmltoxhtml2.htm&quot;&gt;the XHTML version&lt;/a&gt; of 
+        &lt;p&gt;This is the HTML page. It works and is encoded just like any HTML page you
+         have previously done. View &lt;a href=&quot;htmltoxhtml2.htm&quot;&gt;the XHTML version&lt;/a&gt; of
          this page to view the difference between HTML and XHTML.&lt;/p&gt;
         &lt;p&gt;You will be glad to know that no changes need to be made to any of your CSS files.&lt;/p&gt;
     &lt;/body&gt;</diff>
      <filename>Support/plugins/footnotes-edge/test/textmate_footnotes_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,6 @@ if (ENV['RAILS_ENV'] == 'development')
   ::MAC_OS_X = (`uname`.chomp == &quot;Darwin&quot;) rescue false
   require 'textmate_footnotes'
   require 'textmate_initialize'
-  
+
   require 'textmate_backtracer' if ::MAC_OS_X
 end
\ No newline at end of file</diff>
      <filename>Support/plugins/footnotes/init.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 class Exception
   alias :original_clean_backtrace :clean_backtrace
-  
+
   def add_links_to_backtrace(lines)
     lines.collect do |line|
       expanded = line.gsub '#{RAILS_ROOT}', RAILS_ROOT
@@ -38,6 +38,5 @@ protected
       backtracer_original_template_path_for_local_rescue(exception)
     end
   end
-  
+
 end
-  
\ No newline at end of file</diff>
      <filename>Support/plugins/footnotes/lib/textmate_backtracer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,15 +15,15 @@ class FootnoteFilter
   cattr_accessor :no_style, :abs_root, :textmate_prefix
   self.no_style = false
   self.textmate_prefix = &quot;txmt://open?url=file://&quot;
-  
+
   attr_accessor :body, :abs_root
-  
+
   def self.filter(controller)
     return if controller.render_without_footnotes
     filter = FootnoteFilter.new(controller)
     filter.add_footnotes!
   end
-  
+
   def initialize(controller)
     @controller = controller
     @template = controller.instance_variable_get(&quot;@template&quot;)
@@ -31,7 +31,7 @@ class FootnoteFilter
     @extra_html = &quot;&quot;
     self.abs_root = File.expand_path(RAILS_ROOT)
   end
-  
+
   def add_footnotes!
     if performed_render? and first_render?
       if [&quot;rhtml&quot;, &quot;rxhtml&quot;].include?(template_extension) &amp;&amp; (content_type =~ /html/ || content_type.nil?) &amp;&amp; !xhr?
@@ -44,67 +44,67 @@ class FootnoteFilter
     # Discard footnotes if there are any problems
     RAILS_DEFAULT_LOGGER.error &quot;Textmate Footnotes Exception: #{e}\n#{e.backtrace.join(&quot;\n&quot;)}&quot;
   end
-  
+
   # Some controller classes come with the Controller:: module and some don't
   # (anyone know why? -- Duane)
   def controller_filename
     File.join(abs_root, &quot;app&quot;, &quot;controllers&quot;, &quot;#{@controller.class.to_s.underscore}.rb&quot;).
     sub('/controllers/controllers/', '/controllers/')
   end
-  
+
   def controller_text
     @controller_text ||= IO.read(controller_filename)
   end
-  
+
   def index_of_method
     (controller_text =~ /def\s+#{@controller.action_name}[\s\(]/)
   end
-  
+
   def controller_line_number
     controller_text.line_from_index(index_of_method)
   end
-  
+
   def performed_render?
     @controller.instance_variable_get(&quot;@performed_render&quot;)
   end
-  
+
   def first_render?
     @template.respond_to?(:first_render) and @template.first_render
   end
-  
+
   def xhr?
     @controller.request.xhr?
   end
-  
+
   def template_path
     @template.first_render.sub(/\.(rhtml|rxhtml|rxml|rjs)$/, &quot;&quot;)
   end
-  
+
   def template_extension
     @template.first_render.scan(/\.(rhtml|rxhtml|rxml|rjs)$/).flatten.first ||
     @template.pick_template_extension(template_path).to_s
   end
-  
+
   def template_file_name
     File.expand_path(@template.send(:full_template_path, template_path, template_extension))
   end
-  
+
   def layout_file_name
     File.expand_path(@template.send(:full_template_path, @controller.active_layout, &quot;rhtml&quot;))
   end
-  
+
   def content_type
     @controller.response.headers['Content-Type']
   end
-  
+
   def stylesheet_files
     @stylesheet_files ||= @body.scan(/&lt;link[^&gt;]+href\s*=\s*['&quot;]([^&gt;?'&quot;]+)/im).flatten
   end
-  
+
   def javascript_files
     @javascript_files ||= @body.scan(/&lt;script[^&gt;]+src\s*=\s*['&quot;]([^&gt;?'&quot;]+)/im).flatten
   end
-  
+
   def controller_url
     escape(
       textmate_prefix +
@@ -112,15 +112,15 @@ class FootnoteFilter
       (index_of_method ? &quot;&amp;line=#{controller_line_number + 1}&amp;column=3&quot; : &quot;&quot;)
     )
   end
-  
+
   def view_url
     escape(textmate_prefix + template_file_name)
   end
-  
+
   def layout_url
     escape(textmate_prefix + layout_file_name)
   end
-  
+
   def insert_styles
     insert_text :before, /&lt;\/head&gt;/i, &lt;&lt;-HTML
     &lt;!-- TextMate Footnotes Style --&gt;
@@ -133,13 +133,13 @@ class FootnoteFilter
     &lt;!-- End TextMate Footnotes Style --&gt;
     HTML
   end
-  
+
   def insert_footnotes
-    
+
     def tm_footnotes_toggle(id)
       &quot;s = document.getElementById('#{id}').style; if(s.display == 'none') { s.display = '' } else { s.display = 'none' }&quot;
     end
-    
+
     footnotes_html = &lt;&lt;-HTML
     &lt;!-- TextMate Footnotes --&gt;
     &lt;div style=&quot;clear:both&quot;&gt;&lt;/div&gt;
@@ -184,7 +184,7 @@ class FootnoteFilter
       insert_text :before, /&lt;\/body&gt;/i, footnotes_html
     end
   end
-  
+
   def textmate_links
     html = &quot;&quot;
     if ::MAC_OS_X
@@ -200,12 +200,12 @@ class FootnoteFilter
     end
     html
   end
-  
+
   def log_tail
     ansi = `tail -n 200 #{RAILS_DEFAULT_LOGGER.instance_variable_get(&quot;@logdev&quot;).filename}`
     html = ansi.gsub(/\e\[.+?m/, '')
   end
-  
+
   def asset_file_links(link_text, files)
     return '' if files.size == 0
     links = files.map do |filename|
@@ -225,7 +225,7 @@ class FootnoteFilter
     # Return the link that will open the 'extra html' div
     %{ | &lt;a href=&quot;#&quot; onclick=&quot;#{tm_footnotes_toggle('tm_footnotes_' + link_text.underscore.gsub(' ', '_') )}; return false&quot;&gt;#{link_text}&lt;/a&gt;}
   end
-  
+
   def indent(indentation, text)
     lines = text.to_a
     initial_indentation = lines.first.scan(/^(\s+)/).flatten.first
@@ -257,7 +257,7 @@ class FootnoteFilter
       end
     @body.insert index, indent(indentation, new_text)
   end
-  
+
   def escape(text)
     text.gsub(&quot;&amp;&quot;, &quot;&amp;amp;&quot;).gsub(&quot;&lt;&quot;, &quot;&amp;lt;&quot;).gsub(&quot;&gt;&quot;, &quot;&amp;gt;&quot;)
   end</diff>
      <filename>Support/plugins/footnotes/lib/textmate_footnotes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ RAILS_ROOT.replace File.dirname(__FILE__)
 
 class MockController
   attr_accessor :template, :session, :params, :cookies
-  
+
   def initialize(body = &quot;&quot;)
     @body = body
     @performed_render = true
@@ -14,23 +14,23 @@ class MockController
     @cookies = {}
     template
   end
-  
+
   def template
     @template ||= MockTemplate.new(self)
   end
-  
+
   def response
     @response ||= OpenStruct.new(:body =&gt; @body, :headers =&gt; {})
   end
-    
+
   def first_render
     @body
   end
-  
+
   def request
     @request ||= MockRequest.new(false)
   end
-  
+
   def action_name
     @params[:action]
   end
@@ -40,7 +40,7 @@ class MockTemplate
   def initialize(controller)
     @controller = controller
   end
-  
+
   def first_render
     &quot;example.rhtml&quot;
   end
@@ -54,11 +54,11 @@ class FootnoteFilter
   def controller_filename
     __FILE__
   end
-  
+
   def template_file_name
     __FILE__
   end
-  
+
   def layout_file_name
     __FILE__
   end</diff>
      <filename>Support/plugins/footnotes/test/mock_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,52 +11,52 @@ class TextmateFootnotesTest &lt; Test::Unit::TestCase
     @controller = MockController.new $html.dup
     @footnote = FootnoteFilter.new(@controller)
   end
-  
+
   def test_mock_controller
     index = @controller.response.body.index(/This is the HTML page/)
     assert_equal 334, index
   end
-  
+
   def test_footnote_not_included_when_request_is_xhr
     @controller.request.xhr = true
     @footnote.add_footnotes!
     assert_equal $html, @controller.response.body
   end
-  
+
   def test_footnote_not_included_when_content_type_is_javascript
     @controller.response.headers['Content-Type'] = 'text/javascript'
     @footnote.add_footnotes!
     assert_equal $html, @controller.response.body
   end
-  
+
   def test_footnote_included_when_content_type_is_html
     @controller.response.headers['Content-Type'] = 'text/html'
     @footnote.add_footnotes!
     assert_not_equal $html, @controller.response.body
   end
-  
+
   def test_footnote_included_when_content_type_is_nil
     @footnote.add_footnotes!
     assert_not_equal $html, @controller.response.body
   end
-  
+
   def test_indent
     before = &quot;text\n  one\n  two&quot;
     after  = &quot;  text\n    one\n    two&quot;
-    
+
     assert_equal after, @footnote.indent(2, before)
 
     before = &quot; text\n  one\n  two&quot;
     after  = &quot;  text\n   one\n   two&quot;
-    
+
     assert_equal after, @footnote.indent(2, before)
 
     before = &quot;  text\none\ntwo&quot;
     after  = &quot;  text\n  one\n  two&quot;
-    
+
     assert_equal after, @footnote.indent(2, before)
   end
-  
+
   def test_insert_text
     @footnote.insert_text :after, /&lt;head&gt;/, &quot;Graffiti&quot;, 0
     after = &quot;    &lt;head&gt;Graffiti\n&quot;
@@ -77,8 +77,8 @@ __END__
         &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=UTF-8&quot;&gt;
     &lt;/head&gt;
     &lt;body&gt;
-        &lt;p&gt;This is the HTML page. It works and is encoded just like any HTML page you    
-         have previously done. View &lt;a href=&quot;htmltoxhtml2.htm&quot;&gt;the XHTML version&lt;/a&gt; of 
+        &lt;p&gt;This is the HTML page. It works and is encoded just like any HTML page you
+         have previously done. View &lt;a href=&quot;htmltoxhtml2.htm&quot;&gt;the XHTML version&lt;/a&gt; of
          this page to view the difference between HTML and XHTML.&lt;/p&gt;
         &lt;p&gt;You will be glad to know that no changes need to be made to any of your CSS files.&lt;/p&gt;
     &lt;/body&gt;</diff>
      <filename>Support/plugins/footnotes/test/textmate_footnotes_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-require 'test_helper'
+require File.dirname(__FILE__) + '/test_helper'
 
 require 'text_mate_mock'
 require 'rails/buffer'
@@ -12,42 +12,93 @@ def my_method
 end
 
 def my_other_method
+  x = y + z
   # another comment
 end
+
+def index
+  respond_to do |wants|
+    wants.html { }
+    wants.js   { }
+    wants.css  { }
+  end
+  respond_to { | wacky |
+    wacky.wackier { }
+  }
+end
+
+def edit
+end
 END
 
 class BufferTest &lt; Test::Unit::TestCase
   def test_find
     b = Buffer.new(TextMate.selected_text)
     match = b.find { /'(.+)'/ }
-    assert_equal [&quot;hi&quot;, 1], match
+    assert_equal [1, &quot;hi&quot;], match
 
-    match = b.find(:from =&gt; 2, :to =&gt; 1, :direction =&gt; :backwards) { /'(.+)'/ }
-    assert_equal [&quot;hi&quot;, 2], match
+    match = b.find(:from =&gt; 2, :to =&gt; 1, :direction =&gt; :backward) { /'(.+)'/ }
+    assert_equal [2, &quot;hi&quot;], match
 
-    match = b.find(:from =&gt; 2, :to =&gt; 1, :direction =&gt; :backwards) { /my_method/ }
+    match = b.find(:from =&gt; 2, :to =&gt; 1, :direction =&gt; :backward) { /my_method/ }
     assert_nil match
   end
-  
+
   def test_find_method
     b = Buffer.new(TextMate.selected_text)
-    match = b.find { /def\s+my_(.+)\W/ }
-    assert_equal ['method', 0], match
-    
+    assert_equal [0, 'my_method'], b.find_method
+
     b.line_number = 4
-    match = b.find(:direction =&gt; :backwards) { /def\s+my_(.+)\W/ }
-    assert_equal ['method', 0], match
+    assert_equal [0, 'my_method'], b.find_method
 
     b.line_number = 5
-    match = b.find(:direction =&gt; :backwards) { /def\s+my_(.+)\W/ }
-    assert_equal ['other_method', 5], match
+    assert_equal [5, 'my_other_method'], b.find_method
+  end
+
+  def test_find_respond_to_format
+     b = Buffer.new(TextMate.selected_text)
+     assert_equal nil, b.find_respond_to_format
+     b.line_number = 10
+     assert_equal nil, b.find_respond_to_format
+     b.line_number = 11
+     assert_equal [12, 'html'], b.find_respond_to_format
+     b.line_number = 12
+     assert_equal [12, 'html'], b.find_respond_to_format
+     b.line_number = 13
+     assert_equal [13, 'js'], b.find_respond_to_format
+     b.line_number = 14
+     assert_equal [14, 'css'], b.find_respond_to_format
+     b.line_number = 15
+     assert_equal [14, 'css'], b.find_respond_to_format
+     b.line_number = 16
+     assert_equal [17, 'wackier'], b.find_respond_to_format
+     b.line_number = 17
+     assert_equal [17, 'wackier'], b.find_respond_to_format
+     b.line_number = 18
+     assert_equal [17, 'wackier'], b.find_respond_to_format
+     b.line_number = 19
+     assert_equal [17, 'wackier'], b.find_respond_to_format
+     b.line_number = 20
+     assert_equal [17, 'wackier'], b.find_respond_to_format
+     b.line_number = 21
+     assert_equal nil, b.find_respond_to_format
   end
-  
+
+  def test_find_multiple_matches
+    b = Buffer.new(TextMate.selected_text)
+    match = b.find { /^\s*x = (\w) \+ (\w)\s*$/ }
+    assert_equal [6, 'y', 'z'], match
+
+    b = Buffer.new(TextMate.selected_text)
+    match = b.find { /^\s*x = (\w) \+ (\w)(\w?)\s*$/ }
+    assert_equal [6, 'y', 'z', ''], match
+  end
+
   def test_find_nearest_string_or_symbol
     b = Buffer.new &quot;String :with =&gt; 'strings', :and, :symbols&quot;
     match = b.find_nearest_string_or_symbol
     assert_equal [&quot;with&quot;, 8], match
-    
+
     b.column_number = 8
     match = b.find_nearest_string_or_symbol
     assert_equal [&quot;with&quot;, 8], match
@@ -59,7 +110,7 @@ class BufferTest &lt; Test::Unit::TestCase
     b.column_number = 37
     match = b.find_nearest_string_or_symbol
     assert_equal [&quot;symbols&quot;, 34], match
-    
+
     b = Buffer.new &quot;String without symbols or strings&quot;
     match = b.find_nearest_string_or_symbol
     assert_nil match</diff>
      <filename>Support/test/buffer_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,26 @@
-require 'test_helper'
+require File.dirname(__FILE__) + '/test_helper'
 
 require 'text_mate_mock'
 require 'rails/rails_path'
 
-TextMate.line_number = '1'
-TextMate.column_number = '1'
-TextMate.project_directory = File.dirname(__FILE__) + '/fixtures'
-
 class RailsPathTest &lt; Test::Unit::TestCase
   def setup
+    TextMate.line_number = '1'
+    TextMate.column_number = '1'
+    TextMate.project_directory = File.expand_path(File.dirname(__FILE__) + '/app_fixtures')
     @rp_controller = RailsPath.new(FIXTURE_PATH + '/app/controllers/user_controller.rb')
     @rp_controller_with_module = RailsPath.new(FIXTURE_PATH + '/app/controllers/admin/base_controller.rb')
     @rp_view = RailsPath.new(FIXTURE_PATH + '/app/views/user/new.rhtml')
     @rp_view_with_module = RailsPath.new(FIXTURE_PATH + '/app/views/admin/base/action.rhtml')
+    @rp_fixture = RailsPath.new(FIXTURE_PATH + '/test/fixtures/users.yml')
+    @rp_fixture_spec = RailsPath.new(FIXTURE_PATH + '/spec/fixtures/users.yml')
+    @rp_wacky = RailsPath.new(FIXTURE_PATH + '/wacky/users.yml')
   end
-  
+
   def test_rails_root
-    assert_equal File.dirname(__FILE__) + '/fixtures', RailsPath.new.rails_root
+    assert_equal File.expand_path(File.dirname(__FILE__) + '/app_fixtures'), RailsPath.new.rails_root
   end
-  
+
   def test_extension
     assert_equal &quot;rb&quot;, @rp_controller.extension
     assert_equal &quot;rhtml&quot;, @rp_view.extension
@@ -27,15 +29,30 @@ class RailsPathTest &lt; Test::Unit::TestCase
   def test_file_type
     assert_equal :controller, @rp_controller.file_type
     assert_equal :view, @rp_view.file_type
+    assert_equal :fixture, @rp_fixture.file_type
+    assert_equal :fixture, @rp_fixture_spec.file_type
+    assert_equal nil, @rp_wacky.file_type
   end
-  
+
   def test_modules
     assert_equal [], @rp_controller.modules
     assert_equal ['admin'], @rp_controller_with_module.modules
     assert_equal [], @rp_view.modules
     assert_equal ['admin'], @rp_view_with_module.modules
+    assert_equal [], @rp_fixture.modules
+    assert_equal [], @rp_fixture_spec.modules
+    assert_equal nil, @rp_wacky.modules
+  end
+
+  def test_controller_name
+    rp = RailsPath.new(FIXTURE_PATH + '/app/models/person.rb')
+    assert_equal &quot;people&quot;, rp.controller_name
+    rp = RailsPath.new(FIXTURE_PATH + '/app/models/user.rb')
+    assert_equal &quot;user&quot;, rp.controller_name
+    rp = RailsPath.new(FIXTURE_PATH + '/app/models/users.rb')
+    assert_equal &quot;users&quot;, rp.controller_name
   end
-  
+
   def test_controller_name_and_action_name_for_controller
     rp = RailsPath.new(FIXTURE_PATH + '/app/controllers/user_controller.rb')
     assert_equal &quot;user&quot;, rp.controller_name
@@ -54,38 +71,219 @@ class RailsPathTest &lt; Test::Unit::TestCase
 
   def test_controller_name_and_action_name_for_view
     rp = RailsPath.new(FIXTURE_PATH + '/app/views/user/new.rhtml')
-    assert_equal &quot;user&quot;, rp.controller_name
+    assert_equal &quot;user&quot;, rp.controller_name # this was pre-2.0 behavior. s/b &quot;users&quot;
     assert_equal &quot;new&quot;, rp.action_name
   end
-  
+
+  # Rails 2.x convention is for pluralized controllers
+  def test_controller_name_and_action_name_for_2_dot_ooh_views
+    rp = RailsPath.new(FIXTURE_PATH + '/app/views/users/new.html.erb')
+    assert_equal &quot;users&quot;, rp.controller_name
+    assert_equal &quot;new&quot;, rp.action_name
+  end
+
+  def test_controller_name_pluralization
+    rp = RailsPath.new(FIXTURE_PATH + '/app/views/people/new.html.erb')
+    assert_equal &quot;people&quot;, rp.controller_name
+  end
+
+  def test_controller_name_suggestion_when_controller_absent
+    rp = RailsPath.new(FIXTURE_PATH + '/app/views/people/new.html.erb')
+    assert_equal &quot;people&quot;, rp.controller_name
+  end
+
+  def test_respond_to_format
+    current_file = RailsPath.new(FIXTURE_PATH + '/app/controllers/posts_controller.rb')
+    TextMate.line_number = '14'
+    assert_equal [13, 'js'], current_file.respond_to_format
+  end
+
   def test_rails_path_for
     partners = [
       # Basic tests
       [FIXTURE_PATH + '/app/controllers/user_controller.rb', :helper, FIXTURE_PATH + '/app/helpers/user_helper.rb'],
       [FIXTURE_PATH + '/app/controllers/user_controller.rb', :javascript, FIXTURE_PATH + '/public/javascripts/user.js'],
       [FIXTURE_PATH + '/app/controllers/user_controller.rb', :functional_test, FIXTURE_PATH + '/test/functional/user_controller_test.rb'],
-      [FIXTURE_PATH + '/app/helpers/user_helper.rb', :controller, FIXTURE_PATH + '/app/controllers/user_controller.rb'],
+      [FIXTURE_PATH + '/app/helpers/user_helper.rb', :controller, FIXTURE_PATH + '/app/controllers/users_controller.rb'],
+      [FIXTURE_PATH + '/app/models/user.rb', :controller, FIXTURE_PATH + '/app/controllers/users_controller.rb'],
+      [FIXTURE_PATH + '/app/models/post.rb', :controller, FIXTURE_PATH + '/app/controllers/posts_controller.rb'],
+      [FIXTURE_PATH + '/test/fixtures/users.yml', :model, FIXTURE_PATH + '/app/models/user.rb'],
+      [FIXTURE_PATH + '/spec/fixtures/users.yml', :model, FIXTURE_PATH + '/app/models/user.rb'],
+      [FIXTURE_PATH + '/app/controllers/user_controller.rb', :model, FIXTURE_PATH + '/app/models/user.rb'],
+      [FIXTURE_PATH + '/test/fixtures/users.yml', :unit_test, FIXTURE_PATH + '/test/unit/user_test.rb'],
+      [FIXTURE_PATH + '/app/models/user.rb', :fixture, FIXTURE_PATH + '/test/fixtures/users.yml'],
       # With modules
       [FIXTURE_PATH + '/app/controllers/admin/base_controller.rb', :helper, FIXTURE_PATH + '/app/helpers/admin/base_helper.rb'],
       [FIXTURE_PATH + '/app/controllers/admin/inside/outside_controller.rb', :javascript, FIXTURE_PATH + '/public/javascripts/admin/inside/outside.js'],
       [FIXTURE_PATH + '/app/controllers/admin/base_controller.rb', :functional_test, FIXTURE_PATH + '/test/functional/admin/base_controller_test.rb'],
-      [FIXTURE_PATH + '/app/helpers/admin/base_helper.rb', :controller, FIXTURE_PATH + '/app/controllers/admin/base_controller.rb']
+      [FIXTURE_PATH + '/app/helpers/admin/base_helper.rb', :controller, FIXTURE_PATH + '/app/controllers/admin/base_controller.rb'],
     ]
+    # TODO Add [posts.yml, :model, post.rb]
     for pair in partners
       assert_equal RailsPath.new(pair[2]), RailsPath.new(pair[0]).rails_path_for(pair[1])
     end
-    
+
     # Test controller to view
+    ENV['RAILS_VIEW_EXT'] = nil
     TextMate.line_number = '6'
     current_file = RailsPath.new(FIXTURE_PATH + '/app/controllers/user_controller.rb')
-    assert_equal RailsPath.new(FIXTURE_PATH + '/app/views/user/create.rhtml'), current_file.rails_path_for(:view)
+    assert_equal RailsPath.new(FIXTURE_PATH + '/app/views/user/create.html.erb'), current_file.rails_path_for(:view)
+
+    # 2.0 plural controllers
+    current_file = RailsPath.new(FIXTURE_PATH + '/app/controllers/users_controller.rb')
+    assert_equal RailsPath.new(FIXTURE_PATH + '/app/views/users/create.html.erb'), current_file.rails_path_for(:view)
 
     TextMate.line_number = '3'
     current_file = RailsPath.new(FIXTURE_PATH + '/app/controllers/user_controller.rb')
     assert_equal RailsPath.new(FIXTURE_PATH + '/app/views/user/new.rhtml'), current_file.rails_path_for(:view)
-    
+
+    # 2.0 plural controllers
+    current_file = RailsPath.new(FIXTURE_PATH + '/app/controllers/users_controller.rb')
+    assert_equal RailsPath.new(FIXTURE_PATH + '/app/views/users/new.html.erb'), current_file.rails_path_for(:view)
+
     # Test view to controller
+    current_file = RailsPath.new(FIXTURE_PATH + '/app/views/user/new.html.erb')
+    assert_equal RailsPath.new(FIXTURE_PATH + '/app/controllers/users_controller.rb'), current_file.rails_path_for(:controller)
+
+    # 2.0 plural controllers
+    current_file = RailsPath.new(FIXTURE_PATH + '/app/views/users/new.html.erb')
+    assert_equal RailsPath.new(FIXTURE_PATH + '/app/controllers/users_controller.rb'), current_file.rails_path_for(:controller)
+
+    ENV['RAILS_VIEW_EXT'] = nil
+    # view defaults from respond_to block
+    challenges = [
+      [11, 'no_existing_views.html.erb'],
+      [12, 'no_existing_views.html.erb'],
+      [13, 'no_existing_views.js.rjs'],
+      [14, 'no_existing_views.js.rjs'],
+      [15, 'no_existing_views.js.rjs'],
+      [16, 'no_existing_views.xml.builder'],
+      [17, 'no_existing_views.wacky.erb'],
+      [18, 'no_existing_views.wacky.erb'],
+
+      [22, 'existing_views.html.erb'],
+      [23, 'existing_views.html.erb'],
+      [24, 'existing_views.js.rjs'],
+      [25, 'existing_views.js.rjs'],
+      [26, 'existing_views.js.rjs'],
+      [27, 'existing_views.xml.builder'],
+      [28, 'existing_views.wacky.erb'],
+      [28, 'existing_views.wacky.erb'],
+    ]
+    challenges.each do |line, expected|
+      TextMate.line_number = line.to_s
+      current_file = RailsPath.new(FIXTURE_PATH + '/app/controllers/users_controller.rb')
+      assert_equal(
+        RailsPath.new(FIXTURE_PATH + '/app/views/users/' + expected),
+        current_file.rails_path_for(:view),
+        &quot;Mismatch for line #{line}, should be #{expected}&quot;
+      )
+    end
+
+    # test wacky
+    assert_equal(nil, 
+                 @rp_wacky.rails_path_for(:controller), 
+                 &quot;wacky/wackier.rb has no associations&quot;) 
+  end
+
+  def test_file_parts
+    current_file = RailsPath.new(FIXTURE_PATH + '/app/views/users/new.html.erb')
+    assert_equal(FIXTURE_PATH + '/app/views/users/new.html.erb', current_file.filepath)
+    pathname, basename, content_type, extension = current_file.parse_file_parts
+    assert_equal(FIXTURE_PATH + '/app/views/users', pathname)
+    assert_equal('new', basename)
+    assert_equal('html', content_type)
+    assert_equal('erb', extension)
+
     current_file = RailsPath.new(FIXTURE_PATH + '/app/views/user/new.rhtml')
-    assert_equal RailsPath.new(FIXTURE_PATH + '/app/controllers/user_controller.rb'), current_file.rails_path_for(:controller)
+    pathname, basename, content_type, extension = current_file.parse_file_parts
+    assert_equal(FIXTURE_PATH + '/app/views/user', pathname)
+    assert_equal('new', basename)
+    assert_equal(nil, content_type)
+    assert_equal('rhtml', extension)
+  end
+
+  def test_new_rails_path_has_parts
+    current_file = RailsPath.new(FIXTURE_PATH + '/app/views/users/new.html.erb')
+    assert_equal(FIXTURE_PATH + '/app/views/users/new.html.erb', current_file.filepath)
+    assert_equal(FIXTURE_PATH + '/app/views/users', current_file.path_name)
+    assert_equal('new', current_file.file_name)
+    assert_equal('html', current_file.content_type)
+    assert_equal('erb', current_file.extension)
+  end
+
+  def test_best_match
+    assert_equal(nil, RailsPath.new(FIXTURE_PATH + '/config/boot.rb').best_match)
+    assert_equal(:functional_test, RailsPath.new(FIXTURE_PATH + '/app/controllers/posts_controller.rb').best_match)
+    assert_equal(:model, RailsPath.new(FIXTURE_PATH + '/app/controllers/users_controller.rb').best_match)
+    assert_equal(:functional_test, RailsPath.new(FIXTURE_PATH + '/app/controllers/admin/base_controller.rb').best_match)
+
+    TextMate.line_number = '3' # edit action
+    assert_equal(:view, RailsPath.new(FIXTURE_PATH + '/app/controllers/admin/base_controller.rb').best_match)
+    TextMate.line_number = '0'
+
+    assert_equal(:controller, RailsPath.new(FIXTURE_PATH + '/app/views/users/new.html.erb').best_match)
+    assert_equal(:controller, RailsPath.new(FIXTURE_PATH + '/app/views/user/new.rhtml').best_match)
+    assert_equal(:controller, RailsPath.new(FIXTURE_PATH + '/app/views/admin/base/action.html.erb').best_match)
+    assert_equal(:model, RailsPath.new(FIXTURE_PATH + '/app/views/notifier/forgot_password.html.erb').best_match)
+    assert_equal(:controller, RailsPath.new(FIXTURE_PATH + '/app/views/books/new.haml').best_match)
   end
+
+  def test_wants_haml
+    begin
+      assert_equal false, @rp_view.wants_haml
+      haml_fixture_path = File.expand_path(File.dirname(__FILE__) + '/fixtures')
+      TextMate.project_directory = haml_fixture_path
+      assert_equal true, RailsPath.new(haml_fixture_path + '/app/views/posts/index.html.haml').wants_haml
+    ensure
+      TextMate.project_directory = File.expand_path(File.dirname(__FILE__) + '/app_fixtures')
+    end
+  end
+
+  def test_haml
+    begin
+      haml_fixture_path = File.expand_path(File.dirname(__FILE__) + '/fixtures')
+      TextMate.project_directory = haml_fixture_path
+
+      assert_equal [], RailsPath.new(haml_fixture_path + '/public/stylesheets/sass/posts.sass').modules
+      assert_equal [&quot;admin&quot;], RailsPath.new(haml_fixture_path + '/public/stylesheets/sass/admin/posts.sass').modules
+
+      # Going from controller to view
+      current_file = RailsPath.new(haml_fixture_path + '/app/controllers/posts_controller.rb')
+      TextMate.line_number = '2'
+      assert_equal RailsPath.new(haml_fixture_path + '/app/views/posts/new.html.haml'), current_file.rails_path_for(:view)
+
+      current_file = RailsPath.new(haml_fixture_path + '/app/controllers/posts_controller.rb')
+      TextMate.line_number = '12'
+      assert_equal RailsPath.new(haml_fixture_path + '/app/views/posts/index.html.haml'), current_file.rails_path_for(:view)
+
+      current_file = RailsPath.new(haml_fixture_path + '/app/controllers/posts_controller.rb')
+      TextMate.line_number = '13'
+      assert_equal RailsPath.new(haml_fixture_path + '/app/views/posts/index.xml.builder'), current_file.rails_path_for(:view)
+
+      current_file = RailsPath.new(haml_fixture_path + '/app/controllers/posts_controller.rb')
+      TextMate.line_number = '14'
+      assert_equal RailsPath.new(haml_fixture_path + '/app/views/posts/index.js.rjs'), current_file.rails_path_for(:view)
+
+      current_file = RailsPath.new(haml_fixture_path + '/app/controllers/posts_controller.rb')
+      TextMate.line_number = '15'
+      assert_equal RailsPath.new(haml_fixture_path + '/app/views/posts/index.wacky.haml'), current_file.rails_path_for(:view)
+
+      # Going from view to controller
+      current_file = RailsPath.new(haml_fixture_path + '/app/views/posts/index.html.haml')
+      assert_equal RailsPath.new(haml_fixture_path + '/app/controllers/posts_controller.rb'), current_file.rails_path_for(:controller)
+
+      # Going from view to stylesheet
+      current_file = RailsPath.new(haml_fixture_path + '/app/views/posts/index.html.haml')
+      assert_equal RailsPath.new(haml_fixture_path + '/public/stylesheets/sass/posts.sass'), current_file.rails_path_for(:stylesheet)
+
+      # Going from stylesheet to helper
+      current_file = RailsPath.new(haml_fixture_path + '/public/stylesheets/sass/posts.sass')
+      assert_equal RailsPath.new(haml_fixture_path + '/app/helpers/posts_helper.rb'), current_file.rails_path_for(:helper)
+
+    ensure
+      TextMate.project_directory = File.expand_path(File.dirname(__FILE__) + '/app_fixtures')
+    end
+  end
+
 end
\ No newline at end of file</diff>
      <filename>Support/test/rails_path_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,9 @@
 require 'test/unit'
-$LOAD_PATH.push File.dirname(__FILE__) + '/../lib'
-FIXTURE_PATH = File.expand_path(File.dirname(__FILE__) + '/fixtures')
\ No newline at end of file
+require &quot;fileutils&quot;
+$:.push File.dirname(__FILE__)
+$:.push File.dirname(__FILE__) + '/../lib'
+FIXTURE_PATH = File.expand_path(File.dirname(__FILE__) + '/app_fixtures')
+
+def ruby(command)
+  `/usr/bin/env ruby #{command}`
+end</diff>
      <filename>Support/test/test_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,29 +1,29 @@
 require 'rails/text_mate'
 
 TM_VARIABLE_DEFAULTS = {
-  :bundle_path    =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Bundles/TextMate.tmbundle&quot;,
-  :bundle_support =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Bundles/TextMate.tmbundle/Support&quot;,
+  :bundle_path    =&gt; &quot;~/Library/Application Support/TextMate/Bundles/TextMate.tmbundle&quot;,
+  :bundle_support =&gt; &quot;~/Library/Application Support/TextMate/Bundles/TextMate.tmbundle/Support&quot;,
   :columns        =&gt; &quot;100&quot;,
   :column_number  =&gt; &quot;1&quot;,
   :comment_end    =&gt; &quot;&quot;,
   :comment_mode   =&gt; &quot;line&quot;,
   :comment_start  =&gt; &quot;# &quot;,
   :current_line   =&gt; &quot;&quot;,
-  :directory      =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Bundles/TextMate.tmbundle/Support/test&quot;,
+  :directory      =&gt; &quot;~/Library/Application Support/TextMate/Bundles/TextMate.tmbundle/Support/test&quot;,
   :filename       =&gt; &quot;text_mate_mock.rb&quot;,
-  :filepath       =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Support/test/text_mate_mock.rb&quot;,
+  :filepath       =&gt; &quot;~/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Support/test/text_mate_mock.rb&quot;,
   :line_index     =&gt; &quot;0&quot;,
   :line_number    =&gt; &quot;4&quot;,
   :mode           =&gt; &quot;Ruby on Rails&quot;,
   :organization_name =&gt; &quot;syncPEOPLE&quot;,
-  :project_directory =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Bundles/Rails.tmbundle&quot;,
-  :project_filepath  =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Rails.tmproj&quot;,
+  :project_directory =&gt; &quot;~/Library/Application Support/TextMate/Bundles/Rails.tmbundle&quot;,
+  :project_filepath  =&gt; &quot;~/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Rails.tmproj&quot;,
   :scope          =&gt; &quot;source.ruby.rails&quot;,
-  :selected_file  =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Support/test/text_mate_mock.rb&quot;,
-  :selected_files =&gt; &quot;'/Users/duanejohnson/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Support/test/text_mate_mock.rb'&quot;,
+  :selected_file  =&gt; &quot;~/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Support/test/text_mate_mock.rb&quot;,
+  :selected_files =&gt; &quot;'~/Library/Application Support/TextMate/Bundles/Rails.tmbundle/Support/test/text_mate_mock.rb'&quot;,
   :selected_text  =&gt; &quot;&quot;,
   :soft_tabs      =&gt; &quot;YES&quot;,
-  :support_path   =&gt; &quot;/Users/duanejohnson/Library/Application Support/TextMate/Support&quot;,
+  :support_path   =&gt; &quot;~/Library/Application Support/TextMate/Support&quot;,
   :tab_size       =&gt; &quot;2&quot; }
 
 module TextMate
@@ -37,10 +37,10 @@ module TextMate
     def open_url(url)
       &quot;open \&quot;#{url}\&quot;&quot;
     end
-  
+
     def refresh_project_drawer
     end
-  
+
     def env(var)
       TextMate.class_eval(&quot;@@#{var}&quot;)
     end</diff>
      <filename>Support/test/text_mate_mock.rb</filename>
    </modified>
    <modified>
      <diff>@@ -0,0 +1 @@
+require File.dirname(__FILE__) + '/test_helper'</diff>
      <filename>Support/test/text_mate_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,7 @@
 &lt;dict&gt;
 	&lt;key&gt;fileTypes&lt;/key&gt;
 	&lt;array&gt;
+		&lt;string&gt;rb&lt;/string&gt;
 		&lt;string&gt;rxml&lt;/string&gt;
 		&lt;string&gt;builder&lt;/string&gt;
 	&lt;/array&gt;
@@ -153,6 +154,48 @@
 		&lt;/dict&gt;
 		&lt;dict&gt;
 			&lt;key&gt;begin&lt;/key&gt;
+			&lt;string&gt;(^\s*)(?=class\s+.+ActiveRecord::Migration)&lt;/string&gt;
+			&lt;key&gt;comment&lt;/key&gt;
+			&lt;string&gt;Uses lookahead to match classes that (may) inherit from ActiveRecord::Migration; includes 'source.ruby' to avoid infinite recursion&lt;/string&gt;
+			&lt;key&gt;end&lt;/key&gt;
+			&lt;string&gt;^\1(?=end)\b&lt;/string&gt;
+			&lt;key&gt;name&lt;/key&gt;
+			&lt;string&gt;meta.rails.migration&lt;/string&gt;
+			&lt;key&gt;patterns&lt;/key&gt;
+			&lt;array&gt;
+				&lt;dict&gt;
+					&lt;key&gt;begin&lt;/key&gt;
+					&lt;string&gt;(^\s*)(?=create_table)\b&lt;/string&gt;
+					&lt;key&gt;comment&lt;/key&gt;
+					&lt;string&gt;Uses lookahead to match methods create_table; includes 'source.ruby' to avoid infinite recursion&lt;/string&gt;
+					&lt;key&gt;contentName&lt;/key&gt;
+					&lt;string&gt;meta.rails.migration.create_table&lt;/string&gt;
+					&lt;key&gt;end&lt;/key&gt;
+					&lt;string&gt;^\1(?=end)\b&lt;/string&gt;
+					&lt;key&gt;patterns&lt;/key&gt;
+					&lt;array&gt;
+						&lt;dict&gt;
+							&lt;key&gt;include&lt;/key&gt;
+							&lt;string&gt;source.ruby&lt;/string&gt;
+						&lt;/dict&gt;
+						&lt;dict&gt;
+							&lt;key&gt;include&lt;/key&gt;
+							&lt;string&gt;$self&lt;/string&gt;
+						&lt;/dict&gt;
+					&lt;/array&gt;
+				&lt;/dict&gt;
+				&lt;dict&gt;
+					&lt;key&gt;include&lt;/key&gt;
+					&lt;string&gt;source.ruby&lt;/string&gt;
+				&lt;/dict&gt;
+				&lt;dict&gt;
+					&lt;key&gt;include&lt;/key&gt;
+					&lt;string&gt;$self&lt;/string&gt;
+				&lt;/dict&gt;
+			&lt;/array&gt;
+		&lt;/dict&gt;
+		&lt;dict&gt;
+			&lt;key&gt;begin&lt;/key&gt;
 			&lt;string&gt;(^\s*)(?=class\s+(?![.a-zA-Z0-9_:]+ControllerTest)(([.a-zA-Z0-9_:]+Test(\s*&amp;lt;\s*[.a-zA-Z0-9_:]+)?)|(&amp;lt;&amp;lt;\s*[.a-zA-Z0-9_:]+)))&lt;/string&gt;
 			&lt;key&gt;comment&lt;/key&gt;
 			&lt;string&gt;Uses lookahead to match classes with the Test suffix; includes 'source.ruby' to avoid infinite recursion&lt;/string&gt;
@@ -173,20 +216,41 @@
 			&lt;/array&gt;
 		&lt;/dict&gt;
 		&lt;dict&gt;
+			&lt;key&gt;begin&lt;/key&gt;
+			&lt;string&gt;(^\s*)ActionController::Routing::Routes&lt;/string&gt;
+			&lt;key&gt;comment&lt;/key&gt;
+			&lt;string&gt;Uses ActionController::Routing::Routes to determine it is a routes file; includes 'source.ruby' to avoid infinite recursion&lt;/string&gt;
+			&lt;key&gt;end&lt;/key&gt;
+			&lt;string&gt;^\1(?=end)\b&lt;/string&gt;
+			&lt;key&gt;name&lt;/key&gt;
+			&lt;string&gt;meta.rails.routes&lt;/string&gt;
+			&lt;key&gt;patterns&lt;/key&gt;
+			&lt;array&gt;
+				&lt;dict&gt;
+					&lt;key&gt;include&lt;/key&gt;
+					&lt;string&gt;source.ruby&lt;/string&gt;
+				&lt;/dict&gt;
+				&lt;dict&gt;
+					&lt;key&gt;include&lt;/key&gt;
+					&lt;string&gt;$self&lt;/string&gt;
+				&lt;/dict&gt;
+			&lt;/array&gt;
+		&lt;/dict&gt;
+		&lt;dict&gt;
 			&lt;key&gt;match&lt;/key&gt;
-			&lt;string&gt;\b(before_filter|skip_before_filter|skip_after_filter|after_filter|around_filter|filter|filter_parameter_logging|layout|require_dependency|render|render_action|render_text|render_file|render_template|render_nothing|render_component|render_without_layout|url_for|redirect_to|redirect_to_path|redirect_to_url|helper|helper_method|model|service|observer|serialize|scaffold|verify|hide_action)\b&lt;/string&gt;
+			&lt;string&gt;\b(before_filter|skip_before_filter|skip_after_filter|after_filter|around_filter|filter|filter_parameter_logging|layout|require_dependency|render|render_action|render_text|render_file|render_template|render_nothing|render_component|render_without_layout|rescue_from|url_for|redirect_to|redirect_to_path|redirect_to_url|respond_to|helper|helper_method|model|service|observer|serialize|scaffold|verify|hide_action)\b&lt;/string&gt;
 			&lt;key&gt;name&lt;/key&gt;
 			&lt;string&gt;support.function.actionpack.rails&lt;/string&gt;
 		&lt;/dict&gt;
 		&lt;dict&gt;
 			&lt;key&gt;match&lt;/key&gt;
-			&lt;string&gt;\b(acts_as_list|acts_as_tree|after_create|after_destroy|after_save|after_update|after_validation|after_validation_on_create|after_validation_on_update|before_create|before_destroy|before_save|before_update|before_validation|before_validation_on_create|before_validation_on_update|composed_of|belongs_to|has_one|has_many|has_and_belongs_to_many|validate|validate_on_create|validates_numericality_of|validate_on_update|validates_acceptance_of|validates_associated|validates_confirmation_of|validates_each|validates_format_of|validates_inclusion_of|validates_length_of|validates_presence_of|validates_size_of|validates_uniqueness_of|attr_protected|attr_accessible|attr_readonly)\b&lt;/string&gt;
+			&lt;string&gt;\b(acts_as_list|acts_as_tree|after_create|after_destroy|after_save|after_update|after_validation|after_validation_on_create|after_validation_on_update|before_create|before_destroy|before_save|before_update|before_validation|before_validation_on_create|before_validation_on_update|composed_of|belongs_to|has_one|has_many|has_and_belongs_to_many|validate|validate_on_create|validates_numericality_of|validate_on_update|validates_acceptance_of|validates_associated|validates_confirmation_of|validates_each|validates_format_of|validates_inclusion_of|validates_exclusion_of|validates_length_of|validates_presence_of|validates_size_of|validates_uniqueness_of|attr_protected|attr_accessible|attr_readonly)\b&lt;/string&gt;
 			&lt;key&gt;name&lt;/key&gt;
 			&lt;string&gt;support.function.activerecord.rails&lt;/string&gt;
 		&lt;/dict&gt;
 		&lt;dict&gt;
 			&lt;key&gt;match&lt;/key&gt;
-			&lt;string&gt;\b(cattr_accessor|mattr_accessor)\b&lt;/string&gt;
+			&lt;string&gt;\b(alias_method_chain|alias_attribute|delegate|cattr_accessor|mattr_accessor|returning)\b&lt;/string&gt;
 			&lt;key&gt;name&lt;/key&gt;
 			&lt;string&gt;support.function.activesupport.rails&lt;/string&gt;
 		&lt;/dict&gt;</diff>
      <filename>Syntaxes/Ruby on Rails.plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,11 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
+&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
 &lt;plist version=&quot;1.0&quot;&gt;
 &lt;dict&gt;
 	&lt;key&gt;fileTypes&lt;/key&gt;
 	&lt;array&gt;
 		&lt;string&gt;erbsql&lt;/string&gt;
+		&lt;string&gt;sql.erb&lt;/string&gt;
 	&lt;/array&gt;
 	&lt;key&gt;foldingStartMarker&lt;/key&gt;
 	&lt;string&gt;\s*\(\s*$&lt;/string&gt;</diff>
      <filename>Syntaxes/SQL (Rails).plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,8 @@
-== TODO ==
+== TODO - From Dr Nic ==
+
+- Call Generate Script - dynamically load generator names (bin/generate.rb)
+
+== TODO - From Duane ==
 - Let RailsPath recognize application.rb as a controller
 - Remove extraneous dirname from setting each RUBYLIB -- remove from plugins too?
 - License for footnotes?
@@ -13,9 +17,8 @@
 - Use scope hints to make more intelligent actions:
   - e.g. if inside source.css.embedded.html create a css file instead of a partial with create-from-selection
   - source.ruby.rails: unit tests, controllers, models
-  - 
-  
+
 - Make the backtracer find &quot;extracted source&quot; lines as well [done]
 - Make go-to-file go to unit test (esp. from models)
 - List common rake tasks in a pop-up menu and execute? db_schema_import db_schema_dump migrate
-- Jump to environment.rb, database.yml
\ No newline at end of file
+- Jump to environment.rb, database.yml</diff>
      <filename>TODO</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,16 @@
 		&lt;string&gt;66708719-62C3-11D9-B8CF-000D93589AF6&lt;/string&gt;
 		&lt;string&gt;CE790B98-875B-11D9-897C-000393CBCE2E&lt;/string&gt;
 		&lt;string&gt;854EF1DA-875B-11D9-897C-000393CBCE2E&lt;/string&gt;
+		&lt;string&gt;EB781D86-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
+		&lt;string&gt;F8EE4249-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
+		&lt;string&gt;060DC5CD-84C6-11D9-A094-000D932CD5BA&lt;/string&gt;
+		&lt;string&gt;59A47C33-97C5-411D-ADBE-ABD2324BD130&lt;/string&gt;
+		&lt;string&gt;23BAF50A-CAFC-468E-929C-B6EAC75937A8&lt;/string&gt;
+		&lt;string&gt;C3ED4A88-B9CF-4F2B-B195-3C582ED58C5F&lt;/string&gt;
+		&lt;string&gt;0D8DA40B-0652-42E8-AB20-5B6847DC2F11&lt;/string&gt;
+		&lt;string&gt;86DD56A8-C655-49DA-997B-8929E5D9407E&lt;/string&gt;
+		&lt;string&gt;F0A39EAD-6D01-437B-9A79-468E0571CB3D&lt;/string&gt;
+		&lt;string&gt;43304E62-66F7-424D-8AF6-33E0237BF349&lt;/string&gt;
 	&lt;/array&gt;
 	&lt;key&gt;description&lt;/key&gt;
 	&lt;string&gt;&amp;lt;a href=&quot;http://www.rubyonrails.com/&quot;&amp;gt;Ruby on Rails&amp;lt;/a&amp;gt; is a full-stack framework for developing database-backed web applications, in Ruby, according to the Model-View-Control pattern.&lt;/string&gt;
@@ -27,8 +37,8 @@
 		&lt;/array&gt;
 		&lt;key&gt;items&lt;/key&gt;
 		&lt;array&gt;
-			&lt;string&gt;43304E62-66F7-424D-8AF6-33E0237BF349&lt;/string&gt;
 			&lt;string&gt;D4D18AD6-11DA-47F2-AAD8-F2F350EE2BB9&lt;/string&gt;
+			&lt;string&gt;5FBC0312-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
 			&lt;string&gt;------------------------------------&lt;/string&gt;
 			&lt;string&gt;4904EDC7-5ED3-4132-AAB2-C2AD87C97EFE&lt;/string&gt;
 			&lt;string&gt;46ECE243-0448-4A64-A223-27CC21E7704D&lt;/string&gt;
@@ -38,20 +48,41 @@
 			&lt;string&gt;7B02ABF8-8763-11D9-897C-000393CBCE2E&lt;/string&gt;
 			&lt;string&gt;A229B2F8-21B4-4910-AA61-6672A48C2991&lt;/string&gt;
 			&lt;string&gt;------------------------------------&lt;/string&gt;
-			&lt;string&gt;6E2BC67D-4CC8-47F1-AF7C-341D74E0F803&lt;/string&gt;
 			&lt;string&gt;5CCEA099-4B20-4BC3-96B9-BD9BF57279F5&lt;/string&gt;
-			&lt;string&gt;E34453D0-68EB-408C-AE49-990663DE18F7&lt;/string&gt;
-			&lt;string&gt;------------------------------------&lt;/string&gt;
+			&lt;string&gt;6E2BC67D-4CC8-47F1-AF7C-341D74E0F803&lt;/string&gt;
 			&lt;string&gt;EE4BA904-F727-4C6B-A2CB-602E30537E38&lt;/string&gt;
+			&lt;string&gt;5103D78F-C1FA-46F4-B6C7-39FC59EC591B&lt;/string&gt;
+			&lt;string&gt;2005C9DA-00DD-43D7-9F59-169CC8E953FC&lt;/string&gt;
 			&lt;string&gt;054985A5-E001-462A-8674-47C02C751A80&lt;/string&gt;
+			&lt;string&gt;A1D9600C-4E0B-4ABF-9C0A-19AD7A168A15&lt;/string&gt;
+			&lt;string&gt;083B7598-7DA0-4BDE-BBD3-290F06927E48&lt;/string&gt;
+			&lt;string&gt;------------------------------------&lt;/string&gt;
+			&lt;string&gt;4D3A01D4-ACA8-49AF-B1DD-428B823964C3&lt;/string&gt;
+			&lt;string&gt;E34453D0-68EB-408C-AE49-990663DE18F7&lt;/string&gt;
+			&lt;string&gt;8113246B-122E-4F4A-9B5A-98390900839E&lt;/string&gt;
+			&lt;string&gt;9EB71DE4-93D3-466C-B1D8-54892538FF3A&lt;/string&gt;
+			&lt;string&gt;------------------------------------&lt;/string&gt;
+			&lt;string&gt;964436B8-E578-11DC-8177-00112475D960&lt;/string&gt;
 		&lt;/array&gt;
 		&lt;key&gt;submenus&lt;/key&gt;
 		&lt;dict&gt;
+			&lt;key&gt;00C5D7D2-DA7A-4FA4-A787-EABC00B051CB&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;3BDD0D52-443E-4F5F-AE09-ABCC2ABE9A42&lt;/string&gt;
+					&lt;string&gt;B41D3164-EA53-4DDC-850E-27B82B24061F&lt;/string&gt;
+					&lt;string&gt;3F26FDB4-ACF9-4856-9312-6A4D78DC8564&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;respond_to&lt;/string&gt;
+			&lt;/dict&gt;
 			&lt;key&gt;054985A5-E001-462A-8674-47C02C751A80&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
-					&lt;string&gt;62D0A466-DB7C-4202-A77B-A89E7F10AE8F&lt;/string&gt;
+					&lt;string&gt;D696FA2C-785A-4B73-A2F6-F750904DD7C2&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
 					&lt;string&gt;8D802011-B3E5-4BC1-A3E1-5B78A2A49C28&lt;/string&gt;
 					&lt;string&gt;6909D8A7-461B-4D29-956F-8E633DD49A90&lt;/string&gt;
 					&lt;string&gt;F4DD75AA-A954-4FBE-A03F-28718335414E&lt;/string&gt;
@@ -59,69 +90,77 @@
 				&lt;key&gt;name&lt;/key&gt;
 				&lt;string&gt;Migrations&lt;/string&gt;
 			&lt;/dict&gt;
-			&lt;key&gt;5CCEA099-4B20-4BC3-96B9-BD9BF57279F5&lt;/key&gt;
+			&lt;key&gt;083B7598-7DA0-4BDE-BBD3-290F06927E48&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
-					&lt;string&gt;1970AE74-3949-40B3-B263-727AA3FF167A&lt;/string&gt;
-					&lt;string&gt;------------------------------------&lt;/string&gt;
-					&lt;string&gt;B8F08BD7-6160-482C-8A3D-CBC6BD2079A4&lt;/string&gt;
-					&lt;string&gt;2AC3AC1F-743B-4A33-863C-C37885073806&lt;/string&gt;
-					&lt;string&gt;BD2E4045-54E6-450E-B31B-5E1865CFFBC9&lt;/string&gt;
-					&lt;string&gt;F396B7BD-8255-48B1-904A-06E7D7CC2741&lt;/string&gt;
-					&lt;string&gt;------------------------------------&lt;/string&gt;
-					&lt;string&gt;47944705-F605-4ED4-B4C0-9E823EE25138&lt;/string&gt;
-					&lt;string&gt;85E9264C-5414-4FA0-AC07-F305A798ED46&lt;/string&gt;
-					&lt;string&gt;B5893618-D07C-48F1-8867-736D0AAFF0E7&lt;/string&gt;
-					&lt;string&gt;1354726C-DA64-4CA6-A099-26626A865D8D&lt;/string&gt;
-					&lt;string&gt;4CC98A56-B60B-4A89-80E0-400C5314A050&lt;/string&gt;
-					&lt;string&gt;869AB0B7-12DD-440A-905A-BFB1E0E16E1C&lt;/string&gt;
-					&lt;string&gt;5CE8838A-BF2C-497E-B87A-E90C3BC482E0&lt;/string&gt;
-					&lt;string&gt;5DAC28A7-33C8-4DA7-9E85-56618D6BEC9F&lt;/string&gt;
-					&lt;string&gt;F5CBBE16-F5CC-4EDA-8BC6-30281BD7D854&lt;/string&gt;
-					&lt;string&gt;F8316545-9AE4-4C7F-87ED-A2C00E6637FA&lt;/string&gt;
-					&lt;string&gt;43680344-0818-42BF-95B4-58CD2D76545B&lt;/string&gt;
+					&lt;string&gt;F57522B2-9F5F-4DF9-AE46-9478AF019C63&lt;/string&gt;
+					&lt;string&gt;B25B7560-FACB-4A9E-A226-B71C796BD1F3&lt;/string&gt;
+					&lt;string&gt;D2783155-23F3-4B90-A317-5BD139471193&lt;/string&gt;
 				&lt;/array&gt;
 				&lt;key&gt;name&lt;/key&gt;
-				&lt;string&gt;Models&lt;/string&gt;
+				&lt;string&gt;ActiveSupport&lt;/string&gt;
 			&lt;/dict&gt;
-			&lt;key&gt;62D0A466-DB7C-4202-A77B-A89E7F10AE8F&lt;/key&gt;
+			&lt;key&gt;2005C9DA-00DD-43D7-9F59-169CC8E953FC&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
-					&lt;string&gt;D696FA2C-785A-4B73-A2F6-F750904DD7C2&lt;/string&gt;
+					&lt;string&gt;273E5E76-8D13-4476-9C38-8AF87432CB96&lt;/string&gt;
+					&lt;string&gt;390A447F-0FA3-4F01-A10C-4F35675E0A43&lt;/string&gt;
+					&lt;string&gt;8B914165-9C66-4FA3-9AD6-1DA41B25F8F1&lt;/string&gt;
+					&lt;string&gt;62BEA590-F4EF-4001-B661-764EDFB92811&lt;/string&gt;
+					&lt;string&gt;CFDC27A3-58CF-4198-8F93-36360978F0D0&lt;/string&gt;
+					&lt;string&gt;5ACBF49D-B5A5-495C-89D8-18AA740D9D02&lt;/string&gt;
+					&lt;string&gt;028DA0A4-B310-4BEF-8643-2A22993C21C7&lt;/string&gt;
 				&lt;/array&gt;
 				&lt;key&gt;name&lt;/key&gt;
-				&lt;string&gt;Generate Code&lt;/string&gt;
+				&lt;string&gt;RJS&lt;/string&gt;
 			&lt;/dict&gt;
-			&lt;key&gt;6909D8A7-461B-4D29-956F-8E633DD49A90&lt;/key&gt;
+			&lt;key&gt;245AD020-669A-46E1-8123-4B9CFDF8075A&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
-					&lt;string&gt;59A47C33-97C5-411D-ADBE-ABD2324BD130&lt;/string&gt;
-					&lt;string&gt;7592CA99-75D7-48B6-9133-00B9F148FF43&lt;/string&gt;
-					&lt;string&gt;23BAF50A-CAFC-468E-929C-B6EAC75937A8&lt;/string&gt;
-					&lt;string&gt;C3ED4A88-B9CF-4F2B-B195-3C582ED58C5F&lt;/string&gt;
-					&lt;string&gt;------------------------------------&lt;/string&gt;
-					&lt;string&gt;25F8F5D8-2BD1-45D8-8B2A-9F2EA4F73AA2&lt;/string&gt;
-					&lt;string&gt;FD8CC811-2AD3-480F-B975-DF959DC96C67&lt;/string&gt;
-					&lt;string&gt;20375601-B13F-4314-B8E4-362706566636&lt;/string&gt;
+					&lt;string&gt;326B57A7-B4A9-447B-A3D2-0EA74158E1E1&lt;/string&gt;
+					&lt;string&gt;6BA737F0-63D1-4D82-9381-4331E18B12C5&lt;/string&gt;
+					&lt;string&gt;750DEEF9-18A0-40FC-8E54-574CE5EE5565&lt;/string&gt;
+					&lt;string&gt;866AAD87-E458-4F2D-9E7C-3CE73EFC047B&lt;/string&gt;
+					&lt;string&gt;9E2B42FE-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;B4F952F4-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;74590E16-7BCB-11D9-906A-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;C11C0BF5-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;D21BE958-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;E5E08AA0-4EDD-4583-BF07-5D6C49E98410&lt;/string&gt;
 				&lt;/array&gt;
 				&lt;key&gt;name&lt;/key&gt;
-				&lt;string&gt;Tables&lt;/string&gt;
+				&lt;string&gt;link_to&lt;/string&gt;
 			&lt;/dict&gt;
-			&lt;key&gt;6E2BC67D-4CC8-47F1-AF7C-341D74E0F803&lt;/key&gt;
+			&lt;key&gt;4D3A01D4-ACA8-49AF-B1DD-428B823964C3&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
-					&lt;string&gt;D864896E-8763-11D9-897C-000393CBCE2E&lt;/string&gt;
-					&lt;string&gt;------------------------------------&lt;/string&gt;
-					&lt;string&gt;F2F3167C-73B9-11D9-B752-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;2233B484-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;053490FE-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;0C137FBF-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;18D3C1C3-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;786980D8-FA69-4542-85A3-5E48CFAA6814&lt;/string&gt;
+					&lt;string&gt;9671EB7A-89D6-4C23-914F-88CBEE0D177A&lt;/string&gt;
 					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;0BCF0EE2-35EE-4959-A771-E74D55271D5A&lt;/string&gt;
+					&lt;string&gt;275C0B86-F735-49B6-8A22-218A8F4CC2E0&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Fixtures&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;5103D78F-C1FA-46F4-B6C7-39FC59EC591B&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;FEF49C86-9386-405E-A191-684D1C963E3A&lt;/string&gt;
+					&lt;string&gt;980C7667-9D60-49FF-AF74-A7B19B379F45&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Layouts&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;53D8F022-29C2-4E3D-B83E-801DD80683FE&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
 					&lt;string&gt;7B03D38B-7580-41AC-BC2B-3766AB074A43&lt;/string&gt;
 					&lt;string&gt;053F1D6A-B413-43FF-B697-E3120FD0489F&lt;/string&gt;
 					&lt;string&gt;7D43B0EA-2C3C-499B-9346-A8E48CBF29CD&lt;/string&gt;
@@ -141,9 +180,66 @@
 					&lt;string&gt;A3B09AFE-40B5-4623-8B85-E9F369ECE22D&lt;/string&gt;
 					&lt;string&gt;97C0992D-715F-4322-A3E0-DD4D2B7E2FC2&lt;/string&gt;
 					&lt;string&gt;4F636977-F7A6-4BF5-B09B-7F087683C3B9&lt;/string&gt;
-					&lt;string&gt;EB781D86-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;F8EE4249-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;060DC5CD-84C6-11D9-A094-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;ECB10C0B-E8B7-4606-ABF5-4A2A26E5AB1A&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;render&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;5CCEA099-4B20-4BC3-96B9-BD9BF57279F5&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;1970AE74-3949-40B3-B263-727AA3FF167A&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;CD88AD5A-7F20-4D4C-882A-31E1CDFDFD16&lt;/string&gt;
+					&lt;string&gt;B89CD2E9-4271-41BB-8AF6-A747553D99EB&lt;/string&gt;
+					&lt;string&gt;A26B8A37-FAC0-4F44-B18D-6BE30D84F27E&lt;/string&gt;
+					&lt;string&gt;7D9194BB-2BCC-4E20-84C8-0990B77D5515&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Models&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;5FBC0312-D9B1-11DC-94E9-00112475D960&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;DC549A45-D9B0-11DC-94E9-00112475D960&lt;/string&gt;
+					&lt;string&gt;F4EA552D-D9B0-11DC-94E9-00112475D960&lt;/string&gt;
+					&lt;string&gt;04A30A4D-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+					&lt;string&gt;0D966168-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+					&lt;string&gt;190401C2-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+					&lt;string&gt;212C3047-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+					&lt;string&gt;2C60CBA1-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Run Tests&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;6909D8A7-461B-4D29-956F-8E633DD49A90&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;25F8F5D8-2BD1-45D8-8B2A-9F2EA4F73AA2&lt;/string&gt;
+					&lt;string&gt;FD8CC811-2AD3-480F-B975-DF959DC96C67&lt;/string&gt;
+					&lt;string&gt;20375601-B13F-4314-B8E4-362706566636&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;A66D3FEE-D537-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;B5104C6E-E4BF-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;7592CA99-75D7-48B6-9133-00B9F148FF43&lt;/string&gt;
+					&lt;string&gt;67FD2F8F-5F25-45F2-A451-2F39977A9EDE&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Tables&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;6E2BC67D-4CC8-47F1-AF7C-341D74E0F803&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;4B3F798E-E3B6-48C8-8C2F-CB8631011638&lt;/string&gt;
+					&lt;string&gt;D864896E-8763-11D9-897C-000393CBCE2E&lt;/string&gt;
+					&lt;string&gt;00C5D7D2-DA7A-4FA4-A787-EABC00B051CB&lt;/string&gt;
+					&lt;string&gt;AA879356-48FB-48A6-8BF3-0EF40A592691&lt;/string&gt;
+					&lt;string&gt;53D8F022-29C2-4E3D-B83E-801DD80683FE&lt;/string&gt;
+					&lt;string&gt;7D82F39F-FDF4-4EE3-BA8F-4CA43A074804&lt;/string&gt;
 					&lt;string&gt;------------------------------------&lt;/string&gt;
 					&lt;string&gt;9ECBF20C-003E-41D9-A881-4BAC0656F9DC&lt;/string&gt;
 					&lt;string&gt;7BBD3F57-57A5-4CD0-8E79-B931021FC110&lt;/string&gt;
@@ -151,6 +247,65 @@
 				&lt;key&gt;name&lt;/key&gt;
 				&lt;string&gt;Controllers&lt;/string&gt;
 			&lt;/dict&gt;
+			&lt;key&gt;7D82F39F-FDF4-4EE3-BA8F-4CA43A074804&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;54F61419-001F-4B71-83AC-8DC633694AF0&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;REST methods&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;7D9194BB-2BCC-4E20-84C8-0990B77D5515&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;47944705-F605-4ED4-B4C0-9E823EE25138&lt;/string&gt;
+					&lt;string&gt;85E9264C-5414-4FA0-AC07-F305A798ED46&lt;/string&gt;
+					&lt;string&gt;B5893618-D07C-48F1-8867-736D0AAFF0E7&lt;/string&gt;
+					&lt;string&gt;1354726C-DA64-4CA6-A099-26626A865D8D&lt;/string&gt;
+					&lt;string&gt;4CC98A56-B60B-4A89-80E0-400C5314A050&lt;/string&gt;
+					&lt;string&gt;869AB0B7-12DD-440A-905A-BFB1E0E16E1C&lt;/string&gt;
+					&lt;string&gt;4611F02E-E9BF-11DC-8518-00112475D960&lt;/string&gt;
+					&lt;string&gt;47FF50AF-E9BF-11DC-8518-00112475D960&lt;/string&gt;
+					&lt;string&gt;EB47FBA1-AFB3-42F9-94A4-552D3175C17A&lt;/string&gt;
+					&lt;string&gt;14BF0586-F2E8-4AB3-BB4B-E49099384403&lt;/string&gt;
+					&lt;string&gt;5CE8838A-BF2C-497E-B87A-E90C3BC482E0&lt;/string&gt;
+					&lt;string&gt;EC511A43-D3B7-11DC-BA49-00112475D960&lt;/string&gt;
+					&lt;string&gt;B21BA16D-7C04-4912-8488-425CDCC332A8&lt;/string&gt;
+					&lt;string&gt;CF506019-E964-4172-A3DA-475AE3B65558&lt;/string&gt;
+					&lt;string&gt;5DAC28A7-33C8-4DA7-9E85-56618D6BEC9F&lt;/string&gt;
+					&lt;string&gt;F5CBBE16-F5CC-4EDA-8BC6-30281BD7D854&lt;/string&gt;
+					&lt;string&gt;F8316545-9AE4-4C7F-87ED-A2C00E6637FA&lt;/string&gt;
+					&lt;string&gt;43680344-0818-42BF-95B4-58CD2D76545B&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Validations&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;8113246B-122E-4F4A-9B5A-98390900839E&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;F60D0630-CBF5-4283-9D20-FA46C787A88D&lt;/string&gt;
+					&lt;string&gt;1C491A76-751F-44EF-8DFB-0A585C7EEFF6&lt;/string&gt;
+					&lt;string&gt;8B9CD068-4338-4039-AA06-D839A6C7A9FF&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;2BD82DCB-1F19-4C8F-BC70-C0BBB06A2138&lt;/string&gt;
+					&lt;string&gt;CD60F800-850D-47CF-BE32-3DE665DD5C68&lt;/string&gt;
+					&lt;string&gt;D33EDCE7-F8AF-48D4-AA7A-852BBF03E31D&lt;/string&gt;
+					&lt;string&gt;0249637E-0720-46DA-A8FD-E176A2CC458B&lt;/string&gt;
+					&lt;string&gt;97021C0D-EB65-4046-B688-01F09B3B1615&lt;/string&gt;
+					&lt;string&gt;4C92C020-7337-4D6E-91EE-7ABF2BFC7F41&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;DBE14FE8-B415-4DBC-A316-F8DA63FE9FD7&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;E0F281EC-5311-41F8-ADD9-2E2D059DA651&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;FE9C4B4E-860D-49F0-AAF7-5582B98F5F54&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Functional Tests&lt;/string&gt;
+			&lt;/dict&gt;
 			&lt;key&gt;88B6256D-A8BF-46A9-8A6B-651D089D5F67&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
@@ -158,6 +313,7 @@
 					&lt;string&gt;985F56D4-82ED-4C45-8250-2ECCFC71957E&lt;/string&gt;
 					&lt;string&gt;07C696F8-79F5-4E0B-9EE9-03B693A54ABB&lt;/string&gt;
 					&lt;string&gt;9A1AE6BA-8350-4AB7-B5BD-969A7E64CF29&lt;/string&gt;
+					&lt;string&gt;CFDA9F62-D071-4E0F-AD10-66AE0729FFCF&lt;/string&gt;
 					&lt;string&gt;------------------------------------&lt;/string&gt;
 					&lt;string&gt;5EEA0C71-B34B-4408-953B-F47AAD343CCC&lt;/string&gt;
 					&lt;string&gt;F758BFD1-00CA-4742-BE71-032580080F5C&lt;/string&gt;
@@ -173,10 +329,6 @@
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
-					&lt;string&gt;0D8DA40B-0652-42E8-AB20-5B6847DC2F11&lt;/string&gt;
-					&lt;string&gt;86DD56A8-C655-49DA-997B-8929E5D9407E&lt;/string&gt;
-					&lt;string&gt;F0A39EAD-6D01-437B-9A79-468E0571CB3D&lt;/string&gt;
-					&lt;string&gt;------------------------------------&lt;/string&gt;
 					&lt;string&gt;18C76913-061C-4D65-866D-67AA3724AFEF&lt;/string&gt;
 					&lt;string&gt;7BC860E6-7561-4E6E-983B-507D7A6F6228&lt;/string&gt;
 					&lt;string&gt;27A6C58A-896B-4956-BA81-D671A2EF9C7D&lt;/string&gt;
@@ -184,12 +336,35 @@
 					&lt;string&gt;F03162DE-9DB6-417B-9DD7-52D9F11EA736&lt;/string&gt;
 					&lt;string&gt;04A86178-71B1-430A-A06D-DFF7C9A338B5&lt;/string&gt;
 					&lt;string&gt;16A705EB-10DC-42B5-9FF2-377E206421DC&lt;/string&gt;
-					&lt;string&gt;------------------------------------&lt;/string&gt;
-					&lt;string&gt;67FD2F8F-5F25-45F2-A451-2F39977A9EDE&lt;/string&gt;
 				&lt;/array&gt;
 				&lt;key&gt;name&lt;/key&gt;
 				&lt;string&gt;Columns&lt;/string&gt;
 			&lt;/dict&gt;
+			&lt;key&gt;9EB71DE4-93D3-466C-B1D8-54892538FF3A&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;62C3838B-0790-4FC2-8425-F273A57F5D33&lt;/string&gt;
+					&lt;string&gt;78FCF992-D01B-404F-BC54-5EE7B91F999A&lt;/string&gt;
+					&lt;string&gt;F1BE0C3D-7203-43E9-BEFB-D1A99CDD31C1&lt;/string&gt;
+					&lt;string&gt;C12C98A5-74E5-4E70-9ADB-8783455D6539&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Ajax Tests&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;A1D9600C-4E0B-4ABF-9C0A-19AD7A168A15&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;91C543BF-7BD8-4E3A-B493-AE572C5472A0&lt;/string&gt;
+					&lt;string&gt;0FF86C46-0E01-4D03-8232-72CA5BD55706&lt;/string&gt;
+					&lt;string&gt;2183A9A9-17ED-4A4F-ABB6-668EDDD3A6E4&lt;/string&gt;
+					&lt;string&gt;BD4B90F7-2187-4E75-BFFB-77BE67CB8DAE&lt;/string&gt;
+					&lt;string&gt;F3606586-F905-4A91-92CA-82319239221D&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Routes&lt;/string&gt;
+			&lt;/dict&gt;
 			&lt;key&gt;A229B2F8-21B4-4910-AA61-6672A48C2991&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
@@ -204,6 +379,130 @@
 				&lt;key&gt;name&lt;/key&gt;
 				&lt;string&gt;Logger&lt;/string&gt;
 			&lt;/dict&gt;
+			&lt;key&gt;A26B8A37-FAC0-4F44-B18D-6BE30D84F27E&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;59CD3A41-8164-4FB4-B462-D7ACE86BCDBF&lt;/string&gt;
+					&lt;string&gt;A017AB39-A875-40DC-8ACF-7E3551057CA0&lt;/string&gt;
+					&lt;string&gt;FE430ECD-5D40-4D95-A73B-F064C73992DE&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Finders&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;A66D3FEE-D537-11DC-BD8E-00112475D960&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;B757F7E5-E4BD-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;FFE7B820-E4BD-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;0E63B7D5-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;1BDC463A-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;26C09807-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;3458B140-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;49643690-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;537BDD48-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;61CF5B32-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;6BE6F315-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;7CE57C6C-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;950B0BF2-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;A677FFD4-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+					&lt;string&gt;B6D9225C-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Create columns t. drop-down list&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;AA879356-48FB-48A6-8BF3-0EF40A592691&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;A909C4C3-8EFE-4E39-9D96-BA8F0ABE6085&lt;/string&gt;
+					&lt;string&gt;AFE06B67-CE98-42A6-93D1-8EC8E3B9F83C&lt;/string&gt;
+					&lt;string&gt;9D7228B3-A6ED-4598-B096-032B3600864F&lt;/string&gt;
+					&lt;string&gt;EF527A27-D1D4-4FD8-BD23-71397881C29A&lt;/string&gt;
+					&lt;string&gt;F2F3167C-73B9-11D9-B752-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;2233B484-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;053490FE-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;0C137FBF-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;18D3C1C3-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;redirect_to&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;B5104C6E-E4BF-11DC-A11A-00112475D960&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;377BF814-D52D-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;6A9D4C30-D52D-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;729D559E-D52D-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;8AF989C4-D52E-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;93A16768-D52E-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;D6CBCA96-D52F-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;4600CE20-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;4F5DDD37-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;56276686-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;967093B4-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;5E9B8B0E-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;E0C8FDC4-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;FC2523C1-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+					&lt;string&gt;EDA6568B-D533-11DC-BD8E-00112475D960&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Create columns helpers&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;B89CD2E9-4271-41BB-8AF6-A747553D99EB&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;B8F08BD7-6160-482C-8A3D-CBC6BD2079A4&lt;/string&gt;
+					&lt;string&gt;2AC3AC1F-743B-4A33-863C-C37885073806&lt;/string&gt;
+					&lt;string&gt;BD2E4045-54E6-450E-B31B-5E1865CFFBC9&lt;/string&gt;
+					&lt;string&gt;F396B7BD-8255-48B1-904A-06E7D7CC2741&lt;/string&gt;
+					&lt;string&gt;9D58B6C9-BA52-48B3-B639-D5CB894AF810&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Associations&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;BA9F12E8-9151-4975-8E8A-9644290E6038&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;402C251E-595B-4A58-8EB9-41989040F280&lt;/string&gt;
+					&lt;string&gt;CC1BCD1C-2479-4335-B511-17B880316A75&lt;/string&gt;
+					&lt;string&gt;06498926-F84D-466C-8736-B8A0AC586A94&lt;/string&gt;
+					&lt;string&gt;F579F9E7-E072-4BCC-BFF9-C8C5BAE7FFA5&lt;/string&gt;
+					&lt;string&gt;A95358D2-C68A-4894-8C36-062C9F45848A&lt;/string&gt;
+					&lt;string&gt;42289456-C8D1-498C-AE30-5206544B349F&lt;/string&gt;
+					&lt;string&gt;5DBA8F72-DD6C-4CBF-83FD-76301E159BA9&lt;/string&gt;
+					&lt;string&gt;79BC2303-3D9D-4E21-AF85-73B388B7B56D&lt;/string&gt;
+					&lt;string&gt;C315EC5D-A7F3-49CB-9795-21B78BB42FF4&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;form_for f. drop-down list&lt;/string&gt;
+			&lt;/dict&gt;
+			&lt;key&gt;CD88AD5A-7F20-4D4C-882A-31E1CDFDFD16&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;A1776279-5396-4FE9-9218-8BF2C88C5271&lt;/string&gt;
+					&lt;string&gt;E2CE2E3B-8A61-4866-9AF5-A12F44CF7233&lt;/string&gt;
+					&lt;string&gt;86CFB156-E72B-440F-9C7D-08A3375C3ADB&lt;/string&gt;
+					&lt;string&gt;44FBD811-70A9-462B-AC56-F975ADAD62AF&lt;/string&gt;
+					&lt;string&gt;BA0DE6C7-EAD3-42C9-8ABB-2B9A5F2FE225&lt;/string&gt;
+					&lt;string&gt;BCB25D36-2D3F-41E9-B2CF-37D6E883E8D1&lt;/string&gt;
+					&lt;string&gt;523BE8A6-0845-493D-A9B6-532F73D21950&lt;/string&gt;
+					&lt;string&gt;4D1787E3-1583-4CF3-8D99-CC45D7C35EED&lt;/string&gt;
+					&lt;string&gt;D64D8863-DCB6-4397-B5B0-073E0AE04167&lt;/string&gt;
+					&lt;string&gt;279D1981-B055-4693-B9AF-5B571A62A6AE&lt;/string&gt;
+					&lt;string&gt;3F4B502B-5F68-4687-88E9-6EF3BDF9677D&lt;/string&gt;
+					&lt;string&gt;0C9EA1A1-66C5-4E1C-9C30-E1FFE8EC6EAE&lt;/string&gt;
+					&lt;string&gt;1C20EEBE-B4BA-48C8-9B33-7B5BB00D958C&lt;/string&gt;
+					&lt;string&gt;A2F3E8C1-4216-4890-8491-2F8C7534ED03&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;Callbacks&lt;/string&gt;
+			&lt;/dict&gt;
 			&lt;key&gt;D4D18AD6-11DA-47F2-AAD8-F2F350EE2BB9&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
@@ -211,13 +510,15 @@
 					&lt;string&gt;0CCC8443-40F3-4BAB-9440-D737562B5F45&lt;/string&gt;
 					&lt;string&gt;09BB96F2-75FD-48A7-8314-B5B56B09B477&lt;/string&gt;
 					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;C7151BF3-7068-4344-9B09-86F3BF4A9C63&lt;/string&gt;
 					&lt;string&gt;9453F0B3-B946-445F-BDB0-B01DE70732FC&lt;/string&gt;
+					&lt;string&gt;EE862691-A624-4797-90CF-EDD39EFB2D8E&lt;/string&gt;
 					&lt;string&gt;DFE393BE-0764-49FE-B464-6350A50921E6&lt;/string&gt;
 					&lt;string&gt;51C9C27A-D931-49F9-B6D8-C0E7ABEC992D&lt;/string&gt;
 					&lt;string&gt;B078346F-61D8-4E75-9427-80720FBC67F7&lt;/string&gt;
 					&lt;string&gt;B207BBD4-D6AA-41E9-9530-27210F2D7B66&lt;/string&gt;
 					&lt;string&gt;BDBB15A4-2824-4BEC-93A5-7475F9C46A39&lt;/string&gt;
-					&lt;string&gt;EE862691-A624-4797-90CF-EDD39EFB2D8E&lt;/string&gt;
+					&lt;string&gt;638D94A4-BDFC-4FE9-8909-9934F3FD2899&lt;/string&gt;
 				&lt;/array&gt;
 				&lt;key&gt;name&lt;/key&gt;
 				&lt;string&gt;Go To&lt;/string&gt;
@@ -226,26 +527,50 @@
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
-					&lt;string&gt;CD60F800-850D-47CF-BE32-3DE665DD5C68&lt;/string&gt;
-					&lt;string&gt;2BD82DCB-1F19-4C8F-BC70-C0BBB06A2138&lt;/string&gt;
+					&lt;string&gt;30BEA6FB-301C-4460-93EC-FA3404688962&lt;/string&gt;
+					&lt;string&gt;5C6F4462-70E6-40B4-B3F2-F371656E7784&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
 				&lt;/array&gt;
 				&lt;key&gt;name&lt;/key&gt;
 				&lt;string&gt;Unit Tests&lt;/string&gt;
 			&lt;/dict&gt;
+			&lt;key&gt;E3C11C94-8472-45CC-9258-1E5EEC7657A8&lt;/key&gt;
+			&lt;dict&gt;
+				&lt;key&gt;items&lt;/key&gt;
+				&lt;array&gt;
+					&lt;string&gt;B31822D9-2048-4D16-B2AF-00E0B4E5C368&lt;/string&gt;
+					&lt;string&gt;F46EE8EE-239C-46D7-980B-3F861B7D9111&lt;/string&gt;
+					&lt;string&gt;4C898FA8-D09C-4B28-BE42-14BB4EA4E2B1&lt;/string&gt;
+					&lt;string&gt;F0DB6886-4FFE-45BA-907F-44326AD8142D&lt;/string&gt;
+					&lt;string&gt;D4282CE1-4171-4B13-9220-3F2718BC2505&lt;/string&gt;
+					&lt;string&gt;3379FB35-C664-4255-96C6-6E4B91F12759&lt;/string&gt;
+					&lt;string&gt;99FEFD9B-5A07-46E3-950D-5C474E42B695&lt;/string&gt;
+					&lt;string&gt;C8BA285D-E12E-4AB8-A941-514C963E8226&lt;/string&gt;
+					&lt;string&gt;3000E569-4E19-4566-B08E-A3FFFAAC9075&lt;/string&gt;
+				&lt;/array&gt;
+				&lt;key&gt;name&lt;/key&gt;
+				&lt;string&gt;form_for helpers&lt;/string&gt;
+			&lt;/dict&gt;
 			&lt;key&gt;EE4BA904-F727-4C6B-A2CB-602E30537E38&lt;/key&gt;
 			&lt;dict&gt;
 				&lt;key&gt;items&lt;/key&gt;
 				&lt;array&gt;
 					&lt;string&gt;1DD8A214-1C97-45BA-ADEE-8F888DDE8570&lt;/string&gt;
 					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;7D99041D-C3B7-4940-AE64-6B1758CDB47C&lt;/string&gt;
+					&lt;string&gt;15BDD7B6-5C15-4684-93C7-A05E3D2221AC&lt;/string&gt;
+					&lt;string&gt;BA9F12E8-9151-4975-8E8A-9644290E6038&lt;/string&gt;
+					&lt;string&gt;E3C11C94-8472-45CC-9258-1E5EEC7657A8&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
 					&lt;string&gt;F0F6DACA-6A0B-11D9-BDC2-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;9E2B42FE-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;B4F952F4-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;74590E16-7BCB-11D9-906A-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;C11C0BF5-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
-					&lt;string&gt;D21BE958-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
+					&lt;string&gt;D0E29200-E910-11DC-A399-00112475D960&lt;/string&gt;
+					&lt;string&gt;9FB9848E-EA5A-11DC-9DE5-00112475D960&lt;/string&gt;
+					&lt;string&gt;245AD020-669A-46E1-8123-4B9CFDF8075A&lt;/string&gt;
+					&lt;string&gt;AC385ABF-96CD-4FCB-80AD-BF37D6EE79D2&lt;/string&gt;
 					&lt;string&gt;------------------------------------&lt;/string&gt;
 					&lt;string&gt;EC605540-C431-4FD0-AD91-D913118DACA7&lt;/string&gt;
+					&lt;string&gt;------------------------------------&lt;/string&gt;
+					&lt;string&gt;F7744F07-306C-4951-AB5A-3D69BA5516B7&lt;/string&gt;
 				&lt;/array&gt;
 				&lt;key&gt;name&lt;/key&gt;
 				&lt;string&gt;ERb Templates&lt;/string&gt;
@@ -268,8 +593,9 @@
 	&lt;key&gt;ordering&lt;/key&gt;
 	&lt;array&gt;
 		&lt;string&gt;1970AE74-3949-40B3-B263-727AA3FF167A&lt;/string&gt;
-		&lt;string&gt;43304E62-66F7-424D-8AF6-33E0237BF349&lt;/string&gt;
 		&lt;string&gt;0CCC8443-40F3-4BAB-9440-D737562B5F45&lt;/string&gt;
+		&lt;string&gt;C7151BF3-7068-4344-9B09-86F3BF4A9C63&lt;/string&gt;
+		&lt;string&gt;638D94A4-BDFC-4FE9-8909-9934F3FD2899&lt;/string&gt;
 		&lt;string&gt;9453F0B3-B946-445F-BDB0-B01DE70732FC&lt;/string&gt;
 		&lt;string&gt;EE862691-A624-4797-90CF-EDD39EFB2D8E&lt;/string&gt;
 		&lt;string&gt;51C9C27A-D931-49F9-B6D8-C0E7ABEC992D&lt;/string&gt;
@@ -283,13 +609,24 @@
 		&lt;string&gt;D696FA2C-785A-4B73-A2F6-F750904DD7C2&lt;/string&gt;
 		&lt;string&gt;46ECE243-0448-4A64-A223-27CC21E7704D&lt;/string&gt;
 		&lt;string&gt;985F56D4-82ED-4C45-8250-2ECCFC71957E&lt;/string&gt;
+		&lt;string&gt;CFDA9F62-D071-4E0F-AD10-66AE0729FFCF&lt;/string&gt;
 		&lt;string&gt;07C696F8-79F5-4E0B-9EE9-03B693A54ABB&lt;/string&gt;
 		&lt;string&gt;9A1AE6BA-8350-4AB7-B5BD-969A7E64CF29&lt;/string&gt;
 		&lt;string&gt;5EEA0C71-B34B-4408-953B-F47AAD343CCC&lt;/string&gt;
 		&lt;string&gt;F758BFD1-00CA-4742-BE71-032580080F5C&lt;/string&gt;
+		&lt;string&gt;DC549A45-D9B0-11DC-94E9-00112475D960&lt;/string&gt;
+		&lt;string&gt;190401C2-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+		&lt;string&gt;2C60CBA1-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+		&lt;string&gt;F4EA552D-D9B0-11DC-94E9-00112475D960&lt;/string&gt;
+		&lt;string&gt;04A30A4D-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+		&lt;string&gt;0D966168-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+		&lt;string&gt;212C3047-D9B1-11DC-94E9-00112475D960&lt;/string&gt;
+		&lt;string&gt;0BCF0EE2-35EE-4959-A771-E74D55271D5A&lt;/string&gt;
+		&lt;string&gt;275C0B86-F735-49B6-8A22-218A8F4CC2E0&lt;/string&gt;
 		&lt;string&gt;310C901C-EF32-4E88-938A-804ABBF8C428&lt;/string&gt;
 		&lt;string&gt;6DEF923E-2347-46EC-AFBE-183D08E63DC1&lt;/string&gt;
 		&lt;string&gt;6F2AB859-46E3-4FF5-A9A7-E9A813AB5DE1&lt;/string&gt;
+		&lt;string&gt;964436B8-E578-11DC-8177-00112475D960&lt;/string&gt;
 		&lt;string&gt;25F8F5D8-2BD1-45D8-8B2A-9F2EA4F73AA2&lt;/string&gt;
 		&lt;string&gt;A2135370-67A1-488D-B43C-B4F221127C2F&lt;/string&gt;
 		&lt;string&gt;18C76913-061C-4D65-866D-67AA3724AFEF&lt;/string&gt;
@@ -303,13 +640,15 @@
 		&lt;string&gt;95F83E1D-5B03-424F-8BEC-8AF66C8939BC&lt;/string&gt;
 		&lt;string&gt;33057A79-677B-4DFB-99D4-1492778BDDC6&lt;/string&gt;
 		&lt;string&gt;A7F692C1-778A-48B8-945E-573568BA0403&lt;/string&gt;
+		&lt;string&gt;4B3F798E-E3B6-48C8-8C2F-CB8631011638&lt;/string&gt;
 		&lt;string&gt;EC605540-C431-4FD0-AD91-D913118DACA7&lt;/string&gt;
 		&lt;string&gt;AC8EDA3E-875B-11D9-897C-000393CBCE2E&lt;/string&gt;
 		&lt;string&gt;7B02ABF8-8763-11D9-897C-000393CBCE2E&lt;/string&gt;
 		&lt;string&gt;D864896E-8763-11D9-897C-000393CBCE2E&lt;/string&gt;
-		&lt;string&gt;EB781D86-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
-		&lt;string&gt;F8EE4249-84C5-11D9-A094-000D932CD5BA&lt;/string&gt;
-		&lt;string&gt;060DC5CD-84C6-11D9-A094-000D932CD5BA&lt;/string&gt;
+		&lt;string&gt;A909C4C3-8EFE-4E39-9D96-BA8F0ABE6085&lt;/string&gt;
+		&lt;string&gt;AFE06B67-CE98-42A6-93D1-8EC8E3B9F83C&lt;/string&gt;
+		&lt;string&gt;9D7228B3-A6ED-4598-B096-032B3600864F&lt;/string&gt;
+		&lt;string&gt;EF527A27-D1D4-4FD8-BD23-71397881C29A&lt;/string&gt;
 		&lt;string&gt;F2F3167C-73B9-11D9-B752-000D932CD5BA&lt;/string&gt;
 		&lt;string&gt;2233B484-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
 		&lt;string&gt;053490FE-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
@@ -317,71 +656,188 @@
 		&lt;string&gt;18D3C1C3-73BA-11D9-B752-000D932CD5BA&lt;/string&gt;
 		&lt;string&gt;7BBD3F57-57A5-4CD0-8E79-B931021FC110&lt;/string&gt;
 		&lt;string&gt;9ECBF20C-003E-41D9-A881-4BAC0656F9DC&lt;/string&gt;
+		&lt;string&gt;7D99041D-C3B7-4940-AE64-6B1758CDB47C&lt;/string&gt;
+		&lt;string&gt;15BDD7B6-5C15-4684-93C7-A05E3D2221AC&lt;/string&gt;
+		&lt;string&gt;402C251E-595B-4A58-8EB9-41989040F280&lt;/string&gt;
+		&lt;string&gt;B31822D9-2048-4D16-B2AF-00E0B4E5C368&lt;/string&gt;
+		&lt;string&gt;CC1BCD1C-2479-4335-B511-17B880316A75&lt;/string&gt;
+		&lt;string&gt;F46EE8EE-239C-46D7-980B-3F861B7D9111&lt;/string&gt;
+		&lt;string&gt;06498926-F84D-466C-8736-B8A0AC586A94&lt;/string&gt;
+		&lt;string&gt;4C898FA8-D09C-4B28-BE42-14BB4EA4E2B1&lt;/string&gt;
+		&lt;string&gt;F579F9E7-E072-4BCC-BFF9-C8C5BAE7FFA5&lt;/string&gt;
+		&lt;string&gt;F0DB6886-4FFE-45BA-907F-44326AD8142D&lt;/string&gt;
+		&lt;string&gt;A95358D2-C68A-4894-8C36-062C9F45848A&lt;/string&gt;
+		&lt;string&gt;D4282CE1-4171-4B13-9220-3F2718BC2505&lt;/string&gt;
+		&lt;string&gt;42289456-C8D1-498C-AE30-5206544B349F&lt;/string&gt;
+		&lt;string&gt;3379FB35-C664-4255-96C6-6E4B91F12759&lt;/string&gt;
+		&lt;string&gt;5DBA8F72-DD6C-4CBF-83FD-76301E159BA9&lt;/string&gt;
+		&lt;string&gt;99FEFD9B-5A07-46E3-950D-5C474E42B695&lt;/string&gt;
+		&lt;string&gt;79BC2303-3D9D-4E21-AF85-73B388B7B56D&lt;/string&gt;
+		&lt;string&gt;C8BA285D-E12E-4AB8-A941-514C963E8226&lt;/string&gt;
+		&lt;string&gt;C315EC5D-A7F3-49CB-9795-21B78BB42FF4&lt;/string&gt;
+		&lt;string&gt;3000E569-4E19-4566-B08E-A3FFFAAC9075&lt;/string&gt;
 		&lt;string&gt;F0F6DACA-6A0B-11D9-BDC2-000D932CD5BA&lt;/string&gt;
+		&lt;string&gt;D0E29200-E910-11DC-A399-00112475D960&lt;/string&gt;
+		&lt;string&gt;9FB9848E-EA5A-11DC-9DE5-00112475D960&lt;/string&gt;
+		&lt;string&gt;326B57A7-B4A9-447B-A3D2-0EA74158E1E1&lt;/string&gt;
+		&lt;string&gt;6BA737F0-63D1-4D82-9381-4331E18B12C5&lt;/string&gt;
+		&lt;string&gt;750DEEF9-18A0-40FC-8E54-574CE5EE5565&lt;/string&gt;
+		&lt;string&gt;866AAD87-E458-4F2D-9E7C-3CE73EFC047B&lt;/string&gt;
 		&lt;string&gt;9E2B42FE-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
 		&lt;string&gt;B4F952F4-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
 		&lt;string&gt;74590E16-7BCB-11D9-906A-000D932CD5BA&lt;/string&gt;
 		&lt;string&gt;C11C0BF5-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
 		&lt;string&gt;D21BE958-7BC8-11D9-906A-000D932CD5BA&lt;/string&gt;
+		&lt;string&gt;E5E08AA0-4EDD-4583-BF07-5D6C49E98410&lt;/string&gt;
+		&lt;string&gt;F7744F07-306C-4951-AB5A-3D69BA5516B7&lt;/string&gt;
+		&lt;string&gt;AC385ABF-96CD-4FCB-80AD-BF37D6EE79D2&lt;/string&gt;
 		&lt;string&gt;2A8FBE48-E196-4019-AE76-BF3ED4B54F47&lt;/string&gt;
 		&lt;string&gt;1E5DE984-510C-4992-8AD5-C5FA6D7F2A88&lt;/string&gt;
-		&lt;string&gt;BFAAC8DA-A043-4684-967B-B3E5DAE08C62&lt;/string&gt;
 		&lt;string&gt;053F1D6A-B413-43FF-B697-E3120FD0489F&lt;/string&gt;
 		&lt;string&gt;7B03D38B-7580-41AC-BC2B-3766AB074A43&lt;/string&gt;
 		&lt;string&gt;97C0992D-715F-4322-A3E0-DD4D2B7E2FC2&lt;/string&gt;
 		&lt;string&gt;3F83272F-62D5-4BCB-BAA3-806083078829&lt;/string&gt;
+		&lt;string&gt;498168A5-5AF8-4F59-8A2D-B517FAB98CDB&lt;/string&gt;
+		&lt;string&gt;BFAAC8DA-A043-4684-967B-B3E5DAE08C62&lt;/string&gt;
+		&lt;string&gt;046FB1B6-9C65-4702-91EC-4AA9878CD949&lt;/string&gt;
 		&lt;string&gt;6F41AFFD-B3A7-42D0-8A84-D6086C118D92&lt;/string&gt;
 		&lt;string&gt;CBB06A4E-3A82-45F3-91AA-259F02314B9D&lt;/string&gt;
-		&lt;string&gt;046FB1B6-9C65-4702-91EC-4AA9878CD949&lt;/string&gt;
 		&lt;string&gt;A3B09AFE-40B5-4623-8B85-E9F369ECE22D&lt;/string&gt;
 		&lt;string&gt;4F636977-F7A6-4BF5-B09B-7F087683C3B9&lt;/string&gt;
 		&lt;string&gt;AC8A995F-0034-433C-905D-E5C1F29D6EFF&lt;/string&gt;
 		&lt;string&gt;7D43B0EA-2C3C-499B-9346-A8E48CBF29CD&lt;/string&gt;
 		&lt;string&gt;724A68C1-A727-46FF-AF59-288E26B09629&lt;/string&gt;
-		&lt;string&gt;498168A5-5AF8-4F59-8A2D-B517FAB98CDB&lt;/string&gt;
 		&lt;string&gt;A8AF8B90-94E8-42E1-8057-DDBA57809F6A&lt;/string&gt;
 		&lt;string&gt;64E93A71-6E62-48D9-9694-123080AE6723&lt;/string&gt;
 		&lt;string&gt;67C5082F-5011-434A-8EAA-6B8D3600935F&lt;/string&gt;
-		&lt;string&gt;0D8DA40B-0652-42E8-AB20-5B6847DC2F11&lt;/string&gt;
-		&lt;string&gt;86DD56A8-C655-49DA-997B-8929E5D9407E&lt;/string&gt;
-		&lt;string&gt;F0A39EAD-6D01-437B-9A79-468E0571CB3D&lt;/string&gt;
+		&lt;string&gt;ECB10C0B-E8B7-4606-ABF5-4A2A26E5AB1A&lt;/string&gt;
+		&lt;string&gt;54F61419-001F-4B71-83AC-8DC633694AF0&lt;/string&gt;
+		&lt;string&gt;3BDD0D52-443E-4F5F-AE09-ABCC2ABE9A42&lt;/string&gt;
+		&lt;string&gt;B41D3164-EA53-4DDC-850E-27B82B24061F&lt;/string&gt;
+		&lt;string&gt;3F26FDB4-ACF9-4856-9312-6A4D78DC8564&lt;/string&gt;
+		&lt;string&gt;91C543BF-7BD8-4E3A-B493-AE572C5472A0&lt;/string&gt;
+		&lt;string&gt;0FF86C46-0E01-4D03-8232-72CA5BD55706&lt;/string&gt;
+		&lt;string&gt;2183A9A9-17ED-4A4F-ABB6-668EDDD3A6E4&lt;/string&gt;
+		&lt;string&gt;BD4B90F7-2187-4E75-BFFB-77BE67CB8DAE&lt;/string&gt;
+		&lt;string&gt;F3606586-F905-4A91-92CA-82319239221D&lt;/string&gt;
 		&lt;string&gt;16A705EB-10DC-42B5-9FF2-377E206421DC&lt;/string&gt;
 		&lt;string&gt;7592CA99-75D7-48B6-9133-00B9F148FF43&lt;/string&gt;
 		&lt;string&gt;67FD2F8F-5F25-45F2-A451-2F39977A9EDE&lt;/string&gt;
-		&lt;string&gt;59A47C33-97C5-411D-ADBE-ABD2324BD130&lt;/string&gt;
-		&lt;string&gt;23BAF50A-CAFC-468E-929C-B6EAC75937A8&lt;/string&gt;
-		&lt;string&gt;C3ED4A88-B9CF-4F2B-B195-3C582ED58C5F&lt;/string&gt;
+		&lt;string&gt;377BF814-D52D-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;B757F7E5-E4BD-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;6A9D4C30-D52D-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;FFE7B820-E4BD-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;729D559E-D52D-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;0E63B7D5-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;8AF989C4-D52E-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;1BDC463A-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;93A16768-D52E-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;26C09807-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;D6CBCA96-D52F-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;3458B140-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;4600CE20-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;49643690-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;4F5DDD37-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;537BDD48-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;56276686-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;61CF5B32-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;967093B4-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;6BE6F315-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;5E9B8B0E-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;7CE57C6C-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;E0C8FDC4-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;950B0BF2-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;FC2523C1-D532-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;A677FFD4-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
+		&lt;string&gt;EDA6568B-D533-11DC-BD8E-00112475D960&lt;/string&gt;
+		&lt;string&gt;B6D9225C-E4BE-11DC-A11A-00112475D960&lt;/string&gt;
 		&lt;string&gt;20375601-B13F-4314-B8E4-362706566636&lt;/string&gt;
+		&lt;string&gt;F60D0630-CBF5-4283-9D20-FA46C787A88D&lt;/string&gt;
+		&lt;string&gt;FE9C4B4E-860D-49F0-AAF7-5582B98F5F54&lt;/string&gt;
 		&lt;string&gt;2BD82DCB-1F19-4C8F-BC70-C0BBB06A2138&lt;/string&gt;
-		&lt;string&gt;4BC406AE-6554-4E83-9031-672855495460&lt;/string&gt;
 		&lt;string&gt;CD60F800-850D-47CF-BE32-3DE665DD5C68&lt;/string&gt;
+		&lt;string&gt;D33EDCE7-F8AF-48D4-AA7A-852BBF03E31D&lt;/string&gt;
+		&lt;string&gt;0249637E-0720-46DA-A8FD-E176A2CC458B&lt;/string&gt;
+		&lt;string&gt;97021C0D-EB65-4046-B688-01F09B3B1615&lt;/string&gt;
+		&lt;string&gt;4C92C020-7337-4D6E-91EE-7ABF2BFC7F41&lt;/string&gt;
+		&lt;string&gt;30BEA6FB-301C-4460-93EC-FA3404688962&lt;/string&gt;
+		&lt;string&gt;5C6F4462-70E6-40B4-B3F2-F371656E7784&lt;/string&gt;
+		&lt;string&gt;DBE14FE8-B415-4DBC-A316-F8DA63FE9FD7&lt;/string&gt;
+		&lt;string&gt;1C491A76-751F-44EF-8DFB-0A585C7EEFF6&lt;/string&gt;
+		&lt;string&gt;8B9CD068-4338-4039-AA06-D839A6C7A9FF&lt;/string&gt;
 		&lt;string&gt;B8F08BD7-6160-482C-8A3D-CBC6BD2079A4&lt;/string&gt;
 		&lt;string&gt;2AC3AC1F-743B-4A33-863C-C37885073806&lt;/string&gt;
-		&lt;string&gt;F396B7BD-8255-48B1-904A-06E7D7CC2741&lt;/string&gt;
 		&lt;string&gt;BD2E4045-54E6-450E-B31B-5E1865CFFBC9&lt;/string&gt;
+		&lt;string&gt;F396B7BD-8255-48B1-904A-06E7D7CC2741&lt;/string&gt;
+		&lt;string&gt;9D58B6C9-BA52-48B3-B639-D5CB894AF810&lt;/string&gt;
 		&lt;string&gt;47944705-F605-4ED4-B4C0-9E823EE25138&lt;/string&gt;
 		&lt;string&gt;85E9264C-5414-4FA0-AC07-F305A798ED46&lt;/string&gt;
 		&lt;string&gt;B5893618-D07C-48F1-8867-736D0AAFF0E7&lt;/string&gt;
 		&lt;string&gt;1354726C-DA64-4CA6-A099-26626A865D8D&lt;/string&gt;
 		&lt;string&gt;4CC98A56-B60B-4A89-80E0-400C5314A050&lt;/string&gt;
 		&lt;string&gt;869AB0B7-12DD-440A-905A-BFB1E0E16E1C&lt;/string&gt;
+		&lt;string&gt;4611F02E-E9BF-11DC-8518-00112475D960&lt;/string&gt;
+		&lt;string&gt;47FF50AF-E9BF-11DC-8518-00112475D960&lt;/string&gt;
+		&lt;string&gt;EB47FBA1-AFB3-42F9-94A4-552D3175C17A&lt;/string&gt;
+		&lt;string&gt;14BF0586-F2E8-4AB3-BB4B-E49099384403&lt;/string&gt;
+		&lt;string&gt;B21BA16D-7C04-4912-8488-425CDCC332A8&lt;/string&gt;
+		&lt;string&gt;CF506019-E964-4172-A3DA-475AE3B65558&lt;/string&gt;
 		&lt;string&gt;5DAC28A7-33C8-4DA7-9E85-56618D6BEC9F&lt;/string&gt;
 		&lt;string&gt;F5CBBE16-F5CC-4EDA-8BC6-30281BD7D854&lt;/string&gt;
 		&lt;string&gt;5CE8838A-BF2C-497E-B87A-E90C3BC482E0&lt;/string&gt;
+		&lt;string&gt;A1776279-5396-4FE9-9218-8BF2C88C5271&lt;/string&gt;
+		&lt;string&gt;E2CE2E3B-8A61-4866-9AF5-A12F44CF7233&lt;/string&gt;
+		&lt;string&gt;86CFB156-E72B-440F-9C7D-08A3375C3ADB&lt;/string&gt;
+		&lt;string&gt;44FBD811-70A9-462B-AC56-F975ADAD62AF&lt;/string&gt;
+		&lt;string&gt;BA0DE6C7-EAD3-42C9-8ABB-2B9A5F2FE225&lt;/string&gt;
+		&lt;string&gt;BCB25D36-2D3F-41E9-B2CF-37D6E883E8D1&lt;/string&gt;
+		&lt;string&gt;523BE8A6-0845-493D-A9B6-532F73D21950&lt;/string&gt;
+		&lt;string&gt;3F4B502B-5F68-4687-88E9-6EF3BDF9677D&lt;/string&gt;
+		&lt;string&gt;1C20EEBE-B4BA-48C8-9B33-7B5BB00D958C&lt;/string&gt;
+		&lt;string&gt;D64D8863-DCB6-4397-B5B0-073E0AE04167&lt;/string&gt;
+		&lt;string&gt;279D1981-B055-4693-B9AF-5B571A62A6AE&lt;/string&gt;
+		&lt;string&gt;0C9EA1A1-66C5-4E1C-9C30-E1FFE8EC6EAE&lt;/string&gt;
+		&lt;string&gt;4D1787E3-1583-4CF3-8D99-CC45D7C35EED&lt;/string&gt;
+		&lt;string&gt;A2F3E8C1-4216-4890-8491-2F8C7534ED03&lt;/string&gt;
+		&lt;string&gt;EC511A43-D3B7-11DC-BA49-00112475D960&lt;/string&gt;
 		&lt;string&gt;F8316545-9AE4-4C7F-87ED-A2C00E6637FA&lt;/string&gt;
 		&lt;string&gt;43680344-0818-42BF-95B4-58CD2D76545B&lt;/string&gt;
+		&lt;string&gt;A017AB39-A875-40DC-8ACF-7E3551057CA0&lt;/string&gt;
+		&lt;string&gt;FE430ECD-5D40-4D95-A73B-F064C73992DE&lt;/string&gt;
+		&lt;string&gt;59CD3A41-8164-4FB4-B462-D7ACE86BCDBF&lt;/string&gt;
 		&lt;string&gt;D975E5C1-42C2-40F1-8960-0DA533B18113&lt;/string&gt;
 		&lt;string&gt;36E2A3EE-E9CC-4B7F-A4CF-AFAF970B8699&lt;/string&gt;
 		&lt;string&gt;38D5CA05-E219-4399-A244-609AF40B1D0B&lt;/string&gt;
 		&lt;string&gt;7053B86A-9B81-4154-AB3C-61B8035C5D33&lt;/string&gt;
 		&lt;string&gt;35E95C81-22F7-4C40-8297-ED21086DDA81&lt;/string&gt;
 		&lt;string&gt;7B15B396-1F41-4529-9253-32761E94448C&lt;/string&gt;
-		&lt;string&gt;54D6E91E-8F31-11D9-90C5-0011242E4184&lt;/string&gt;
+		&lt;string&gt;786980D8-FA69-4542-85A3-5E48CFAA6814&lt;/string&gt;
+		&lt;string&gt;9671EB7A-89D6-4C23-914F-88CBEE0D177A&lt;/string&gt;
+		&lt;string&gt;E0F281EC-5311-41F8-ADD9-2E2D059DA651&lt;/string&gt;
+		&lt;string&gt;F57522B2-9F5F-4DF9-AE46-9478AF019C63&lt;/string&gt;
+		&lt;string&gt;B25B7560-FACB-4A9E-A226-B71C796BD1F3&lt;/string&gt;
+		&lt;string&gt;FEF49C86-9386-405E-A191-684D1C963E3A&lt;/string&gt;
+		&lt;string&gt;980C7667-9D60-49FF-AF74-A7B19B379F45&lt;/string&gt;
+		&lt;string&gt;390A447F-0FA3-4F01-A10C-4F35675E0A43&lt;/string&gt;
+		&lt;string&gt;62BEA590-F4EF-4001-B661-764EDFB92811&lt;/string&gt;
+		&lt;string&gt;273E5E76-8D13-4476-9C38-8AF87432CB96&lt;/string&gt;
+		&lt;string&gt;8B914165-9C66-4FA3-9AD6-1DA41B25F8F1&lt;/string&gt;
+		&lt;string&gt;5ACBF49D-B5A5-495C-89D8-18AA740D9D02&lt;/string&gt;
+		&lt;string&gt;028DA0A4-B310-4BEF-8643-2A22993C21C7&lt;/string&gt;
+		&lt;string&gt;CFDC27A3-58CF-4198-8F93-36360978F0D0&lt;/string&gt;
+		&lt;string&gt;D2783155-23F3-4B90-A317-5BD139471193&lt;/string&gt;
+		&lt;string&gt;F1BE0C3D-7203-43E9-BEFB-D1A99CDD31C1&lt;/string&gt;
+		&lt;string&gt;78FCF992-D01B-404F-BC54-5EE7B91F999A&lt;/string&gt;
+		&lt;string&gt;62C3838B-0790-4FC2-8425-F273A57F5D33&lt;/string&gt;
+		&lt;string&gt;C12C98A5-74E5-4E70-9ADB-8783455D6539&lt;/string&gt;
 		&lt;string&gt;45D7E1FC-7D0B-4105-A1A2-3D10BB555A5C&lt;/string&gt;
+		&lt;string&gt;54D6E91E-8F31-11D9-90C5-0011242E4184&lt;/string&gt;
+		&lt;string&gt;4A3E6DA7-67A3-45B1-9EE0-ECFF9C7FA6C0&lt;/string&gt;
+		&lt;string&gt;A6AE60CD-18CA-4474-BE7A-5255BC3EF083&lt;/string&gt;
 		&lt;string&gt;D54FBDED-5481-4CC7-B75F-66465A499882&lt;/string&gt;
-		&lt;string&gt;EC605540-C431-4FD0-AD91-D913118DACA7&lt;/string&gt;
-		&lt;string&gt;EDB6B7B9-E2BA-44EE-A344-24117C636D96&lt;/string&gt;
-		&lt;string&gt;7FE6D718-C64A-4D15-9CDA-E2E3F752F109&lt;/string&gt;
+		&lt;string&gt;87EF33FE-E918-11DC-A399-00112475D960&lt;/string&gt;
+		&lt;string&gt;C0FD2646-E924-11DC-A399-00112475D960&lt;/string&gt;
+		&lt;string&gt;ADD9E242-E926-11DC-A399-00112475D960&lt;/string&gt;
 	&lt;/array&gt;
 	&lt;key&gt;uuid&lt;/key&gt;
 	&lt;string&gt;467A60E0-6227-11D9-BFB1-000D93589AF6&lt;/string&gt;</diff>
      <filename>info.plist</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>Commands/Intelligent Go To File.plist</filename>
    </removed>
    <removed>
      <filename>Macros/Add : Remove Column.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Add : Remove Index.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Add : Remove Named Index.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Add : Remove Several Columns (marcc).tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Add : Remove Several Columns.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Add : Remove Unique Index.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Create : Drop Table.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Drop : Create Table.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Remove : Add Column.tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Rename : Rename Several Columns (mncc).tmMacro</filename>
    </removed>
    <removed>
      <filename>Macros/Rename : Rename Several Columns.tmMacro</filename>
    </removed>
    <removed>
      <filename>Snippets/Migration Add Column (mac).plist</filename>
    </removed>
    <removed>
      <filename>Snippets/Migration Create Table (mct).plist</filename>
    </removed>
    <removed>
      <filename>Snippets/Migration Drop Table (mdt).plist</filename>
    </removed>
    <removed>
      <filename>Snippets/Migration Remove Column (mrc).plist</filename>
    </removed>
    <removed>
      <filename>Snippets/Rename Column.tmSnippet</filename>
    </removed>
    <removed>
      <filename>Snippets/Rename Table.tmSnippet</filename>
    </removed>
    <removed>
      <filename>Snippets/map(&amp;:sym_proc).tmSnippet</filename>
    </removed>
    <removed>
      <filename>Snippets/render (text,layout=&gt;true) (rtlt).plist</filename>
    </removed>
    <removed>
      <filename>Support/bin/intelligent_go_to_file.rb</filename>
    </removed>
    <removed>
      <filename>Support/plugins/footnotes-edge/templates/rescues/template_error.rhtml</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/controllers/admin/base_controller.rb</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/controllers/user_controller.rb</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/helpers/user_helper.rb</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/models/notifier.rb</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/models/user.rb</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/views/admin/base/action.rhtml</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/views/notifier/forgot_password.rhtml</filename>
    </removed>
    <removed>
      <filename>Support/test/fixtures/app/views/user/new.rhtml</filename>
    </removed>
    <removed>
      <filename>Support/test/misc_test.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>bb24cf7ca79b9cf4001fa7bde1cbdde33eac082f</id>
    </parent>
  </parents>
  <author>
    <name>kevin</name>
    <email>kevin@dfb7d73b-c2ec-0310-8fea-fb051d288c6d</email>
  </author>
  <url>http://github.com/drnic/ruby-on-rails-tmbundle/commit/a89dcbfd6bb37f827df2c792d340f16ba20fbd8b</url>
  <id>a89dcbfd6bb37f827df2c792d340f16ba20fbd8b</id>
  <committed-date>2008-03-08T08:22:13-08:00</committed-date>
  <authored-date>2008-03-08T08:22:13-08:00</authored-date>
  <message>This is a merge from the git repository hosted by Dr. Nic
http://github.com/drnic/ruby-on-rails-tmbundle/commit/7edadd1

== 1.90.0 2008-03-08

* Major Upgrade to Rails 2.0 - Initial release
* Ruby on Rails bundle maintenance has been taken over by Dr Nic Williams from its initial legendary creator Duane Johnson.
* Added so far:
  * Snippets/Commands for:
    * Tests
      * assert_select (ass)
      * assert_difference/assert_no_difference (asd/asnd)
      * GET+POST test method stubs (deftg+deftp)
      * posts(:) + Alt+Esc allows you to select a posts.yml fixture
    * Controllers
      * respond_to (rest) and respond_to(html) (Shift+Cmd+H)
      * 'Go To View' within a respond_to will use the format/wants type as the default
      * REMOVED: render_component snippets
      * loggers - pass a block instead of raw string to save time if
        logging not used (e.g. production) [Stephen Touset]
      * redirect_to for resource paths (rep, repp, renp, renpp)
      * render :update (ru) [Simon Jefford]
    * Views
      * form_for and form_for(with errors) (ff,ffe)
      * Various form_for helpers in a drop-down list, e.g. f.text_field (f.)
      * Various form_for helpers with own tab completion, e.g. f.text_field (fftf)
      * link_to for resource paths (lip, lipp, linp, linpp)
      * &lt;% end -%&gt; (end)
      * for-loop (for)
      * link_to(@model.name, @model) (ltm)
    * Layouts
      * javascript_include_tag - jit
      * stylesheet_link_tag - slt
    * Models
      * has_many :though (hmt)
      * association snippets give better defaults (e.g. bt + hm)
      * validates_format_of (vf,vfif) [Dean Strelau]
      * validates_numericality_of (vn,vnif) [Tom Morris]
      * before/after callbacks (prefix bef/aft + 1st letter of words) [Sam Granieri]
    * Migrations
      * Sexy Migrations now available as &quot;t.&quot; snippets and regular snippets [Lawrence Pit]
      * Migration classes have own textmate scope
      * Add/Remove Columns - the 'down' statements are in reverse
        order [Lawrence Pit, Daniel Kristensen]
      * Added 'Redo Last Migration' [Simon Jefford]
    * Functional Tests
      * assert_redirect_to for resource paths (artp, artpp, artnp, artnpp)
      * assert(assigns(:model)) (asg)
    * Routes
      * named routes, resources snippets (map, mapr, maprs)
      * catch_all (mapca) [Sam Granieri]
    * Active Support
      * cattr_accessor/mattr_accessor (crw/mrw) [Jacob Swanner]
      * returning (returning) [Jacob Swanner]
  * Language/Syntax
    * New keywords: rescue_from, alias_method_chain, alias_attribute, delegate, respond_to [David Lowenfels, Jacob Swanner]
    * Added rb as a valid Rails file type [James Deville]
  * Commands
    * Auto-completion for Foxy Fixtures
    * html.erb is the default for new templates (backwards compatibility
      is being worked on too)
    * 'Go To XXX' - available for wide range of permutations.
      Fixtures -&gt; Models; Models -&gt; Controllers, etc
    * haml is a valid file extension [Steve Ross]
    * specify alternate default file extensions for: [Steve Ross]
      * javascript - ENV['RAILS_JS_EXT']
      * stylesheet - ENV['RAILS_CSS_EXT']
      * view - ENV['RAILS_VIEW_EXT']
    * 'Call Generate Script' now accesses all a project's generators
  * Plugins
    * Footnote
      * footnote-edge uses .erb for templates [Stephen Bannasch]
  * Internals
    * Rakefile - test runner [Steve Ross]
    * Added generator_test
    * Removed unnecessary misc_test
    * script/clean_bundle_file_names - rename non-os-agnostic file names [Charles Roper]
  * Haml support [Lawrence Pit]

For thoughts and patches, email drnicwilliams@gmail.com


git-svn-id: http://macromates.com/svn/Bundles/trunk/Bundles/Ruby%20on%20Rails.tmbundle@9069 dfb7d73b-c2ec-0310-8fea-fb051d288c6d</message>
  <tree>8f3c67c3a1e244dc7c2f0a68736416b5ed225d4e</tree>
  <committer>
    <name>kevin</name>
    <email>kevin@dfb7d73b-c2ec-0310-8fea-fb051d288c6d</email>
  </committer>
</commit>
