<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -9,6 +9,7 @@ include FileUtils
 REMARKABLE_GEMS = [
   :remarkable,
   :remarkable_activerecord,
+  :remarkable_datamapper,
   :remarkable_rails
 ]
 </diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
 
-RAILS_I18n = true
+RAILS_I18N = true
 
 class Post
   attr_accessor :published, :public, :deleted</diff>
      <filename>remarkable_activerecord/spec/describe_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -67,8 +67,8 @@ module Remarkable
         # It also gets an allow_nil message on remarkable.data_mapper.allow_nil
         # to be used as default.
         #
-        def allow_nil?(message_key=:message) #:nodoc:
-          assert_good_or_bad_if_key(:allow_nil, nil, message_key)
+        def nullable?(message_key=:message) #:nodoc:
+          assert_good_or_bad_if_key(:nullable, nil, message_key)
         end
 
         # Default allow_blank? validation. It accepts the message_key which is</diff>
      <filename>remarkable_datamapper/lib/remarkable_datamapper/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -109,7 +109,7 @@ module Remarkable
 
             begin
               @existing.update_attribute(@attribute, nil)
-            rescue ::ActiveRecord::StatementInvalid =&gt; e
+            rescue ::DataMapper::StatementInvalid =&gt; e
               raise ScriptError, &quot;You declared that #{@attribute} accepts nil values in validate_uniqueness_of, &quot; &lt;&lt;
                                  &quot;but I cannot save nil values in the database, got: #{e.message}&quot; if @options[:allow_nil]
               return true
@@ -126,7 +126,7 @@ module Remarkable
 
             begin
               @existing.update_attribute(@attribute, '')
-            rescue ::ActiveRecord::StatementInvalid =&gt; e
+            rescue ::DataMapper::StatementInvalid =&gt; e
               raise ScriptError, &quot;You declared that #{@attribute} accepts blank values in validate_uniqueness_of, &quot; &lt;&lt;
                                  &quot;but I cannot save blank values in the database, got: #{e.message}&quot; if @options[:allow_blank]
               return true</diff>
      <filename>remarkable_datamapper/lib/remarkable_datamapper/matchers/validates_is_unique.rb</filename>
    </modified>
    <modified>
      <diff>@@ -262,3 +262,17 @@ en:
             positive: &quot;case sensitive&quot;
             negative: &quot;case insensitive&quot;
 
+      validates_is_unique:
+        description: &quot;require unique values for {{attributes}}&quot;
+        expectations:
+          responds_to_scope: &quot;{{subject_name}} instance responds to {{method}}&quot;
+          is_unique: &quot;{{subject_name}} to require unique values for {{attribute}}&quot;
+          case_sensitive: &quot;{{subject_name}} to {{not}}be case sensitive on {{attribute}} validation&quot;
+          valid_with_new_scope: &quot;{{subject_name}} to be valid when {{attribute}} scope ({{method}}) change&quot;
+        optionals:
+          scope:
+            positive: &quot;scoped to {{sentence}}&quot;
+          case_sensitive:
+            positive: &quot;case sensitive&quot;
+            negative: &quot;case insensitive&quot;
+</diff>
      <filename>remarkable_datamapper/locale/en.yml</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
 
-RAILS_I18n = true
+RAILS_I18N = false  # specs won't run unless true
 
 class Post
   attr_accessor :published, :public, :deleted</diff>
      <filename>remarkable_datamapper/spec/describe_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -44,7 +44,8 @@ module ModelBuilder
   def define_constant(class_name, base, &amp;block)
     class_name = class_name.to_s.camelize
 
-    klass = Class.new(base)
+    klass = Class.new
+    klass.include base
     Object.const_set(class_name, klass)
 
     klass.class_eval(&amp;block) if block_given?
@@ -56,7 +57,7 @@ module ModelBuilder
   end
 
   def define_model_class(class_name, &amp;block)
-    define_constant(class_name, ActiveRecord::Base, &amp;block)
+    define_constant(class_name, DataMapper::Resource, &amp;block)
   end
 
   def define_model(name, columns = {}, &amp;block)</diff>
      <filename>remarkable_datamapper/spec/model_builder.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,8 +16,8 @@ require 'data_objects'
 gem 'do_sqlite3', DM_VERSION
 require 'do_sqlite3'
 
-gem 'rails_datamapper', DM_VERSION
-require 'rails_datamapper'
+gem 'dm-core', DM_VERSION
+require 'dm-core'
 
 gem 'dm-validations', DM_VERSION
 require 'dm-validations'</diff>
      <filename>remarkable_datamapper/spec/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -383,3 +383,265 @@ en:
             positive: &quot;case sensitive&quot;
             negative: &quot;case insensitive&quot;
 
+    data_mapper:
+      describe:
+        each: &quot;{{key}} is {{value}}&quot;
+        prepend: &quot;when &quot;
+        connector: &quot; and &quot;
+      expectations:
+        allow_nil: &quot;{{subject_name}} to {{not}}allow nil values for {{attribute}}&quot;
+        allow_blank: &quot;{{subject_name}} to {{not}}allow blank values for {{attribute}}&quot;
+      optionals:
+        allow_nil:
+          positive: &quot;allowing nil values&quot;
+          negative: &quot;not allowing nil values&quot;
+        allow_blank:
+          positive: &quot;allowing blank values&quot;
+          negative: &quot;not allowing blank values&quot;
+
+      accept_nested_attributes_for:
+        description: &quot;accept nested attributes for {{associations}}&quot;
+        expectations:
+          association_exists: &quot;{{subject_name}} to have association {{association}}, but does not&quot;
+          is_autosave: &quot;{{subject_name}} to have association {{association}} with autosave true, got false&quot;
+          responds_to_attributes: &quot;{{subject_name}} to respond to :{{association}}_attributes=, but does not&quot;
+          allows_destroy: &quot;{{subject_name}} with allow destroy equals to {{allow_destroy}}, got {{actual}}&quot;
+          accepts: &quot;{{subject_name}} to accept attributes {{attributes}} for {{association}}, but does not&quot;
+          rejects: &quot;{{subject_name}} to reject attributes {{attributes}} for {{association}}, but does not&quot;
+        optionals:
+          allow_destroy:
+            positive: &quot;allowing destroy&quot;
+            negative: &quot;not allowing destroy&quot;
+          accept:
+            positive: &quot;accepting {{sentence}}&quot;
+          reject:
+            positive: &quot;rejecting {{sentence}}&quot;
+
+      allow_values_for:
+        description: &quot;allow {{in}} as values for {{attributes}}&quot;
+        expectations:
+          is_valid: &quot;{{subject_name}} to be valid when {{attribute}} is set to {{value}}&quot;
+
+      allow_mass_assignment_of:
+        description: &quot;allow mass assignment of {{attributes}}&quot;
+        expectations:
+          allows: &quot;{{subject_name}} to allow mass assignment ({{subject_name}} is protecting {{protected_attributes}})&quot;
+          is_protected: &quot;{{subject_name}} to allow mass assignment of {{attribute}} ({{subject_name}} is protecting {{attribute}})&quot;
+          is_accessible: &quot;{{subject_name}} to allow mass assignment of {{attribute}} ({{subject_name}} has not made {{attribute}} accessible)&quot;
+        negative_expectations:
+          allows: &quot;{{subject_name}} to allow mass assignment ({{subject_name}} made {{accessible_attributes}} accessible)&quot;
+          is_protected: &quot;{{subject_name}} to allow mass assignment of {{attribute}} ({{subject_name}} is not protecting {{attribute}})&quot;
+          is_accessible: &quot;{{subject_name}} to allow mass assignment of {{attribute}} ({{subject_name}} has made {{attribute}} accessible)&quot;
+
+      association:
+        belongs_to: belong to
+        has_many: have many
+        has_and_belongs_to_many: have and belong to many
+        has_one: have one
+        description: &quot;{{macro}} {{associations}}&quot;
+        expectations:
+          association_exists: &quot;{{subject_name}} records {{macro}} {{association}}, but the association does not exist&quot;
+          macro_matches: &quot;{{subject_name}} records {{macro}} {{association}}, got {{subject_name}} records {{actual_macro}} {{association}}&quot;
+          through_exists: &quot;{{subject_name}} records {{macro}} {{association}} through {{through}}, through association does not exist&quot;
+          source_exists: &quot;{{subject_name}} records {{macro}} {{association}} through {{through}}, source association does not exist&quot;
+          klass_exists: &quot;{{subject_name}} records {{macro}} {{association}}, but the association class does not exist&quot;
+          join_table_exists: &quot;join table {{join_table}} to exist, but does not&quot;
+          foreign_key_exists: &quot;foreign key {{foreign_key}} to exist on {{foreign_key_table}}, but does not&quot;
+          polymorphic_exists: &quot;{{subject_table}} to have {{polymorphic_column}} as column, but does not&quot;
+          counter_cache_exists: &quot;{{reflection_table}} to have {{counter_cache_column}} as column, but does not&quot;
+          options_match: &quot;{{subject_name}} records {{macro}} {{association}} with options {{options}}, got {{actual}}&quot;
+        optionals:
+          through:
+            positive: &quot;through {{value}}&quot;
+          source:
+            positive: &quot;with source {{inspect}}&quot;
+          source_type:
+            positive: &quot;with source type {{inspect}}&quot;
+          class_name:
+            positive: &quot;with class name {{inspect}}&quot;
+          foreign_key:
+            positive: &quot;with foreign key {{inspect}}&quot;
+          dependent:
+            positive: &quot;with dependent {{inspect}}&quot;
+          join_table:
+            positive: &quot;with join table {{inspect}}&quot;
+          uniq:
+            positive: &quot;with unique records&quot;
+            negative: &quot;without unique records&quot;
+          readonly:
+            positive: &quot;with readonly records&quot;
+            negative: &quot;without readonly records&quot;
+          validate:
+            positive: &quot;validating associated records&quot;
+            negative: &quot;not validating associated records&quot;
+          autosave:
+            positive: &quot;autosaving associated records&quot;
+            negative: &quot;not autosaving associated records&quot;
+          as:
+            positive: &quot;through the polymorphic interface {{inspect}}&quot;
+          counter_cache:
+            positive: &quot;with counter cache {{inspect}}&quot;
+            negative: &quot;without counter cache&quot;
+          select:
+            positive: &quot;selecting {{inspect}}&quot;
+          conditions:
+            positive: &quot;with conditions {{inspect}}&quot;
+          include:
+            positive: &quot;including {{inspect}}&quot;
+          group:
+            positive: &quot;grouping by {{inspect}}&quot;
+          having:
+            positive: &quot;having {{inspect}}&quot;
+          order:
+            positive: &quot;with order {{inspect}}&quot;
+          limit:
+            positive: &quot;with limit {{inspect}}&quot;
+          offset:
+            positive: &quot;with offset {{inspect}}&quot;
+
+      have_column:
+        description: &quot;have column(s) named {{columns}}&quot;
+        expectations:
+          column_exists: &quot;{{subject_name}} to have column named {{column}}&quot;
+          options_match: &quot;{{subject_name}} to have column {{column}} with options {{options}}, got {{actual}}&quot;
+        optionals:
+          type:
+            positive: &quot;with type {{inspect}}&quot;
+          null:
+            positive: &quot;allowing null values&quot;
+            negative: &quot;not allowing null values&quot;
+          default:
+            positive: &quot;with default value {{inspect}}&quot;
+            negative: &quot;with default value {{inspect}}&quot;
+          limit:
+            positive: &quot;with limit {{inspect}}&quot;
+
+      have_default_scope:
+        description: &quot;have a default scope with {{options}}&quot;
+        expectations:
+          options_match: &quot;default scope with {{options}}, got {{actual}}&quot;
+
+      have_index:
+        description: &quot;have index for column(s) {{columns}}&quot;
+        expectations:
+          index_exists: &quot;index {{column}} to exist on table {{table_name}}&quot;
+          is_unique: &quot;index on {{column}} with unique equals to {{unique}}, got {{actual}}&quot;
+        optionals:
+          unique:
+            positive: &quot;with unique values&quot;
+            negative: &quot;with non unique values&quot;
+          table_name:
+            positive: &quot;on table {{value}}&quot;
+
+      have_readonly_attributes:
+        description: &quot;make {{attributes}} read-only&quot;
+        expectations:
+          is_readonly: &quot;{{subject_name}} to make {{attribute}} read-only, got {{actual}}&quot;
+
+      have_scope:
+        description: &quot;have to scope itself to {{options}} when {{scope_name}} is called&quot;
+        expectations:
+          is_scope: &quot;{{scope_name}} when called on {{subject_name}} return an instance of ActiveRecord::NamedScope::Scope&quot;
+          options_match: &quot;{{scope_name}} when called on {{subject_name}} scope to {{options}}, got {{actual}}&quot;
+        optionals:
+          with:
+            positive: &quot;with {{inspect}} as argument&quot;
+
+      validate_acceptance_of:
+        description: &quot;require {{attributes}} to be accepted&quot;
+        expectations:
+          requires_acceptance: &quot;{{subject_name}} to be invalid if {{attribute}} is not accepted&quot;
+          accept_is_valid: &quot;{{subject_name}} to be valid when {{attribute}} is accepted with value {{accept}}&quot;
+        optionals:
+          accept:
+            positive: &quot;with value {{inspect}}&quot;
+
+      validate_associated:
+        description: &quot;require associated {{associations}} to be valid&quot;
+        expectations:
+          is_valid: &quot;{{subject_name}} to be invalid when {{association}} is invalid&quot;
+
+      validate_confirmation_of:
+        description: &quot;require {{attributes}} to be confirmed&quot;
+        expectations:
+          responds_to_confirmation: &quot;{{subject_name}} instance responds to {{attribute}}_confirmation&quot;
+          confirms: &quot;{{subject_name}} to be valid only when {{attribute}} is confirmed&quot;
+
+      validate_exclusion_of:
+        description: &quot;ensure exclusion of {{attributes}} in {{in}}&quot;
+        expectations:
+          is_valid: &quot;{{subject_name}} to be valid when {{attribute}} is set to {{value}}&quot;
+          is_invalid: &quot;{{subject_name}} to be invalid when {{attribute}} is set to {{value}}&quot;
+
+      validate_inclusion_of:
+        description: &quot;ensure inclusion of {{attributes}} in {{in}}&quot;
+        expectations:
+          is_valid: &quot;{{subject_name}} to be valid when {{attribute}} is set to {{value}}&quot;
+          is_invalid: &quot;{{subject_name}} to be invalid when {{attribute}} is set to {{value}}&quot;
+
+      validate_length_of:
+        description: &quot;ensure length of {{attributes}}&quot;
+        expectations:
+          less_than_min_length: &quot;{{subject_name}} to be invalid when {{attribute}} length is less than {{minimum}} characters&quot;
+          exactly_min_length: &quot;{{subject_name}} to be valid when {{attribute}} length is {{minimum}} characters&quot;
+          more_than_max_length: &quot;{{subject_name}} to be invalid when {{attribute}} length is more than {{maximum}} characters&quot;
+          exactly_max_length: &quot;{{subject_name}} to be valid when {{attribute}} length is {{maximum}} characters&quot;
+        optionals:
+          within:
+            positive: &quot;is within {{inspect}} characters&quot;
+          maximum:
+            positive: &quot;is maximum {{inspect}} characters&quot;
+          minimum:
+            positive: &quot;is minimum {{inspect}} characters&quot;
+          is:
+            positive: &quot;is equal to {{inspect}} characters&quot;
+          with_kind_of:
+            positive: &quot;with kind of {{value}}&quot;
+
+      validate_numericality_of:
+        description: &quot;ensure numericality of {{attributes}}&quot;
+        expectations:
+          only_numeric_values: &quot;{{subject_name}} to allow only numeric values for {{attribute}}&quot;
+          only_integer: &quot;{{subject_name}} to {{not}}allow only integer values for {{attribute}}&quot;
+          only_even: &quot;{{subject_name}} to allow only even values for {{attribute}}&quot;
+          only_odd: &quot;{{subject_name}} to allow only odd values for {{attribute}}&quot;
+          equals_to: &quot;{{subject_name}} to be valid only when {{attribute}} is equal to {{count}}&quot;
+          more_than_maximum: &quot;{{subject_name}} to be invalid when {{attribute}} is greater than {{count}}&quot;
+          less_than_minimum: &quot;{{subject_name}} to be invalid when {{attribute}} is less than {{count}}&quot;
+        optionals:
+          only_integer:
+            positive: &quot;allowing only integer values&quot;
+          odd:
+            positive: &quot;allowing only odd values&quot;
+          even:
+            positive: &quot;allowing only even values&quot;
+          equal_to:
+            positive: &quot;is equal to {{inspect}}&quot;
+          less_than:
+            positive: &quot;is less than {{inspect}}&quot;
+          greater_than:
+            positive: &quot;is greater than {{inspect}}&quot;
+          less_than_or_equal_to:
+            positive: &quot;is less than or equal to {{inspect}}&quot;
+          greater_than_or_equal_to:
+            positive: &quot;is greater than or equal to {{inspect}}&quot;
+
+      validate_presence_of:
+        description: &quot;require {{attributes}} to be set&quot;
+        expectations:
+          allow_nil: &quot;{{subject_name}} to require {{attribute}} to be set&quot;
+
+      validate_uniqueness_of:
+        description: &quot;require unique values for {{attributes}}&quot;
+        expectations:
+          responds_to_scope: &quot;{{subject_name}} instance responds to {{method}}&quot;
+          is_unique: &quot;{{subject_name}} to require unique values for {{attribute}}&quot;
+          case_sensitive: &quot;{{subject_name}} to {{not}}be case sensitive on {{attribute}} validation&quot;
+          valid_with_new_scope: &quot;{{subject_name}} to be valid when {{attribute}} scope ({{method}}) change&quot;
+        optionals:
+          scope:
+            positive: &quot;scoped to {{sentence}}&quot;
+          case_sensitive:
+            positive: &quot;case sensitive&quot;
+            negative: &quot;case insensitive&quot;
+</diff>
      <filename>remarkable_i18n/en.yml</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e812d8a4ee00297def62fbe06ff18e9cf8040317</id>
    </parent>
  </parents>
  <author>
    <name>Blake Gentry</name>
    <email>blake@ententecorp.com</email>
  </author>
  <url>http://github.com/carlosbrando/remarkable/commit/051c06b1192c1f68f3caaa9d74b841f9f06759dc</url>
  <id>051c06b1192c1f68f3caaa9d74b841f9f06759dc</id>
  <committed-date>2009-09-01T19:13:57-07:00</committed-date>
  <authored-date>2009-09-01T19:13:57-07:00</authored-date>
  <message>Able to get specs running without i18n enabled. 8 failing specs in Describe.</message>
  <tree>e8a8678cbfb1e5f075afb5f23d937e76032a94f3</tree>
  <committer>
    <name>Blake Gentry</name>
    <email>blake@ententecorp.com</email>
  </committer>
</commit>
