<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -3,6 +3,8 @@ require &quot;sax-machine/sax_collection_config&quot;
 
 module SAXMachine
   class SAXConfig
+    attr_reader :top_level_elements, :collection_elements
+
     def initialize
       @top_level_elements  = []
       @collection_elements = []</diff>
      <filename>lib/sax-machine/sax_config.rb</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,26 @@ module SAXMachine
       attr_reader options[:as] unless instance_methods.include?(options[:as].to_s)
       attr_writer options[:as] unless instance_methods.include?(&quot;#{options[:as]}=&quot;)
     end
+
+    def columns
+      sax_config.top_level_elements
+    end
+
+    def column(sym)
+      columns.select{|c| c.column == sym}[0]
+    end
+
+    def data_class(sym)
+      column(sym).data_class
+    end
+
+    def required?(sym)
+      column(sym).required?
+    end
+
+    def column_names
+      columns.map{|e| e.column}
+    end
     
     def elements(name, options = {})
       options[:as] ||= name</diff>
      <filename>lib/sax-machine/sax_document.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@ module SAXMachine
   class SAXConfig
     
     class ElementConfig
-      attr_reader :name, :setter
+      attr_reader :name, :setter, :data_class
       
       def initialize(name, options)
         @name = name.to_s
@@ -28,6 +28,16 @@ module SAXMachine
         else
           @setter = &quot;#{@as}=&quot;
         end
+        @data_class = options[:class]
+        @required = options[:required]
+      end
+
+      def column
+        @as || @name.to_sym
+      end
+
+      def required?
+        @required
       end
 
       def value_from_attrs(attrs)</diff>
      <filename>lib/sax-machine/sax_element_config.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,10 @@ describe &quot;SAXMachine&quot; do
         document.title = &quot;Title&quot;
         document.title.should == &quot;Title&quot;
       end
+      
+      it &quot;should allow introspection of the elements&quot; do
+        @klass.column_names.should =~ [:title]
+      end
 
       it &quot;should not overwrite the setter if there is already one present&quot; do
         @klass = Class.new do
@@ -28,6 +32,28 @@ describe &quot;SAXMachine&quot; do
         document.title = &quot;Title&quot;
         document.title.should == &quot;Title **&quot;
       end
+      describe &quot;the class attribute&quot; do
+        before(:each) do
+          @klass = Class.new do
+            include SAXMachine
+            element :date, :class =&gt; DateTime
+          end
+          @document = @klass.new
+          @document.date = DateTime.now.to_s
+        end
+        it &quot;should be available&quot; do
+          @klass.data_class(:date).should == DateTime
+        end
+      end
+      describe &quot;the required attribute&quot; do
+        it &quot;should be available&quot; do
+          @klass = Class.new do
+            include SAXMachine
+            element :date, :required =&gt; true
+          end
+          @klass.required?(:date).should be_true
+        end
+      end
       
       it &quot;should not overwrite the accessor when the element is not present&quot; do
         document = @klass.new</diff>
      <filename>spec/sax-machine/sax_document_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f9f64464a3f2b198ddf7fe00b98bd6d2986738cc</id>
    </parent>
  </parents>
  <author>
    <name>msofaer</name>
    <email>msofaer@inigral.com</email>
  </author>
  <url>http://github.com/pauldix/sax-machine/commit/ea80bf3be5903c39d1b62796fbabf4e0892552de</url>
  <id>ea80bf3be5903c39d1b62796fbabf4e0892552de</id>
  <committed-date>2009-07-22T06:24:38-07:00</committed-date>
  <authored-date>2009-07-16T20:15:14-07:00</authored-date>
  <message>Added :class and :required, and various getters</message>
  <tree>af17ae99a76b2b9dce31ac197e8195d570bb3ca5</tree>
  <committer>
    <name>Paul Dix</name>
    <email>paul@pauldix.net</email>
  </committer>
</commit>
