<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/merb_autoscaffold/orms/activerecord.rb</filename>
    </added>
    <added>
      <filename>spec/activerecord/app/controllers/application.rb</filename>
    </added>
    <added>
      <filename>spec/activerecord/app/init.rb</filename>
    </added>
    <added>
      <filename>spec/activerecord/app/log/merb_test.log</filename>
    </added>
    <added>
      <filename>spec/activerecord/app/models/blog.rb</filename>
    </added>
    <added>
      <filename>spec/activerecord/app/models/comment.rb</filename>
    </added>
    <added>
      <filename>spec/activerecord/log/merb_test.log</filename>
    </added>
    <added>
      <filename>spec/activerecord/merb_autoscaffold_spec.rb</filename>
    </added>
    <added>
      <filename>spec/activerecord/spec_helper.rb</filename>
    </added>
    <added>
      <filename>spec/datamapper/app/controllers/application.rb</filename>
    </added>
    <added>
      <filename>spec/datamapper/app/init.rb</filename>
    </added>
    <added>
      <filename>spec/datamapper/app/log/merb_test.log</filename>
    </added>
    <added>
      <filename>spec/datamapper/app/models/blog.rb</filename>
    </added>
    <added>
      <filename>spec/datamapper/app/models/comment.rb</filename>
    </added>
    <added>
      <filename>spec/datamapper/merb_autoscaffold_spec.rb</filename>
    </added>
    <added>
      <filename>spec/datamapper/spec_helper.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,7 @@
+0.2.0
+ - Controller and View tests
+ - Support for DataMapper 0.3.0 and ActiveRecord
+
 0.1.2
  - Support added for habtm relationships
  - New Merbivore-styled layout</diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,8 @@ merb_autoscaffold
 =================
 
 Merb AutoScaffold is a Merb plugin that provides scaffolding for free
-for all models.
+for all models.  Merb AutoScaffold currently works with DataMapper 0.3
+and ActiveRecord.
 
 ==== Usage:
 
@@ -51,6 +52,6 @@ end
 
 ==== Caveats
 
-Currently, autoscaffolds only work with DataMapper 0.3 models.
+Currently, autoscaffolds only work with DataMapper 0.3 and ActiveRecord models.
 
 Autoscaffolds also will not work with flat Merb apps.
\ No newline at end of file</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -58,7 +58,7 @@ module MerbAutoScaffold
           else
             def index
               @models = Paginator.new( self.class.Model.count, 20) do |offset, per_page|
-                self.class.Model.all(:limit =&gt; per_page, :offset =&gt; offset)
+                find_all( self.class.Model, :limit =&gt; per_page, :offset =&gt; offset )
               end
               render
             end
@@ -68,7 +68,7 @@ module MerbAutoScaffold
             native_actions &lt;&lt; 'show'
           else
             def show
-              @model = self.class.Model.first(params[:id])
+              @model = find_first( self.class.Model, params[:id] )
               raise NotFound unless @model
               display @model
             end
@@ -89,7 +89,7 @@ module MerbAutoScaffold
           else
             def edit
               only_provides :html
-              @model = self.class.Model.first(params[:id])
+              @model = find_first( self.class.Model, params[:id] )
               raise NotFound unless @model
               render
             end
@@ -100,7 +100,7 @@ module MerbAutoScaffold
             native_actions &lt;&lt; 'create'
           else
             def create
-              associations = scaf_has_manys.collect { |a|
+              associations = self.class.Model.scaf_has_manys.collect { |a|
                 [ a, params['model'].delete( a.name ) ]
               }
 
@@ -122,10 +122,10 @@ module MerbAutoScaffold
             def update
               params[:model].each { |k,v| params[:model][k] = nil if v.blank? }
 
-              @model = self.class.Model.first(params[:id])
+              @model = find_first( self.class.Model, params[:id] )
               raise NotFound unless @model
 
-              associations = scaf_has_manys.collect { |a|
+              associations = self.class.Model.scaf_has_manys.collect { |a|
                 [ a, params['model'].delete( a.name ) ]
               }
 
@@ -142,9 +142,9 @@ module MerbAutoScaffold
             native_actions &lt;&lt; 'destroy'
           else
             def destroy
-              @model = self.class.Model.first(params[:id])
+              @model = find_first( self.class.Model, params[:id] )
               raise NotFound unless @model
-              if @model.destroy!
+              if delete( @model )
                 redirect url( &quot;scaffold_#{self.class.Model.plural_name}&quot; )
               else
                 raise BadRequest
@@ -168,13 +168,44 @@ module MerbAutoScaffold
             end
           end
 
+          def find_first( klass, *params )
+            # wanted to use klass.superclass here, but the case statment seems to be checking the
+            # class of klass.superclass instead of an equality check
+            case klass.new
+              when ActiveRecord::Base then return klass.find(:first, *params)
+              when DataMapper::Base   then return klass.first( *params )
+            end
+          end
+
+          def find_all( klass, *params )
+            case klass.new
+              when ActiveRecord::Base then return klass.find(:all, *params)
+              when DataMapper::Base   then return klass.all( *params )
+            end
+          end
+
+          def delete( obj )
+            case obj
+              when ActiveRecord::Base then return obj.destroy
+              when DataMapper::Base   then return obj.destroy!
+            end
+          end
+
+          def clear_association( object, assoc )
+            rel = object.send( assoc.name )
+            case object
+              when ActiveRecord::Base then rel.clear
+              when DataMapper::Base   then rel.nullify_association
+            end
+            rel
+          end
+
           def update_has_many_association( assoc, model, ids )
-            rel = model.send( assoc.name )
             # remove all of the associated items
-            rel.nullify_association
+            rel = clear_association( model, assoc )
 
             # add all of the objects to the relationship
-            for obj in assoc.associated_table.klass.all( :id.in =&gt; ids )
+            for obj in find_all( assoc.klass, :conditions =&gt; ['id in (?)', ids] )
               rel &lt;&lt; obj
             end
             model.save</diff>
      <filename>lib/merb_autoscaffold/controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-require File.join( File.dirname(__FILE__), 'orms', 'datamapper' )
+%w(datamapper activerecord).each { |r| require File.join( File.dirname(__FILE__), 'orms', r ) }
 
 module MerbAutoScaffold
   class Models
@@ -16,7 +16,15 @@ module MerbAutoScaffold
             def self.singular_name() self.to_s.snake_case.to_sym; end
             def self.plural_name()   self.to_s.snake_case.pluralize.to_sym; end
           }
-          model.meta_eval { include MerbAutoScaffold::ORMs::DataMapper }
+          extension = case model.new
+            # wanted to use klass.superclass here, but the case statment seems to be checking the
+            # class of klass.superclass instead of an equality check
+            when ActiveRecord::Base then MerbAutoScaffold::ORMs::ActiveRecord
+            when DataMapper::Base   then MerbAutoScaffold::ORMs::DataMapper
+            else raise &quot;Merb AutoScaffold does not currently support the #{ model.class.superclass } ORM&quot;
+          end
+
+          model.meta_eval { include extension }
           @models &lt;&lt; model
         end
       }</diff>
      <filename>lib/merb_autoscaffold/models.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,13 @@
 module MerbAutoScaffold
 module ORMs
 module DataMapper
-  def scaf_table()   database.schema[ self ];      end
   def scaf_columns() scaf_table.columns;      end
   def scaf_assocs()  scaf_table.associations; end
 
+  def scaf_serial_columns
+    scaf_columns.select { |c| c.options[:serial] }
+  end
+
   def scaf_has_manys
     scaf_assocs.select { |a|
       a.is_a?(::DataMapper::Associations::HasManyAssociation) ||
@@ -25,6 +28,17 @@ module DataMapper
   def scaf_foreign_keys
     scaf_belongs_tos.collect(&amp;:foreign_key_name)
   end
+
+  def scaf_foreign_key_name( assoc )
+    assoc.foreign_key_name
+  end
+
+  def scaf_find_all_available_items_to_association( assoc )
+    assoc.associated_table.klass.all
+  end
+
+  private
+    def scaf_table()   database.schema[ self ]; end
 end
 end
 end
\ No newline at end of file</diff>
      <filename>lib/merb_autoscaffold/orms/datamapper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,13 @@
   #
   # association&lt;DataMapper::Associations::BelongsToAssociation&gt; - the association to display
   # model&lt;DataMapper::Base&gt; - the model which belongs to the object being selected
+  foreign_key = model.class.scaf_foreign_key_name( association )
 %&gt;
-&lt;select name=&quot;model[&lt;%= association.foreign_key_name %&gt;]&quot;&gt;
-  &lt;% selected_value = model.send( association.foreign_key_name ) %&gt;
+&lt;select name=&quot;model[&lt;%= foreign_key %&gt;]&quot;&gt;
+  &lt;% selected_value = model.send( foreign_key ) %&gt;
 
   &lt;option value=&quot;&quot;&gt;&lt;/option&gt;
-  &lt;% for obj in association.constant.all %&gt;
+  &lt;% for obj in find_all( association.klass ) %&gt;
     &lt;option value=&quot;&lt;%= obj.id %&gt;&quot;&lt;%= ' selected=&quot;selected&quot;' if obj.id == selected_value %&gt;&gt;
       &lt;%= obj.try(:title) || obj.try(:name) || &quot;#{ obj.class.to_s } ##{ obj.id }&quot; %&gt;
     &lt;/option&gt;</diff>
      <filename>lib/merb_autoscaffold/views/_belongs_to.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,16 @@
 &lt;dl&gt;
   &lt;% model.class.scaf_columns.each do |column| %&gt;
 
-    &lt;% next if model.class.scaf_foreign_keys.include?( column.name ) %&gt;
+    &lt;%
+      # Do not display a form field for a foreign key.  Instead,
+      # display a select option below.
+      next if model.class.scaf_foreign_keys.include?( column.name )
+    %&gt;
 
     &lt;dt&gt;&lt;%= column.name %&gt;&lt;/dt&gt;
     &lt;dd&gt;
 
-      &lt;% if column.options[:serial] %&gt;
+      &lt;% if model.class.scaf_serial_columns.include?( column ) %&gt;
         &lt;%= model.send( column.name ) || '&amp;nbsp' %&gt;
 
       &lt;% else %&gt;</diff>
      <filename>lib/merb_autoscaffold/views/_form.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,7 @@
 &lt;dt&gt;&lt;%= association.name.to_s.capitalize %&gt;&lt;/dt&gt;
 &lt;dd&gt;
   &lt;select name=&quot;model[&lt;%= association.name %&gt;][]&quot; multiple=&quot;multiple&quot;&gt;
-    &lt;% for obj in association.associated_table.klass.all %&gt;
+    &lt;% for obj in model.class.scaf_find_all_available_items_to_association( association ) %&gt;
       &lt;option value=&quot;&lt;%= obj.id %&gt;&quot;&lt;%= ' selected=&quot;selected&quot;' if model.send( association.name ).include?( obj ) %&gt;&gt;
         &lt;%= scaf_title( obj ) %&gt;
       &lt;/option&gt;</diff>
      <filename>lib/merb_autoscaffold/views/_has_many_edit.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@
     &lt;a href=&quot;&lt;%= url( &quot;scaffold_#{self.class.Model.singular_name}&quot;, @model ) %&gt;&quot;&gt;Cancel&lt;/a&gt;
   &lt;/h2&gt;
 
-  &lt;form action=&quot;&lt;%= url( &quot;scaffold_#{self.class.Model.singular_name}&quot;, @model ) %&gt;&quot; method=&quot;POST&quot;&gt;
+  &lt;form action=&quot;&lt;%= url( &quot;scaffold_#{self.class.Model.singular_name}&quot;, @model.id ) %&gt;&quot; method=&quot;POST&quot;&gt;
     &lt;input type=&quot;hidden&quot; name=&quot;_method&quot; value=&quot;PUT&quot; /&gt;
     &lt;%= partial( 'form', :model =&gt; @model ) %&gt;
     &lt;input type=&quot;submit&quot; value=&quot;Update&quot; /&gt;</diff>
      <filename>lib/merb_autoscaffold/views/edit.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -13,11 +13,11 @@
   &lt;/h2&gt;
 
   &lt;dl&gt;
-    &lt;% @model.class.scaf_table.columns.each do |column| %&gt;
+    &lt;% @model.class.scaf_columns.each do |column| %&gt;
       &lt;dt&gt;&lt;%= column.name %&gt;&lt;/dt&gt;
       &lt;dd&gt;
         &lt;% if association = @model.class.scaf_assoc_hash[column.name] %&gt;
-          &lt;% obj = association.constant.get( @model.send( column.name ) ) %&gt;
+          &lt;% obj = find_first( association.klass, @model.send( column.name ) ) %&gt;
           &lt;%= scaf_link( obj ) unless obj.blank?   %&gt;
         &lt;% else %&gt;
           &lt;%= @model.send( column.name ) || '&amp;nbsp;' %&gt;</diff>
      <filename>lib/merb_autoscaffold/views/show.html.erb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>spec/app/controllers/application.rb</filename>
    </removed>
    <removed>
      <filename>spec/app/init.rb</filename>
    </removed>
    <removed>
      <filename>spec/app/log/merb_test.log</filename>
    </removed>
    <removed>
      <filename>spec/app/models/blog.rb</filename>
    </removed>
    <removed>
      <filename>spec/app/models/comment.rb</filename>
    </removed>
    <removed>
      <filename>spec/controllers/controller_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/merb_autoscaffold_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/models/models_spec.rb</filename>
    </removed>
    <removed>
      <filename>spec/spec_helper.rb</filename>
    </removed>
    <removed>
      <filename>spec/views/views_spec.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>996637d92c8a863aac9c0dd80e021bc273b12ce6</id>
    </parent>
  </parents>
  <author>
    <name>Aaron Wheeler</name>
    <email>aaronwheeler@aaron-wheelers-macbook-pro-15.local</email>
  </author>
  <url>http://github.com/fightinjoe/merb-autoscaffold/commit/e404861f3ef619b5d810678e0ef12e74cf2f221c</url>
  <id>e404861f3ef619b5d810678e0ef12e74cf2f221c</id>
  <committed-date>2008-05-21T06:30:22-07:00</committed-date>
  <authored-date>2008-05-21T06:02:36-07:00</authored-date>
  <message>Added support for ActiveRecord</message>
  <tree>eb456b63d85a746f964d75850cfbf5c6ad5da72e</tree>
  <committer>
    <name>Aaron Wheeler</name>
    <email>aaronwheeler@aaron-wheelers-macbook-pro-15.local</email>
  </committer>
</commit>
