<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>spec/public/property/object_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -86,6 +86,7 @@ spec/public/collection_spec.rb
 spec/public/migrations_spec.rb
 spec/public/model/relationship_spec.rb
 spec/public/model_spec.rb
+spec/public/property/object_spec.rb
 spec/public/property_spec.rb
 spec/public/resource_spec.rb
 spec/public/sel_spec.rb
@@ -111,6 +112,7 @@ spec/semipublic/associations/relationship_spec.rb
 spec/semipublic/associations_spec.rb
 spec/semipublic/collection_spec.rb
 spec/semipublic/property_spec.rb
+spec/semipublic/query/conditions/operation_spec.rb
 spec/semipublic/query/conditions_spec.rb
 spec/semipublic/query/path_spec.rb
 spec/semipublic/query_spec.rb</diff>
      <filename>Manifest.txt</filename>
    </modified>
    <modified>
      <diff>@@ -6,11 +6,11 @@ Gem::Specification.new do |s|
 
   s.required_rubygems_version = Gem::Requirement.new(&quot;&gt;= 0&quot;) if s.respond_to? :required_rubygems_version=
   s.authors = [&quot;Dan Kubb&quot;]
-  s.date = %q{2009-10-27}
+  s.date = %q{2009-11-09}
   s.description = %q{Faster, Better, Simpler.}
   s.email = [&quot;dan.kubb@gmail.com&quot;]
   s.extra_rdoc_files = [&quot;History.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.txt&quot;]
-  s.files = [&quot;.autotest&quot;, &quot;.gitignore&quot;, &quot;CONTRIBUTING&quot;, &quot;FAQ&quot;, &quot;History.txt&quot;, &quot;MIT-LICENSE&quot;, &quot;Manifest.txt&quot;, &quot;QUICKLINKS&quot;, &quot;README.txt&quot;, &quot;Rakefile&quot;, &quot;SPECS&quot;, &quot;TODO&quot;, &quot;deps.rip&quot;, &quot;dm-core.gemspec&quot;, &quot;lib/dm-core.rb&quot;, &quot;lib/dm-core/adapters.rb&quot;, &quot;lib/dm-core/adapters/abstract_adapter.rb&quot;, &quot;lib/dm-core/adapters/data_objects_adapter.rb&quot;, &quot;lib/dm-core/adapters/in_memory_adapter.rb&quot;, &quot;lib/dm-core/adapters/mysql_adapter.rb&quot;, &quot;lib/dm-core/adapters/oracle_adapter.rb&quot;, &quot;lib/dm-core/adapters/postgres_adapter.rb&quot;, &quot;lib/dm-core/adapters/sqlite3_adapter.rb&quot;, &quot;lib/dm-core/adapters/sqlserver_adapter.rb&quot;, &quot;lib/dm-core/adapters/yaml_adapter.rb&quot;, &quot;lib/dm-core/associations/many_to_many.rb&quot;, &quot;lib/dm-core/associations/many_to_one.rb&quot;, &quot;lib/dm-core/associations/one_to_many.rb&quot;, &quot;lib/dm-core/associations/one_to_one.rb&quot;, &quot;lib/dm-core/associations/relationship.rb&quot;, &quot;lib/dm-core/collection.rb&quot;, &quot;lib/dm-core/core_ext/enumerable.rb&quot;, &quot;lib/dm-core/core_ext/kernel.rb&quot;, &quot;lib/dm-core/core_ext/symbol.rb&quot;, &quot;lib/dm-core/identity_map.rb&quot;, &quot;lib/dm-core/migrations.rb&quot;, &quot;lib/dm-core/model.rb&quot;, &quot;lib/dm-core/model/descendant_set.rb&quot;, &quot;lib/dm-core/model/hook.rb&quot;, &quot;lib/dm-core/model/is.rb&quot;, &quot;lib/dm-core/model/property.rb&quot;, &quot;lib/dm-core/model/relationship.rb&quot;, &quot;lib/dm-core/model/scope.rb&quot;, &quot;lib/dm-core/property.rb&quot;, &quot;lib/dm-core/property_set.rb&quot;, &quot;lib/dm-core/query.rb&quot;, &quot;lib/dm-core/query/conditions/comparison.rb&quot;, &quot;lib/dm-core/query/conditions/operation.rb&quot;, &quot;lib/dm-core/query/direction.rb&quot;, &quot;lib/dm-core/query/operator.rb&quot;, &quot;lib/dm-core/query/path.rb&quot;, &quot;lib/dm-core/query/sort.rb&quot;, &quot;lib/dm-core/repository.rb&quot;, &quot;lib/dm-core/resource.rb&quot;, &quot;lib/dm-core/spec/adapter_shared_spec.rb&quot;, &quot;lib/dm-core/spec/data_objects_adapter_shared_spec.rb&quot;, &quot;lib/dm-core/support/chainable.rb&quot;, &quot;lib/dm-core/support/deprecate.rb&quot;, &quot;lib/dm-core/support/equalizer.rb&quot;, &quot;lib/dm-core/support/logger.rb&quot;, &quot;lib/dm-core/support/naming_conventions.rb&quot;, &quot;lib/dm-core/transaction.rb&quot;, &quot;lib/dm-core/type.rb&quot;, &quot;lib/dm-core/types/boolean.rb&quot;, &quot;lib/dm-core/types/discriminator.rb&quot;, &quot;lib/dm-core/types/object.rb&quot;, &quot;lib/dm-core/types/paranoid_boolean.rb&quot;, &quot;lib/dm-core/types/paranoid_datetime.rb&quot;, &quot;lib/dm-core/types/serial.rb&quot;, &quot;lib/dm-core/types/text.rb&quot;, &quot;lib/dm-core/version.rb&quot;, &quot;script/performance.rb&quot;, &quot;script/profile.rb&quot;, &quot;spec/lib/adapter_helpers.rb&quot;, &quot;spec/lib/collection_helpers.rb&quot;, &quot;spec/lib/counter_adapter.rb&quot;, &quot;spec/lib/pending_helpers.rb&quot;, &quot;spec/lib/rspec_immediate_feedback_formatter.rb&quot;, &quot;spec/public/associations/many_to_many_spec.rb&quot;, &quot;spec/public/associations/many_to_one_spec.rb&quot;, &quot;spec/public/associations/many_to_one_with_boolean_cpk_spec.rb&quot;, &quot;spec/public/associations/one_to_many_spec.rb&quot;, &quot;spec/public/associations/one_to_one_spec.rb&quot;, &quot;spec/public/associations/one_to_one_with_boolean_cpk_spec.rb&quot;, &quot;spec/public/collection_spec.rb&quot;, &quot;spec/public/migrations_spec.rb&quot;, &quot;spec/public/model/relationship_spec.rb&quot;, &quot;spec/public/model_spec.rb&quot;, &quot;spec/public/property_spec.rb&quot;, &quot;spec/public/resource_spec.rb&quot;, &quot;spec/public/sel_spec.rb&quot;, &quot;spec/public/setup_spec.rb&quot;, &quot;spec/public/shared/association_collection_shared_spec.rb&quot;, &quot;spec/public/shared/collection_finder_shared_spec.rb&quot;, &quot;spec/public/shared/collection_shared_spec.rb&quot;, &quot;spec/public/shared/finder_shared_spec.rb&quot;, &quot;spec/public/shared/resource_shared_spec.rb&quot;, &quot;spec/public/shared/sel_shared_spec.rb&quot;, &quot;spec/public/transaction_spec.rb&quot;, &quot;spec/public/types/discriminator_spec.rb&quot;, &quot;spec/semipublic/adapters/abstract_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/in_memory_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/mysql_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/oracle_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/postgres_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/sqlite3_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/sqlserver_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/yaml_adapter_spec.rb&quot;, &quot;spec/semipublic/associations/many_to_one_spec.rb&quot;, &quot;spec/semipublic/associations/relationship_spec.rb&quot;, &quot;spec/semipublic/associations_spec.rb&quot;, &quot;spec/semipublic/collection_spec.rb&quot;, &quot;spec/semipublic/property_spec.rb&quot;, &quot;spec/semipublic/query/conditions_spec.rb&quot;, &quot;spec/semipublic/query/path_spec.rb&quot;, &quot;spec/semipublic/query_spec.rb&quot;, &quot;spec/semipublic/resource_spec.rb&quot;, &quot;spec/semipublic/shared/condition_shared_spec.rb&quot;, &quot;spec/semipublic/shared/resource_shared_spec.rb&quot;, &quot;spec/spec.opts&quot;, &quot;spec/spec_helper.rb&quot;, &quot;tasks/ci.rb&quot;, &quot;tasks/dm.rb&quot;, &quot;tasks/doc.rb&quot;, &quot;tasks/gemspec.rb&quot;, &quot;tasks/hoe.rb&quot;, &quot;tasks/install.rb&quot;]
+  s.files = [&quot;.autotest&quot;, &quot;.gitignore&quot;, &quot;CONTRIBUTING&quot;, &quot;FAQ&quot;, &quot;History.txt&quot;, &quot;MIT-LICENSE&quot;, &quot;Manifest.txt&quot;, &quot;QUICKLINKS&quot;, &quot;README.txt&quot;, &quot;Rakefile&quot;, &quot;SPECS&quot;, &quot;TODO&quot;, &quot;deps.rip&quot;, &quot;dm-core.gemspec&quot;, &quot;lib/dm-core.rb&quot;, &quot;lib/dm-core/adapters.rb&quot;, &quot;lib/dm-core/adapters/abstract_adapter.rb&quot;, &quot;lib/dm-core/adapters/data_objects_adapter.rb&quot;, &quot;lib/dm-core/adapters/in_memory_adapter.rb&quot;, &quot;lib/dm-core/adapters/mysql_adapter.rb&quot;, &quot;lib/dm-core/adapters/oracle_adapter.rb&quot;, &quot;lib/dm-core/adapters/postgres_adapter.rb&quot;, &quot;lib/dm-core/adapters/sqlite3_adapter.rb&quot;, &quot;lib/dm-core/adapters/sqlserver_adapter.rb&quot;, &quot;lib/dm-core/adapters/yaml_adapter.rb&quot;, &quot;lib/dm-core/associations/many_to_many.rb&quot;, &quot;lib/dm-core/associations/many_to_one.rb&quot;, &quot;lib/dm-core/associations/one_to_many.rb&quot;, &quot;lib/dm-core/associations/one_to_one.rb&quot;, &quot;lib/dm-core/associations/relationship.rb&quot;, &quot;lib/dm-core/collection.rb&quot;, &quot;lib/dm-core/core_ext/enumerable.rb&quot;, &quot;lib/dm-core/core_ext/kernel.rb&quot;, &quot;lib/dm-core/core_ext/symbol.rb&quot;, &quot;lib/dm-core/identity_map.rb&quot;, &quot;lib/dm-core/migrations.rb&quot;, &quot;lib/dm-core/model.rb&quot;, &quot;lib/dm-core/model/descendant_set.rb&quot;, &quot;lib/dm-core/model/hook.rb&quot;, &quot;lib/dm-core/model/is.rb&quot;, &quot;lib/dm-core/model/property.rb&quot;, &quot;lib/dm-core/model/relationship.rb&quot;, &quot;lib/dm-core/model/scope.rb&quot;, &quot;lib/dm-core/property.rb&quot;, &quot;lib/dm-core/property_set.rb&quot;, &quot;lib/dm-core/query.rb&quot;, &quot;lib/dm-core/query/conditions/comparison.rb&quot;, &quot;lib/dm-core/query/conditions/operation.rb&quot;, &quot;lib/dm-core/query/direction.rb&quot;, &quot;lib/dm-core/query/operator.rb&quot;, &quot;lib/dm-core/query/path.rb&quot;, &quot;lib/dm-core/query/sort.rb&quot;, &quot;lib/dm-core/repository.rb&quot;, &quot;lib/dm-core/resource.rb&quot;, &quot;lib/dm-core/spec/adapter_shared_spec.rb&quot;, &quot;lib/dm-core/spec/data_objects_adapter_shared_spec.rb&quot;, &quot;lib/dm-core/support/chainable.rb&quot;, &quot;lib/dm-core/support/deprecate.rb&quot;, &quot;lib/dm-core/support/equalizer.rb&quot;, &quot;lib/dm-core/support/logger.rb&quot;, &quot;lib/dm-core/support/naming_conventions.rb&quot;, &quot;lib/dm-core/transaction.rb&quot;, &quot;lib/dm-core/type.rb&quot;, &quot;lib/dm-core/types/boolean.rb&quot;, &quot;lib/dm-core/types/discriminator.rb&quot;, &quot;lib/dm-core/types/object.rb&quot;, &quot;lib/dm-core/types/paranoid_boolean.rb&quot;, &quot;lib/dm-core/types/paranoid_datetime.rb&quot;, &quot;lib/dm-core/types/serial.rb&quot;, &quot;lib/dm-core/types/text.rb&quot;, &quot;lib/dm-core/version.rb&quot;, &quot;script/performance.rb&quot;, &quot;script/profile.rb&quot;, &quot;spec/lib/adapter_helpers.rb&quot;, &quot;spec/lib/collection_helpers.rb&quot;, &quot;spec/lib/counter_adapter.rb&quot;, &quot;spec/lib/pending_helpers.rb&quot;, &quot;spec/lib/rspec_immediate_feedback_formatter.rb&quot;, &quot;spec/public/associations/many_to_many_spec.rb&quot;, &quot;spec/public/associations/many_to_one_spec.rb&quot;, &quot;spec/public/associations/many_to_one_with_boolean_cpk_spec.rb&quot;, &quot;spec/public/associations/one_to_many_spec.rb&quot;, &quot;spec/public/associations/one_to_one_spec.rb&quot;, &quot;spec/public/associations/one_to_one_with_boolean_cpk_spec.rb&quot;, &quot;spec/public/collection_spec.rb&quot;, &quot;spec/public/migrations_spec.rb&quot;, &quot;spec/public/model/relationship_spec.rb&quot;, &quot;spec/public/model_spec.rb&quot;, &quot;spec/public/property/object_spec.rb&quot;, &quot;spec/public/property_spec.rb&quot;, &quot;spec/public/resource_spec.rb&quot;, &quot;spec/public/sel_spec.rb&quot;, &quot;spec/public/setup_spec.rb&quot;, &quot;spec/public/shared/association_collection_shared_spec.rb&quot;, &quot;spec/public/shared/collection_finder_shared_spec.rb&quot;, &quot;spec/public/shared/collection_shared_spec.rb&quot;, &quot;spec/public/shared/finder_shared_spec.rb&quot;, &quot;spec/public/shared/resource_shared_spec.rb&quot;, &quot;spec/public/shared/sel_shared_spec.rb&quot;, &quot;spec/public/transaction_spec.rb&quot;, &quot;spec/public/types/discriminator_spec.rb&quot;, &quot;spec/semipublic/adapters/abstract_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/in_memory_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/mysql_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/oracle_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/postgres_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/sqlite3_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/sqlserver_adapter_spec.rb&quot;, &quot;spec/semipublic/adapters/yaml_adapter_spec.rb&quot;, &quot;spec/semipublic/associations/many_to_one_spec.rb&quot;, &quot;spec/semipublic/associations/relationship_spec.rb&quot;, &quot;spec/semipublic/associations_spec.rb&quot;, &quot;spec/semipublic/collection_spec.rb&quot;, &quot;spec/semipublic/property_spec.rb&quot;, &quot;spec/semipublic/query/conditions/operation_spec.rb&quot;, &quot;spec/semipublic/query/conditions_spec.rb&quot;, &quot;spec/semipublic/query/path_spec.rb&quot;, &quot;spec/semipublic/query_spec.rb&quot;, &quot;spec/semipublic/resource_spec.rb&quot;, &quot;spec/semipublic/shared/condition_shared_spec.rb&quot;, &quot;spec/semipublic/shared/resource_shared_spec.rb&quot;, &quot;spec/spec.opts&quot;, &quot;spec/spec_helper.rb&quot;, &quot;tasks/ci.rb&quot;, &quot;tasks/dm.rb&quot;, &quot;tasks/doc.rb&quot;, &quot;tasks/gemspec.rb&quot;, &quot;tasks/hoe.rb&quot;, &quot;tasks/install.rb&quot;]
   s.homepage = %q{http://datamapper.org}
   s.rdoc_options = [&quot;--main&quot;, &quot;README.txt&quot;]
   s.require_paths = [&quot;lib&quot;]</diff>
      <filename>dm-core.gemspec</filename>
    </modified>
    <modified>
      <diff>@@ -685,33 +685,33 @@ module DataMapper
     # Returns given value unchanged for core types and
     # uses +dump+ method of the property type for custom types.
     #
-    # @param [Object] value
+    # @param [Object] loaded_value
     #   the value to be converted into a storeable (ie., primitive) value
     #
     # @return [Object]
     #   the primitive value to be stored in the repository for +val+
     #
     # @api semipublic
-    def value(value)
+    def value(loaded_value)
       if custom?
-        type.dump(value, self)
+        type.dump(loaded_value, self)
       else
-        value
+        loaded_value
       end
     end
 
     # Test the value to see if it is a valid value for this Property
     #
-    # @param [Object] value
+    # @param [Object] loaded_value
     #   the value to be tested
     #
     # @return [Boolean]
     #   true if the value is valid
     #
     # @api semipulic
-    def valid?(value, negated = false)
-      value = self.value(value)
-      primitive?(value) || (value.nil? &amp;&amp; (nullable? || negated))
+    def valid?(loaded_value, negated = false)
+      dumped_value = self.value(loaded_value)
+      primitive?(dumped_value) || (dumped_value.nil? &amp;&amp; (nullable? || negated))
     end
 
     # Returns a concise string representation of the property instance.
@@ -736,6 +736,8 @@ module DataMapper
     def primitive?(value)
       if primitive == TrueClass
         value == true || value == false
+      elsif primitive == Types::Text
+        value.kind_of?(String)
       else
         value.kind_of?(primitive)
       end</diff>
      <filename>lib/dm-core/property.rb</filename>
    </modified>
    <modified>
      <diff>@@ -112,7 +112,7 @@ module DataMapper
 
         deprecate :property, :subject
 
-        equalize :slug, :subject, :value
+        equalize :slug, :subject, :dumped_value
 
         # @api semipublic
         attr_reader :parent
@@ -136,7 +136,9 @@ module DataMapper
         # @return [Object]
         #
         # @api semipublic
-        attr_reader :value
+        attr_reader :dumped_value
+
+        alias value dumped_value
 
         # The loaded/typecast value
         #
@@ -252,7 +254,7 @@ module DataMapper
         # @api semipublic
         def inspect
           &quot;#&lt;#{self.class} @subject=#{@subject.inspect} &quot; \
-            &quot;@value=#{@value.inspect} @loaded_value=#{@loaded_value.inspect}&gt;&quot;
+            &quot;@dumped_value=#{@dumped_value.inspect} @loaded_value=#{@loaded_value.inspect}&gt;&quot;
         end
 
         # Returns a string version of this Comparison object
@@ -265,7 +267,7 @@ module DataMapper
         #
         # @api semipublic
         def to_s
-          &quot;#{@subject.name} #{comparator_string} #{@value}&quot;
+          &quot;#{subject.name} #{comparator_string} #{dumped_value}&quot;
         end
 
         # @api private
@@ -288,7 +290,7 @@ module DataMapper
         def initialize(subject, value)
           @subject      = subject
           @loaded_value = typecast_value(value)
-          @value        = dumped_value(@loaded_value)
+          @dumped_value = dump_value
         end
 
         # Typecasts the given +val+ using subject#typecast
@@ -313,25 +315,22 @@ module DataMapper
           end
         end
 
-        # Dumps the given +val+ using subject#value
+        # Dumps the given loaded_value using subject#value
         #
         # This converts property values to the primitive as stored in the
         # repository.
         #
-        # @param [Object] val
-        #   The object to attempt to typecast.
-        #
         # @return [Object]
         #   The raw (dumped) object.
         #
         # @see Property#value
         #
         # @api private
-        def dumped_value(val)
+        def dump_value
           if subject.respond_to?(:value)
-            subject.value(val)
+            subject.value(loaded_value)
           else
-            val
+            loaded_value
           end
         end
 
@@ -423,8 +422,8 @@ module DataMapper
         # @return [Boolean] true if the value is valid
         #
         # @api semipublic
-        def valid_for_subject?(value)
-          subject.valid?(value, negated?)
+        def valid_for_subject?(loaded_value)
+          subject.valid?(loaded_value, negated?)
         end
 
         # @api private
@@ -571,18 +570,18 @@ module DataMapper
         #
         # @return [Array&lt;Object&gt;]
         #
-        # @see AbtractComparison#dumped_value
+        # @see AbtractComparison#dump_value
         #
         # @api private
-        def dumped_value(val)
-          if subject.respond_to?(:value) &amp;&amp; val.kind_of?(Range) &amp;&amp; !subject.custom?
-            val
-          elsif subject.respond_to?(:value) &amp;&amp; val.respond_to?(:map)
-            val = val.map { |el| subject.value(el) }
-            val.uniq!
-            val
+        def dump_value
+          if subject.respond_to?(:value) &amp;&amp; loaded_value.kind_of?(Range) &amp;&amp; !subject.custom?
+            loaded_value
+          elsif subject.respond_to?(:value) &amp;&amp; loaded_value.respond_to?(:map)
+            dumped_value = loaded_value.map { |value| subject.value(value) }
+            dumped_value.uniq!
+            dumped_value
           else
-            val
+            loaded_value
           end
         end
 
@@ -620,7 +619,7 @@ module DataMapper
         #
         # @api semipublic
         def valid?
-          value.kind_of?(Regexp)
+          loaded_value.kind_of?(Regexp)
         end
 
         private
@@ -677,7 +676,7 @@ module DataMapper
         #
         # @api semipublic
         def expected_value
-          Regexp.new(@value.to_s.gsub('%', '.*').gsub('_', '.'))
+          Regexp.new(loaded_value.to_s.gsub('%', '.*').gsub('_', '.'))
         end
 
         # @return [String]</diff>
      <filename>lib/dm-core/query/conditions/comparison.rb</filename>
    </modified>
    <modified>
      <diff>@@ -847,11 +847,9 @@ module DataMapper
     #
     # @api private
     def _update
-      dirty_attributes = self.dirty_attributes
-
-      if dirty_attributes.empty?
+      if original_attributes.empty?
         true
-      elsif dirty_attributes.any? { |property, value| !property.valid?(value) }
+      elsif original_attributes.any? { |property, _| !property.valid?(property.get!(self)) }
         false
       else
         # remove from the identity map
@@ -859,11 +857,11 @@ module DataMapper
 
         repository.update(dirty_attributes, collection_for_self)
 
+        original_attributes.clear
+
         # remove the cached key in case it is updated
         remove_instance_variable(:@_key)
 
-        original_attributes.clear
-
         identity_map[key] = self
 
         true</diff>
      <filename>lib/dm-core/resource.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,7 @@ module DataMapper
 
       # @api private
       def self.dump(value, property)
-        [ Marshal.dump(value) ].pack('m')
+        [ Marshal.dump(value) ].pack('m') unless value.nil?
       end
 
       # @api private</diff>
      <filename>lib/dm-core/types/object.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8611d3a9d743be87344a8d6c491b309013972e3c</id>
    </parent>
  </parents>
  <author>
    <name>Dan Kubb</name>
    <email>dan.kubb@gmail.com</email>
  </author>
  <url>http://github.com/datamapper/dm-core/commit/e66c1bd0c98bff8b5fd383438369555b32835b1e</url>
  <id>e66c1bd0c98bff8b5fd383438369555b32835b1e</id>
  <committed-date>2009-11-09T23:12:38-08:00</committed-date>
  <authored-date>2009-11-09T23:05:48-08:00</authored-date>
  <message>Fixed problem with Resource#save failing with custom properties

* Resource#save now tests the loaded value rather than the dumped
  value for validity.
* Updated variable names to differentiate between a loaded value
  and a dumped value.  A loaded value is what is set within the
  Resource after retrieving/loading/typecasting it.  A dumped
  value is what is stored in the datastore.
* Fixed Object type so if loaded value is nil, it will just store
  nil rather than sending an encoded String to the datastore
* Fixed Property#primitive? so that properties with a Text primitive
  can be tested for validity.
* Added specs for Object type

[#1118 state:resolved]</message>
  <tree>d1a0bbd917e00d4ec701ab565da2add8cc269e3e</tree>
  <committer>
    <name>Dan Kubb</name>
    <email>dan.kubb@gmail.com</email>
  </committer>
</commit>
