<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>vendor/gems/authlogic-2.0.14/.specification</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/CHANGELOG.rdoc</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/MIT-LICENSE</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/Manifest.txt</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/README.rdoc</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/Rakefile</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/generators/session/session_generator.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/generators/session/templates/session.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/init.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/base.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/email.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/logged_in_status.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/login.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/magic_columns.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/password.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/perishable_token.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/persistence_token.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/restful_authentication.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/session_maintenance.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/single_access_token.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/acts_as_authentic/validations_scope.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/authenticates_many/association.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/authenticates_many/base.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/controller_adapters/abstract_adapter.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/controller_adapters/merb_adapter.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/controller_adapters/rails_adapter.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/crypto_providers/aes256.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/crypto_providers/bcrypt.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/crypto_providers/md5.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/crypto_providers/sha1.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/crypto_providers/sha512.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/i18n.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/random.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/regex.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/activation.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/active_record_trickery.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/base.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/brute_force_protection.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/callbacks.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/cookies.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/existence.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/foundation.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/http_auth.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/id.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/klass.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/magic_columns.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/magic_states.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/params.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/password.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/perishable_token.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/persistence.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/priority_record.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/scopes.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/session.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/timeout.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/unauthorized_record.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/session/validation.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/test_case.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/test_case/mock_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/test_case/mock_cookie_jar.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/test_case/mock_logger.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/test_case/mock_request.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/test_case/rails_request_adapter.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/lib/authlogic/version.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/rails/init.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/shoulda_macros/authlogic.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/base_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/email_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/logged_in_status_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/login_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/magic_columns_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/password_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/perishable_token_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/persistence_token_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/restful_authentication_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/session_maintenance_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/acts_as_authentic_test/single_access_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/authenticates_many_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/crypto_provider_test/aes256_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/crypto_provider_test/bcrypt_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/crypto_provider_test/sha1_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/crypto_provider_test/sha512_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/fixtures/companies.yml</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/fixtures/employees.yml</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/fixtures/projects.yml</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/fixtures/users.yml</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/affiliate.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/company.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/employee.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/employee_session.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/ldaper.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/ordered_hash.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/project.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/user.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/libs/user_session.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/random_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/activation_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/active_record_trickery_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/brute_force_protection_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/callbacks_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/cookies_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/credentials_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/existence_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/http_auth_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/id_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/klass_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/magic_columns_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/magic_states_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/params_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/password_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/perishability_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/persistence_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/scopes_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/session_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/timeout_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/unauthorized_record_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/session_test/validation_test.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/authlogic-2.0.14/test/test_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/.gitignore</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/.specification</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/CHANGELOG.rdoc</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/LICENSE</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/README.rdoc</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/Rakefile</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/VERSION.yml</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/init.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic/core_ext/object.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic/core_ext/proc.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic/named_scopes/associations.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic/named_scopes/conditions.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic/named_scopes/ordering.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic/rails_helpers.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/lib/searchlogic/search.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/rails/init.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/searchlogic.gemspec</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/spec/core_ext/object_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/spec/core_ext/proc_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/spec/named_scopes/associations_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/spec/named_scopes/conditions_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/spec/named_scopes/ordering_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/spec/search_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/gems/binarylogic-searchlogic-2.0.1/spec/spec_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/active_scaffold/lib/bridges/tiny_mce/bridge.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/active_scaffold/lib/bridges/tiny_mce/lib/tiny_mce_bridge.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -5,7 +5,7 @@ require File.join(File.dirname(__FILE__), 'boot')
 Rails::Initializer.run do |config|
   config.gem 'configatron'
   config.gem 'authlogic'
-  config.gem 'searchlogic'
+  config.gem 'binarylogic-searchlogic', :lib =&gt; 'searchlogic'
   
   config.gem 'relevance-log_buddy', :lib =&gt; 'log_buddy', :source =&gt; 'http://gems.github.com'
 </diff>
      <filename>config/environment.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,430 +1,430 @@
-if (typeof Prototype == 'undefined')
-{
-  warning = &quot;ActiveScaffold Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (e.g. &lt;%= javascript_include_tag :defaults %&gt;) *before* it includes active_scaffold.js (e.g. &lt;%= active_scaffold_includes %&gt;).&quot;;
-  alert(warning);
-}
-if (Prototype.Version.substring(0, 3) != '1.6')
-{
-  warning = &quot;ActiveScaffold Error: Prototype version 1.6.x is required. Please update prototype.js (rake rails:update:javascripts).&quot;;
-  alert(warning);
-}
-
-/*
- * Simple utility methods
- */
-
-var ActiveScaffold = {
-  records_for: function(tbody_id) {
-    var rows = [];
-    var child = $(tbody_id).down('.record');
-    while (child) {
-      rows.push(child);
-      child = child.next('.record');
-    }
-    return rows;
-  },
-  stripe: function(tbody_id) {
-    var even = false;
-    var rows = this.records_for(tbody_id);
-    for (var i = 0; i &lt; rows.length; i++) {
-      var child = rows[i];
-      //Make sure to skip rows that are create or edit rows or messages
-      if (child.tagName != 'SCRIPT'
-        &amp;&amp; !child.hasClassName(&quot;create&quot;)
-        &amp;&amp; !child.hasClassName(&quot;update&quot;)
-        &amp;&amp; !child.hasClassName(&quot;inline-adapter&quot;)
-        &amp;&amp; !child.hasClassName(&quot;active-scaffold-calculations&quot;)) {
-
-        if (even) child.addClassName(&quot;even-record&quot;);
-        else child.removeClassName(&quot;even-record&quot;);
-
-        even = !even;
-      }
-    }
-  },
-  hide_empty_message: function(tbody, empty_message_id) {
-    if (this.records_for(tbody).length != 0) {
-      $(empty_message_id).hide();
-    }
-  },
-  reload_if_empty: function(tbody, url) {
-    var content_container_id = tbody.replace('tbody', 'content');
-    if (this.records_for(tbody).length == 0) {
-      new Ajax.Updater($(content_container_id), url, {
-        method: 'get',
-        asynchronous: true,
-        evalScripts: true
-      });
-    }
-  },
-  removeSortClasses: function(scaffold_id) {
-    $$('#' + scaffold_id + ' td.sorted').each(function(element) {
-      element.removeClassName(&quot;sorted&quot;);
-    });
-    $$('#' + scaffold_id + ' th.sorted').each(function(element) {
-      element.removeClassName(&quot;sorted&quot;);
-      element.removeClassName(&quot;asc&quot;);
-      element.removeClassName(&quot;desc&quot;);
-    });
-  },
-  decrement_record_count: function(scaffold_id) {
-    // decrement the last record count, firsts record count are in nested lists
-    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
-    count.innerHTML = parseInt(count.innerHTML) - 1;
-  },
-  increment_record_count: function(scaffold_id) {
-    // increment the last record count, firsts record count are in nested lists
-    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
-    count.innerHTML = parseInt(count.innerHTML) + 1;
-  },
-
-  server_error_response: '',
-  report_500_response: function(active_scaffold_id) {
-    messages_container = $(active_scaffold_id).down('td.messages-container');
-    new Insertion.Top(messages_container, this.server_error_response);
-  }
-}
-
-/*
- * DHTML history tie-in
- */
-function addActiveScaffoldPageToHistory(url, active_scaffold_id) {
-  if (typeof dhtmlHistory == 'undefined') return; // it may not be loaded
-
-  var array = url.split('?');
-  var qs = new Querystring(array[1]);
-  var sort = qs.get('sort')
-  var dir = qs.get('sort_direction')
-  var page = qs.get('page')
-  if (sort || dir || page) dhtmlHistory.add(active_scaffold_id+&quot;:&quot;+page+&quot;:&quot;+sort+&quot;:&quot;+dir, url);
-}
-
-/*
- * Add-ons/Patches to Prototype
- */
-
-/* patch to support replacing TR/TD/TBODY in Internet Explorer, courtesy of http://dev.rubyonrails.org/ticket/4273 */
-Element.replace = function(element, html) {
-  element = $(element);
-  if (element.outerHTML) {
-    try {
-    element.outerHTML = html.stripScripts();
-    } catch (e) {
-      var tn = element.tagName;
-      if(tn=='TBODY' || tn=='TR' || tn=='TD')
-      {
-              var tempDiv = document.createElement(&quot;div&quot;);
-              tempDiv.innerHTML = '&lt;table id=&quot;tempTable&quot; style=&quot;display: none&quot;&gt;' + html.stripScripts() + '&lt;/table&gt;';
-              element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), element);
-      }
-      else throw e;
-    }
-  } else {
-    var range = element.ownerDocument.createRange();
-    /* patch to fix &lt;form&gt; replaces in Firefox. see http://dev.rubyonrails.org/ticket/8010 */
-    range.selectNodeContents(element.parentNode);
-    element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()), element);
-  }
-  setTimeout(function() {html.evalScripts()}, 10);
-  return element;
-};
-
-/*
- * URL modification support. Incomplete functionality.
- */
-Object.extend(String.prototype, {
-  append_params: function(params) {
-    url = this;
-    if (url.indexOf('?') == -1) url += '?';
-    else if (url.lastIndexOf('&amp;') != url.length) url += '&amp;';
-
-    url += $H(params).collect(function(item) {
-      return item.key + '=' + item.value;
-    }).join('&amp;');
-
-    return url;
-  }
-});
-
-/*
- * Prototype's implementation was throwing an error instead of false
- */
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    var t = Element._attributeTranslations;
-    attribute = (t.names &amp;&amp; t.names[attribute]) || attribute;
-    // Return false if we get an error here
-    try {
-      return $(element).getAttributeNode(attribute).specified;
-    } catch (e) {
-      return false;
-    }
-  }
-};
-
-/**
- * A set of links. As a set, they can be controlled such that only one is &quot;open&quot; at a time, etc.
- */
-ActiveScaffold.Actions = new Object();
-ActiveScaffold.Actions.Abstract = function(){}
-ActiveScaffold.Actions.Abstract.prototype = {
-  initialize: function(links, target, loading_indicator, options) {
-    this.target = $(target);
-    this.loading_indicator = $(loading_indicator);
-    this.options = options;
-    this.links = links.collect(function(link) {
-      return this.instantiate_link(link);
-    }.bind(this));
-  },
-
-  instantiate_link: function(link) {
-    throw 'unimplemented'
-  }
-}
-
-/**
- * A DataStructures::ActionLink, represented in JavaScript.
- * Concerned with AJAX-enabling a link and adapting the result for insertion into the table.
- */
-ActiveScaffold.ActionLink = new Object();
-ActiveScaffold.ActionLink.Abstract = function(){}
-ActiveScaffold.ActionLink.Abstract.prototype = {
-  initialize: function(a, target, loading_indicator) {
-    this.tag = $(a);
-    this.url = this.tag.href;
-    this.method = 'get';
-    if(this.url.match('_method=delete')){
-      this.method = 'delete';
-    } else if(this.url.match('_method=post')){
-      this.method = 'post';
-    }
-    this.target = target;
-    this.loading_indicator = loading_indicator;
-    this.hide_target = false;
-    this.position = this.tag.getAttribute('position');
-		this.page_link = this.tag.getAttribute('page_link');
-
-    this.onclick = this.tag.onclick;
-    this.tag.onclick = null;
-    this.tag.observe('click', function(event) {
-      this.open();
-      Event.stop(event);
-    }.bind(this));
-
-    this.tag.action_link = this;
-  },
-
-  open: function() {
-    if (this.is_disabled()) return;
-
-    if (this.tag.hasAttribute( &quot;dhtml_confirm&quot;)) {
-      if (this.onclick) this.onclick();
-      return;
-    } else {
-      if (this.onclick &amp;&amp; !this.onclick()) return;//e.g. confirmation messages
-      this.open_action();
-    }
-  },
-
-	open_action: function() {
-		if (this.position) this.disable();
-
-		if (this.page_link) {
-			window.location = this.url;
-		} else {
-			if (this.loading_indicator) this.loading_indicator.style.visibility = 'visible';
-	    new Ajax.Request(this.url, {
-	      asynchronous: true,
-	      evalScripts: true,
-              method: this.method,
-	      onSuccess: function(request) {
-	        if (this.position) {
-	          this.insert(request.responseText);
-	          if (this.hide_target) this.target.hide();
-	        } else {
-	          request.evalResponse();
-	        }
-	      }.bind(this),
-
-	      onFailure: function(request) {
-	        ActiveScaffold.report_500_response(this.scaffold_id());
-	        if (this.position) this.enable()
-	      }.bind(this),
-
-	      onComplete: function(request) {
-	        if (this.loading_indicator) this.loading_indicator.style.visibility = 'hidden';
-	      }.bind(this)
-			});
-		}
-	},
-
-  insert: function(content) {
-    throw 'unimplemented'
-  },
-
-  close: function() {
-    this.enable();
-    this.adapter.remove();
-    if (this.hide_target) this.target.show();
-  },
-
-  register_cancel_hooks: function() {
-    // anything in the insert with a class of cancel gets the closer method, and a reference to this object for good measure
-    var self = this;
-    this.adapter.select('.cancel').each(function(elem) {
-      elem.observe('click', this.close_handler.bind(this));
-      elem.link = self;
-    }.bind(this))
-  },
-
-  reload: function() {
-    this.close();
-    this.open();
-  },
-
-  get_new_adapter_id: function() {
-    var id = 'adapter_';
-    var i = 0;
-    while ($(id + i)) i++;
-    return id + i;
-  },
-
-  enable: function() {
-    return this.tag.removeClassName('disabled');
-  },
-
-  disable: function() {
-    return this.tag.addClassName('disabled');
-  },
-
-  is_disabled: function() {
-    return this.tag.hasClassName('disabled');
-  },
-
-  scaffold_id: function() {
-    return this.tag.up('div.active-scaffold').id;
-  }
-}
-
-/**
- * Concrete classes for record actions
- */
-ActiveScaffold.Actions.Record = Class.create();
-ActiveScaffold.Actions.Record.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
-  instantiate_link: function(link) {
-    var l = new ActiveScaffold.ActionLink.Record(link, this.target, this.loading_indicator);
-    l.refresh_url = this.options.refresh_url;
-    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
-    l.set = this;
-    return l;
-  }
-});
-
-ActiveScaffold.ActionLink.Record = Class.create();
-ActiveScaffold.ActionLink.Record.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
-  close_previous_adapter: function() {
-    this.set.links.each(function(item) {
-      if (item.url != this.url &amp;&amp; item.is_disabled() &amp;&amp; item.adapter) item.close();
-    }.bind(this));
-  },
-
-  insert: function(content) {
-    this.close_previous_adapter();
-
-    if (this.position == 'replace') {
-      this.position = 'after';
-      this.hide_target = true;
-    }
-
-    if (this.position == 'after') {
-      new Insertion.After(this.target, content);
-      this.adapter = this.target.next();
-    }
-    else if (this.position == 'before') {
-      new Insertion.Before(this.target, content);
-      this.adapter = this.target.previous();
-    }
-    else {
-      return false;
-    }
-
-    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
-    this.register_cancel_hooks();
-
-    new Effect.Highlight(this.adapter.down('td'));
-  },
-
-  close_handler: function(event) {
-    this.close_with_refresh();
-    if (event) Event.stop(event);
-  },
-
-  /* it might simplify things to just override the close function. then the Record and Table links could share more code ... wouldn't need custom close_handler functions, for instance */
-  close_with_refresh: function() {
-    new Ajax.Request(this.refresh_url, {
-      asynchronous: true,
-      evalScripts: true,
-      method: this.method,
-      onSuccess: function(request) {
-        Element.replace(this.target, request.responseText);
-        var new_target = $(this.target.id);
-        if (this.target.hasClassName('even-record')) new_target.addClassName('even-record');
-        this.target = new_target;
-        this.close();
-      }.bind(this),
-
-      onFailure: function(request) {
-        ActiveScaffold.report_500_response(this.scaffold_id());
-      }
-    });
-  },
-
-  enable: function() {
-    this.set.links.each(function(item) {
-      if (item.url != this.url) return;
-      item.tag.removeClassName('disabled');
-    }.bind(this));
-  },
-
-  disable: function() {
-    this.set.links.each(function(item) {
-      if (item.url != this.url) return;
-      item.tag.addClassName('disabled');
-    }.bind(this));
-  }
-});
-
-/**
- * Concrete classes for table actions
- */
-ActiveScaffold.Actions.Table = Class.create();
-ActiveScaffold.Actions.Table.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
-  instantiate_link: function(link) {
-    var l = new ActiveScaffold.ActionLink.Table(link, this.target, this.loading_indicator);
-    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
-    return l;
-  }
-});
-
-ActiveScaffold.ActionLink.Table = Class.create();
-ActiveScaffold.ActionLink.Table.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
-  insert: function(content) {
-    if (this.position == 'top') {
-      new Insertion.Top(this.target, content);
-      this.adapter = this.target.immediateDescendants().first();
-    }
-    else {
-      throw 'Unknown position &quot;' + this.position + '&quot;'
-    }
-
-    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
-    this.register_cancel_hooks();
-
-    new Effect.Highlight(this.adapter.down('td'));
-  },
-
-  close_handler: function(event) {
-    this.close();
-    if (event) Event.stop(event);
-  }
-});
+if (typeof Prototype == 'undefined')
+{
+  warning = &quot;ActiveScaffold Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (e.g. &lt;%= javascript_include_tag :defaults %&gt;) *before* it includes active_scaffold.js (e.g. &lt;%= active_scaffold_includes %&gt;).&quot;;
+  alert(warning);
+}
+if (Prototype.Version.substring(0, 3) != '1.6')
+{
+  warning = &quot;ActiveScaffold Error: Prototype version 1.6.x is required. Please update prototype.js (rake rails:update:javascripts).&quot;;
+  alert(warning);
+}
+
+/*
+ * Simple utility methods
+ */
+
+var ActiveScaffold = {
+  records_for: function(tbody_id) {
+    var rows = [];
+    var child = $(tbody_id).down('.record');
+    while (child) {
+      rows.push(child);
+      child = child.next('.record');
+    }
+    return rows;
+  },
+  stripe: function(tbody_id) {
+    var even = false;
+    var rows = this.records_for(tbody_id);
+    for (var i = 0; i &lt; rows.length; i++) {
+      var child = rows[i];
+      //Make sure to skip rows that are create or edit rows or messages
+      if (child.tagName != 'SCRIPT'
+        &amp;&amp; !child.hasClassName(&quot;create&quot;)
+        &amp;&amp; !child.hasClassName(&quot;update&quot;)
+        &amp;&amp; !child.hasClassName(&quot;inline-adapter&quot;)
+        &amp;&amp; !child.hasClassName(&quot;active-scaffold-calculations&quot;)) {
+
+        if (even) child.addClassName(&quot;even-record&quot;);
+        else child.removeClassName(&quot;even-record&quot;);
+
+        even = !even;
+      }
+    }
+  },
+  hide_empty_message: function(tbody, empty_message_id) {
+    if (this.records_for(tbody).length != 0) {
+      $(empty_message_id).hide();
+    }
+  },
+  reload_if_empty: function(tbody, url) {
+    var content_container_id = tbody.replace('tbody', 'content');
+    if (this.records_for(tbody).length == 0) {
+      new Ajax.Updater($(content_container_id), url, {
+        method: 'get',
+        asynchronous: true,
+        evalScripts: true
+      });
+    }
+  },
+  removeSortClasses: function(scaffold_id) {
+    $$('#' + scaffold_id + ' td.sorted').each(function(element) {
+      element.removeClassName(&quot;sorted&quot;);
+    });
+    $$('#' + scaffold_id + ' th.sorted').each(function(element) {
+      element.removeClassName(&quot;sorted&quot;);
+      element.removeClassName(&quot;asc&quot;);
+      element.removeClassName(&quot;desc&quot;);
+    });
+  },
+  decrement_record_count: function(scaffold_id) {
+    // decrement the last record count, firsts record count are in nested lists
+    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
+    count.innerHTML = parseInt(count.innerHTML) - 1;
+  },
+  increment_record_count: function(scaffold_id) {
+    // increment the last record count, firsts record count are in nested lists
+    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
+    count.innerHTML = parseInt(count.innerHTML) + 1;
+  },
+
+  server_error_response: '',
+  report_500_response: function(active_scaffold_id) {
+    messages_container = $(active_scaffold_id).down('td.messages-container');
+    new Insertion.Top(messages_container, this.server_error_response);
+  }
+}
+
+/*
+ * DHTML history tie-in
+ */
+function addActiveScaffoldPageToHistory(url, active_scaffold_id) {
+  if (typeof dhtmlHistory == 'undefined') return; // it may not be loaded
+
+  var array = url.split('?');
+  var qs = new Querystring(array[1]);
+  var sort = qs.get('sort')
+  var dir = qs.get('sort_direction')
+  var page = qs.get('page')
+  if (sort || dir || page) dhtmlHistory.add(active_scaffold_id+&quot;:&quot;+page+&quot;:&quot;+sort+&quot;:&quot;+dir, url);
+}
+
+/*
+ * Add-ons/Patches to Prototype
+ */
+
+/* patch to support replacing TR/TD/TBODY in Internet Explorer, courtesy of http://dev.rubyonrails.org/ticket/4273 */
+Element.replace = function(element, html) {
+  element = $(element);
+  if (element.outerHTML) {
+    try {
+    element.outerHTML = html.stripScripts();
+    } catch (e) {
+      var tn = element.tagName;
+      if(tn=='TBODY' || tn=='TR' || tn=='TD')
+      {
+              var tempDiv = document.createElement(&quot;div&quot;);
+              tempDiv.innerHTML = '&lt;table id=&quot;tempTable&quot; style=&quot;display: none&quot;&gt;' + html.stripScripts() + '&lt;/table&gt;';
+              element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), element);
+      }
+      else throw e;
+    }
+  } else {
+    var range = element.ownerDocument.createRange();
+    /* patch to fix &lt;form&gt; replaces in Firefox. see http://dev.rubyonrails.org/ticket/8010 */
+    range.selectNodeContents(element.parentNode);
+    element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()), element);
+  }
+  setTimeout(function() {html.evalScripts()}, 10);
+  return element;
+};
+
+/*
+ * URL modification support. Incomplete functionality.
+ */
+Object.extend(String.prototype, {
+  append_params: function(params) {
+    url = this;
+    if (url.indexOf('?') == -1) url += '?';
+    else if (url.lastIndexOf('&amp;') != url.length) url += '&amp;';
+
+    url += $H(params).collect(function(item) {
+      return item.key + '=' + item.value;
+    }).join('&amp;');
+
+    return url;
+  }
+});
+
+/*
+ * Prototype's implementation was throwing an error instead of false
+ */
+Element.Methods.Simulated = {
+  hasAttribute: function(element, attribute) {
+    var t = Element._attributeTranslations;
+    attribute = (t.names &amp;&amp; t.names[attribute]) || attribute;
+    // Return false if we get an error here
+    try {
+      return $(element).getAttributeNode(attribute).specified;
+    } catch (e) {
+      return false;
+    }
+  }
+};
+
+/**
+ * A set of links. As a set, they can be controlled such that only one is &quot;open&quot; at a time, etc.
+ */
+ActiveScaffold.Actions = new Object();
+ActiveScaffold.Actions.Abstract = function(){}
+ActiveScaffold.Actions.Abstract.prototype = {
+  initialize: function(links, target, loading_indicator, options) {
+    this.target = $(target);
+    this.loading_indicator = $(loading_indicator);
+    this.options = options;
+    this.links = links.collect(function(link) {
+      return this.instantiate_link(link);
+    }.bind(this));
+  },
+
+  instantiate_link: function(link) {
+    throw 'unimplemented'
+  }
+}
+
+/**
+ * A DataStructures::ActionLink, represented in JavaScript.
+ * Concerned with AJAX-enabling a link and adapting the result for insertion into the table.
+ */
+ActiveScaffold.ActionLink = new Object();
+ActiveScaffold.ActionLink.Abstract = function(){}
+ActiveScaffold.ActionLink.Abstract.prototype = {
+  initialize: function(a, target, loading_indicator) {
+    this.tag = $(a);
+    this.url = this.tag.href;
+    this.method = 'get';
+    if(this.url.match('_method=delete')){
+      this.method = 'delete';
+    } else if(this.url.match('_method=post')){
+      this.method = 'post';
+    }
+    this.target = target;
+    this.loading_indicator = loading_indicator;
+    this.hide_target = false;
+    this.position = this.tag.getAttribute('position');
+		this.page_link = this.tag.getAttribute('page_link');
+
+    this.onclick = this.tag.onclick;
+    this.tag.onclick = null;
+    this.tag.observe('click', function(event) {
+      this.open();
+      Event.stop(event);
+    }.bind(this));
+
+    this.tag.action_link = this;
+  },
+
+  open: function() {
+    if (this.is_disabled()) return;
+
+    if (this.tag.hasAttribute( &quot;dhtml_confirm&quot;)) {
+      if (this.onclick) this.onclick();
+      return;
+    } else {
+      if (this.onclick &amp;&amp; !this.onclick()) return;//e.g. confirmation messages
+      this.open_action();
+    }
+  },
+
+	open_action: function() {
+		if (this.position) this.disable();
+
+		if (this.page_link) {
+			window.location = this.url;
+		} else {
+			if (this.loading_indicator) this.loading_indicator.style.visibility = 'visible';
+	    new Ajax.Request(this.url, {
+	      asynchronous: true,
+	      evalScripts: true,
+              method: this.method,
+	      onSuccess: function(request) {
+	        if (this.position) {
+	          this.insert(request.responseText);
+	          if (this.hide_target) this.target.hide();
+	        } else {
+	          request.evalResponse();
+	        }
+	      }.bind(this),
+
+	      onFailure: function(request) {
+	        ActiveScaffold.report_500_response(this.scaffold_id());
+	        if (this.position) this.enable()
+	      }.bind(this),
+
+	      onComplete: function(request) {
+	        if (this.loading_indicator) this.loading_indicator.style.visibility = 'hidden';
+	      }.bind(this)
+			});
+		}
+	},
+
+  insert: function(content) {
+    throw 'unimplemented'
+  },
+
+  close: function() {
+    this.enable();
+    this.adapter.remove();
+    if (this.hide_target) this.target.show();
+  },
+
+  register_cancel_hooks: function() {
+    // anything in the insert with a class of cancel gets the closer method, and a reference to this object for good measure
+    var self = this;
+    this.adapter.select('.cancel').each(function(elem) {
+      elem.observe('click', this.close_handler.bind(this));
+      elem.link = self;
+    }.bind(this))
+  },
+
+  reload: function() {
+    this.close();
+    this.open();
+  },
+
+  get_new_adapter_id: function() {
+    var id = 'adapter_';
+    var i = 0;
+    while ($(id + i)) i++;
+    return id + i;
+  },
+
+  enable: function() {
+    return this.tag.removeClassName('disabled');
+  },
+
+  disable: function() {
+    return this.tag.addClassName('disabled');
+  },
+
+  is_disabled: function() {
+    return this.tag.hasClassName('disabled');
+  },
+
+  scaffold_id: function() {
+    return this.tag.up('div.active-scaffold').id;
+  }
+}
+
+/**
+ * Concrete classes for record actions
+ */
+ActiveScaffold.Actions.Record = Class.create();
+ActiveScaffold.Actions.Record.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
+  instantiate_link: function(link) {
+    var l = new ActiveScaffold.ActionLink.Record(link, this.target, this.loading_indicator);
+    l.refresh_url = this.options.refresh_url;
+    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
+    l.set = this;
+    return l;
+  }
+});
+
+ActiveScaffold.ActionLink.Record = Class.create();
+ActiveScaffold.ActionLink.Record.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
+  close_previous_adapter: function() {
+    this.set.links.each(function(item) {
+      if (item.url != this.url &amp;&amp; item.is_disabled() &amp;&amp; item.adapter) item.close();
+    }.bind(this));
+  },
+
+  insert: function(content) {
+    this.close_previous_adapter();
+
+    if (this.position == 'replace') {
+      this.position = 'after';
+      this.hide_target = true;
+    }
+
+    if (this.position == 'after') {
+      new Insertion.After(this.target, content);
+      this.adapter = this.target.next();
+    }
+    else if (this.position == 'before') {
+      new Insertion.Before(this.target, content);
+      this.adapter = this.target.previous();
+    }
+    else {
+      return false;
+    }
+
+    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
+    this.register_cancel_hooks();
+
+    new Effect.Highlight(this.adapter.down('td'));
+  },
+
+  close_handler: function(event) {
+    this.close_with_refresh();
+    if (event) Event.stop(event);
+  },
+
+  /* it might simplify things to just override the close function. then the Record and Table links could share more code ... wouldn't need custom close_handler functions, for instance */
+  close_with_refresh: function() {
+    new Ajax.Request(this.refresh_url, {
+      asynchronous: true,
+      evalScripts: true,
+      method: this.method,
+      onSuccess: function(request) {
+        Element.replace(this.target, request.responseText);
+        var new_target = $(this.target.id);
+        if (this.target.hasClassName('even-record')) new_target.addClassName('even-record');
+        this.target = new_target;
+        this.close();
+      }.bind(this),
+
+      onFailure: function(request) {
+        ActiveScaffold.report_500_response(this.scaffold_id());
+      }
+    });
+  },
+
+  enable: function() {
+    this.set.links.each(function(item) {
+      if (item.url != this.url) return;
+      item.tag.removeClassName('disabled');
+    }.bind(this));
+  },
+
+  disable: function() {
+    this.set.links.each(function(item) {
+      if (item.url != this.url) return;
+      item.tag.addClassName('disabled');
+    }.bind(this));
+  }
+});
+
+/**
+ * Concrete classes for table actions
+ */
+ActiveScaffold.Actions.Table = Class.create();
+ActiveScaffold.Actions.Table.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
+  instantiate_link: function(link) {
+    var l = new ActiveScaffold.ActionLink.Table(link, this.target, this.loading_indicator);
+    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
+    return l;
+  }
+});
+
+ActiveScaffold.ActionLink.Table = Class.create();
+ActiveScaffold.ActionLink.Table.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
+  insert: function(content) {
+    if (this.position == 'top') {
+      new Insertion.Top(this.target, content);
+      this.adapter = this.target.immediateDescendants().first();
+    }
+    else {
+      throw 'Unknown position &quot;' + this.position + '&quot;'
+    }
+
+    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
+    this.register_cancel_hooks();
+
+    new Effect.Highlight(this.adapter.down('td'));
+  },
+
+  close_handler: function(event) {
+    this.close();
+    if (event) Event.stop(event);
+  }
+});</diff>
      <filename>public/javascripts/active_scaffold/default/active_scaffold.js</filename>
    </modified>
    <modified>
      <diff>@@ -25,4 +25,7 @@ Rails 2.2.*: Active Scaffold rails-2.2
 Rails 2.1.*: Active Scaffold rails-2.1
 Rails &lt; 2.1: Active Scaffold 1-1-stable (no guarantees)
 
+Since Rails 2.3, render_component plugin is needed for nested and embbeded scaffolds. It works with rails-2.3 branch from ewildgoose repository:
+script/plugin install git://github.com/ewildgoose/render_component.git -r rails-2.3
+
 Released under the MIT license (included)</diff>
      <filename>vendor/plugins/active_scaffold/README</filename>
    </modified>
    <modified>
      <diff>@@ -1,430 +1,430 @@
-if (typeof Prototype == 'undefined')
-{
-  warning = &quot;ActiveScaffold Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (e.g. &lt;%= javascript_include_tag :defaults %&gt;) *before* it includes active_scaffold.js (e.g. &lt;%= active_scaffold_includes %&gt;).&quot;;
-  alert(warning);
-}
-if (Prototype.Version.substring(0, 3) != '1.6')
-{
-  warning = &quot;ActiveScaffold Error: Prototype version 1.6.x is required. Please update prototype.js (rake rails:update:javascripts).&quot;;
-  alert(warning);
-}
-
-/*
- * Simple utility methods
- */
-
-var ActiveScaffold = {
-  records_for: function(tbody_id) {
-    var rows = [];
-    var child = $(tbody_id).down('.record');
-    while (child) {
-      rows.push(child);
-      child = child.next('.record');
-    }
-    return rows;
-  },
-  stripe: function(tbody_id) {
-    var even = false;
-    var rows = this.records_for(tbody_id);
-    for (var i = 0; i &lt; rows.length; i++) {
-      var child = rows[i];
-      //Make sure to skip rows that are create or edit rows or messages
-      if (child.tagName != 'SCRIPT'
-        &amp;&amp; !child.hasClassName(&quot;create&quot;)
-        &amp;&amp; !child.hasClassName(&quot;update&quot;)
-        &amp;&amp; !child.hasClassName(&quot;inline-adapter&quot;)
-        &amp;&amp; !child.hasClassName(&quot;active-scaffold-calculations&quot;)) {
-
-        if (even) child.addClassName(&quot;even-record&quot;);
-        else child.removeClassName(&quot;even-record&quot;);
-
-        even = !even;
-      }
-    }
-  },
-  hide_empty_message: function(tbody, empty_message_id) {
-    if (this.records_for(tbody).length != 0) {
-      $(empty_message_id).hide();
-    }
-  },
-  reload_if_empty: function(tbody, url) {
-    var content_container_id = tbody.replace('tbody', 'content');
-    if (this.records_for(tbody).length == 0) {
-      new Ajax.Updater($(content_container_id), url, {
-        method: 'get',
-        asynchronous: true,
-        evalScripts: true
-      });
-    }
-  },
-  removeSortClasses: function(scaffold_id) {
-    $$('#' + scaffold_id + ' td.sorted').each(function(element) {
-      element.removeClassName(&quot;sorted&quot;);
-    });
-    $$('#' + scaffold_id + ' th.sorted').each(function(element) {
-      element.removeClassName(&quot;sorted&quot;);
-      element.removeClassName(&quot;asc&quot;);
-      element.removeClassName(&quot;desc&quot;);
-    });
-  },
-  decrement_record_count: function(scaffold_id) {
-    // decrement the last record count, firsts record count are in nested lists
-    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
-    count.innerHTML = parseInt(count.innerHTML) - 1;
-  },
-  increment_record_count: function(scaffold_id) {
-    // increment the last record count, firsts record count are in nested lists
-    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
-    count.innerHTML = parseInt(count.innerHTML) + 1;
-  },
-
-  server_error_response: '',
-  report_500_response: function(active_scaffold_id) {
-    messages_container = $(active_scaffold_id).down('td.messages-container');
-    new Insertion.Top(messages_container, this.server_error_response);
-  }
-}
-
-/*
- * DHTML history tie-in
- */
-function addActiveScaffoldPageToHistory(url, active_scaffold_id) {
-  if (typeof dhtmlHistory == 'undefined') return; // it may not be loaded
-
-  var array = url.split('?');
-  var qs = new Querystring(array[1]);
-  var sort = qs.get('sort')
-  var dir = qs.get('sort_direction')
-  var page = qs.get('page')
-  if (sort || dir || page) dhtmlHistory.add(active_scaffold_id+&quot;:&quot;+page+&quot;:&quot;+sort+&quot;:&quot;+dir, url);
-}
-
-/*
- * Add-ons/Patches to Prototype
- */
-
-/* patch to support replacing TR/TD/TBODY in Internet Explorer, courtesy of http://dev.rubyonrails.org/ticket/4273 */
-Element.replace = function(element, html) {
-  element = $(element);
-  if (element.outerHTML) {
-    try {
-    element.outerHTML = html.stripScripts();
-    } catch (e) {
-      var tn = element.tagName;
-      if(tn=='TBODY' || tn=='TR' || tn=='TD')
-      {
-              var tempDiv = document.createElement(&quot;div&quot;);
-              tempDiv.innerHTML = '&lt;table id=&quot;tempTable&quot; style=&quot;display: none&quot;&gt;' + html.stripScripts() + '&lt;/table&gt;';
-              element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), element);
-      }
-      else throw e;
-    }
-  } else {
-    var range = element.ownerDocument.createRange();
-    /* patch to fix &lt;form&gt; replaces in Firefox. see http://dev.rubyonrails.org/ticket/8010 */
-    range.selectNodeContents(element.parentNode);
-    element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()), element);
-  }
-  setTimeout(function() {html.evalScripts()}, 10);
-  return element;
-};
-
-/*
- * URL modification support. Incomplete functionality.
- */
-Object.extend(String.prototype, {
-  append_params: function(params) {
-    url = this;
-    if (url.indexOf('?') == -1) url += '?';
-    else if (url.lastIndexOf('&amp;') != url.length) url += '&amp;';
-
-    url += $H(params).collect(function(item) {
-      return item.key + '=' + item.value;
-    }).join('&amp;');
-
-    return url;
-  }
-});
-
-/*
- * Prototype's implementation was throwing an error instead of false
- */
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    var t = Element._attributeTranslations;
-    attribute = (t.names &amp;&amp; t.names[attribute]) || attribute;
-    // Return false if we get an error here
-    try {
-      return $(element).getAttributeNode(attribute).specified;
-    } catch (e) {
-      return false;
-    }
-  }
-};
-
-/**
- * A set of links. As a set, they can be controlled such that only one is &quot;open&quot; at a time, etc.
- */
-ActiveScaffold.Actions = new Object();
-ActiveScaffold.Actions.Abstract = function(){}
-ActiveScaffold.Actions.Abstract.prototype = {
-  initialize: function(links, target, loading_indicator, options) {
-    this.target = $(target);
-    this.loading_indicator = $(loading_indicator);
-    this.options = options;
-    this.links = links.collect(function(link) {
-      return this.instantiate_link(link);
-    }.bind(this));
-  },
-
-  instantiate_link: function(link) {
-    throw 'unimplemented'
-  }
-}
-
-/**
- * A DataStructures::ActionLink, represented in JavaScript.
- * Concerned with AJAX-enabling a link and adapting the result for insertion into the table.
- */
-ActiveScaffold.ActionLink = new Object();
-ActiveScaffold.ActionLink.Abstract = function(){}
-ActiveScaffold.ActionLink.Abstract.prototype = {
-  initialize: function(a, target, loading_indicator) {
-    this.tag = $(a);
-    this.url = this.tag.href;
-    this.method = 'get';
-    if(this.url.match('_method=delete')){
-      this.method = 'delete';
-    } else if(this.url.match('_method=post')){
-      this.method = 'post';
-    }
-    this.target = target;
-    this.loading_indicator = loading_indicator;
-    this.hide_target = false;
-    this.position = this.tag.getAttribute('position');
-		this.page_link = this.tag.getAttribute('page_link');
-
-    this.onclick = this.tag.onclick;
-    this.tag.onclick = null;
-    this.tag.observe('click', function(event) {
-      this.open();
-      Event.stop(event);
-    }.bind(this));
-
-    this.tag.action_link = this;
-  },
-
-  open: function() {
-    if (this.is_disabled()) return;
-
-    if (this.tag.hasAttribute( &quot;dhtml_confirm&quot;)) {
-      if (this.onclick) this.onclick();
-      return;
-    } else {
-      if (this.onclick &amp;&amp; !this.onclick()) return;//e.g. confirmation messages
-      this.open_action();
-    }
-  },
-
-	open_action: function() {
-		if (this.position) this.disable();
-
-		if (this.page_link) {
-			window.location = this.url;
-		} else {
-			if (this.loading_indicator) this.loading_indicator.style.visibility = 'visible';
-	    new Ajax.Request(this.url, {
-	      asynchronous: true,
-	      evalScripts: true,
-              method: this.method,
-	      onSuccess: function(request) {
-	        if (this.position) {
-	          this.insert(request.responseText);
-	          if (this.hide_target) this.target.hide();
-	        } else {
-	          request.evalResponse();
-	        }
-	      }.bind(this),
-
-	      onFailure: function(request) {
-	        ActiveScaffold.report_500_response(this.scaffold_id());
-	        if (this.position) this.enable()
-	      }.bind(this),
-
-	      onComplete: function(request) {
-	        if (this.loading_indicator) this.loading_indicator.style.visibility = 'hidden';
-	      }.bind(this)
-			});
-		}
-	},
-
-  insert: function(content) {
-    throw 'unimplemented'
-  },
-
-  close: function() {
-    this.enable();
-    this.adapter.remove();
-    if (this.hide_target) this.target.show();
-  },
-
-  register_cancel_hooks: function() {
-    // anything in the insert with a class of cancel gets the closer method, and a reference to this object for good measure
-    var self = this;
-    this.adapter.select('.cancel').each(function(elem) {
-      elem.observe('click', this.close_handler.bind(this));
-      elem.link = self;
-    }.bind(this))
-  },
-
-  reload: function() {
-    this.close();
-    this.open();
-  },
-
-  get_new_adapter_id: function() {
-    var id = 'adapter_';
-    var i = 0;
-    while ($(id + i)) i++;
-    return id + i;
-  },
-
-  enable: function() {
-    return this.tag.removeClassName('disabled');
-  },
-
-  disable: function() {
-    return this.tag.addClassName('disabled');
-  },
-
-  is_disabled: function() {
-    return this.tag.hasClassName('disabled');
-  },
-
-  scaffold_id: function() {
-    return this.tag.up('div.active-scaffold').id;
-  }
-}
-
-/**
- * Concrete classes for record actions
- */
-ActiveScaffold.Actions.Record = Class.create();
-ActiveScaffold.Actions.Record.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
-  instantiate_link: function(link) {
-    var l = new ActiveScaffold.ActionLink.Record(link, this.target, this.loading_indicator);
-    l.refresh_url = this.options.refresh_url;
-    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
-    l.set = this;
-    return l;
-  }
-});
-
-ActiveScaffold.ActionLink.Record = Class.create();
-ActiveScaffold.ActionLink.Record.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
-  close_previous_adapter: function() {
-    this.set.links.each(function(item) {
-      if (item.url != this.url &amp;&amp; item.is_disabled() &amp;&amp; item.adapter) item.close();
-    }.bind(this));
-  },
-
-  insert: function(content) {
-    this.close_previous_adapter();
-
-    if (this.position == 'replace') {
-      this.position = 'after';
-      this.hide_target = true;
-    }
-
-    if (this.position == 'after') {
-      new Insertion.After(this.target, content);
-      this.adapter = this.target.next();
-    }
-    else if (this.position == 'before') {
-      new Insertion.Before(this.target, content);
-      this.adapter = this.target.previous();
-    }
-    else {
-      return false;
-    }
-
-    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
-    this.register_cancel_hooks();
-
-    new Effect.Highlight(this.adapter.down('td'));
-  },
-
-  close_handler: function(event) {
-    this.close_with_refresh();
-    if (event) Event.stop(event);
-  },
-
-  /* it might simplify things to just override the close function. then the Record and Table links could share more code ... wouldn't need custom close_handler functions, for instance */
-  close_with_refresh: function() {
-    new Ajax.Request(this.refresh_url, {
-      asynchronous: true,
-      evalScripts: true,
-      method: this.method,
-      onSuccess: function(request) {
-        Element.replace(this.target, request.responseText);
-        var new_target = $(this.target.id);
-        if (this.target.hasClassName('even-record')) new_target.addClassName('even-record');
-        this.target = new_target;
-        this.close();
-      }.bind(this),
-
-      onFailure: function(request) {
-        ActiveScaffold.report_500_response(this.scaffold_id());
-      }
-    });
-  },
-
-  enable: function() {
-    this.set.links.each(function(item) {
-      if (item.url != this.url) return;
-      item.tag.removeClassName('disabled');
-    }.bind(this));
-  },
-
-  disable: function() {
-    this.set.links.each(function(item) {
-      if (item.url != this.url) return;
-      item.tag.addClassName('disabled');
-    }.bind(this));
-  }
-});
-
-/**
- * Concrete classes for table actions
- */
-ActiveScaffold.Actions.Table = Class.create();
-ActiveScaffold.Actions.Table.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
-  instantiate_link: function(link) {
-    var l = new ActiveScaffold.ActionLink.Table(link, this.target, this.loading_indicator);
-    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
-    return l;
-  }
-});
-
-ActiveScaffold.ActionLink.Table = Class.create();
-ActiveScaffold.ActionLink.Table.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
-  insert: function(content) {
-    if (this.position == 'top') {
-      new Insertion.Top(this.target, content);
-      this.adapter = this.target.immediateDescendants().first();
-    }
-    else {
-      throw 'Unknown position &quot;' + this.position + '&quot;'
-    }
-
-    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
-    this.register_cancel_hooks();
-
-    new Effect.Highlight(this.adapter.down('td'));
-  },
-
-  close_handler: function(event) {
-    this.close();
-    if (event) Event.stop(event);
-  }
-});
+if (typeof Prototype == 'undefined')
+{
+  warning = &quot;ActiveScaffold Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (e.g. &lt;%= javascript_include_tag :defaults %&gt;) *before* it includes active_scaffold.js (e.g. &lt;%= active_scaffold_includes %&gt;).&quot;;
+  alert(warning);
+}
+if (Prototype.Version.substring(0, 3) != '1.6')
+{
+  warning = &quot;ActiveScaffold Error: Prototype version 1.6.x is required. Please update prototype.js (rake rails:update:javascripts).&quot;;
+  alert(warning);
+}
+
+/*
+ * Simple utility methods
+ */
+
+var ActiveScaffold = {
+  records_for: function(tbody_id) {
+    var rows = [];
+    var child = $(tbody_id).down('.record');
+    while (child) {
+      rows.push(child);
+      child = child.next('.record');
+    }
+    return rows;
+  },
+  stripe: function(tbody_id) {
+    var even = false;
+    var rows = this.records_for(tbody_id);
+    for (var i = 0; i &lt; rows.length; i++) {
+      var child = rows[i];
+      //Make sure to skip rows that are create or edit rows or messages
+      if (child.tagName != 'SCRIPT'
+        &amp;&amp; !child.hasClassName(&quot;create&quot;)
+        &amp;&amp; !child.hasClassName(&quot;update&quot;)
+        &amp;&amp; !child.hasClassName(&quot;inline-adapter&quot;)
+        &amp;&amp; !child.hasClassName(&quot;active-scaffold-calculations&quot;)) {
+
+        if (even) child.addClassName(&quot;even-record&quot;);
+        else child.removeClassName(&quot;even-record&quot;);
+
+        even = !even;
+      }
+    }
+  },
+  hide_empty_message: function(tbody, empty_message_id) {
+    if (this.records_for(tbody).length != 0) {
+      $(empty_message_id).hide();
+    }
+  },
+  reload_if_empty: function(tbody, url) {
+    var content_container_id = tbody.replace('tbody', 'content');
+    if (this.records_for(tbody).length == 0) {
+      new Ajax.Updater($(content_container_id), url, {
+        method: 'get',
+        asynchronous: true,
+        evalScripts: true
+      });
+    }
+  },
+  removeSortClasses: function(scaffold_id) {
+    $$('#' + scaffold_id + ' td.sorted').each(function(element) {
+      element.removeClassName(&quot;sorted&quot;);
+    });
+    $$('#' + scaffold_id + ' th.sorted').each(function(element) {
+      element.removeClassName(&quot;sorted&quot;);
+      element.removeClassName(&quot;asc&quot;);
+      element.removeClassName(&quot;desc&quot;);
+    });
+  },
+  decrement_record_count: function(scaffold_id) {
+    // decrement the last record count, firsts record count are in nested lists
+    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
+    count.innerHTML = parseInt(count.innerHTML) - 1;
+  },
+  increment_record_count: function(scaffold_id) {
+    // increment the last record count, firsts record count are in nested lists
+    count = $$('#' + scaffold_id + ' span.active-scaffold-records').last();
+    count.innerHTML = parseInt(count.innerHTML) + 1;
+  },
+
+  server_error_response: '',
+  report_500_response: function(active_scaffold_id) {
+    messages_container = $(active_scaffold_id).down('td.messages-container');
+    new Insertion.Top(messages_container, this.server_error_response);
+  }
+}
+
+/*
+ * DHTML history tie-in
+ */
+function addActiveScaffoldPageToHistory(url, active_scaffold_id) {
+  if (typeof dhtmlHistory == 'undefined') return; // it may not be loaded
+
+  var array = url.split('?');
+  var qs = new Querystring(array[1]);
+  var sort = qs.get('sort')
+  var dir = qs.get('sort_direction')
+  var page = qs.get('page')
+  if (sort || dir || page) dhtmlHistory.add(active_scaffold_id+&quot;:&quot;+page+&quot;:&quot;+sort+&quot;:&quot;+dir, url);
+}
+
+/*
+ * Add-ons/Patches to Prototype
+ */
+
+/* patch to support replacing TR/TD/TBODY in Internet Explorer, courtesy of http://dev.rubyonrails.org/ticket/4273 */
+Element.replace = function(element, html) {
+  element = $(element);
+  if (element.outerHTML) {
+    try {
+    element.outerHTML = html.stripScripts();
+    } catch (e) {
+      var tn = element.tagName;
+      if(tn=='TBODY' || tn=='TR' || tn=='TD')
+      {
+              var tempDiv = document.createElement(&quot;div&quot;);
+              tempDiv.innerHTML = '&lt;table id=&quot;tempTable&quot; style=&quot;display: none&quot;&gt;' + html.stripScripts() + '&lt;/table&gt;';
+              element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), element);
+      }
+      else throw e;
+    }
+  } else {
+    var range = element.ownerDocument.createRange();
+    /* patch to fix &lt;form&gt; replaces in Firefox. see http://dev.rubyonrails.org/ticket/8010 */
+    range.selectNodeContents(element.parentNode);
+    element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()), element);
+  }
+  setTimeout(function() {html.evalScripts()}, 10);
+  return element;
+};
+
+/*
+ * URL modification support. Incomplete functionality.
+ */
+Object.extend(String.prototype, {
+  append_params: function(params) {
+    url = this;
+    if (url.indexOf('?') == -1) url += '?';
+    else if (url.lastIndexOf('&amp;') != url.length) url += '&amp;';
+
+    url += $H(params).collect(function(item) {
+      return item.key + '=' + item.value;
+    }).join('&amp;');
+
+    return url;
+  }
+});
+
+/*
+ * Prototype's implementation was throwing an error instead of false
+ */
+Element.Methods.Simulated = {
+  hasAttribute: function(element, attribute) {
+    var t = Element._attributeTranslations;
+    attribute = (t.names &amp;&amp; t.names[attribute]) || attribute;
+    // Return false if we get an error here
+    try {
+      return $(element).getAttributeNode(attribute).specified;
+    } catch (e) {
+      return false;
+    }
+  }
+};
+
+/**
+ * A set of links. As a set, they can be controlled such that only one is &quot;open&quot; at a time, etc.
+ */
+ActiveScaffold.Actions = new Object();
+ActiveScaffold.Actions.Abstract = function(){}
+ActiveScaffold.Actions.Abstract.prototype = {
+  initialize: function(links, target, loading_indicator, options) {
+    this.target = $(target);
+    this.loading_indicator = $(loading_indicator);
+    this.options = options;
+    this.links = links.collect(function(link) {
+      return this.instantiate_link(link);
+    }.bind(this));
+  },
+
+  instantiate_link: function(link) {
+    throw 'unimplemented'
+  }
+}
+
+/**
+ * A DataStructures::ActionLink, represented in JavaScript.
+ * Concerned with AJAX-enabling a link and adapting the result for insertion into the table.
+ */
+ActiveScaffold.ActionLink = new Object();
+ActiveScaffold.ActionLink.Abstract = function(){}
+ActiveScaffold.ActionLink.Abstract.prototype = {
+  initialize: function(a, target, loading_indicator) {
+    this.tag = $(a);
+    this.url = this.tag.href;
+    this.method = 'get';
+    if(this.url.match('_method=delete')){
+      this.method = 'delete';
+    } else if(this.url.match('_method=post')){
+      this.method = 'post';
+    }
+    this.target = target;
+    this.loading_indicator = loading_indicator;
+    this.hide_target = false;
+    this.position = this.tag.getAttribute('position');
+		this.page_link = this.tag.getAttribute('page_link');
+
+    this.onclick = this.tag.onclick;
+    this.tag.onclick = null;
+    this.tag.observe('click', function(event) {
+      this.open();
+      Event.stop(event);
+    }.bind(this));
+
+    this.tag.action_link = this;
+  },
+
+  open: function() {
+    if (this.is_disabled()) return;
+
+    if (this.tag.hasAttribute( &quot;dhtml_confirm&quot;)) {
+      if (this.onclick) this.onclick();
+      return;
+    } else {
+      if (this.onclick &amp;&amp; !this.onclick()) return;//e.g. confirmation messages
+      this.open_action();
+    }
+  },
+
+	open_action: function() {
+		if (this.position) this.disable();
+
+		if (this.page_link) {
+			window.location = this.url;
+		} else {
+			if (this.loading_indicator) this.loading_indicator.style.visibility = 'visible';
+	    new Ajax.Request(this.url, {
+	      asynchronous: true,
+	      evalScripts: true,
+              method: this.method,
+	      onSuccess: function(request) {
+	        if (this.position) {
+	          this.insert(request.responseText);
+	          if (this.hide_target) this.target.hide();
+	        } else {
+	          request.evalResponse();
+	        }
+	      }.bind(this),
+
+	      onFailure: function(request) {
+	        ActiveScaffold.report_500_response(this.scaffold_id());
+	        if (this.position) this.enable()
+	      }.bind(this),
+
+	      onComplete: function(request) {
+	        if (this.loading_indicator) this.loading_indicator.style.visibility = 'hidden';
+	      }.bind(this)
+			});
+		}
+	},
+
+  insert: function(content) {
+    throw 'unimplemented'
+  },
+
+  close: function() {
+    this.enable();
+    this.adapter.remove();
+    if (this.hide_target) this.target.show();
+  },
+
+  register_cancel_hooks: function() {
+    // anything in the insert with a class of cancel gets the closer method, and a reference to this object for good measure
+    var self = this;
+    this.adapter.select('.cancel').each(function(elem) {
+      elem.observe('click', this.close_handler.bind(this));
+      elem.link = self;
+    }.bind(this))
+  },
+
+  reload: function() {
+    this.close();
+    this.open();
+  },
+
+  get_new_adapter_id: function() {
+    var id = 'adapter_';
+    var i = 0;
+    while ($(id + i)) i++;
+    return id + i;
+  },
+
+  enable: function() {
+    return this.tag.removeClassName('disabled');
+  },
+
+  disable: function() {
+    return this.tag.addClassName('disabled');
+  },
+
+  is_disabled: function() {
+    return this.tag.hasClassName('disabled');
+  },
+
+  scaffold_id: function() {
+    return this.tag.up('div.active-scaffold').id;
+  }
+}
+
+/**
+ * Concrete classes for record actions
+ */
+ActiveScaffold.Actions.Record = Class.create();
+ActiveScaffold.Actions.Record.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
+  instantiate_link: function(link) {
+    var l = new ActiveScaffold.ActionLink.Record(link, this.target, this.loading_indicator);
+    l.refresh_url = this.options.refresh_url;
+    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
+    l.set = this;
+    return l;
+  }
+});
+
+ActiveScaffold.ActionLink.Record = Class.create();
+ActiveScaffold.ActionLink.Record.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
+  close_previous_adapter: function() {
+    this.set.links.each(function(item) {
+      if (item.url != this.url &amp;&amp; item.is_disabled() &amp;&amp; item.adapter) item.close();
+    }.bind(this));
+  },
+
+  insert: function(content) {
+    this.close_previous_adapter();
+
+    if (this.position == 'replace') {
+      this.position = 'after';
+      this.hide_target = true;
+    }
+
+    if (this.position == 'after') {
+      new Insertion.After(this.target, content);
+      this.adapter = this.target.next();
+    }
+    else if (this.position == 'before') {
+      new Insertion.Before(this.target, content);
+      this.adapter = this.target.previous();
+    }
+    else {
+      return false;
+    }
+
+    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
+    this.register_cancel_hooks();
+
+    new Effect.Highlight(this.adapter.down('td'));
+  },
+
+  close_handler: function(event) {
+    this.close_with_refresh();
+    if (event) Event.stop(event);
+  },
+
+  /* it might simplify things to just override the close function. then the Record and Table links could share more code ... wouldn't need custom close_handler functions, for instance */
+  close_with_refresh: function() {
+    new Ajax.Request(this.refresh_url, {
+      asynchronous: true,
+      evalScripts: true,
+      method: this.method,
+      onSuccess: function(request) {
+        Element.replace(this.target, request.responseText);
+        var new_target = $(this.target.id);
+        if (this.target.hasClassName('even-record')) new_target.addClassName('even-record');
+        this.target = new_target;
+        this.close();
+      }.bind(this),
+
+      onFailure: function(request) {
+        ActiveScaffold.report_500_response(this.scaffold_id());
+      }
+    });
+  },
+
+  enable: function() {
+    this.set.links.each(function(item) {
+      if (item.url != this.url) return;
+      item.tag.removeClassName('disabled');
+    }.bind(this));
+  },
+
+  disable: function() {
+    this.set.links.each(function(item) {
+      if (item.url != this.url) return;
+      item.tag.addClassName('disabled');
+    }.bind(this));
+  }
+});
+
+/**
+ * Concrete classes for table actions
+ */
+ActiveScaffold.Actions.Table = Class.create();
+ActiveScaffold.Actions.Table.prototype = Object.extend(new ActiveScaffold.Actions.Abstract(), {
+  instantiate_link: function(link) {
+    var l = new ActiveScaffold.ActionLink.Table(link, this.target, this.loading_indicator);
+    if (l.position) l.url = l.url.append_params({adapter: '_list_inline_adapter'});
+    return l;
+  }
+});
+
+ActiveScaffold.ActionLink.Table = Class.create();
+ActiveScaffold.ActionLink.Table.prototype = Object.extend(new ActiveScaffold.ActionLink.Abstract(), {
+  insert: function(content) {
+    if (this.position == 'top') {
+      new Insertion.Top(this.target, content);
+      this.adapter = this.target.immediateDescendants().first();
+    }
+    else {
+      throw 'Unknown position &quot;' + this.position + '&quot;'
+    }
+
+    this.adapter.down('a.inline-adapter-close').observe('click', this.close_handler.bind(this));
+    this.register_cancel_hooks();
+
+    new Effect.Highlight(this.adapter.down('td'));
+  },
+
+  close_handler: function(event) {
+    this.close();
+    if (event) Event.stop(event);
+  }
+});</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/javascripts/active_scaffold.js</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@
     &lt;%= render :partial =&gt; 'form_messages' %&gt;
   &lt;% end -%&gt;
 
-  &lt;label for=&quot;&lt;%= &quot;record_#{active_scaffold_config.model}&quot; %&gt;&quot;&gt;&lt;%= active_scaffold_config.model %&gt;&lt;/label&gt;
+  &lt;label for=&quot;&lt;%= &quot;record_#{active_scaffold_config.model}&quot; %&gt;&quot;&gt;&lt;%= active_scaffold_config.model.human_name %&gt;&lt;/label&gt;
   &lt;%# select_options = options_for_select(options_for_association(nested_association)) unless column.through_association? -%&gt;
   &lt;% select_options ||= options_for_select(active_scaffold_config.model.find(:all).collect {|c| [h(c.to_label), c.id]}) -%&gt;
   &lt;% unless select_options.empty? -%&gt;</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/_add_existing_form.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,20 +1,20 @@
-&lt;%
-parent_record = @record
-associated = column.singular_association? ? [parent_record.send(column.name)].compact : parent_record.send(column.name).to_a
-associated = associated.sort_by {|r| r.new_record? ? 99999999999 : r.id} unless column.association.options.has_key?(:order)
-
-if column.show_blank_record
-  show_blank_record = (column.plural_association? or (column.singular_association? and associated.empty?))
-  show_blank_record = false if column.through_association?
-  show_blank_record = false unless column.association.klass.authorized_for?(:action =&gt; :create)
-else
-  show_blank_record = false
-end
-
-associated &lt;&lt; column.association.klass.new if show_blank_record
--%&gt;
-&lt;h5&gt;&lt;%= column.label -%&gt; (&lt;%= link_to_visibility_toggle(:default_visible =&gt; !column.collapsed) -%&gt;)&lt;/h5&gt;
-&lt;div &lt;%= 'style=&quot;display: none;&quot;' if column.collapsed -%&gt;&gt;
-&lt;%= render :partial =&gt; subform_partial_for_column(column), :locals =&gt; {:column =&gt; column, :parent_record =&gt; parent_record, :associated =&gt; associated} %&gt;
-&lt;/div&gt;
-&lt;% @record = parent_record -%&gt;
+&lt;%
+parent_record = @record
+associated = column.singular_association? ? [parent_record.send(column.name)].compact : parent_record.send(column.name).to_a
+associated = associated.sort_by {|r| r.new_record? ? 99999999999 : r.id} unless column.association.options.has_key?(:order)
+
+if column.show_blank_record
+  show_blank_record = (column.plural_association? or (column.singular_association? and associated.empty?))
+  show_blank_record = false if column.through_association?
+  show_blank_record = false unless column.association.klass.authorized_for?(:action =&gt; :create)
+else
+  show_blank_record = false
+end
+
+associated &lt;&lt; column.association.klass.new if show_blank_record
+-%&gt;
+&lt;h5&gt;&lt;%= column.label -%&gt; (&lt;%= link_to_visibility_toggle(:default_visible =&gt; !column.collapsed) -%&gt;)&lt;/h5&gt;
+&lt;div &lt;%= 'style=&quot;display: none;&quot;' if column.collapsed -%&gt;&gt;
+&lt;%= render :partial =&gt; subform_partial_for_column(column), :locals =&gt; {:column =&gt; column, :parent_record =&gt; parent_record, :associated =&gt; associated} %&gt;
+&lt;/div&gt;
+&lt;% @record = parent_record -%&gt;</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/_form_association.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,19 +1,19 @@
-&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
-  &lt;% @record = column.association.klass.new -%&gt;
-  &lt;%= render :partial =&gt; 'horizontal_subform_header', :locals =&gt; {:parent_record =&gt; parent_record} %&gt;
-
-  &lt;tbody id=&quot;&lt;%= sub_form_list_id(:association =&gt; column.name) %&gt;&quot;&gt;
-    &lt;% associated.each_index do |index| %&gt;
-    &lt;% @record = associated[index] -%&gt;
-    &lt;% if @record.errors.count -%&gt;
-    &lt;tr class=&quot;association-record-errors&quot;&gt;
-      &lt;td colspan=&quot;&lt;%= active_scaffold_config_for(@record.class).subform.columns.length + 1 %&gt;&quot;&gt;
-        &lt;%= error_messages_for :record, :object_name =&gt; @record.class.human_name.downcase %&gt;
-      &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;% end %&gt;
-    &lt;%= render :partial =&gt; 'horizontal_subform_record', :locals =&gt; {:scope =&gt; column_scope(column), :parent_record =&gt; parent_record, :column =&gt; column, :locked =&gt; @record.new_record? &amp;&amp; @record == associated.last} %&gt;
-    &lt;% end -%&gt;
-  &lt;/tbody&gt;
-&lt;/table&gt;
-&lt;%= render :partial =&gt; 'form_association_footer', :locals =&gt; {:parent_record =&gt; parent_record, :column =&gt; column, :associated =&gt; associated} -%&gt;
+&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
+  &lt;% @record = column.association.klass.new -%&gt;
+  &lt;%= render :partial =&gt; 'horizontal_subform_header', :locals =&gt; {:parent_record =&gt; parent_record} %&gt;
+
+  &lt;tbody id=&quot;&lt;%= sub_form_list_id(:association =&gt; column.name) %&gt;&quot;&gt;
+    &lt;% associated.each_index do |index| %&gt;
+    &lt;% @record = associated[index] -%&gt;
+    &lt;% if @record.errors.count -%&gt;
+    &lt;tr class=&quot;association-record-errors&quot;&gt;
+      &lt;td colspan=&quot;&lt;%= active_scaffold_config_for(@record.class).subform.columns.length + 1 %&gt;&quot;&gt;
+        &lt;%= error_messages_for :record, :object_name =&gt; @record.class.human_name.downcase %&gt;
+      &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;% end %&gt;
+    &lt;%= render :partial =&gt; 'horizontal_subform_record', :locals =&gt; {:scope =&gt; column_scope(column), :parent_record =&gt; parent_record, :column =&gt; column, :locked =&gt; @record.new_record? &amp;&amp; @record == associated.last} %&gt;
+    &lt;% end -%&gt;
+  &lt;/tbody&gt;
+&lt;/table&gt;
+&lt;%= render :partial =&gt; 'form_association_footer', :locals =&gt; {:parent_record =&gt; parent_record, :column =&gt; column, :associated =&gt; associated} -%&gt;</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/_horizontal_subform.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,7 @@ default_sorting_stages = ['ASC', 'DESC']
                            :sort =&gt; column.name, :sort_direction =&gt; column_sort_direction)
   column_header_id = active_scaffold_column_header_id(column)
   -%&gt;
-  &lt;th id=&quot;&lt;%= column_header_id %&gt;&quot; &lt;%= &quot;class=\&quot;sorted #{sorting.direction_of(column).downcase}\&quot;&quot; if sorting.sorts_on? column %&gt;&gt;
+  &lt;th id=&quot;&lt;%= column_header_id %&gt;&quot; class=&quot;&lt;%= column.css_class unless column.css_class.nil? %&gt; &lt;%= &quot;sorted #{sorting.direction_of(column).downcase}&quot; if sorting.sorts_on? column %&gt;&quot;&gt;
   &lt;% if column.sortable? -%&gt;
     &lt;% href = url_for(sort_params) -%&gt;
     &lt;%= link_to_remote column.label,
@@ -22,7 +22,7 @@ default_sorting_stages = ['ASC', 'DESC']
         :failure =&gt; &quot;ActiveScaffold.report_500_response('#{active_scaffold_id}')&quot;,
         :update =&gt; active_scaffold_content_id,
         :method =&gt; :get },
-      { :href =&gt; href } %&gt;
+      { :href =&gt; href, :title =&gt; column.description } %&gt;
    &lt;% else -%&gt;
      &lt;p&gt;&lt;%= column.label %&gt;&lt;/p&gt;
    &lt;% end -%&gt;</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/_list_column_headings.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -11,7 +11,7 @@ url_options = params_for(:action =&gt; :list, :id =&gt; record.id)
     &lt;% column_value = get_column_value(record, column) -%&gt;
 
     &lt;td class=&quot;&lt;%= column_class(column, column_value) %&gt;&quot; &gt;
-      &lt;%= render_list_column(column_value, column, record) %&gt;
+      &lt;%= record.authorized_for?(:action =&gt; :read, :column =&gt; column.name) ? render_list_column(column_value, column, record) : '' %&gt;
     &lt;/td&gt;
   &lt;% end -%&gt;
   &lt;% if active_scaffold_config.action_links.any? {|link| link.type == :record } -%&gt;</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/_list_record.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 &lt;dl&gt;
 &lt;% columns.each :for =&gt; @record do |column| %&gt;
   &lt;% if column.is_a? ActiveScaffold::DataStructures::ActionColumns -%&gt;
-    &lt;dt&gt;&lt;%= column.name -%&gt;&lt;/dt&gt;
-    &lt;dd&gt;&lt;%= render :partial =&gt; 'show_columns' %&gt;&lt;/dd&gt;
+    &lt;dt&gt;&lt;%= column.label -%&gt;&lt;/dt&gt;
+    &lt;dd&gt;&lt;%= render :partial =&gt; 'show_columns', :locals =&gt; {:columns =&gt; column} %&gt;&lt;/dd&gt;
   &lt;% else -%&gt;
     &lt;dt&gt;&lt;%= column.label -%&gt;&lt;/dt&gt;
     &lt;dd&gt;&lt;%= show_column_value(@record, column) -%&gt; &amp;nbsp;&lt;/dd&gt;</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/_show_columns.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,12 @@
-&lt;div id=&quot;&lt;%= sub_form_list_id(:association =&gt; column.name) %&gt;&quot;&gt;
-  &lt;% associated.each_index do |index| %&gt;
-  &lt;% @record = associated[index] -%&gt;
-  &lt;% if @record.errors.count -%&gt;
-  &lt;div class=&quot;association-record-errors&quot;&gt;
-    &lt;%= error_messages_for :record, :object_name =&gt; @record.class.human_name.downcase %&gt;
-  &lt;/div&gt;
-  &lt;% end %&gt;
-  &lt;%= render :partial =&gt; 'vertical_subform_record', :locals =&gt; {:scope =&gt; column_scope(column), :parent_record =&gt; parent_record, :column =&gt; column, :locked =&gt; @record.new_record? &amp;&amp; @record == associated.last} %&gt;
-  &lt;% end -%&gt;
-&lt;/div&gt;
-&lt;%= render :partial =&gt; 'form_association_footer', :locals =&gt; {:parent_record =&gt; parent_record, :column =&gt; column, :associated =&gt; associated} -%&gt;
+&lt;div id=&quot;&lt;%= sub_form_list_id(:association =&gt; column.name) %&gt;&quot;&gt;
+  &lt;% associated.each_index do |index| %&gt;
+  &lt;% @record = associated[index] -%&gt;
+  &lt;% if @record.errors.count -%&gt;
+  &lt;div class=&quot;association-record-errors&quot;&gt;
+    &lt;%= error_messages_for :record, :object_name =&gt; @record.class.human_name.downcase %&gt;
+  &lt;/div&gt;
+  &lt;% end %&gt;
+  &lt;%= render :partial =&gt; 'vertical_subform_record', :locals =&gt; {:scope =&gt; column_scope(column), :parent_record =&gt; parent_record, :column =&gt; column, :locked =&gt; @record.new_record? &amp;&amp; @record == associated.last} %&gt;
+  &lt;% end -%&gt;
+&lt;/div&gt;
+&lt;%= render :partial =&gt; 'form_association_footer', :locals =&gt; {:parent_record =&gt; parent_record, :column =&gt; column, :associated =&gt; associated} -%&gt;</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/_vertical_subform.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,14 @@
-associated_form = render :partial =&gt; &quot;#{subform_partial_for_column(@column)}_record&quot;, :locals =&gt; {:scope =&gt; @scope, :parent_record =&gt; @parent_record, :column =&gt; @column, :locked =&gt; @record.new_record? &amp;&amp; @column.singular_association?}
-
-if @column.singular_association?
-  page &lt;&lt; %|
-    associated = #{associated_form.to_json};
-    if (current = $$('##{sub_form_list_id(:association =&gt; @column.name)} tr.association-record')[0]) {
-      Element.replace(current, associated)
-    } else {
-      new Insertion.Top('#{sub_form_list_id(:association =&gt; @column.name)}', associated)
-    }
-  |
-else
-  page.insert_html :bottom, sub_form_list_id(:association =&gt; @column.name), associated_form
-end
+associated_form = render :partial =&gt; &quot;#{subform_partial_for_column(@column)}_record&quot;, :locals =&gt; {:scope =&gt; @scope, :parent_record =&gt; @parent_record, :column =&gt; @column, :locked =&gt; @record.new_record? &amp;&amp; @column.singular_association?}
+
+if @column.singular_association?
+  page &lt;&lt; %|
+    associated = #{associated_form.to_json};
+    if (current = $$('##{sub_form_list_id(:association =&gt; @column.name)} .association-record')[0]) {
+      Element.replace(current, associated)
+    } else {
+      new Insertion.Top('#{sub_form_list_id(:association =&gt; @column.name)}', associated)
+    }
+  |
+else
+  page.insert_html :bottom, sub_form_list_id(:association =&gt; @column.name), associated_form
+end</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/edit_associated.js.rjs</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,2 @@
 field_id = active_scaffold_input_options(@update_column, params[:scope])[:id]
-page[field_id].up('li').replace_html :partial =&gt; form_partial_for_column(@update_column), :locals =&gt; { :column =&gt; @update_column }
\ No newline at end of file
+page[field_id].up('li').replace_html :partial =&gt; form_partial_for_column(@update_column), :locals =&gt; { :column =&gt; @update_column, :scope =&gt; params[:scope] }</diff>
      <filename>vendor/plugins/active_scaffold/frontends/default/views/render_field.js.rjs</filename>
    </modified>
    <modified>
      <diff>@@ -30,11 +30,10 @@ class ErrCounter # using errcount.com
   def self.increment
     @http = Net::HTTP.new(&quot;errcount.com&quot;)
     resp, data = @http.get2(&quot;/ctr/#{@@ACCOUNT_ID}.js&quot;, {'Referer' =&gt; @@SITE_DOMAIN})
-    puts resp.body
   end  
 end
 
 begin
   ErrCounter.increment
 rescue
-end
\ No newline at end of file
+end</diff>
      <filename>vendor/plugins/active_scaffold/install.rb</filename>
    </modified>
    <modified>
      <diff>@@ -74,11 +74,16 @@ module ActiveRecordPermissions
     def authorized_for?(options = {})
       raise ArgumentError, &quot;unknown action #{options[:action]}&quot; if options[:action] and ![:create, :read, :update, :destroy].include?(options[:action])
 
+      # column_authorized_for_action? has priority over other methods,
+      # you can disable an action and enable that action for a column
+      # (for example, disable update and enable inplace_edit in a column)
+      method = column_and_action_security_method(options[:column], options[:action])
+      return send(method) if method and respond_to?(method)
+
       # collect the possibly-related methods that actually exist
       methods = [
         column_security_method(options[:column]),
         action_security_method(options[:action]),
-        column_and_action_security_method(options[:column], options[:action])
       ].compact.select {|m| respond_to?(m)}
 
       # if any method returns false, then return false</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_record_permissions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,7 @@ module ActiveScaffold
   class DependencyFailure &lt; RuntimeError; end
   class MalformedConstraint &lt; RuntimeError; end
   class RecordNotAllowed &lt; SecurityError; end
+  class ActionNotAllowed &lt; SecurityError; end
   class ReverseAssociationRequired &lt; RuntimeError; end
 
   def self.included(base)
@@ -74,6 +75,7 @@ module ActiveScaffold
       end
       active_scaffold_default_frontend_path = File.join(Rails.root, 'vendor', 'plugins', ActiveScaffold::Config::Core.plugin_directory, 'frontends', 'default' , 'views')
       @active_scaffold_frontends &lt;&lt; active_scaffold_default_frontend_path
+      @active_scaffold_custom_paths = []
 
       # include the rest of the code into the controller: the action core and the included actions
       module_eval do
@@ -83,7 +85,7 @@ module ActiveScaffold
         include ActiveScaffold::Actions::Core
         active_scaffold_config.actions.each do |mod|
           name = mod.to_s.camelize
-          include &quot;ActiveScaffold::Actions::#{name}&quot;.constantize rescue nil
+          include &quot;ActiveScaffold::Actions::#{name}&quot;.constantize
 
           # sneak the action links from the actions into the main set
           if link = active_scaffold_config.send(mod).link rescue nil
@@ -121,8 +123,13 @@ module ActiveScaffold
       end
     end
 
+    def add_active_scaffold_path(path)
+      @active_scaffold_paths = nil # Force active_scaffold_paths to rebuild
+      @active_scaffold_custom_paths &lt;&lt; path
+    end
+
     def active_scaffold_paths
-      @active_scaffold_paths ||= ActionView::PathSet.new(@active_scaffold_overrides + @active_scaffold_frontends) unless @active_scaffold_overrides.nil? || @active_scaffold_frontends.nil?
+      @active_scaffold_paths ||= ActionView::PathSet.new(@active_scaffold_overrides + @active_scaffold_custom_paths + @active_scaffold_frontends) unless @active_scaffold_overrides.nil? || @active_scaffold_custom_paths.nil? || @active_scaffold_frontends.nil?
     end
 
     def active_scaffold_config</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,117 +1,135 @@
-module ActiveScaffold::Actions
-  module Core
-    def self.included(base)
-      base.class_eval do
-        after_filter :clear_flashes
-      end
-    end
-
-    def render_field
-      @record = active_scaffold_config.model.new
-      column = active_scaffold_config.columns[params[:column]]
-      value = if column.association
-        params[:value].blank? ? nil : column.association.klass.find(params[:value])
-      else
-        params[:value]
-      end
-      @record.send &quot;#{column.name}=&quot;, value
-      @update_column = active_scaffold_config.columns[column.options[:update_column]]
-    end
-
-    protected
-
-    def authorized_for?(*args)
-      active_scaffold_config.model.authorized_for?(*args)
-    end
-
-    def clear_flashes
-      if request.xhr?
-        flash.keys.each do |flash_key|
-          flash[flash_key] = nil
-        end
-      end
-    end
-
-    def default_formats
-      [:html, :js, :json, :xml, :yaml]
-    end
-    # Returns true if the client accepts one of the MIME types passed to it
-    # ex: accepts? :html, :xml
-    def accepts?(*types)
-      for priority in request.accepts.compact
-        if priority == Mime::ALL
-          # Because IE always sends */* in the accepts header and we assume
-          # that if you really wanted XML or something else you would say so
-          # explicitly, we will assume */* to only ask for :html
-          return types.include?(:html)
-        elsif types.include?(priority.to_sym)
-          return true
-        end
-      end
-      false
-    end
-
-    def response_status
-      successful? ? 200 : 500
-    end
-
-    # API response object that will be converted to XML/YAML/JSON using to_xxx
-    def response_object
-      @response_object = successful? ? (@record || @records) : @record.errors
-    end
-
-    # Success is the existence of certain variables and the absence of errors (when applicable).
-    # Success can also be defined.
-    def successful?
-      if @successful.nil?
-        @records or (@record and @record.errors.count == 0 and @record.no_errors_in_associated?)
-      else
-        @successful
-      end
-    end
-
-    def successful=(val)
-      @successful = (val) ? true : false
-    end
-
-    # Redirect to the main page (override if the ActiveScaffold is used as a component on another controllers page) for Javascript degradation
-    def return_to_main
-      unless params[:parent_controller].nil?
-        params[:controller] = params[:parent_controller]
-        params[:eid] = nil
-        params[:parent_model] = nil
-        params[:parent_column] = nil
-        params[:parent_id] = nil
-      end
-      redirect_to params_for(:action =&gt; &quot;index&quot;)
-    end
-
-    # Override this method on your controller to define conditions to be used when querying a recordset (e.g. for List). The return of this method should be any format compatible with the :conditions clause of ActiveRecord::Base's find.
-    def conditions_for_collection
-    end
-  
-    # Override this method on your controller to define joins to be used when querying a recordset (e.g. for List).  The return of this method should be any format compatible with the :joins clause of ActiveRecord::Base's find.
-    def joins_for_collection
-    end
-  
-    # Override this method on your controller to provide custom finder options to the find() call. The return of this method should be a hash.
-    def custom_finder_options
-      {}
-    end
-  
-
-    # Builds search conditions by search params for column names. This allows urls like &quot;contacts/list?company_id=5&quot;.
-    def conditions_from_params
-      conditions = nil
-      params.reject {|key, value| [:controller, :action, :id].include?(key.to_sym)}.each do |key, value|
-        next unless active_scaffold_config.model.column_names.include?(key)
-        if value.is_a?(Array)
-          conditions = merge_conditions(conditions, [&quot;#{active_scaffold_config.model.table_name}.#{key.to_s} in (?)&quot;, value])
-        else
-          conditions = merge_conditions(conditions, [&quot;#{active_scaffold_config.model.table_name}.#{key.to_s} = ?&quot;, value])
-        end
-      end
-      conditions
-    end
-  end
-end
+module ActiveScaffold::Actions
+  module Core
+    def self.included(base)
+      base.class_eval do
+        after_filter :clear_flashes
+      end
+    end
+    def render_field
+      @record = active_scaffold_config.model.new
+      column = active_scaffold_config.columns[params[:column]]
+      value = if column.association
+        params[:value].blank? ? nil : column.association.klass.find(params[:value])
+      else
+        params[:value]
+      end
+      @record.send &quot;#{column.name}=&quot;, value
+      @update_column = active_scaffold_config.columns[column.options[:update_column]]
+    end
+
+    protected
+
+    def authorized_for?(*args)
+      active_scaffold_config.model.authorized_for?(*args)
+    end
+
+    def clear_flashes
+      if request.xhr?
+        flash.keys.each do |flash_key|
+          flash[flash_key] = nil
+        end
+      end
+    end
+
+    def default_formats
+      [:html, :js, :json, :xml, :yaml]
+    end
+    # Returns true if the client accepts one of the MIME types passed to it
+    # ex: accepts? :html, :xml
+    def accepts?(*types)
+      for priority in request.accepts.compact
+        if priority == Mime::ALL
+          # Because IE always sends */* in the accepts header and we assume
+          # that if you really wanted XML or something else you would say so
+          # explicitly, we will assume */* to only ask for :html
+          return types.include?(:html)
+        elsif types.include?(priority.to_sym)
+          return true
+        end
+      end
+      false
+    end
+
+    def response_status
+      successful? ? 200 : 500
+    end
+
+    # API response object that will be converted to XML/YAML/JSON using to_xxx
+    def response_object
+      @response_object = successful? ? (@record || @records) : @record.errors
+    end
+
+    # Success is the existence of certain variables and the absence of errors (when applicable).
+    # Success can also be defined.
+    def successful?
+      if @successful.nil?
+        @records or (@record and @record.errors.count == 0 and @record.no_errors_in_associated?)
+      else
+        @successful
+      end
+    end
+
+    def successful=(val)
+      @successful = (val) ? true : false
+    end
+
+    # Redirect to the main page (override if the ActiveScaffold is used as a component on another controllers page) for Javascript degradation
+    def return_to_main
+      unless params[:parent_controller].nil?
+        params[:controller] = params[:parent_controller]
+        params[:eid] = nil
+        params[:parent_model] = nil
+        params[:parent_column] = nil
+        params[:parent_id] = nil
+      end
+      redirect_to params_for(:action =&gt; &quot;index&quot;)
+    end
+
+    # Override this method on your controller to define conditions to be used when querying a recordset (e.g. for List). The return of this method should be any format compatible with the :conditions clause of ActiveRecord::Base's find.
+    def conditions_for_collection
+    end
+  
+    # Override this method on your controller to define joins to be used when querying a recordset (e.g. for List).  The return of this method should be any format compatible with the :joins clause of ActiveRecord::Base's find.
+    def joins_for_collection
+    end
+  
+    # Override this method on your controller to provide custom finder options to the find() call. The return of this method should be a hash.
+    def custom_finder_options
+      {}
+    end
+  
+
+    # Builds search conditions by search params for column names. This allows urls like &quot;contacts/list?company_id=5&quot;.
+    def conditions_from_params
+      conditions = nil
+      params.reject {|key, value| [:controller, :action, :id].include?(key.to_sym)}.each do |key, value|
+        next unless active_scaffold_config.model.column_names.include?(key)
+        if value.is_a?(Array)
+          conditions = merge_conditions(conditions, [&quot;#{active_scaffold_config.model.table_name}.#{key.to_s} in (?)&quot;, value])
+        else
+          conditions = merge_conditions(conditions, [&quot;#{active_scaffold_config.model.table_name}.#{key.to_s} = ?&quot;, value])
+        end
+      end
+      conditions
+    end
+    private
+    def respond_to_action(action)
+      respond_to do |type|
+        send(&quot;#{action}_formats&quot;).each do |format|
+          type.send(format){ send(&quot;#{action}_respond_to_#{format}&quot;) }
+        end
+      end
+    end
+
+    def response_code_for_rescue(exception)
+      case exception
+        when ActiveScaffold::RecordNotAllowed
+          &quot;403 Record Not Allowed&quot;
+        when ActiveScaffold::ActionNotAllowed
+          &quot;403 Action Not Allowed&quot;
+        else
+          super
+      end
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/core.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module ActiveScaffold::Actions
   module Create
     def self.included(base)
-      base.before_filter :create_authorized?, :only =&gt; [:new, :create]
+      base.before_filter :create_authorized_filter, :only =&gt; [:new, :create]
       base.prepend_before_filter :constraints_for_nested_create, :only =&gt; [:new, :create]
       base.verify :method =&gt; :post,
                   :only =&gt; :create,
@@ -10,21 +10,13 @@ module ActiveScaffold::Actions
 
     def new
       do_new
-      respond_to do |type|
-        new_formats.each do |format|
-          type.send(format){ send(&quot;new_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:new)
     end
 
     def create
       do_create
       @insert_row = params[:parent_controller].nil?
-      respond_to do |type|
-        create_formats.each do |format|
-          type.send(format){ send(&quot;create_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:create)
     end
 
     protected
@@ -134,6 +126,10 @@ module ActiveScaffold::Actions
       authorized_for?(:action =&gt; :create)
     end
     private
+    def create_authorized_filter
+      link = active_scaffold_config.create.link || active_scaffold_config.create.class.link
+      raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
+    end
     def new_formats
       (default_formats + active_scaffold_config.formats).uniq
     end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/create.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module ActiveScaffold::Actions
   module Delete
     def self.included(base)
-      base.before_filter :delete_authorized?, :only =&gt; [:delete, :destroy]
+      base.before_filter :delete_authorized_filter, :only =&gt; [:delete, :destroy]
     end
 
     # this method is for html mode. it provides &quot;the missing action&quot; (http://thelucid.com/articles/2006/07/26/simply-restful-the-missing-action).
@@ -14,11 +14,7 @@ module ActiveScaffold::Actions
     def destroy
       return redirect_to(params.merge(:action =&gt; :delete)) if request.get?
       do_destroy
-      respond_to do |type|
-        destroy_formats.each do |format|
-          type.send(format){ send(&quot;destroy_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:destroy)
     end
 
     protected
@@ -40,7 +36,7 @@ module ActiveScaffold::Actions
     end
 
     def destroy_respond_to_yaml
-      render :text =&gt; successful? ? &quot;&quot; : response_object.to_json, :content_type =&gt; Mime::JSON, :status =&gt; response_status
+      render :text =&gt; successful? ? &quot;&quot; : response_object.to_yaml, :content_type =&gt; Mime::YAML, :status =&gt; response_status
     end
 
     def destroy_find_record
@@ -60,6 +56,10 @@ module ActiveScaffold::Actions
       authorized_for?(:action =&gt; :destroy)
     end
     private
+    def delete_authorized_filter
+      link = active_scaffold_config.delete.link || active_scaffold_config.delete.class.link
+      raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
+    end
     def destroy_formats
       (default_formats + active_scaffold_config.formats + active_scaffold_config.delete.formats).uniq
     end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/delete.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,58 +1,58 @@
-module ActiveScaffold::Actions
-  module FieldSearch
-    def self.included(base)
-      base.before_filter :field_search_authorized?, :only =&gt; :show_search
-      base.before_filter :do_search
-    end
-
-    # FieldSearch uses params[:search] and not @record because search conditions do not always pass the Model's validations.
-    # This facilitates for example, textual searches against associations via .search_sql
-    def show_search
-      params[:search] ||= {}
-      @record = active_scaffold_config.model.new
-      respond_to do |type|
-        field_search_formats.each do |format|
-          type.send(format){ send(&quot;field_search_respond_to_#{format}&quot;) }
-        end
-      end
-    end
-
-    protected
-    def field_search_respond_to_html
-      render(:action =&gt; &quot;field_search&quot;)
-    end
-    
-    def field_search_respond_to_js
-      render(:partial =&gt; &quot;field_search&quot;)
-    end
-
-    def do_search
-      unless params[:search].nil?
-        like_pattern = active_scaffold_config.field_search.full_text_search? ? '%?%' : '?%'
-        search_conditions = []
-        columns = active_scaffold_config.field_search.columns
-        columns.each do |column|
-          search_conditions &lt;&lt; self.class.condition_for_column(column, params[:search][column.name], like_pattern)
-        end
-        search_conditions.compact!
-        self.active_scaffold_conditions = merge_conditions(self.active_scaffold_conditions, *search_conditions)
-        @filtered = !search_conditions.blank?
-
-        includes_for_search_columns = columns.collect{ |column| column.includes}.flatten.uniq.compact
-        self.active_scaffold_joins.concat includes_for_search_columns
-
-        active_scaffold_config.list.user.page = nil
-      end
-    end
-
-    # The default security delegates to ActiveRecordPermissions.
-    # You may override the method to customize.
-    def field_search_authorized?
-      authorized_for?(:action =&gt; :read)
-    end
-    private
-    def field_search_formats
-      (default_formats + active_scaffold_config.formats + active_scaffold_config.field_search.formats).uniq
-    end
-  end
-end
+module ActiveScaffold::Actions
+  module FieldSearch
+    def self.included(base)
+      base.before_filter :search_authorized_filter, :only =&gt; :show_search
+      base.before_filter :do_search
+    end
+
+    # FieldSearch uses params[:search] and not @record because search conditions do not always pass the Model's validations.
+    # This facilitates for example, textual searches against associations via .search_sql
+    def show_search
+      params[:search] ||= {}
+      @record = active_scaffold_config.model.new
+      respond_to_action(:field_search)
+    end
+
+    protected
+    def field_search_respond_to_html
+      render(:action =&gt; &quot;field_search&quot;)
+    end
+    
+    def field_search_respond_to_js
+      render(:partial =&gt; &quot;field_search&quot;)
+    end
+
+    def do_search
+      unless params[:search].nil?
+        like_pattern = active_scaffold_config.field_search.full_text_search? ? '%?%' : '?%'
+        search_conditions = []
+        columns = active_scaffold_config.field_search.columns
+        columns.each do |column|
+          search_conditions &lt;&lt; self.class.condition_for_column(column, params[:search][column.name], like_pattern)
+        end
+        search_conditions.compact!
+        self.active_scaffold_conditions = merge_conditions(self.active_scaffold_conditions, *search_conditions)
+        @filtered = !search_conditions.blank?
+
+        includes_for_search_columns = columns.collect{ |column| column.includes}.flatten.uniq.compact
+        self.active_scaffold_joins.concat includes_for_search_columns
+
+        active_scaffold_config.list.user.page = nil
+      end
+    end
+
+    # The default security delegates to ActiveRecordPermissions.
+    # You may override the method to customize.
+    def search_authorized?
+      authorized_for?(:action =&gt; :read)
+    end
+    private
+    def search_authorized_filter
+      link = active_scaffold_config.field_search.link || active_scaffold_config.field_search.class.link
+      raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
+    end
+    def field_search_formats
+      (default_formats + active_scaffold_config.formats + active_scaffold_config.field_search.formats).uniq
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/field_search.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module ActiveScaffold::Actions
   module List
     def self.included(base)
-      base.before_filter :list_authorized?, :only =&gt; [:index, :table, :update_table, :row, :list]
+      base.before_filter :list_authorized_filter, :only =&gt; [:index, :table, :update_table, :row, :list]
     end
 
     def index
@@ -16,11 +16,7 @@ module ActiveScaffold::Actions
     # This is called when changing pages, sorts and search
     def update_table
       do_list
-      respond_to do |type|
-        update_table_formats.each do |format|
-          type.send(format){ send(&quot;update_table_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:update_table)
     end
 
     # get just a single row
@@ -33,11 +29,7 @@ module ActiveScaffold::Actions
       if active_scaffold_config.list.always_show_create
         do_new
       end
-      respond_to do |type|
-        list_formats.each do |format|
-          type.send(format){ send(&quot;list_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:list)
     end
     
     protected
@@ -91,6 +83,9 @@ module ActiveScaffold::Actions
       authorized_for?(:action =&gt; :read)
     end
     private
+    def list_authorized_filter
+      raise ActiveScaffold::ActionNotAllowed unless list_authorized?
+    end
     def update_table_formats
       (default_formats + active_scaffold_config.formats).uniq
     end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/list.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,57 +1,57 @@
-module ActiveScaffold::Actions
-  module LiveSearch
-    def self.included(base)
-      base.before_filter :live_search_authorized?, :only =&gt; :show_search
-      base.before_filter :do_search
-    end
-
-    def show_search
-      respond_to do |type|
-        live_search_formats.each do |format|
-          type.send(format){ send(&quot;live_search_respond_to_#{format}&quot;) }
-        end
-      end
-    end
-
-    protected
-
-    def live_search_respond_to_html
-      if successful?
-        render(:partial =&gt; &quot;live_search&quot;, :layout =&gt; true)
-      else
-        return_to_main
-      end
-    end
-    
-    def live_search_respond_to_js
-      render(:partial =&gt; &quot;live_search&quot;)
-    end
-
-    def do_search
-      @query = params[:search].to_s.strip rescue ''
-
-      unless @query.empty?
-        columns = active_scaffold_config.live_search.columns
-        like_pattern = active_scaffold_config.live_search.full_text_search? ? '%?%' : '?%'
-        search_conditions = self.class.create_conditions_for_columns(@query.split(' '), columns, like_pattern)
-        self.active_scaffold_conditions = merge_conditions(self.active_scaffold_conditions, search_conditions)
-        @filtered = !search_conditions.blank?
-
-        includes_for_search_columns = columns.collect{ |column| column.includes}.flatten.uniq.compact
-        self.active_scaffold_joins.concat includes_for_search_columns
-
-        active_scaffold_config.list.user.page = nil
-      end
-    end
-
-    # The default security delegates to ActiveRecordPermissions.
-    # You may override the method to customize.
-    def live_search_authorized?
-      authorized_for?(:action =&gt; :read)
-    end
-    private
-    def live_search_formats
-      (default_formats + active_scaffold_config.formats + active_scaffold_config.live_search.formats).uniq
-    end
-  end
-end
+module ActiveScaffold::Actions
+  module LiveSearch
+    def self.included(base)
+      base.before_filter :search_authorized_filter, :only =&gt; :show_search
+      base.before_filter :do_search
+    end
+
+    def show_search
+      respond_to_action(:live_search)
+    end
+
+    protected
+
+    def live_search_respond_to_html
+      if successful?
+        render(:partial =&gt; &quot;live_search&quot;, :layout =&gt; true)
+      else
+        return_to_main
+      end
+    end
+    
+    def live_search_respond_to_js
+      render(:partial =&gt; &quot;live_search&quot;)
+    end
+
+    def do_search
+      @query = params[:search].to_s.strip rescue ''
+
+      unless @query.empty?
+        columns = active_scaffold_config.live_search.columns
+        like_pattern = active_scaffold_config.live_search.full_text_search? ? '%?%' : '?%'
+        search_conditions = self.class.create_conditions_for_columns(@query.split(' '), columns, like_pattern)
+        self.active_scaffold_conditions = merge_conditions(self.active_scaffold_conditions, search_conditions)
+        @filtered = !search_conditions.blank?
+
+        includes_for_search_columns = columns.collect{ |column| column.includes}.flatten.uniq.compact
+        self.active_scaffold_joins.concat includes_for_search_columns
+
+        active_scaffold_config.list.user.page = nil
+      end
+    end
+
+    # The default security delegates to ActiveRecordPermissions.
+    # You may override the method to customize.
+    def search_authorized?
+      authorized_for?(:action =&gt; :read)
+    end
+    private
+    def search_authorized_filter
+      link = active_scaffold_config.live_search.link || active_scaffold_config.live_search.class.link
+      raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
+    end
+    def live_search_formats
+      (default_formats + active_scaffold_config.formats + active_scaffold_config.live_search.formats).uniq
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/live_search.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,11 +13,7 @@ module ActiveScaffold::Actions
 
     def nested
       do_nested
-      respond_to do |type|
-        nested_formats.each do |format|
-          type.send(format){ send(&quot;nested_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:nested)
     end
 
     protected
@@ -36,9 +32,9 @@ module ActiveScaffold::Actions
     def include_habtm_actions
       if nested_habtm?
         # Production mode is ok with adding a link everytime the scaffold is nested - we ar not ok with that.
-        active_scaffold_config.action_links.add('new_existing', :label =&gt; 'Add Existing', :type =&gt; :table, :security_method =&gt; :add_existing_authorized?) unless active_scaffold_config.action_links['new_existing']
+        active_scaffold_config.action_links.add('new_existing', :label =&gt; :add_existing, :type =&gt; :table, :security_method =&gt; :add_existing_authorized?) unless active_scaffold_config.action_links['new_existing']
         if active_scaffold_config.nested.shallow_delete
-          active_scaffold_config.action_links.add('destroy_existing', :label =&gt; 'Remove', :type =&gt; :record, :confirm =&gt; 'are_you_sure', :method =&gt; :delete, :position =&gt; false, :security_method =&gt; :delete_existing_authorized?) unless active_scaffold_config.action_links['destroy_existing']
+          active_scaffold_config.action_links.add('destroy_existing', :label =&gt; :remove, :type =&gt; :record, :confirm =&gt; 'are_you_sure', :method =&gt; :delete, :position =&gt; false, :security_method =&gt; :delete_existing_authorized?) unless active_scaffold_config.action_links['destroy_existing']
           active_scaffold_config.action_links.delete(&quot;destroy&quot;) if active_scaffold_config.action_links['destroy']
         end
       else
@@ -47,7 +43,7 @@ module ActiveScaffold::Actions
         
         if active_scaffold_config.nested.shallow_delete
           active_scaffold_config.action_links.delete(&quot;destroy_existing&quot;) if active_scaffold_config.action_links['destroy_existing']
-          active_scaffold_config.action_links.add('destroy', :label =&gt; 'Delete', :type =&gt; :record, :confirm =&gt; 'are_you_sure', :method =&gt; :delete, :position =&gt; false, :security_method =&gt; :delete_authorized?) unless active_scaffold_config.action_links['destroy']
+          active_scaffold_config.action_links.add('destroy', :label =&gt; :delete, :type =&gt; :record, :confirm =&gt; 'are_you_sure', :method =&gt; :delete, :position =&gt; false, :security_method =&gt; :delete_authorized?) unless active_scaffold_config.action_links['destroy']
         end
         
       end
@@ -96,30 +92,18 @@ module ActiveScaffold::Actions::Nested
 
     def new_existing
       do_new
-      respond_to do |type|
-        new_existing_formats.each do |format|
-          type.send(format){ send(&quot;new_existing_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:new_existing)
     end
 
     def add_existing
       do_add_existing
-      respond_to do |type|
-        add_existing_formats.each do |format|
-          type.send(format){ send(&quot;add_existing_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:add_existing)
     end
 
     def destroy_existing
       return redirect_to(params.merge(:action =&gt; :delete)) if request.get?
       do_destroy_existing
-      respond_to do |type|
-        destroy_existing_formats.each do |format|
-          type.send(format){ send(&quot;destroy_existing_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:destroy_existing)
     end
     
     protected</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/nested.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,50 +1,50 @@
-module ActiveScaffold::Actions
-  module Search
-    def self.included(base)
-      base.before_filter :search_authorized?, :only =&gt; :show_search
-      base.before_filter :do_search
-    end
-
-    def show_search
-      respond_to do |type|
-        search_formats.each do |format|
-          type.send(format){ send(&quot;search_respond_to_#{format}&quot;) }
-        end
-      end
-    end
-
-    protected
-    def search_respond_to_html
-      render(:action =&gt; &quot;search&quot;)
-    end
-    def search_respond_to_js
-      render(:partial =&gt; &quot;search&quot;)
-    end
-    def do_search
-      @query = params[:search].to_s.strip rescue ''
-
-      unless @query.empty?
-        columns = active_scaffold_config.search.columns
-        like_pattern = active_scaffold_config.search.full_text_search? ? '%?%' : '?%'
-        search_conditions = self.class.create_conditions_for_columns(@query.split(' '), columns, like_pattern)
-        self.active_scaffold_conditions = merge_conditions(self.active_scaffold_conditions, search_conditions)
-        @filtered = !search_conditions.blank?
-
-        includes_for_search_columns = columns.collect{ |column| column.includes}.flatten.uniq.compact
-        self.active_scaffold_joins.concat includes_for_search_columns
-
-        active_scaffold_config.list.user.page = nil
-      end
-    end
-
-    # The default security delegates to ActiveRecordPermissions.
-    # You may override the method to customize.
-    def search_authorized?
-      authorized_for?(:action =&gt; :read)
-    end
-    private
-    def search_formats
-      (default_formats + active_scaffold_config.formats + active_scaffold_config.search.formats).uniq
-    end
-  end
-end
+module ActiveScaffold::Actions
+  module Search
+    def self.included(base)
+      base.before_filter :search_authorized_filter, :only =&gt; :show_search
+      base.before_filter :do_search
+    end
+
+    def show_search
+      respond_to_action(:search)
+    end
+
+    protected
+    def search_respond_to_html
+      render(:action =&gt; &quot;search&quot;)
+    end
+    def search_respond_to_js
+      render(:partial =&gt; &quot;search&quot;)
+    end
+    def do_search
+      @query = params[:search].to_s.strip rescue ''
+
+      unless @query.empty?
+        columns = active_scaffold_config.search.columns
+        like_pattern = active_scaffold_config.search.full_text_search? ? '%?%' : '?%'
+        search_conditions = self.class.create_conditions_for_columns(@query.split(' '), columns, like_pattern)
+        self.active_scaffold_conditions = merge_conditions(self.active_scaffold_conditions, search_conditions)
+        @filtered = !search_conditions.blank?
+
+        includes_for_search_columns = columns.collect{ |column| column.includes}.flatten.uniq.compact
+        self.active_scaffold_joins.concat includes_for_search_columns
+
+        active_scaffold_config.list.user.page = nil
+      end
+    end
+
+    # The default security delegates to ActiveRecordPermissions.
+    # You may override the method to customize.
+    def search_authorized?
+      authorized_for?(:action =&gt; :read)
+    end
+    private
+    def search_authorized_filter
+      link = active_scaffold_config.search.link || active_scaffold_config.search.class.link
+      raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
+    end
+    def search_formats
+      (default_formats + active_scaffold_config.formats + active_scaffold_config.search.formats).uniq
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/search.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,19 @@
 module ActiveScaffold::Actions
   module Show
     def self.included(base)
-      base.before_filter :show_authorized?, :only =&gt; :show
+      base.before_filter :show_authorized_filter, :only =&gt; :show
     end
 
     def show
       do_show
       successful?
-      respond_to do |type|
-        show_formats.each do |format|
-          type.send(format){ send(&quot;show_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:show)
     end
 
     protected
     
     def show_respond_to_json
-      render :text =&gt; response_object.to_yaml, :content_type =&gt; Mime::YAML, :status =&gt; response_status
+      render :text =&gt; response_object.to_json, :content_type =&gt; Mime::JSON, :status =&gt; response_status
     end
 
     def show_respond_to_yaml
@@ -47,6 +43,10 @@ module ActiveScaffold::Actions
       authorized_for?(:action =&gt; :read)
     end
     private 
+    def show_authorized_filter
+      link = active_scaffold_config.show.link || active_scaffold_config.show.class.link
+      raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
+    end
     def show_formats
       (default_formats + active_scaffold_config.formats + active_scaffold_config.show.formats).uniq
     end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/show.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module ActiveScaffold::Actions
   module Update
     def self.included(base)
-      base.before_filter :update_authorized?, :only =&gt; [:edit, :update]
+      base.before_filter :update_authorized_filter, :only =&gt; [:edit, :update]
       base.verify :method =&gt; [:post, :put],
                   :only =&gt; :update,
                   :redirect_to =&gt; { :action =&gt; :index }
@@ -9,20 +9,12 @@ module ActiveScaffold::Actions
 
     def edit
       do_edit
-      respond_to do |type|
-        edit_formats.each do |format|
-          type.send(format){ send(&quot;edit_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:edit)
     end
 
     def update
       do_update
-      respond_to do |type|
-        update_formats.each do |format|
-          type.send(format){ send(&quot;update_respond_to_#{format}&quot;) }
-        end
-      end
+      respond_to_action(:update)
     end
 
     # for inline (inlist) editing
@@ -100,7 +92,7 @@ module ActiveScaffold::Actions
     end
 
     def do_update_column
-      do_edit
+      @record = active_scaffold_config.model.find(params[:id])
       if @record.authorized_for?(:action =&gt; :update, :column =&gt; params[:column])
         params[:value] ||= @record.column_for_attribute(params[:column]).default unless @record.column_for_attribute(params[:column]).null
         @record.send(&quot;#{params[:column]}=&quot;, params[:value])
@@ -120,6 +112,10 @@ module ActiveScaffold::Actions
       authorized_for?(:action =&gt; :update)
     end
     private
+    def update_authorized_filter
+      link = active_scaffold_config.update.link || active_scaffold_config.update.class.link
+      raise ActiveScaffold::ActionNotAllowed unless self.send(link.security_method)
+    end
     def edit_formats
       (default_formats + active_scaffold_config.formats).uniq
     end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/actions/update.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,185 +1,185 @@
-module ActiveScaffold
-  # Provides support for param hashes assumed to be model attributes.
-  # Support is primarily needed for creating/editing associated records using a nested hash structure.
-  #
-  # Paradigm Params Hash (should write unit tests on this):
-  #   params[:record] = {
-  #     # a simple record attribute
-  #     'name' =&gt; 'John',
-  #     # a plural association hash
-  #     'roles' =&gt; {
-  #       # associate with an existing role
-  #       '5' =&gt; {'id' =&gt; 5}
-  #       # associate with an existing role and edit it
-  #       '6' =&gt; {'id' =&gt; 6, 'name' =&gt; 'designer'}
-  #       # create and associate a new role
-  #       '124521' =&gt; {'name' =&gt; 'marketer'}
-  #     }
-  #     # a singular association hash
-  #     'location' =&gt; {'id' =&gt; 12, 'city' =&gt; 'New York'}
-  #   }
-  #
-  # Simpler association structures are also supported, like:
-  #   params[:record] = {
-  #     # a simple record attribute
-  #     'name' =&gt; 'John',
-  #     # a plural association ... all ids refer to existing records
-  #     'roles' =&gt; ['5', '6'],
-  #     # a singular association ... all ids refer to existing records
-  #     'location' =&gt; '12'
-  # }
-  module AttributeParams
-    # Takes attributes (as from params[:record]) and applies them to the parent_record. Also looks for
-    # association attributes and attempts to instantiate them as associated objects.
-    #
-    # This is a secure way to apply params to a record, because it's based on a loop over the columns
-    # set. The columns set will not yield unauthorized columns, and it will not yield unregistered columns.
-    def update_record_from_params(parent_record, columns, attributes)
-      action = parent_record.new_record? ? :create : :update
-      return parent_record unless parent_record.authorized_for?(:action =&gt; action)
-
-      multi_parameter_attributes = {}
-      attributes.each do |k, v|
-        next unless k.include? '('
-        column_name = k.split('(').first.to_sym
-        multi_parameter_attributes[column_name] ||= []
-        multi_parameter_attributes[column_name] &lt;&lt; [k, v]
-      end
-
-      columns.each :for =&gt; parent_record, :action =&gt; action, :flatten =&gt; true do |column|
-        if multi_parameter_attributes.has_key? column.name
-          parent_record.send(:assign_multiparameter_attributes, multi_parameter_attributes[column.name])
-        elsif attributes.has_key? column.name
-          value = attributes[column.name]
-
-          # convert the value, possibly by instantiating associated objects
-          value = if value.is_a?(Hash)
-            # this is just for backwards compatibility. we should clean this up in 2.0.
-            if column.form_ui == :select
-              ids = if column.singular_association?
-                value[:id]
-              else
-                value.values.collect {|hash| hash[:id]}
-              end
-              (ids and not ids.empty?) ? column.association.klass.find(ids) : nil
-
-            elsif column.singular_association?
-              hash = value
-              record = find_or_create_for_params(hash, column, parent_record.send(&quot;#{column.name}&quot;))
-              if record
-                record_columns = active_scaffold_config_for(column.association.klass).subform.columns
-                update_record_from_params(record, record_columns, hash)
-                record.unsaved = true
-              end
-              record
-
-            elsif column.plural_association?
-              collection = value.collect do |key_value_pair|
-                hash = key_value_pair[1]
-                record = find_or_create_for_params(hash, column, parent_record.send(&quot;#{column.name}&quot;))
-                if record
-                  record_columns = active_scaffold_config_for(column.association.klass).subform.columns
-                  update_record_from_params(record, record_columns, hash)
-                  record.unsaved = true
-                end
-                record
-              end
-              collection.compact
-            end
-          else
-            if column.singular_association?
-              # it's a single id
-              column.association.klass.find(value) if value and not value.empty?
-            elsif column.plural_association?
-              # it's an array of ids
-              column.association.klass.find(value) if value and not value.empty?
-            else
-              # convert empty strings into nil. this works better with 'null =&gt; true' columns (and validations),
-              # and 'null =&gt; false' columns should just convert back to an empty string.
-              # ... but we can at least check the ConnectionAdapter::Column object to see if nulls are allowed
-              value = nil if value.is_a? String and value.empty? and !column.column.nil? and column.column.null
-              value
-            end
-          end
-
-          # we avoid assigning a value that already exists because otherwise has_one associations will break (AR bug in has_one_association.rb#replace)
-          parent_record.send(&quot;#{column.name}=&quot;, value) unless column.through_association? or parent_record.send(column.name) == value
-          
-          # Set any passthrough parameters that may be associated with this column (ie, file column &quot;keep&quot; and &quot;temp&quot; attributes)
-          unless column.params.empty?
-            column.params.each{|p| parent_record.send(&quot;#{p}=&quot;, attributes[p])}
-          end
-
-        # plural associations may not actually appear in the params if all of the options have been unselected or cleared away.
-        # NOTE: the &quot;form_ui&quot; check isn't really necessary, except that without it we have problems
-        # with subforms. the UI cuts out deep associations, which means they're not present in the
-        # params even though they're in the columns list. the result is that associations were being
-        # emptied out way too often. BUT ... this means there's still a lingering bug in the default association
-        # form code: you can't delete the last association in the list.
-        elsif column.form_ui and column.plural_association? and not column.through_association?
-          parent_record.send(&quot;#{column.name}=&quot;, [])
-        end
-      end
-
-      if parent_record.new_record?
-        parent_record.class.reflect_on_all_associations.each do |a|
-          next unless [:has_one, :has_many].include?(a.macro) and not a.options[:through]
-          next unless association_proxy = parent_record.send(a.name)
-
-          raise ActiveScaffold::ReverseAssociationRequired, &quot;In order to support :has_one and :has_many where the parent record is new and the child record(s) validate the presence of the parent, ActiveScaffold requires the reverse association (the belongs_to).&quot; unless a.reverse
-
-          association_proxy = [association_proxy] if a.macro == :has_one
-          association_proxy.each { |record| record.send(&quot;#{a.reverse}=&quot;, parent_record) }
-        end
-      end
-
-      parent_record
-    end
-
-    # Attempts to create or find an instance of klass (which must be an ActiveRecord object) from the
-    # request parameters given. If params[:id] exists it will attempt to find an existing object
-    # otherwise it will build a new one.
-    def find_or_create_for_params(params, parent_column, current)
-      klass = parent_column.association.klass
-      return nil if parent_column.show_blank_record and attributes_hash_is_empty?(params, klass)
-
-      if params.has_key? :id
-        # modifying the current object of a singular association
-        if current and current.is_a? ActiveRecord::Base and current.id.to_s == params[:id]
-          return current
-        # modifying one of the current objects in a plural association
-        elsif current and current.respond_to?(:any?) and current.any? {|o| o.id.to_s == params[:id]}
-          return current.detect {|o| o.id.to_s == params[:id]}
-        # attaching an existing but not-current object
-        else
-          return klass.find(params[:id])
-        end
-      else
-        return klass.new if klass.authorized_for?(:action =&gt; :create)
-      end
-    end
-
-    # Determines whether the given attributes hash is &quot;empty&quot;.
-    # This isn't a literal emptiness - it's an attempt to discern whether the user intended it to be empty or not.
-    def attributes_hash_is_empty?(hash, klass)
-      hash.all? do |key,value|
-        # convert any possible multi-parameter attributes like 'created_at(5i)' to simply 'created_at'
-        column_name = key.to_s.split('(').first
-        column = klass.columns_hash[column_name]
-
-        # booleans and datetimes will always have a value. so we ignore them when checking whether the hash is empty.
-        # this could be a bad idea. but the current situation (excess record entry) seems worse.
-        next true if column and [:boolean, :datetime, :date, :time].include?(column.type)
-
-        # defaults are pre-filled on the form. we can't use them to determine if the user intends a new row.
-        next true if column and value == column.default.to_s
-
-        if value.is_a?(Hash)
-          attributes_hash_is_empty?(value, klass)
-        else
-          value.respond_to?(:empty?) ? value.empty? : false
-        end
-      end
-    end
-  end
+module ActiveScaffold
+  # Provides support for param hashes assumed to be model attributes.
+  # Support is primarily needed for creating/editing associated records using a nested hash structure.
+  #
+  # Paradigm Params Hash (should write unit tests on this):
+  #   params[:record] = {
+  #     # a simple record attribute
+  #     'name' =&gt; 'John',
+  #     # a plural association hash
+  #     'roles' =&gt; {
+  #       # associate with an existing role
+  #       '5' =&gt; {'id' =&gt; 5}
+  #       # associate with an existing role and edit it
+  #       '6' =&gt; {'id' =&gt; 6, 'name' =&gt; 'designer'}
+  #       # create and associate a new role
+  #       '124521' =&gt; {'name' =&gt; 'marketer'}
+  #     }
+  #     # a singular association hash
+  #     'location' =&gt; {'id' =&gt; 12, 'city' =&gt; 'New York'}
+  #   }
+  #
+  # Simpler association structures are also supported, like:
+  #   params[:record] = {
+  #     # a simple record attribute
+  #     'name' =&gt; 'John',
+  #     # a plural association ... all ids refer to existing records
+  #     'roles' =&gt; ['5', '6'],
+  #     # a singular association ... all ids refer to existing records
+  #     'location' =&gt; '12'
+  # }
+  module AttributeParams
+    # Takes attributes (as from params[:record]) and applies them to the parent_record. Also looks for
+    # association attributes and attempts to instantiate them as associated objects.
+    #
+    # This is a secure way to apply params to a record, because it's based on a loop over the columns
+    # set. The columns set will not yield unauthorized columns, and it will not yield unregistered columns.
+    def update_record_from_params(parent_record, columns, attributes)
+      action = parent_record.new_record? ? :create : :update
+      return parent_record unless parent_record.authorized_for?(:action =&gt; action)
+
+      multi_parameter_attributes = {}
+      attributes.each do |k, v|
+        next unless k.include? '('
+        column_name = k.split('(').first.to_sym
+        multi_parameter_attributes[column_name] ||= []
+        multi_parameter_attributes[column_name] &lt;&lt; [k, v]
+      end
+
+      columns.each :for =&gt; parent_record, :action =&gt; action, :flatten =&gt; true do |column|
+        if multi_parameter_attributes.has_key? column.name
+          parent_record.send(:assign_multiparameter_attributes, multi_parameter_attributes[column.name])
+        elsif attributes.has_key? column.name
+          value = attributes[column.name]
+
+          # convert the value, possibly by instantiating associated objects
+          value = if value.is_a?(Hash)
+            # this is just for backwards compatibility. we should clean this up in 2.0.
+            if column.form_ui == :select
+              ids = if column.singular_association?
+                value[:id]
+              else
+                value.values.collect {|hash| hash[:id]}
+              end
+              (ids and not ids.empty?) ? column.association.klass.find(ids) : nil
+
+            elsif column.singular_association?
+              hash = value
+              record = find_or_create_for_params(hash, column, parent_record.send(&quot;#{column.name}&quot;))
+              if record
+                record_columns = active_scaffold_config_for(column.association.klass).subform.columns
+                update_record_from_params(record, record_columns, hash)
+                record.unsaved = true
+              end
+              record
+
+            elsif column.plural_association?
+              collection = value.collect do |key_value_pair|
+                hash = key_value_pair[1]
+                record = find_or_create_for_params(hash, column, parent_record.send(&quot;#{column.name}&quot;))
+                if record
+                  record_columns = active_scaffold_config_for(column.association.klass).subform.columns
+                  update_record_from_params(record, record_columns, hash)
+                  record.unsaved = true
+                end
+                record
+              end
+              collection.compact
+            end
+          else
+            if column.singular_association?
+              # it's a single id
+              column.association.klass.find(value) if value and not value.empty?
+            elsif column.plural_association?
+              # it's an array of ids
+              column.association.klass.find(value) if value and not value.empty?
+            else
+              # convert empty strings into nil. this works better with 'null =&gt; true' columns (and validations),
+              # and 'null =&gt; false' columns should just convert back to an empty string.
+              # ... but we can at least check the ConnectionAdapter::Column object to see if nulls are allowed
+              value = nil if value.is_a? String and value.empty? and !column.column.nil? and column.column.null
+              value
+            end
+          end
+
+          # we avoid assigning a value that already exists because otherwise has_one associations will break (AR bug in has_one_association.rb#replace)
+          parent_record.send(&quot;#{column.name}=&quot;, value) unless column.through_association? or parent_record.send(column.name) == value
+          
+          # Set any passthrough parameters that may be associated with this column (ie, file column &quot;keep&quot; and &quot;temp&quot; attributes)
+          unless column.params.empty?
+            column.params.each{|p| parent_record.send(&quot;#{p}=&quot;, attributes[p])}
+          end
+
+        # plural associations may not actually appear in the params if all of the options have been unselected or cleared away.
+        # NOTE: the &quot;form_ui&quot; check isn't really necessary, except that without it we have problems
+        # with subforms. the UI cuts out deep associations, which means they're not present in the
+        # params even though they're in the columns list. the result is that associations were being
+        # emptied out way too often. BUT ... this means there's still a lingering bug in the default association
+        # form code: you can't delete the last association in the list.
+        elsif column.form_ui and column.plural_association? and not column.through_association?
+          parent_record.send(&quot;#{column.name}=&quot;, [])
+        end
+      end
+
+      if parent_record.new_record?
+        parent_record.class.reflect_on_all_associations.each do |a|
+          next unless [:has_one, :has_many].include?(a.macro) and not a.options[:through]
+          next unless association_proxy = parent_record.send(a.name)
+
+          raise ActiveScaffold::ReverseAssociationRequired, &quot;In order to support :has_one and :has_many where the parent record is new and the child record(s) validate the presence of the parent, ActiveScaffold requires the reverse association (the belongs_to).&quot; unless a.reverse
+
+          association_proxy = [association_proxy] if a.macro == :has_one
+          association_proxy.each { |record| record.send(&quot;#{a.reverse}=&quot;, parent_record) }
+        end
+      end
+
+      parent_record
+    end
+
+    # Attempts to create or find an instance of klass (which must be an ActiveRecord object) from the
+    # request parameters given. If params[:id] exists it will attempt to find an existing object
+    # otherwise it will build a new one.
+    def find_or_create_for_params(params, parent_column, current)
+      klass = parent_column.association.klass
+      return nil if parent_column.show_blank_record and attributes_hash_is_empty?(params, klass)
+
+      if params.has_key? :id
+        # modifying the current object of a singular association
+        if current and current.is_a? ActiveRecord::Base and current.id.to_s == params[:id]
+          return current
+        # modifying one of the current objects in a plural association
+        elsif current and current.respond_to?(:any?) and current.any? {|o| o.id.to_s == params[:id]}
+          return current.detect {|o| o.id.to_s == params[:id]}
+        # attaching an existing but not-current object
+        else
+          return klass.find(params[:id])
+        end
+      else
+        return klass.new if klass.authorized_for?(:action =&gt; :create)
+      end
+    end
+
+    # Determines whether the given attributes hash is &quot;empty&quot;.
+    # This isn't a literal emptiness - it's an attempt to discern whether the user intended it to be empty or not.
+    def attributes_hash_is_empty?(hash, klass)
+      hash.all? do |key,value|
+        # convert any possible multi-parameter attributes like 'created_at(5i)' to simply 'created_at'
+        column_name = key.to_s.split('(').first
+        column = klass.columns_hash[column_name]
+
+        # booleans and datetimes will always have a value. so we ignore them when checking whether the hash is empty.
+        # this could be a bad idea. but the current situation (excess record entry) seems worse.
+        next true if column and [:boolean, :datetime, :date, :time].include?(column.type)
+
+        # defaults are pre-filled on the form. we can't use them to determine if the user intends a new row.
+        next true if column and value == column.default.to_s
+
+        if value.is_a?(Hash)
+          attributes_hash_is_empty?(value, klass)
+        else
+          value.respond_to?(:empty?) ? value.empty? : false
+        end
+      end
+    end
+  end
 end
\ No newline at end of file</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/attribute_params.rb</filename>
    </modified>
    <modified>
      <diff>@@ -83,9 +83,7 @@ module ActiveScaffold::Config
     # a generally-applicable name for this ActiveScaffold ... will be used for generating page/section headers
     attr_writer :label
     def label(options={})
-      options[:count] ||= model.count
-      options[:default] ||= model.name.pluralize if options[:count].to_i &gt; 1
-      as_(@label, options) || model.human_name(options)
+      as_(@label, options) || model.human_name(options.merge(options[:count].to_i == 1 ? {} : {:default =&gt; model.name.pluralize}))
     end
 
     ##</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/config/core.rb</filename>
    </modified>
    <modified>
      <diff>@@ -62,7 +62,7 @@ module ActiveScaffold::Config
     # the label for this List action. used for the header.
     attr_writer :label
     def label
-      @label ? as_(@label) : @core.label
+      @label ? as_(@label, :count =&gt; :many) : @core.label(:count =&gt; :many)
     end
 
     attr_writer :no_entries_message</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/config/list.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,178 +1,178 @@
-module ActiveScaffold
-  module Constraints
-    def self.included(base)
-      base.module_eval do
-        before_filter :register_constraints_with_action_columns
-      end
-    end
-
-    protected
-
-    # Returns the current constraints
-    def active_scaffold_constraints
-      return active_scaffold_session_storage[:constraints] || {}
-    end
-
-    # For each enabled action, adds the constrained columns to the ActionColumns object (if it exists).
-    # This lets the ActionColumns object skip constrained columns.
-    #
-    # If the constraint value is a Hash, then we assume the constraint is a multi-level association constraint (the reverse of a has_many :through) and we do NOT register the constraint column.
-    def register_constraints_with_action_columns
-      constrained_fields = active_scaffold_constraints.reject{|k, v| v.is_a? Hash}.keys.collect{|k| k.to_sym}
-
-      if self.class.uses_active_scaffold?
-        # we actually want to do this whether constrained_fields exist or not, so that we can reset the array when they don't
-        active_scaffold_config.actions.each do |action_name|
-          action = active_scaffold_config.send(action_name)
-          next unless action.respond_to? :columns
-          action.columns.constraint_columns = constrained_fields
-        end
-      end
-    end
-
-    # Returns search conditions based on the current scaffold constraints.
-    #
-    # Supports constraints based on either a column name (in which case it checks for an association
-    # or just uses the search_sql) or a database field name.
-    #
-    # All of this work is primarily to support nested scaffolds in a manner generally useful for other
-    # embedded scaffolds.
-    def conditions_from_constraints
-      conditions = nil
-      active_scaffold_constraints.each do |k, v|
-        column = active_scaffold_config.columns[k]
-        constraint_condition = if column
-          # Assume this is a multi-level association constraint.
-          # example:
-          #   data model: Park -&gt; Den -&gt; Bear
-          #   constraint: :den =&gt; {:park =&gt; 5}
-          if v.is_a? Hash
-            far_association = column.association.klass.reflect_on_association(v.keys.first)
-            field = far_association.klass.primary_key
-            table = far_association.table_name
-
-            active_scaffold_joins.concat([{k =&gt; v.keys.first}]) # e.g. {:den =&gt; :park}
-            constraint_condition_for(&quot;#{table}.#{field}&quot;, v.values.first)
-
-          # association column constraint
-          elsif column.association
-            if column.association.macro == :has_and_belongs_to_many
-              active_scaffold_habtm_joins.concat column.includes
-            else
-              active_scaffold_joins.concat column.includes
-            end
-            condition_from_association_constraint(column.association, v)
-
-          # regular column constraints
-          elsif column.searchable?
-            active_scaffold_joins.concat column.includes
-            constraint_condition_for(column.search_sql, v)
-          end
-        # unknown-to-activescaffold-but-real-database-column constraint
-        elsif active_scaffold_config.model.column_names.include? k.to_s
-          constraint_condition_for(k.to_s, v)
-        else
-          raise ActiveScaffold::MalformedConstraint, constraint_error(active_scaffold_config.model, k), caller
-        end
-
-        conditions = merge_conditions(conditions, constraint_condition)
-      end
-
-      conditions
-    end
-
-    # We do NOT want to use .search_sql. If anything, search_sql will refer
-    # to a human-searchable value on the associated record.
-    def condition_from_association_constraint(association, value)
-      # when the reverse association is a :belongs_to, the id for the associated object only exists as
-      # the primary_key on the other table. so for :has_one and :has_many (when the reverse is :belongs_to),
-      # we have to use the other model's primary_key.
-      #
-      # please see the relevant tests for concrete examples.
-      field = if [:has_one, :has_many].include?(association.macro)
-        association.klass.primary_key
-      else
-        association.options[:association_foreign_key] || association.options[:foreign_key] || association.association_foreign_key
-      end
-
-      table = case association.macro
-        when :has_and_belongs_to_many
-        association.options[:join_table]
-
-        when :belongs_to
-        active_scaffold_config.model.table_name
-
-        when :has_many
-        association.table_name
-
-        else
-        association.table_name
-      end
-
-      condition = constraint_condition_for(&quot;#{table}.#{field}&quot;, value)
-      if association.options[:polymorphic]
-        condition = merge_conditions(
-          condition,
-          constraint_condition_for(&quot;#{table}.#{association.name}_type&quot;, params[:parent_model].to_s)
-        )
-      end
-
-      condition
-    end
-
-    def constraint_error(klass, column_name)
-      &quot;Malformed constraint `#{klass}##{column_name}'. If it's a legitimate column, and you are using a nested scaffold, please specify or double-check the reverse association name.&quot;
-    end
-
-    # Applies constraints to the given record.
-    #
-    # Searches through the known columns for association columns. If the given constraint is an association,
-    # it assumes that the constraint value is an id. It then does a association.klass.find with the value
-    # and adds the associated object to the record.
-    #
-    # For some operations ActiveRecord will automatically update the database. That's not always ok.
-    # If it *is* ok (e.g. you're in a transaction), then set :allow_autosave to true.
-    def apply_constraints_to_record(record, options = {})
-      options[:allow_autosave] = false if options[:allow_autosave].nil?
-
-      active_scaffold_constraints.each do |k, v|
-        column = active_scaffold_config.columns[k]
-        if column and column.association
-          if v.is_a? Hash # reverse of a through association ... we need to set the far association
-            # example
-            #   data model: Park -&gt; Den -&gt; Bear
-            #   constraint: :den =&gt; {:park =&gt; 5}
-            #   remote_klass: Park
-            remote_klass = column.association.klass.reflect_on_association(v.keys.first).klass
-            first_associated = record.send(&quot;#{k}&quot;)
-            first_associated.send(&quot;#{v.keys.first}=&quot;, remote_klass.find(v.values.first)) if first_associated
-          elsif column.plural_association?
-            record.send(&quot;#{k}&quot;).send(:&lt;&lt;, column.association.klass.find(v))
-          elsif column.association.options[:polymorphic]
-            record.send(&quot;#{k}=&quot;, params[:parent_model].constantize.find(v))
-          else # regular singular association
-            record.send(&quot;#{k}=&quot;, column.association.klass.find(v))
-
-            # setting the belongs_to side of a has_one isn't safe. if the has_one was already
-            # specified, rails won't automatically clear out the previous associated record.
-            #
-            # note that we can't take the extra step to correct this unless we're permitted to
-            # run operations where activerecord auto-saves the object.
-            reverse = column.association.klass.reflect_on_association(column.association.reverse)
-            if reverse.macro == :has_one and options[:allow_autosave]
-              record.send(k).send(&quot;#{column.association.reverse}=&quot;, record)
-            end
-          end
-        else
-          record.send(&quot;#{k}=&quot;, v)
-        end
-      end
-    end
-
-    private
-
-    def constraint_condition_for(sql, value)
-      value.nil? ? &quot;#{sql} IS NULL&quot; : [&quot;#{sql} = ?&quot;, value]
-    end
-  end
-end
+module ActiveScaffold
+  module Constraints
+    def self.included(base)
+      base.module_eval do
+        before_filter :register_constraints_with_action_columns
+      end
+    end
+
+    protected
+
+    # Returns the current constraints
+    def active_scaffold_constraints
+      return active_scaffold_session_storage[:constraints] || {}
+    end
+
+    # For each enabled action, adds the constrained columns to the ActionColumns object (if it exists).
+    # This lets the ActionColumns object skip constrained columns.
+    #
+    # If the constraint value is a Hash, then we assume the constraint is a multi-level association constraint (the reverse of a has_many :through) and we do NOT register the constraint column.
+    def register_constraints_with_action_columns
+      constrained_fields = active_scaffold_constraints.reject{|k, v| v.is_a? Hash}.keys.collect{|k| k.to_sym}
+
+      if self.class.uses_active_scaffold?
+        # we actually want to do this whether constrained_fields exist or not, so that we can reset the array when they don't
+        active_scaffold_config.actions.each do |action_name|
+          action = active_scaffold_config.send(action_name)
+          next unless action.respond_to? :columns
+          action.columns.constraint_columns = constrained_fields
+        end
+      end
+    end
+
+    # Returns search conditions based on the current scaffold constraints.
+    #
+    # Supports constraints based on either a column name (in which case it checks for an association
+    # or just uses the search_sql) or a database field name.
+    #
+    # All of this work is primarily to support nested scaffolds in a manner generally useful for other
+    # embedded scaffolds.
+    def conditions_from_constraints
+      conditions = nil
+      active_scaffold_constraints.each do |k, v|
+        column = active_scaffold_config.columns[k]
+        constraint_condition = if column
+          # Assume this is a multi-level association constraint.
+          # example:
+          #   data model: Park -&gt; Den -&gt; Bear
+          #   constraint: :den =&gt; {:park =&gt; 5}
+          if v.is_a? Hash
+            far_association = column.association.klass.reflect_on_association(v.keys.first)
+            field = far_association.klass.primary_key
+            table = far_association.table_name
+
+            active_scaffold_joins.concat([{k =&gt; v.keys.first}]) # e.g. {:den =&gt; :park}
+            constraint_condition_for(&quot;#{table}.#{field}&quot;, v.values.first)
+
+          # association column constraint
+          elsif column.association
+            if column.association.macro == :has_and_belongs_to_many
+              active_scaffold_habtm_joins.concat column.includes
+            else
+              active_scaffold_joins.concat column.includes
+            end
+            condition_from_association_constraint(column.association, v)
+
+          # regular column constraints
+          elsif column.searchable?
+            active_scaffold_joins.concat column.includes
+            constraint_condition_for(column.search_sql, v)
+          end
+        # unknown-to-activescaffold-but-real-database-column constraint
+        elsif active_scaffold_config.model.column_names.include? k.to_s
+          constraint_condition_for(k.to_s, v)
+        else
+          raise ActiveScaffold::MalformedConstraint, constraint_error(active_scaffold_config.model, k), caller
+        end
+
+        conditions = merge_conditions(conditions, constraint_condition)
+      end
+
+      conditions
+    end
+
+    # We do NOT want to use .search_sql. If anything, search_sql will refer
+    # to a human-searchable value on the associated record.
+    def condition_from_association_constraint(association, value)
+      # when the reverse association is a :belongs_to, the id for the associated object only exists as
+      # the primary_key on the other table. so for :has_one and :has_many (when the reverse is :belongs_to),
+      # we have to use the other model's primary_key.
+      #
+      # please see the relevant tests for concrete examples.
+      field = if [:has_one, :has_many].include?(association.macro)
+        association.klass.primary_key
+      else
+        association.options[:association_foreign_key] || association.options[:foreign_key] || association.association_foreign_key
+      end
+
+      table = case association.macro
+        when :has_and_belongs_to_many
+        association.options[:join_table]
+
+        when :belongs_to
+        active_scaffold_config.model.table_name
+
+        when :has_many
+        association.table_name
+
+        else
+        association.table_name
+      end
+
+      condition = constraint_condition_for(&quot;#{table}.#{field}&quot;, value)
+      if association.options[:polymorphic]
+        condition = merge_conditions(
+          condition,
+          constraint_condition_for(&quot;#{table}.#{association.name}_type&quot;, params[:parent_model].to_s)
+        )
+      end
+
+      condition
+    end
+
+    def constraint_error(klass, column_name)
+      &quot;Malformed constraint `#{klass}##{column_name}'. If it's a legitimate column, and you are using a nested scaffold, please specify or double-check the reverse association name.&quot;
+    end
+
+    # Applies constraints to the given record.
+    #
+    # Searches through the known columns for association columns. If the given constraint is an association,
+    # it assumes that the constraint value is an id. It then does a association.klass.find with the value
+    # and adds the associated object to the record.
+    #
+    # For some operations ActiveRecord will automatically update the database. That's not always ok.
+    # If it *is* ok (e.g. you're in a transaction), then set :allow_autosave to true.
+    def apply_constraints_to_record(record, options = {})
+      options[:allow_autosave] = false if options[:allow_autosave].nil?
+
+      active_scaffold_constraints.each do |k, v|
+        column = active_scaffold_config.columns[k]
+        if column and column.association
+          if v.is_a? Hash # reverse of a through association ... we need to set the far association
+            # example
+            #   data model: Park -&gt; Den -&gt; Bear
+            #   constraint: :den =&gt; {:park =&gt; 5}
+            #   remote_klass: Park
+            remote_klass = column.association.klass.reflect_on_association(v.keys.first).klass
+            first_associated = record.send(&quot;#{k}&quot;)
+            first_associated.send(&quot;#{v.keys.first}=&quot;, remote_klass.find(v.values.first)) if first_associated
+          elsif column.plural_association?
+            record.send(&quot;#{k}&quot;).send(:&lt;&lt;, column.association.klass.find(v))
+          elsif column.association.options[:polymorphic]
+            record.send(&quot;#{k}=&quot;, params[:parent_model].constantize.find(v))
+          else # regular singular association
+            record.send(&quot;#{k}=&quot;, column.association.klass.find(v))
+
+            # setting the belongs_to side of a has_one isn't safe. if the has_one was already
+            # specified, rails won't automatically clear out the previous associated record.
+            #
+            # note that we can't take the extra step to correct this unless we're permitted to
+            # run operations where activerecord auto-saves the object.
+            reverse = column.association.klass.reflect_on_association(column.association.reverse)
+            if reverse.macro == :has_one and options[:allow_autosave]
+              record.send(k).send(&quot;#{column.association.reverse}=&quot;, record)
+            end
+          end
+        else
+          record.send(&quot;#{k}=&quot;, v)
+        end
+      end
+    end
+
+    private
+
+    def constraint_condition_for(sql, value)
+      value.nil? ? &quot;#{sql} IS NULL&quot; : [&quot;#{sql} = ?&quot;, value]
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/constraints.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,97 +1,97 @@
-module ActiveScaffold::DataStructures
-  # A set of columns. These structures can be nested for organization.
-  class ActionColumns &lt; Set
-    include ActiveScaffold::Configurable
-
-    # this lets us refer back to the action responsible for this link, if it exists.
-    # the immediate need here is to get the crud_type so we can dynamically filter columns from the set.
-    attr_accessor :action
-
-    # labels are useful for the Create/Update forms, when we display columns in a grouped fashion and want to name them separately
-    attr_writer :label
-    def label
-      as_(@label) if @label
-    end
-
-    # Whether this column set is collapsed by default in contexts where collapsing is supported
-    attr_accessor :collapsed
-
-    # nests a subgroup in the column set
-    def add_subgroup(label, &amp;proc)
-      columns = ActiveScaffold::DataStructures::ActionColumns.new
-      columns.label = label
-      columns.action = self.action
-      columns.configure &amp;proc
-      self.exclude columns.collect_columns
-      self.add columns
-    end
-
-    def include?(item)
-      @set.each do |c|
-        return true if !c.is_a? Symbol and c.include? item
-        return true if c == item.to_sym
-      end
-      return false
-    end
-
-    protected
-
-    def collect_columns
-      @set.collect {|col| col.is_a?(ActiveScaffold::DataStructures::ActionColumns) ? col.collect_columns : col}
-    end
-
-    # called during clone or dup. makes the clone/dup deeper.
-    def initialize_copy(from)
-      @set = from.instance_variable_get('@set').clone
-    end
-
-    # A package of stuff to add after the configuration block. This is an attempt at making a certain level of functionality inaccessible during configuration, to reduce possible breakage from misuse.
-    # The bulk of the package is a means of connecting the referential column set (ActionColumns) with the actual column objects (Columns). This lets us iterate over the set and yield real column objects.
-    module AfterConfiguration
-      # Redefine the each method to yield actual Column objects.
-      # It will skip constrained and unauthorized columns.
-      #
-      # Options:
-      #  * :flatten - whether to recursively iterate on nested sets. default is false.
-      #  * :for - the record (or class) being iterated over. used for column-level security. default is the class.
-      def each(options = {}, &amp;proc)
-        options[:for] ||= @columns.active_record_class
-
-        @set.each do |item|
-          unless item.is_a? ActiveScaffold::DataStructures::ActionColumns
-            item = (@columns[item] || ActiveScaffold::DataStructures::Column.new(item.to_sym, @columns.active_record_class))
-            # skip if this matches a constrained column
-            next if constraint_columns.include?(item.name.to_sym)
-            # skip if this matches the field_name of a constrained column
-            next if item.field_name and constraint_columns.include?(item.field_name.to_sym)
-            # skip this field if it's not authorized
-            next unless options[:for].authorized_for?(:action =&gt; options[:action] || self.action.crud_type, :column =&gt; item.name)
-          end
-          if item.is_a? ActiveScaffold::DataStructures::ActionColumns and options.has_key?(:flatten) and options[:flatten]
-            item.each(options, &amp;proc)
-          else
-            yield item
-          end
-        end
-      end
-
-      # registers a set of column objects (recursively, for all nested ActionColumns)
-      def set_columns(columns)
-        @columns = columns
-        # iterate over @set instead of self to avoid dealing with security queries
-        @set.each do |item|
-          item.set_columns(columns) if item.respond_to? :set_columns
-        end
-      end
-
-      attr_writer :constraint_columns
-      def constraint_columns
-        @constraint_columns ||= []
-      end
-      
-      def length
-        (@set - self.constraint_columns).length
-      end
-    end
-  end
-end
+module ActiveScaffold::DataStructures
+  # A set of columns. These structures can be nested for organization.
+  class ActionColumns &lt; Set
+    include ActiveScaffold::Configurable
+
+    # this lets us refer back to the action responsible for this link, if it exists.
+    # the immediate need here is to get the crud_type so we can dynamically filter columns from the set.
+    attr_accessor :action
+
+    # labels are useful for the Create/Update forms, when we display columns in a grouped fashion and want to name them separately
+    attr_writer :label
+    def label
+      as_(@label) if @label
+    end
+
+    # Whether this column set is collapsed by default in contexts where collapsing is supported
+    attr_accessor :collapsed
+
+    # nests a subgroup in the column set
+    def add_subgroup(label, &amp;proc)
+      columns = ActiveScaffold::DataStructures::ActionColumns.new
+      columns.label = label
+      columns.action = self.action
+      columns.configure &amp;proc
+      self.exclude columns.collect_columns
+      self.add columns
+    end
+
+    def include?(item)
+      @set.each do |c|
+        return true if !c.is_a? Symbol and c.include? item
+        return true if c == item.to_sym
+      end
+      return false
+    end
+
+    protected
+
+    def collect_columns
+      @set.collect {|col| col.is_a?(ActiveScaffold::DataStructures::ActionColumns) ? col.collect_columns : col}
+    end
+
+    # called during clone or dup. makes the clone/dup deeper.
+    def initialize_copy(from)
+      @set = from.instance_variable_get('@set').clone
+    end
+
+    # A package of stuff to add after the configuration block. This is an attempt at making a certain level of functionality inaccessible during configuration, to reduce possible breakage from misuse.
+    # The bulk of the package is a means of connecting the referential column set (ActionColumns) with the actual column objects (Columns). This lets us iterate over the set and yield real column objects.
+    module AfterConfiguration
+      # Redefine the each method to yield actual Column objects.
+      # It will skip constrained and unauthorized columns.
+      #
+      # Options:
+      #  * :flatten - whether to recursively iterate on nested sets. default is false.
+      #  * :for - the record (or class) being iterated over. used for column-level security. default is the class.
+      def each(options = {}, &amp;proc)
+        options[:for] ||= @columns.active_record_class
+
+        @set.each do |item|
+          unless item.is_a? ActiveScaffold::DataStructures::ActionColumns
+            item = (@columns[item] || ActiveScaffold::DataStructures::Column.new(item.to_sym, @columns.active_record_class))
+            # skip if this matches a constrained column
+            next if constraint_columns.include?(item.name.to_sym)
+            # skip if this matches the field_name of a constrained column
+            next if item.field_name and constraint_columns.include?(item.field_name.to_sym)
+            # skip this field if it's not authorized
+            next unless options[:for].authorized_for?(:action =&gt; options[:action] || self.action.crud_type, :column =&gt; item.name)
+          end
+          if item.is_a? ActiveScaffold::DataStructures::ActionColumns and options.has_key?(:flatten) and options[:flatten]
+            item.each(options, &amp;proc)
+          else
+            yield item
+          end
+        end
+      end
+
+      # registers a set of column objects (recursively, for all nested ActionColumns)
+      def set_columns(columns)
+        @columns = columns
+        # iterate over @set instead of self to avoid dealing with security queries
+        @set.each do |item|
+          item.set_columns(columns) if item.respond_to? :set_columns
+        end
+      end
+
+      attr_writer :constraint_columns
+      def constraint_columns
+        @constraint_columns ||= []
+      end
+      
+      def length
+        (@set - self.constraint_columns).length
+      end
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/action_columns.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,75 +1,75 @@
-module ActiveScaffold::DataStructures
-  class Columns
-    include Enumerable
-    include ActiveScaffold::Configurable
-
-    # The motivation for this collection is that this Columns data structure fills two roles: it provides
-    # the master list of all known columns, and it provides an inheritable list for all other actions (e.g.
-    # Create and Update and List). Well we actually want to *know* about as many columns as possible, so
-    # we don't want people actually removing columns from @set. But at the same time, we want to be able to
-    # manage which columns get inherited. Tada!
-    #
-    # This collection is referenced by other parts of ActiveScaffold and by methods within this DataStructure.
-    # IT IS NOT MEANT FOR PUBLIC USE (but if you know what you're doing, go ahead)
-    def _inheritable=(value)
-      @sorted = true
-      @_inheritable = value
-    end
-
-    # This accessor is used by ActionColumns to create new Column objects without adding them to this set
-    attr_reader :active_record_class
-
-    def initialize(active_record_class, *args)
-      @active_record_class = active_record_class
-      @_inheritable = []
-      @set = []
-
-      self.add *args
-    end
-
-    # the way to add columns to the set. this is primarily useful for virtual columns.
-    # note that this also makes columns inheritable
-    def add(*args)
-      args.flatten! # allow [] as a param
-      args = args.collect{ |a| a.to_sym }
-
-      # make the columns inheritable
-      @_inheritable.concat(args)
-      # then add columns to @set (unless they already exist)
-      args.each { |a| @set &lt;&lt; ActiveScaffold::DataStructures::Column.new(a.to_sym, @active_record_class) unless find_by_name(a) }
-    end
-    alias_method :&lt;&lt;, :add
-
-    def exclude(*args)
-      # only remove columns from _inheritable. we never want to completely forget about a column.
-      args.each { |a| @_inheritable.delete a }
-    end
-
-    # returns an array of columns with the provided names
-    def find_by_names(*names)
-      @set.find_all { |column| names.include? column.name }
-    end
-
-    # returns the column of the given name.
-    def find_by_name(name)
-      # this works because of `def column.=='
-      column = @set.find { |c| c == name }
-      column
-    end
-    alias_method :[], :find_by_name
-
-    def each
-      @set.each {|i| yield i }
-    end
-
-    def _inheritable
-      if @sorted
-        @_inheritable
-      else
-        @_inheritable.sort do |a, b|
-          self[a] &lt;=&gt; self[b]
-        end
-      end
-    end
-  end
+module ActiveScaffold::DataStructures
+  class Columns
+    include Enumerable
+    include ActiveScaffold::Configurable
+
+    # The motivation for this collection is that this Columns data structure fills two roles: it provides
+    # the master list of all known columns, and it provides an inheritable list for all other actions (e.g.
+    # Create and Update and List). Well we actually want to *know* about as many columns as possible, so
+    # we don't want people actually removing columns from @set. But at the same time, we want to be able to
+    # manage which columns get inherited. Tada!
+    #
+    # This collection is referenced by other parts of ActiveScaffold and by methods within this DataStructure.
+    # IT IS NOT MEANT FOR PUBLIC USE (but if you know what you're doing, go ahead)
+    def _inheritable=(value)
+      @sorted = true
+      @_inheritable = value
+    end
+
+    # This accessor is used by ActionColumns to create new Column objects without adding them to this set
+    attr_reader :active_record_class
+
+    def initialize(active_record_class, *args)
+      @active_record_class = active_record_class
+      @_inheritable = []
+      @set = []
+
+      self.add *args
+    end
+
+    # the way to add columns to the set. this is primarily useful for virtual columns.
+    # note that this also makes columns inheritable
+    def add(*args)
+      args.flatten! # allow [] as a param
+      args = args.collect{ |a| a.to_sym }
+
+      # make the columns inheritable
+      @_inheritable.concat(args)
+      # then add columns to @set (unless they already exist)
+      args.each { |a| @set &lt;&lt; ActiveScaffold::DataStructures::Column.new(a.to_sym, @active_record_class) unless find_by_name(a) }
+    end
+    alias_method :&lt;&lt;, :add
+
+    def exclude(*args)
+      # only remove columns from _inheritable. we never want to completely forget about a column.
+      args.each { |a| @_inheritable.delete a }
+    end
+
+    # returns an array of columns with the provided names
+    def find_by_names(*names)
+      @set.find_all { |column| names.include? column.name }
+    end
+
+    # returns the column of the given name.
+    def find_by_name(name)
+      # this works because of `def column.=='
+      column = @set.find { |c| c == name }
+      column
+    end
+    alias_method :[], :find_by_name
+
+    def each
+      @set.each {|i| yield i }
+    end
+
+    def _inheritable
+      if @sorted
+        @_inheritable
+      else
+        @_inheritable.sort do |a, b|
+          self[a] &lt;=&gt; self[b]
+        end
+      end
+    end
+  end
 end
\ No newline at end of file</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/columns.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,62 +1,62 @@
-module ActiveScaffold::DataStructures
-  class Set
-    include Enumerable
-    include ActiveScaffold::Configurable
-
-    attr_writer :label
-    def label
-      as_(@label)
-    end
-
-    def initialize(*args)
-      @set = []
-      self.add *args
-    end
-
-    # the way to add items to the set.
-    def add(*args)
-      args.flatten! # allow [] as a param
-      args.each { |arg|
-        arg = arg.to_sym if arg.is_a? String
-        @set &lt;&lt; arg unless @set.include? arg # avoid duplicates
-      }
-    end
-    alias_method :&lt;&lt;, :add
-
-    # the way to remove items from the set.
-    def exclude(*args)
-      args.flatten! # allow [] as a param
-      args.collect! { |a| a.to_sym } # symbolize the args
-      # check respond_to? :to_sym, ActionColumns doesn't respond to to_sym
-      @set.reject! { |c| c.respond_to? :to_sym and args.include? c.to_sym } # reject all items specified
-    end
-    alias_method :remove, :exclude
-
-    # returns an array of items with the provided names
-    def find_by_names(*names)
-      @set.find_all { |item| names.include? item }
-    end
-
-    # returns the item of the given name.
-    def find_by_name(name)
-      # this works because of `def item.=='
-      item = @set.find { |c| c == name }
-      item
-    end
-    alias_method :[], :find_by_name
-
-    def each
-      @set.each {|i| yield i }
-    end
-
-    # returns the number of items in the set
-    def length
-      @set.length
-    end
-    
-    def empty?
-      @set.empty?
-    end
-
-  end
+module ActiveScaffold::DataStructures
+  class Set
+    include Enumerable
+    include ActiveScaffold::Configurable
+
+    attr_writer :label
+    def label
+      as_(@label)
+    end
+
+    def initialize(*args)
+      @set = []
+      self.add *args
+    end
+
+    # the way to add items to the set.
+    def add(*args)
+      args.flatten! # allow [] as a param
+      args.each { |arg|
+        arg = arg.to_sym if arg.is_a? String
+        @set &lt;&lt; arg unless @set.include? arg # avoid duplicates
+      }
+    end
+    alias_method :&lt;&lt;, :add
+
+    # the way to remove items from the set.
+    def exclude(*args)
+      args.flatten! # allow [] as a param
+      args.collect! { |a| a.to_sym } # symbolize the args
+      # check respond_to? :to_sym, ActionColumns doesn't respond to to_sym
+      @set.reject! { |c| c.respond_to? :to_sym and args.include? c.to_sym } # reject all items specified
+    end
+    alias_method :remove, :exclude
+
+    # returns an array of items with the provided names
+    def find_by_names(*names)
+      @set.find_all { |item| names.include? item }
+    end
+
+    # returns the item of the given name.
+    def find_by_name(name)
+      # this works because of `def item.=='
+      item = @set.find { |c| c == name }
+      item
+    end
+    alias_method :[], :find_by_name
+
+    def each
+      @set.each {|i| yield i }
+    end
+
+    # returns the number of items in the set
+    def length
+      @set.length
+    end
+    
+    def empty?
+      @set.empty?
+    end
+
+  end
 end
\ No newline at end of file</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/set.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,234 +1,233 @@
-module ActiveScaffold
-  module Finder
-    module ClassMethods
-      # Takes a collection of search terms (the tokens) and creates SQL that
-      # searches all specified ActiveScaffold columns. A row will match if each
-      # token is found in at least one of the columns.
-      def create_conditions_for_columns(tokens, columns, like_pattern = '%?%')
-        # if there aren't any columns, then just return a nil condition
-        return unless columns.length &gt; 0
-
-        tokens = [tokens] if tokens.is_a? String
-
-        where_clauses = []
-        columns.each do |column|
-          where_clauses &lt;&lt; ((column.column.nil? || column.column.text?) ? &quot;LOWER(#{column.search_sql}) LIKE ?&quot; : &quot;#{column.search_sql} = ?&quot;)
-        end
-        phrase = &quot;(#{where_clauses.join(' OR ')})&quot;
-
-        sql = ([phrase] * tokens.length).join(' AND ')
-        tokens = tokens.collect do |value|
-          columns.collect {|column| (column.column.nil? || column.column.text?) ? like_pattern.sub('?', value.downcase) : column.column.type_cast(value)}
-        end.flatten
-
-        [sql, *tokens]
-      end
-
-      # Generates an SQL condition for the given ActiveScaffold column based on
-      # that column's database type (or form_ui ... for virtual columns?).
-      # TODO: this should reside on the column, not the controller
-      def condition_for_column(column, value, like_pattern = '%?%')
-        # we must check false or not blank because we want to search for false but false is blank
-        return unless column and column.search_sql and not value.blank?
-        search_ui = column.search_ui || column.column.type
-        if self.respond_to?(&quot;condition_for_#{column.name}_column&quot;)
-          self.send(&quot;condition_for_#{column.name}_column&quot;, column, value, like_pattern)
-        elsif self.respond_to?(&quot;condition_for_#{search_ui}_type&quot;)
-          self.send(&quot;condition_for_#{search_ui}_type&quot;, column, value, like_pattern)
-        else
-          case search_ui
-            when :boolean, :checkbox
-            [&quot;#{column.search_sql} = ?&quot;, column.column.type_cast(value)]
-            when :select
-            [&quot;#{column.search_sql} = ?&quot;, value[:id]] unless value[:id].blank?
-            when :multi_select
-            [&quot;#{column.search_sql} in (?)&quot;, value.values.collect{|hash| hash[:id]}]
-            else
-              if column.column.nil? || column.column.text?
-                [&quot;LOWER(#{column.search_sql}) LIKE ?&quot;, like_pattern.sub('?', value.downcase)]
-              else
-                [&quot;#{column.search_sql} = ?&quot;, column.column.type_cast(value)]
-              end
-          end
-        end
-      end
-
-      def condition_for_integer_type(column, value, like_pattern)
-        if value['from'].blank? or not ActiveScaffold::Finder::NumericComparators.include?(value['opt'])
-          nil
-        elsif value['opt'] == 'BETWEEN'
-          [&quot;#{column.search_sql} BETWEEN ? AND ?&quot;, value['from'].to_f, value['to'].to_f]
-        else
-          [&quot;#{column.search_sql} #{value['opt']} ?&quot;, value['from'].to_f]
-        end
-      end
-      alias_method :condition_for_decimal_type, :condition_for_integer_type
-      alias_method :condition_for_float_type, :condition_for_integer_type
-
-      def condition_for_datetime_type(column, value, like_pattern)
-        conversion = value['from']['hour'].blank? &amp;&amp; value['to']['hour'].blank? ? 'to_date' : 'to_time'
-        from_value, to_value = ['from', 'to'].collect do |field|
-          Time.zone.local(*['year', 'month', 'day', 'hour', 'minutes', 'seconds'].collect {|part| value[field][part].to_i}) rescue nil
-        end
-
-        if from_value.nil? and to_value.nil?
-          nil
-        elsif !from_value
-          [&quot;#{column.search_sql} &lt;= ?&quot;, to_value.send(conversion).to_s(:db)]
-        elsif !to_value
-          [&quot;#{column.search_sql} &gt;= ?&quot;, from_value.send(conversion).to_s(:db)]
-        else
-          [&quot;#{column.search_sql} BETWEEN ? AND ?&quot;, from_value.send(conversion).to_s(:db), to_value.send(conversion).to_s(:db)]
-        end
-      end
-      alias_method :condition_for_date_type, :condition_for_datetime_type
-      alias_method :condition_for_time_type, :condition_for_datetime_type
-      alias_method :condition_for_timestamp_type, :condition_for_datetime_type
-    end
-
-    NumericComparators = [
-      '=',
-      '&gt;=',
-      '&lt;=',
-      '&gt;',
-      '&lt;',
-      '!=',
-      'BETWEEN'
-    ]
-
-    def self.included(klass)
-      klass.extend ClassMethods
-    end
-
-    protected
-
-    attr_writer :active_scaffold_conditions
-    def active_scaffold_conditions
-      @active_scaffold_conditions ||= []
-    end
-
-    attr_writer :active_scaffold_joins
-    def active_scaffold_joins
-      @active_scaffold_joins ||= []
-    end
-
-    attr_writer :active_scaffold_habtm_joins
-    def active_scaffold_habtm_joins
-      @active_scaffold_habtm_joins ||= []
-    end
-    
-    def all_conditions
-      merge_conditions(
-        active_scaffold_conditions,                   # from the search modules
-        conditions_for_collection,                    # from the dev
-        conditions_from_params,                       # from the parameters (e.g. /users/list?first_name=Fred)
-        conditions_from_constraints,                  # from any constraints (embedded scaffolds)
-        active_scaffold_session_storage[:conditions] # embedding conditions (weaker constraints)
-      )
-    end
-
-    # returns a single record (the given id) but only if it's allowed for the specified action.
-    # accomplishes this by checking model.#{action}_authorized?
-    # TODO: this should reside on the model, not the controller
-    def find_if_allowed(id, action, klass = nil)
-      klass ||= active_scaffold_config.model
-      record = klass.find(id)
-      raise ActiveScaffold::RecordNotAllowed unless record.authorized_for?(:action =&gt; action.to_sym)
-      return record
-    end
-
-    # returns a Paginator::Page (not from ActiveRecord::Paginator) for the given parameters
-    # options may include:
-    # * :sorting - a Sorting DataStructure (basically an array of hashes of field =&gt; direction, e.g. [{:field1 =&gt; 'asc'}, {:field2 =&gt; 'desc'}]). please note that multi-column sorting has some limitations: if any column in a multi-field sort uses method-based sorting, it will be ignored. method sorting only works for single-column sorting.
-    # * :per_page
-    # * :page
-    # TODO: this should reside on the model, not the controller
-    def find_page(options = {})
-      options.assert_valid_keys :sorting, :per_page, :page, :count_includes
-
-      full_includes = (active_scaffold_joins.empty? ? nil : active_scaffold_joins)
-      options[:per_page] ||= 999999999
-      options[:page] ||= 1
-      options[:count_includes] ||= full_includes
-
-      klass = active_scaffold_config.model
-
-      # create a general-use options array that's compatible with Rails finders
-      finder_options = { :order =&gt; build_order_clause(options[:sorting]),
-                         :conditions =&gt; all_conditions,
-                         :joins =&gt; joins_for_finder,
-                         :include =&gt; options[:count_includes]}
-                         
-      finder_options.merge! custom_finder_options
-
-      # NOTE: we must use :include in the count query, because some conditions may reference other tables
-      count = klass.count(finder_options.reject{|k,v| [:order].include? k})
-
-      finder_options.merge! :include =&gt; full_includes
-
-      # we build the paginator differently for method- and sql-based sorting
-      if options[:sorting] and options[:sorting].sorts_by_method?
-        pager = ::Paginator.new(count, options[:per_page]) do |offset, per_page|
-          sorted_collection = sort_collection_by_column(klass.find(:all, finder_options), *options[:sorting].first)
-          sorted_collection.slice(offset, per_page)
-        end
-      else
-        pager = ::Paginator.new(count, options[:per_page]) do |offset, per_page|
-          klass.find(:all, finder_options.merge(:offset =&gt; offset, :limit =&gt; per_page))
-        end
-      end
-
-      pager.page(options[:page])
-    end
-
-    def joins_for_finder
-      case joins_for_collection
-        when String
-          [ joins_for_collection ]
-        when Array
-          joins_for_collection
-        else
-          []
-      end + active_scaffold_habtm_joins
-    end
-    
-    # TODO: this should reside on the model, not the controller
-    def merge_conditions(*conditions)
-      c = conditions.find_all {|c| not c.nil? and not c.empty? }
-      c.empty? ? nil : c.collect{|c| active_scaffold_config.model.send(:sanitize_sql, c)}.join(' AND ')
-    end
-
-    # accepts a DataStructure::Sorting object and builds an order-by clause
-    # TODO: this should reside on the model, not the controller
-    def build_order_clause(sorting)
-      return nil if sorting.nil? or sorting.sorts_by_method?
-
-      # unless the sorting is by method, create the sql string
-      order = []
-      sorting.each do |clause|
-        sort_column, sort_direction = clause
-        sql = sort_column.sort[:sql]
-        next if sql.nil? or sql.empty?
-
-        order &lt;&lt; &quot;#{sql} #{sort_direction}&quot;
-      end
-
-      order = order.join(', ')
-      order = nil if order.empty?
-
-      order
-    end
-
-    # TODO: this should reside on the column, not the controller
-    def sort_collection_by_column(collection, column, order)
-      sorter = column.sort[:method]
-      collection = collection.sort_by { |record|
-        value = (sorter.is_a? Proc) ? record.instance_eval(&amp;sorter) : record.instance_eval(sorter)
-        value = '' if value.nil?
-        value
-      }
-      collection.reverse! if order.downcase == 'desc'
-      collection
-    end
-  end
-end
+module ActiveScaffold
+  module Finder
+    module ClassMethods
+      # Takes a collection of search terms (the tokens) and creates SQL that
+      # searches all specified ActiveScaffold columns. A row will match if each
+      # token is found in at least one of the columns.
+      def create_conditions_for_columns(tokens, columns, like_pattern = '%?%')
+        # if there aren't any columns, then just return a nil condition
+        return unless columns.length &gt; 0
+
+        tokens = [tokens] if tokens.is_a? String
+
+        where_clauses = []
+        columns.each do |column|
+          where_clauses &lt;&lt; ((column.column.nil? || column.column.text?) ? &quot;LOWER(#{column.search_sql}) LIKE ?&quot; : &quot;#{column.search_sql} = ?&quot;)
+        end
+        phrase = &quot;(#{where_clauses.join(' OR ')})&quot;
+
+        sql = ([phrase] * tokens.length).join(' AND ')
+        tokens = tokens.collect do |value|
+          columns.collect {|column| (column.column.nil? || column.column.text?) ? like_pattern.sub('?', value.downcase) : column.column.type_cast(value)}
+        end.flatten
+
+        [sql, *tokens]
+      end
+
+      # Generates an SQL condition for the given ActiveScaffold column based on
+      # that column's database type (or form_ui ... for virtual columns?).
+      # TODO: this should reside on the column, not the controller
+      def condition_for_column(column, value, like_pattern = '%?%')
+        # we must check false or not blank because we want to search for false but false is blank
+        return unless column and column.search_sql and not value.blank?
+        search_ui = column.search_ui || column.column.type
+        if self.respond_to?(&quot;condition_for_#{column.name}_column&quot;)
+          self.send(&quot;condition_for_#{column.name}_column&quot;, column, value, like_pattern)
+        elsif self.respond_to?(&quot;condition_for_#{search_ui}_type&quot;)
+          self.send(&quot;condition_for_#{search_ui}_type&quot;, column, value, like_pattern)
+        else
+          case search_ui
+            when :boolean, :checkbox
+            [&quot;#{column.search_sql} = ?&quot;, column.column.type_cast(value)]
+            when :select
+            [&quot;#{column.search_sql} = ?&quot;, value[:id]] unless value[:id].blank?
+            when :multi_select
+            [&quot;#{column.search_sql} in (?)&quot;, value.values.collect{|hash| hash[:id]}]
+            else
+              if column.column.nil? || column.column.text?
+                [&quot;LOWER(#{column.search_sql}) LIKE ?&quot;, like_pattern.sub('?', value.downcase)]
+              else
+                [&quot;#{column.search_sql} = ?&quot;, column.column.type_cast(value)]
+              end
+          end
+        end
+      end
+
+      def condition_for_integer_type(column, value, like_pattern)
+        if value['from'].blank? or not ActiveScaffold::Finder::NumericComparators.include?(value['opt'])
+          nil
+        elsif value['opt'] == 'BETWEEN'
+          [&quot;#{column.search_sql} BETWEEN ? AND ?&quot;, value['from'].to_f, value['to'].to_f]
+        else
+          [&quot;#{column.search_sql} #{value['opt']} ?&quot;, value['from'].to_f]
+        end
+      end
+      alias_method :condition_for_decimal_type, :condition_for_integer_type
+      alias_method :condition_for_float_type, :condition_for_integer_type
+
+      def condition_for_datetime_type(column, value, like_pattern)
+        conversion = value['from']['hour'].blank? &amp;&amp; value['to']['hour'].blank? ? 'to_date' : 'to_time'
+        from_value, to_value = ['from', 'to'].collect do |field|
+          Time.zone.local(*['year', 'month', 'day', 'hour', 'minutes', 'seconds'].collect {|part| value[field][part].to_i}) rescue nil
+        end
+
+        if from_value.nil? and to_value.nil?
+          nil
+        elsif !from_value
+          [&quot;#{column.search_sql} &lt;= ?&quot;, to_value.send(conversion).to_s(:db)]
+        elsif !to_value
+          [&quot;#{column.search_sql} &gt;= ?&quot;, from_value.send(conversion).to_s(:db)]
+        else
+          [&quot;#{column.search_sql} BETWEEN ? AND ?&quot;, from_value.send(conversion).to_s(:db), to_value.send(conversion).to_s(:db)]
+        end
+      end
+      alias_method :condition_for_date_type, :condition_for_datetime_type
+      alias_method :condition_for_time_type, :condition_for_datetime_type
+      alias_method :condition_for_timestamp_type, :condition_for_datetime_type
+    end
+
+    NumericComparators = [
+      '=',
+      '&gt;=',
+      '&lt;=',
+      '&gt;',
+      '&lt;',
+      '!=',
+      'BETWEEN'
+    ]
+
+    def self.included(klass)
+      klass.extend ClassMethods
+    end
+
+    protected
+
+    attr_writer :active_scaffold_conditions
+    def active_scaffold_conditions
+      @active_scaffold_conditions ||= []
+    end
+
+    attr_writer :active_scaffold_joins
+    def active_scaffold_joins
+      @active_scaffold_joins ||= []
+    end
+
+    attr_writer :active_scaffold_habtm_joins
+    def active_scaffold_habtm_joins
+      @active_scaffold_habtm_joins ||= []
+    end
+    
+    def all_conditions
+      merge_conditions(
+        active_scaffold_conditions,                   # from the search modules
+        conditions_for_collection,                    # from the dev
+        conditions_from_params,                       # from the parameters (e.g. /users/list?first_name=Fred)
+        conditions_from_constraints,                  # from any constraints (embedded scaffolds)
+        active_scaffold_session_storage[:conditions] # embedding conditions (weaker constraints)
+      )
+    end
+
+    # returns a single record (the given id) but only if it's allowed for the specified action.
+    # accomplishes this by checking model.#{action}_authorized?
+    # TODO: this should reside on the model, not the controller
+    def find_if_allowed(id, action, klass = nil)
+      klass ||= active_scaffold_config.model
+      record = klass.find(id)
+      raise ActiveScaffold::RecordNotAllowed unless record.authorized_for?(:action =&gt; action.to_sym)
+      return record
+    end
+
+    # returns a Paginator::Page (not from ActiveRecord::Paginator) for the given parameters
+    # options may include:
+    # * :sorting - a Sorting DataStructure (basically an array of hashes of field =&gt; direction, e.g. [{:field1 =&gt; 'asc'}, {:field2 =&gt; 'desc'}]). please note that multi-column sorting has some limitations: if any column in a multi-field sort uses method-based sorting, it will be ignored. method sorting only works for single-column sorting.
+    # * :per_page
+    # * :page
+    # TODO: this should reside on the model, not the controller
+    def find_page(options = {})
+      options.assert_valid_keys :sorting, :per_page, :page, :count_includes
+
+      full_includes = (active_scaffold_joins.blank? ? nil : active_scaffold_joins)
+      options[:per_page] ||= 999999999
+      options[:page] ||= 1
+      options[:count_includes] ||= full_includes
+
+      klass = active_scaffold_config.model
+
+      # create a general-use options array that's compatible with Rails finders
+      finder_options = { :order =&gt; build_order_clause(options[:sorting]),
+                         :conditions =&gt; all_conditions,
+                         :joins =&gt; joins_for_finder,
+                         :include =&gt; options[:count_includes]}
+                         
+      finder_options.merge! custom_finder_options
+
+      # NOTE: we must use :include in the count query, because some conditions may reference other tables
+      count = klass.count(finder_options.reject{|k,v| [:select, :order].include? k})
+
+      finder_options.merge! :include =&gt; full_includes
+
+      # we build the paginator differently for method- and sql-based sorting
+      if options[:sorting] and options[:sorting].sorts_by_method?
+        pager = ::Paginator.new(count, options[:per_page]) do |offset, per_page|
+          sorted_collection = sort_collection_by_column(klass.find(:all, finder_options), *options[:sorting].first)
+          sorted_collection.slice(offset, per_page)
+        end
+      else
+        pager = ::Paginator.new(count, options[:per_page]) do |offset, per_page|
+          klass.find(:all, finder_options.merge(:offset =&gt; offset, :limit =&gt; per_page))
+        end
+      end
+
+      pager.page(options[:page])
+    end
+
+    def joins_for_finder
+      case joins_for_collection
+        when String
+          [ joins_for_collection ]
+        when Array
+          joins_for_collection
+        else
+          []
+      end + active_scaffold_habtm_joins
+    end
+    
+    # TODO: this should reside on the model, not the controller
+    def merge_conditions(*conditions)
+      active_scaffold_config.model.merge_conditions(*conditions)
+    end
+
+    # accepts a DataStructure::Sorting object and builds an order-by clause
+    # TODO: this should reside on the model, not the controller
+    def build_order_clause(sorting)
+      return nil if sorting.nil? or sorting.sorts_by_method?
+
+      # unless the sorting is by method, create the sql string
+      order = []
+      sorting.each do |clause|
+        sort_column, sort_direction = clause
+        sql = sort_column.sort[:sql]
+        next if sql.nil? or sql.empty?
+
+        order &lt;&lt; &quot;#{sql} #{sort_direction}&quot;
+      end
+
+      order = order.join(', ')
+      order = nil if order.empty?
+
+      order
+    end
+
+    # TODO: this should reside on the column, not the controller
+    def sort_collection_by_column(collection, column, order)
+      sorter = column.sort[:method]
+      collection = collection.sort_by { |record|
+        value = (sorter.is_a? Proc) ? record.instance_eval(&amp;sorter) : record.instance_eval(sorter)
+        value = '' if value.nil?
+        value
+      }
+      collection.reverse! if order.downcase == 'desc'
+      collection
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/finder.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,40 +1,40 @@
-module ActiveScaffold
-  module Helpers
-    module AssociationHelpers
-      # Provides a way to honor the :conditions on an association while searching the association's klass
-      def association_options_find(association, conditions = nil)
-        association.klass.find(:all, :conditions =&gt; controller.send(:merge_conditions, conditions, association.options[:conditions]))
-      end
-
-      def association_options_count(association, conditions = nil)
-        association.klass.count(:all, :conditions =&gt; controller.send(:merge_conditions, conditions, association.options[:conditions]))
-      end
-
-      # returns options for the given association as a collection of [id, label] pairs intended for the +options_for_select+ helper.
-      def options_for_association(association, include_all = false)
-        available_records = association_options_find(association, include_all ? nil : options_for_association_conditions(association))
-        available_records ||= []
-        available_records.sort{|a,b| a.to_label &lt;=&gt; b.to_label}.collect { |model| [ model.to_label, model.id ] }
-      end
-
-      def options_for_association_count(association)
-        association_options_count(association, options_for_association_conditions(association))
-      end
-
-      # A useful override for customizing the records present in an association dropdown.
-      # Should work in both the subform and form_ui=&gt;:select modes.
-      # Check association.name to specialize the conditions per-column.
-      def options_for_association_conditions(association)
-        return nil if association.options[:through]
-        case association.macro
-          when :has_one, :has_many
-            # Find only orphaned objects
-            &quot;#{association.primary_key_name} IS NULL&quot;
-          when :belongs_to, :has_and_belongs_to_many
-            # Find all
-            nil
-        end
-      end
-    end
-  end
-end
+module ActiveScaffold
+  module Helpers
+    module AssociationHelpers
+      # Provides a way to honor the :conditions on an association while searching the association's klass
+      def association_options_find(association, conditions = nil)
+        association.klass.find(:all, :conditions =&gt; controller.send(:merge_conditions, conditions, association.options[:conditions]))
+      end
+
+      def association_options_count(association, conditions = nil)
+        association.klass.count(:all, :conditions =&gt; controller.send(:merge_conditions, conditions, association.options[:conditions]))
+      end
+
+      # returns options for the given association as a collection of [id, label] pairs intended for the +options_for_select+ helper.
+      def options_for_association(association, include_all = false)
+        available_records = association_options_find(association, include_all ? nil : options_for_association_conditions(association))
+        available_records ||= []
+        available_records.sort{|a,b| a.to_label &lt;=&gt; b.to_label}.collect { |model| [ model.to_label, model.id ] }
+      end
+
+      def options_for_association_count(association)
+        association_options_count(association, options_for_association_conditions(association))
+      end
+
+      # A useful override for customizing the records present in an association dropdown.
+      # Should work in both the subform and form_ui=&gt;:select modes.
+      # Check association.name to specialize the conditions per-column.
+      def options_for_association_conditions(association)
+        return nil if association.options[:through]
+        case association.macro
+          when :has_one, :has_many
+            # Find only orphaned objects
+            &quot;#{association.primary_key_name} IS NULL&quot;
+          when :belongs_to, :has_and_belongs_to_many
+            # Find all
+            nil
+        end
+      end
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/helpers/association_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,25 +1,25 @@
-module ActiveScaffold
-  module Helpers
-    module ControllerHelpers
-      def self.included(controller)
-        controller.class_eval { helper_method :params_for }
-      end
-      
-      include ActiveScaffold::Helpers::IdHelpers
-      
-      def params_for(options = {})
-        # :adapter and :position are one-use rendering arguments. they should not propagate.
-        # :sort, :sort_direction, and :page are arguments that stored in the session. they need not propagate.
-        # and wow. no we don't want to propagate :record.
-        # :commit is a special rails variable for form buttons
-        blacklist = [:adapter, :position, :sort, :sort_direction, :page, :record, :commit, :_method]
-        unless @params_for
-          @params_for = params.clone.delete_if { |key, value| blacklist.include? key.to_sym if key }
-          @params_for[:controller] = '/' + @params_for[:controller] unless @params_for[:controller].first(1) == '/' # for namespaced controllers
-          @params_for.delete(:id) if @params_for[:id].nil?
-        end
-        @params_for.merge(options)
-      end
-    end
-  end
+module ActiveScaffold
+  module Helpers
+    module ControllerHelpers
+      def self.included(controller)
+        controller.class_eval { helper_method :params_for }
+      end
+      
+      include ActiveScaffold::Helpers::IdHelpers
+      
+      def params_for(options = {})
+        # :adapter and :position are one-use rendering arguments. they should not propagate.
+        # :sort, :sort_direction, and :page are arguments that stored in the session. they need not propagate.
+        # and wow. no we don't want to propagate :record.
+        # :commit is a special rails variable for form buttons
+        blacklist = [:adapter, :position, :sort, :sort_direction, :page, :record, :commit, :_method]
+        unless @params_for
+          @params_for = params.clone.delete_if { |key, value| blacklist.include? key.to_sym if key }
+          @params_for[:controller] = '/' + @params_for[:controller] unless @params_for[:controller].first(1) == '/' # for namespaced controllers
+          @params_for.delete(:id) if @params_for[:id].nil?
+        end
+        @params_for.merge(options)
+      end
+    end
+  end
 end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/helpers/controller_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,3 @@
-I18n.load_path &lt;&lt; File.dirname(__FILE__) + '/../../../lib/active_scaffold/locale/en-countries.yml'
-
 module ActiveScaffold
   module Helpers
     module CountryHelpers
@@ -25,7 +23,7 @@ module ActiveScaffold
           country_options += &quot;&lt;option value=\&quot;\&quot; disabled=\&quot;disabled\&quot;&gt;-------------&lt;/option&gt;\n&quot;
         end
 
-        return country_options + options_for_select(COUNTRIES.collect {|country| [I18n.t(&quot;countries.#{country}&quot;), country]}, selected)
+        return country_options + options_for_select(COUNTRIES.collect {|country| [I18n.t(&quot;countries.#{country}&quot;, :default =&gt; country.to_s.titleize), country]}, selected)
       end
 
       # Returns a string of option tags for the states in the United States. Supply a state name as +selected to</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/helpers/country_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,15 +6,12 @@ module ActiveScaffold
       # It does not do any rendering. It only decides which method is responsible for rendering.
       def active_scaffold_input_for(column, scope = nil)
         options = active_scaffold_input_options(column, scope)
-
         # first, check if the dev has created an override for this specific field
         if override_form_field?(column)
           send(override_form_field(column), @record, options[:name])
-
         # second, check if the dev has specified a valid form_ui for this column
         elsif column.form_ui and override_input?(column.form_ui)
           send(override_input(column.form_ui), column, options)
-
         # fallback: we get to make the decision
         else
           if column.association
@@ -64,7 +61,7 @@ module ActiveScaffold
 
       def javascript_for_update_column(column, scope, options)
         if column.options[:update_column]
-          url_params = {:action =&gt; 'render_field', :id =&gt; @record.id}
+          url_params = {:action =&gt; 'render_field', :id =&gt; params[:id]}
           url_params[:controller] = controller.class.active_scaffold_controller_for(@record.class).controller_path if scope
 
           parameters = &quot;column=#{column.name}&quot;
@@ -89,7 +86,7 @@ module ActiveScaffold
         selected = associated.nil? ? nil : associated.id
         method = column.association.macro == :belongs_to ? column.association.primary_key_name : column.name
         options[:name] += '[id]'
-        select(:record, method, select_options.uniq, {:selected =&gt; selected, :include_blank =&gt; as_(:_select_)}, options)
+        select(:record, method, select_options.uniq, {:selected =&gt; selected, :include_blank =&gt; as_(:_select_)}, options.merge(column.options))
       end
 
       def active_scaffold_input_plural_association(column, options)</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/helpers/form_column_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -35,8 +35,12 @@ module ActiveScaffold
                   firsts = value.first(column.associated_limit + 1).collect { |v| v.to_label }
                   firsts[column.associated_limit] = '&#8230;' if firsts.length &gt; column.associated_limit
                 end
-                formatted_value = clean_column_value(format_value(firsts.join(', ')))
-                formatted_value &lt;&lt; &quot; (#{value.length})&quot; if column.associated_number? and column.associated_limit and firsts.length &gt; column.associated_limit
+                if column.associated_limit == 0
+                  formatted_value = value.length if column.associated_number?
+                else
+                  formatted_value = clean_column_value(format_value(firsts.join(', ')))
+                  formatted_value &lt;&lt; &quot; (#{value.length})&quot; if column.associated_number? and column.associated_limit and firsts.length &gt; column.associated_limit
+                end
                 formatted_value
             end
           end
@@ -120,7 +124,7 @@ module ActiveScaffold
       ## Overrides
       ##
       def active_scaffold_column_text(column, record)
-        truncate(clean_column_value(record.send(column.name)), :length =&gt; 50)
+        truncate(clean_column_value(record.send(column.name)), :length =&gt; column.options[:truncate] || 50)
       end
 
       def active_scaffold_column_checkbox(column, record)
@@ -130,7 +134,7 @@ module ActiveScaffold
           id_options = {:id =&gt; record.id.to_s, :action =&gt; 'update_column', :name =&gt; column.name.to_s}
           tag_options = {:tag =&gt; &quot;span&quot;, :id =&gt; element_cell_id(id_options), :class =&gt; &quot;in_place_editor_field&quot;}
           script = remote_function(:method =&gt; 'POST', :url =&gt; {:controller =&gt; params_for[:controller], :action =&gt; &quot;update_column&quot;, :column =&gt; column.name, :id =&gt; record.id.to_s, :value =&gt; !column_value, :eid =&gt; params[:eid]})
-          content_tag(:span, check_box_tag(tag_options[:id], 1, checked, {:onchange =&gt; script}) , tag_options)
+          content_tag(:span, check_box_tag(tag_options[:id], 1, checked, {:onclick =&gt; script}) , tag_options)
         else
           check_box_tag(nil, 1, checked, :disabled =&gt; true)
         end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/helpers/list_column_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,46 +1,46 @@
-module ActiveScaffold
-  module Helpers
-    # Helpers that assist with the rendering of a List Column
-    module ShowColumnHelpers
-      def show_column_value(record, column)
-        # check for an override helper
-        if show_column_override? column
-          # we only pass the record as the argument. we previously also passed the formatted_value,
-          # but mike perham pointed out that prohibited the usage of overrides to improve on the
-          # performance of our default formatting. see issue #138.
-          send(show_column_override(column), record)
-        # second, check if the dev has specified a valid list_ui for this column
-        elsif column.list_ui and override_show_column_ui?(column.list_ui)
-          send(override_show_column_ui(column.list_ui), column, record)
-        else
-          if override_show_column_ui?(column.column.type)
-            send(override_show_column_ui(column.column.type), column, record)
-          else
-            get_column_value(record, column)
-          end
-        end
-      end
-
-      def active_scaffold_show_text(column, record)
-        simple_format(get_column_value(record, column))
-      end
-
-      def show_column_override(column)
-        &quot;#{column.name.to_s.gsub('?', '')}_show_column&quot; # parse out any question marks (see issue 227)
-      end
-
-      def show_column_override?(column)
-        respond_to?(show_column_override(column))
-      end
-
-      def override_show_column_ui?(list_ui)
-        respond_to?(override_show_column_ui(list_ui))
-      end
-
-      # the naming convention for overriding show types with helpers
-      def override_show_column_ui(list_ui)
-        &quot;active_scaffold_show_#{list_ui}&quot;
-      end
-    end
-  end
-end
+module ActiveScaffold
+  module Helpers
+    # Helpers that assist with the rendering of a List Column
+    module ShowColumnHelpers
+      def show_column_value(record, column)
+        # check for an override helper
+        if show_column_override? column
+          # we only pass the record as the argument. we previously also passed the formatted_value,
+          # but mike perham pointed out that prohibited the usage of overrides to improve on the
+          # performance of our default formatting. see issue #138.
+          send(show_column_override(column), record)
+        # second, check if the dev has specified a valid list_ui for this column
+        elsif column.list_ui and override_show_column_ui?(column.list_ui)
+          send(override_show_column_ui(column.list_ui), column, record)
+        else
+          if column.column and override_show_column_ui?(column.column.type)
+            send(override_show_column_ui(column.column.type), column, record)
+          else
+            get_column_value(record, column)
+          end
+        end
+      end
+
+      def active_scaffold_show_text(column, record)
+        simple_format(clean_column_value(record.send(column.name)))
+      end
+
+      def show_column_override(column)
+        &quot;#{column.name.to_s.gsub('?', '')}_show_column&quot; # parse out any question marks (see issue 227)
+      end
+
+      def show_column_override?(column)
+        respond_to?(show_column_override(column))
+      end
+
+      def override_show_column_ui?(list_ui)
+        respond_to?(override_show_column_ui(list_ui))
+      end
+
+      # the naming convention for overriding show types with helpers
+      def override_show_column_ui(list_ui)
+        &quot;active_scaffold_show_#{list_ui}&quot;
+      end
+    end
+  end
+end</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/helpers/show_column_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,7 @@ module ActiveScaffold
       include ActiveScaffold::Helpers::ListColumnHelpers
       include ActiveScaffold::Helpers::ShowColumnHelpers
       include ActiveScaffold::Helpers::FormColumnHelpers
+      include ActiveScaffold::Helpers::CountryHelpers
       include ActiveScaffold::Helpers::SearchColumnHelpers
 
       ##</diff>
      <filename>vendor/plugins/active_scaffold/lib/active_scaffold/helpers/view_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -76,7 +76,7 @@ module ActionView #:nodoc:
     # TODO: Work with rails core team to find a better way to check for this.
     def template_exists?(template_name)
       begin
-        self.view_paths.find_template(template_name, @template_format)
+        self.view_paths.find_template_without_active_scaffold(template_name, @template_format)
         return true
       rescue ActionView::MissingTemplate =&gt; e
         return false</diff>
      <filename>vendor/plugins/active_scaffold/lib/extensions/action_view_rendering.rb</filename>
    </modified>
    <modified>
      <diff>@@ -34,7 +34,8 @@ module RespondsToParent
       response.headers['Content-Type'] = 'text/html; charset=UTF-8'
       
       # Either pull out a redirect or the request body
-      script =  if location = erase_redirect_results
+      script =  if location = response.headers['Location'] # erase_redirect_results returned strange values in production mode
+                  erase_redirect_results
                   &quot;document.location.href = #{location.to_s.inspect}&quot;
                 else
                   response.body</diff>
      <filename>vendor/plugins/active_scaffold/lib/responds_to_parent.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/.specification</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/CHANGELOG.rdoc</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/MIT-LICENSE</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/Manifest.txt</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/README.rdoc</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/Rakefile</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/generators/session/session_generator.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/generators/session/templates/session.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/init.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/email.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/logged_in_status.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/login.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/magic_columns.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/password.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/perishable_token.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/persistence_token.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/restful_authentication.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/session_maintenance.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/single_access_token.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/acts_as_authentic/validations_scope.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/authenticates_many/association.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/authenticates_many/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/controller_adapters/abstract_adapter.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/controller_adapters/merb_adapter.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/controller_adapters/rails_adapter.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/crypto_providers/aes256.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/crypto_providers/bcrypt.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/crypto_providers/md5.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/crypto_providers/sha1.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/crypto_providers/sha512.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/i18n.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/random.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/regex.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/activation.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/active_record_trickery.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/brute_force_protection.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/callbacks.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/cookies.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/existence.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/foundation.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/http_auth.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/id.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/klass.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/magic_columns.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/magic_states.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/params.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/password.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/perishable_token.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/persistence.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/priority_record.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/scopes.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/session.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/timeout.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/unauthorized_record.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/session/validation.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/test_case.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/test_case/mock_controller.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/test_case/mock_cookie_jar.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/test_case/mock_logger.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/test_case/mock_request.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/test_case/rails_request_adapter.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/lib/authlogic/version.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/rails/init.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/shoulda_macros/authlogic.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/base_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/email_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/logged_in_status_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/login_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/magic_columns_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/password_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/perishable_token_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/persistence_token_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/restful_authentication_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/session_maintenance_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/acts_as_authentic_test/single_access_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/authenticates_many_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/crypto_provider_test/aes256_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/crypto_provider_test/bcrypt_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/crypto_provider_test/sha1_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/crypto_provider_test/sha512_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/fixtures/companies.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/fixtures/employees.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/fixtures/projects.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/fixtures/users.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/affiliate.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/company.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/employee.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/employee_session.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/ldaper.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/ordered_hash.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/project.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/user.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/libs/user_session.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/random_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/activation_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/active_record_trickery_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/brute_force_protection_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/callbacks_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/cookies_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/credentials_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/existence_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/http_auth_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/id_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/klass_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/magic_columns_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/magic_states_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/params_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/password_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/perishability_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/persistence_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/scopes_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/session_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/timeout_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/unauthorized_record_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/session_test/validation_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/authlogic-2.0.13/test/test_helper.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/.specification</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/CHANGELOG.rdoc</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/MIT-LICENSE</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/Manifest.txt</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/README.rdoc</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/Rakefile</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/TODO.rdoc</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/init.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/active_record/associations.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/active_record/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/active_record/connection_adapters/mysql_adapter.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/active_record/connection_adapters/postgresql_adapter.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/begins_with.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/blank.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/child_of.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/descendant_of.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/ends_with.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/equals.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/greater_than.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/greater_than_or_equal_to.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/inclusive_descendant_of.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/keywords.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/less_than.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/less_than_or_equal_to.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/like.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/nested_set.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/nil.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/not_begin_with.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/not_blank.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/not_end_with.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/not_equal.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/not_have_keywords.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/not_like.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/not_nil.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/condition/sibling_of.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/conditions/any_or_all.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/conditions/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/conditions/groups.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/conditions/magic_methods.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/conditions/multiparameter_attributes.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/conditions/protection.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/config.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/config/helpers.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/config/search.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/core_ext/hash.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/core_ext/object.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/control_types/link.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/control_types/links.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/control_types/remote_link.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/control_types/remote_links.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/control_types/remote_select.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/control_types/select.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/form.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/helpers/utilities.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/absolute.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/acos.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/asin.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/atan.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/avg.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/ceil.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/char_length.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/cos.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/cot.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/count.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/day_of_month.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/day_of_week.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/day_of_year.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/degrees.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/exp.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/floor.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/hex.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/hour.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/log.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/log10.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/log2.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/lower.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/ltrim.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/md5.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/microseconds.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/milliseconds.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/minute.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/month.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/octal.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/radians.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/round.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/rtrim.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/second.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/sign.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/sin.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/square_root.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/sum.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/tan.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/trim.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/upper.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/week.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/modifiers/year.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/search/base.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/search/conditions.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/search/ordering.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/search/pagination.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/search/protection.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/search/searching.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/shared/utilities.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/shared/virtual_classes.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/lib/searchlogic/version.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/active_record_tests/associations_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/active_record_tests/base_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/base_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/begins_with_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/blank_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/child_of_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/descendant_of_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/ends_with_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/equals_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/greater_than_or_equal_to_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/greater_than_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/inclusive_descendant_of_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/keywords_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/less_than_or_equal_to_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/less_than_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/like_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/nil_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/not_begin_with_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/not_blank_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/not_end_with_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/not_equal_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/not_have_keywords_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/not_like_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/not_nil_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/condition_tests/sibling_of_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/conditions_tests/any_or_all_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/conditions_tests/base_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/conditions_tests/groups_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/conditions_tests/magic_methods_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/conditions_tests/multiparameter_attributes_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/conditions_tests/protection_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/config_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/fixtures/accounts.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/fixtures/animals.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/fixtures/orders.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/fixtures/user_groups.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/fixtures/users.yml</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/libs/awesome_nested_set.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/libs/awesome_nested_set/.autotest</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/libs/awesome_nested_set/compatability.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/libs/awesome_nested_set/helper.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/libs/awesome_nested_set/named_scope.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/libs/rexml_fix.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/modifier_tests/day_of_month_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/search_tests/base_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/search_tests/conditions_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/search_tests/ordering_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/search_tests/pagination_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/search_tests/protection_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/gems/searchlogic-1.6.6/test/test_helper.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>6e0a2a31bc1cc4ed0874da9215532d0af3ca52dd</id>
    </parent>
  </parents>
  <author>
    <name>Geoffrey Dagley</name>
    <email>gdagley@gmail.com</email>
  </author>
  <url>http://github.com/gdagley/basejumper/commit/c8364c07a45d24705969275a2739a326b1bd5799</url>
  <id>c8364c07a45d24705969275a2739a326b1bd5799</id>
  <committed-date>2009-06-24T18:56:57-07:00</committed-date>
  <authored-date>2009-06-24T18:56:57-07:00</authored-date>
  <message>update gems and plugins</message>
  <tree>178cf59ca827c0df0d8ae7f93f549f083ec094e6</tree>
  <committer>
    <name>Geoffrey Dagley</name>
    <email>gdagley@gmail.com</email>
  </committer>
</commit>
