<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitignore</filename>
    </added>
    <added>
      <filename>build.xml</filename>
    </added>
    <added>
      <filename>lib/jruby-complete.jar</filename>
    </added>
    <added>
      <filename>lib/ribs/core_ext/time.rb</filename>
    </added>
    <added>
      <filename>lib/ribs/definition.rb</filename>
    </added>
    <added>
      <filename>lib/ribs/meat.rb</filename>
    </added>
    <added>
      <filename>src/java/org/jruby/ribs/RubyInstantiator.java</filename>
    </added>
    <added>
      <filename>src/java/org/jruby/ribs/RubyPropertyAccessor.java</filename>
    </added>
    <added>
      <filename>src/java/org/jruby/ribs/RubyTuplizer.java</filename>
    </added>
    <added>
      <filename>src/java/org/jruby/ribs/WithRubyClass.java</filename>
    </added>
    <added>
      <filename>src/java/org/jruby/ribs/WithRuntime.java</filename>
    </added>
    <added>
      <filename>src/java/org/jruby/ribs/persisters/RubyObjectEntityPersister.java</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -3,6 +3,10 @@ require 'rake/gempackagetask'
 require 'rake/rdoctask'
 require 'spec/rake/spectask'
 
+task :ant do 
+  system('ant')
+end
+
 task :default =&gt; [:spec]
 task :test =&gt; [:spec]
 
@@ -15,6 +19,8 @@ Spec::Rake::SpecTask.new(:spec) do |t|
   t.spec_opts = [&quot;-fs&quot;, &quot;--color&quot;]
 end
 
+task :spec =&gt; [:ant]
+
 desc 'Generate RDoc'
 Rake::RDocTask.new do |task|
   task.main = 'README'</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -8,9 +8,12 @@ require 'jta-1.1.jar'
 require 'slf4j-api-1.5.2.jar'
 require 'slf4j-jdk14-1.5.2.jar'
 require 'hibernate3.jar'
+require 'ribs.jar'
 
 require 'ribs/db'
+require 'ribs/definition'
 require 'ribs/session'
+require 'ribs/meat'
 require 'ribs/core_ext/time'
 
 module Ribs
@@ -23,3 +26,10 @@ module Ribs
     end
   end
 end
+
+module Kernel
+  def Ribs!(options = {}, &amp;block)
+    options.merge!({:on =&gt; self, :db =&gt; :default, :from =&gt; nil})
+    Ribs::define_ribs(options[:on], options, &amp;block)
+  end
+end</diff>
      <filename>lib/ribs.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,7 @@ module Ribs
         register db
 
         db.create
-        db.freeze
-        
+
         db
       end
       
@@ -51,6 +50,7 @@ module Ribs
     attr_accessor :password
     attr_accessor :properties
     attr_accessor :default
+    attr_reader :mappings
     
     def initialize(name = :main)
       self.name = name
@@ -71,7 +71,13 @@ module Ribs
       self.properties.each do |key, value|
         properties.set_property(key, value)
       end
-      @session_factory = Configuration.new.add_properties(properties).build_session_factory
+      @configuration = Configuration.new.add_properties(properties)
+      @mappings = @configuration.create_mappings
+      reset_session_factory!
+    end
+
+    def reset_session_factory!
+      @session_factory = @configuration.build_session_factory
     end
     
     def session
@@ -88,7 +94,7 @@ module Ribs
     
     def release(session)
       res = Thread.current[:ribs_db_sessions][self.object_id]
-      if res[0] == session
+      if res[0] == session.hibernate_session
         res[1] -= 1
         if res[1] == 0
           res[0].close</diff>
      <filename>lib/ribs/db.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,6 +16,8 @@ module Ribs
       end
     end
     
+    attr_reader :db
+    
     def initialize(db, hibernate_session)
       @db = db
       @connected = true
@@ -27,6 +29,28 @@ module Ribs
       @connected = false
       @db.release(self)
     end
+
+    # LOW LEVEL - shouldn't be used
+    def hibernate_session
+      @hibernate_session
+    end
+    
+    # LOW LEVEL - shouldn't be used
+    def find(entity_name, id)
+      chk_conn
+      case id
+      when :all
+        @hibernate_session.create_criteria(entity_name).list.to_a
+      else
+        @hibernate_session.get(entity_name, java.lang.Integer.new(id))
+      end
+    end
+
+    # LOW LEVEL - shouldn't be used
+    def meta_data
+      chk_conn
+      @hibernate_session.connection.meta_data
+    end
     
     # LOW LEVEL - shouldn't be used
     def ddl(string)
@@ -41,10 +65,15 @@ module Ribs
       stmt = conn.prepare_statement(template)
       data.each do |d|
         d.each_with_index do |item, index|
-          set_prepared_statement(stmt, item, index+1)
+          if item.kind_of?(Array)
+            set_prepared_statement(stmt, item[0], index+1, item[1])
+          else
+            set_prepared_statement(stmt, item, index+1, nil)
+          end
         end
         stmt.execute_update
       end
+      conn.commit
     ensure
       stmt.close rescue nil
     end
@@ -84,7 +113,7 @@ module Ribs
       end
     end
     
-    def set_prepared_statement(stmt, item, index)
+    def set_prepared_statement(stmt, item, index, type)
       case item
       when NilClass
         stmt.set_object index, nil
@@ -97,14 +126,13 @@ module Ribs
       when Float
         stmt.set_float index, item
       when Time
-        begin
+        case type
+        when :date
           stmt.set_date index, item.to_java_sql_date
-        rescue
-          begin
-            stmt.set_time_stamp index, item.to_java_sql_time_stamp
-          rescue
+        when :time
             stmt.set_time index, item.to_java_sql_time
-          end
+        when :times_stamp
+          stmt.set_time_stamp index, item.to_java_sql_time_stamp
         end
       when TrueClass, FalseClass
         stmt.set_boolean index, item
@@ -117,6 +145,7 @@ module Ribs
       conn = @hibernate_session.connection
       stmt = conn.create_statement
       stmt.execute_update(string)
+      conn.commit
     ensure
       stmt.close rescue nil
     end</diff>
      <filename>lib/ribs/session.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,19 @@
 require File.join(File.dirname(__FILE__), 'test_helper')
 
+class Artist
+  Ribs!
+end
+
+describe Artist do 
+  it &quot;should be able to find all artists&quot; do 
+    Artist.find(:all).length.should == 3
+  end
+
+  it &quot;should return correct value and type for id property&quot; do 
+    Artist.find(:all).map { |a| a.ID }.sort.should == [1,2,3]
+  end
+  
+  it &quot;should return correct value and type for name property&quot; do 
+    Artist.find(:all).map { |a| a.NAME }.sort.should == [&quot;David Bowie&quot;,&quot;New Model Army&quot;,&quot;Public Image Ltd&quot;]
+  end
+end</diff>
      <filename>test/simple_bean_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ require 'java'
 
 lm = java.util.logging.LogManager.log_manager
 lm.logger_names.each do |ln|
-  lm.get_logger(ln).set_level(java.util.logging.Level::WARNING)
+  lm.get_logger(ln).set_level(java.util.logging.Level::SEVERE)
 end
 
 require 'rubygems'
@@ -25,10 +25,13 @@ Ribs::DB.define do |db|
   db.dialect = 'Derby'
   db.uri = 'jdbc:derby:test_database;create=true'
   db.driver = 'org.apache.derby.jdbc.EmbeddedDriver'
+#  db.properties['hibernate.show_sql'] = 'true'
 end
 
 Ribs.with_session do |s|
   s.ddl &quot;DROP TABLE DB_TRACK&quot; rescue nil
+  s.ddl &quot;DROP TABLE ARTIST&quot; rescue nil
+
   # GENERATED ALWAYS AS IDENTITY
   # Add new columns for TIMESTAMP, BINARY, DECIMAL, FLOAT, BOOLEAN
   s.ddl &lt;&lt;SQL
@@ -43,19 +46,29 @@ CREATE TABLE DB_TRACK (
 )
 SQL
 
+  s.ddl &lt;&lt;SQL
+CREATE TABLE ARTIST (
+  ID INT NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  PRIMARY KEY (ID)
+)
+SQL
   
   template = &lt;&lt;SQL
 INSERT INTO DB_TRACK(TRACK_ID, title, filePath, playTime, added, volume) VALUES(?, ?, ?, ?, ?, ?)
 SQL
   
-  
   s.insert(template, 
-           [1, &quot;foobar&quot;, &quot;c:/abc/cde/foo.mp3&quot;, Time.time_at(14,50,0), Time.local(1984, 12, 13, 0,0,0), 13], 
-           [2, &quot;flux&quot;, &quot;d:/abc/cde/flax.mp3&quot;, Time.time_at(16,23,0), Time.local(1983, 12, 13, 0,0,0), 13])
+           [1, &quot;foobar&quot;, &quot;c:/abc/cde/foo.mp3&quot;, [Time.time_at(14,50,0), :time], [Time.local(1984, 12, 13, 0,0,0), :date], 13], 
+           [2, &quot;flux&quot;, &quot;d:/abc/cde/flax.mp3&quot;, [Time.time_at(16,23,0), :time], [Time.local(1983, 12, 13, 0,0,0), :date], 13])
+
+  s.insert(&quot;INSERT INTO ARTIST(ID, name) VALUES(?, ?)&quot;, 
+           [1, &quot;Public Image Ltd&quot;],
+           [2, &quot;New Model Army&quot;],
+           [3, &quot;David Bowie&quot;])
 end
 
 at_exit do 
-  # Clean up derby files
   require 'fileutils'
   FileUtils.rm_rf('test_database')
   FileUtils.rm_rf('derby.log')</diff>
      <filename>test/test_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>6a155e57a7b198333eb69a80640ab947c82839b4</id>
    </parent>
  </parents>
  <author>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </author>
  <url>http://github.com/olabini/ribs/commit/c045561e2b6c99384873a4a71fb1286c176151ad</url>
  <id>c045561e2b6c99384873a4a71fb1286c176151ad</id>
  <committed-date>2008-08-22T08:20:30-07:00</committed-date>
  <authored-date>2008-08-22T08:20:30-07:00</authored-date>
  <message>Make basic loading of entities work. Yay.</message>
  <tree>b26d598304347b0419f1b92114848528459e7f64</tree>
  <committer>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </committer>
</commit>
