<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,9 +1,8 @@
-= github/master 
-- Dramatically simplified ActiveRecord monkey patching and hackery
-  - Removed read_attribute override, which was a bit brutal
-  - Removed attribute reader method override
-  - Removed dirty attribute handling, now just uses regular AR way
+= 2.1.0 [2009-06-20]
 - Added ambiguous year threshold setting in Formats class to customize the threshold for 2 digit years (See README)
+- Fixed interpolation values in custom error message for Rails 2.2+
+- Fixed custom I18n local override of en locale
+- Dramatically simplified ActiveRecord monkey patching and hackery
 
 = 2.0.0 [2009-04-12]
 - Error value formats are now specified in the i18n locale file instead of updating plugin hash. See OTHER CUSTOMISATION section in README.</diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -34,7 +34,7 @@ task :default =&gt; :spec
 desc &quot;Run specs&quot;
 Spec::Rake::SpecTask.new do |t|
   t.spec_files = FileList['spec/**/*_spec.rb']
-  t.spec_opts = %w(-fs --color)
+  t.spec_opts = %w(--color)
 end
 
 </diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,12 @@ module ValidatesTimeliness
 
   module ActiveRecord
 
+    # Overrides write method for date, time and datetime columns
+    # to use plugin parser. Also adds mechanism to store value
+    # before type cast.
+    #
     module AttributeMethods
 
-      # Overrides write method for date, time and datetime columns
-      # to use plugin parser. Also adds mechanism to store value
-      # before type cast.
-      #
       def self.included(base)
         base.extend ClassMethods
         base.class_eval do
@@ -44,8 +44,9 @@ module ValidatesTimeliness
 
         def define_attribute_methods_with_timeliness
           return if generated_methods?
-          columns_hash.each do |name, column|
+          timeliness_methods = []
 
+          columns_hash.each do |name, column|
             if [:date, :time, :datetime].include?(column.type)
               time_zone_aware = create_time_zone_conversion_attribute?(name, column) rescue false
 
@@ -54,10 +55,12 @@ module ValidatesTimeliness
                   write_date_time_attribute('#{name}', value, #{column.type.inspect}, #{time_zone_aware})
                 end
               EOV
+              timeliness_methods &lt;&lt; name
             end
-
           end
+
           define_attribute_methods_without_timeliness
+          @generated_methods += timeliness_methods
         end
 
       end</diff>
      <filename>lib/validates_timeliness/active_record/attribute_methods.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,9 +10,9 @@ module ValidatesTimeliness
       def self.included(base)
         base.alias_method_chain :execute_callstack_for_multiparameter_attributes, :timeliness
       end    
-    
-      # Overrides AR method to store multiparameter time and dates as string
-      # allowing validation later.
+
+      # Assign dates and times as formatted strings to force the use of the plugin parser
+      # and store a before_type_cast value for attribute
       def execute_callstack_for_multiparameter_attributes_with_timeliness(callstack)
         errors = []
         callstack.each do |name, values|
@@ -46,18 +46,17 @@ module ValidatesTimeliness
         when :time
           extract_time_from_multiparameter_attributes(values)
         when :datetime
-          date_values, time_values = values.slice!(0, 3), values
-          extract_date_from_multiparameter_attributes(date_values) + &quot; &quot; + extract_time_from_multiparameter_attributes(time_values)
+          extract_date_from_multiparameter_attributes(values) + &quot; &quot; + extract_time_from_multiparameter_attributes(values)
         end
       end   
          
       def extract_date_from_multiparameter_attributes(values)
-        [values[0], *values.slice(1, 2).map { |s| s.rjust(2, &quot;0&quot;) }].join(&quot;-&quot;)
+        year = ValidatesTimeliness::Formats.unambiguous_year(values[0].rjust(2, &quot;0&quot;))
+        [year, *values.slice(1, 2).map { |s| s.rjust(2, &quot;0&quot;) }].join(&quot;-&quot;)
       end
       
       def extract_time_from_multiparameter_attributes(values)
-        values = values.size &gt; 3 ? values[3..5] : values
-        values.map { |s| s.rjust(2, &quot;0&quot;) }.join(&quot;:&quot;)
+        values[3..5].map { |s| s.rjust(2, &quot;0&quot;) }.join(&quot;:&quot;)
       end
       
     end</diff>
      <filename>lib/validates_timeliness/active_record/multiparameter_attributes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -314,7 +314,12 @@ module ValidatesTimeliness
         args = order.invert.sort.map {|p| arg_map[p[1]][1] }
         arr = [nil] * 7
         order.keys.each {|k| i = arg_map[k][0]; arr[i] = arg_map[k][2] unless i.nil? }
-        proc_string = &quot;lambda {|#{args.join(',')}| md||=nil; [#{arr.map {|i| i.nil? ? 'nil' : i }.join(',')}].map {|i| i.is_a?(Float) ? i : i.to_i } }&quot;
+        proc_string = &lt;&lt;-EOL
+          lambda {|#{args.join(',')}| 
+              md ||= nil
+              [#{arr.map {|i| i.nil? ? 'nil' : i }.join(',')}].map {|i| i.is_a?(Float) ? i : i.to_i }
+          }
+        EOL
         eval proc_string
       end
       </diff>
      <filename>lib/validates_timeliness/formats.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,7 @@ Ginger.configure do |config|
   rails_versions = ['2.0.2', '2.1.2', '2.2.2', '2.3.2']
 
   rails_versions.each do |v|
-    g = Ginger::Scenario.new
+    g = Ginger::Scenario.new(&quot;Rails #{v}&quot;)
     g['rails'] = v
     config.scenarios &lt;&lt; g.dup
   end</diff>
      <filename>spec/ginger_scenarios.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,21 +7,20 @@ 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;Adam Meehan&quot;]
   s.autorequire = %q{validates_timeliness}
-  s.date = %q{2009-04-12}
+  s.date = %q{2009-06-20}
   s.description = %q{Date and time validation plugin for Rails 2.x which allows custom formats}
   s.email = %q{adam.meehan@gmail.com}
   s.extra_rdoc_files = [&quot;README.rdoc&quot;, &quot;LICENSE&quot;, &quot;TODO&quot;, &quot;CHANGELOG&quot;]
-  s.files = [&quot;LICENSE&quot;, &quot;README.rdoc&quot;, &quot;Rakefile&quot;, &quot;TODO&quot;, &quot;CHANGELOG&quot;, &quot;lib/validates_timeliness&quot;, &quot;lib/validates_timeliness/core_ext&quot;, &quot;lib/validates_timeliness/core_ext/date.rb&quot;, &quot;lib/validates_timeliness/core_ext/date_time.rb&quot;, &quot;lib/validates_timeliness/core_ext/time.rb&quot;, &quot;lib/validates_timeliness/action_view&quot;, &quot;lib/validates_timeliness/action_view/instance_tag.rb&quot;, &quot;lib/validates_timeliness/locale&quot;, &quot;lib/validates_timeliness/locale/en.yml&quot;, &quot;lib/validates_timeliness/validation_methods.rb&quot;, &quot;lib/validates_timeliness/active_record&quot;, &quot;lib/validates_timeliness/active_record/attribute_methods.rb&quot;, &quot;lib/validates_timeliness/active_record/multiparameter_attributes.rb&quot;, &quot;lib/validates_timeliness/parser.rb&quot;, &quot;lib/validates_timeliness/formats.rb&quot;, &quot;lib/validates_timeliness/validator.rb&quot;, &quot;lib/validates_timeliness/spec&quot;, &quot;lib/validates_timeliness/spec/rails&quot;, &quot;lib/validates_timeliness/spec/rails/matchers&quot;, &quot;lib/validates_timeliness/spec/rails/matchers/validate_timeliness.rb&quot;, &quot;lib/validates_timeliness.rb&quot;, &quot;spec/core_ext&quot;, &quot;spec/core_ext/dummy_time_spec.rb&quot;, &quot;spec/validator_spec.rb&quot;, &quot;spec/action_view&quot;, &quot;spec/action_view/instance_tag_spec.rb&quot;, &quot;spec/ginger_scenarios.rb&quot;, &quot;spec/spec_helper.rb&quot;, &quot;spec/formats_spec.rb&quot;, &quot;spec/active_record&quot;, &quot;spec/active_record/attribute_methods_spec.rb&quot;, &quot;spec/active_record/multiparameter_attributes_spec.rb&quot;, &quot;spec/time_travel&quot;, &quot;spec/time_travel/time_travel.rb&quot;, &quot;spec/time_travel/time_extensions.rb&quot;, &quot;spec/time_travel/MIT-LICENSE&quot;, &quot;spec/parser_spec.rb&quot;, &quot;spec/spec&quot;, &quot;spec/spec/rails&quot;, &quot;spec/spec/rails/matchers&quot;, &quot;spec/spec/rails/matchers/validate_timeliness_spec.rb&quot;, &quot;spec/resources&quot;, &quot;spec/resources/person.rb&quot;, &quot;spec/resources/sqlite_patch.rb&quot;, &quot;spec/resources/schema.rb&quot;, &quot;spec/resources/application.rb&quot;]
-  s.has_rdoc = true
+  s.files = [&quot;LICENSE&quot;, &quot;README.rdoc&quot;, &quot;Rakefile&quot;, &quot;TODO&quot;, &quot;CHANGELOG&quot;, &quot;lib/validates_timeliness&quot;, &quot;lib/validates_timeliness/active_record&quot;, &quot;lib/validates_timeliness/active_record/multiparameter_attributes.rb&quot;, &quot;lib/validates_timeliness/active_record/attribute_methods.rb&quot;, &quot;lib/validates_timeliness/parser.rb&quot;, &quot;lib/validates_timeliness/core_ext&quot;, &quot;lib/validates_timeliness/core_ext/date.rb&quot;, &quot;lib/validates_timeliness/core_ext/time.rb&quot;, &quot;lib/validates_timeliness/core_ext/date_time.rb&quot;, &quot;lib/validates_timeliness/validator.rb&quot;, &quot;lib/validates_timeliness/validation_methods.rb&quot;, &quot;lib/validates_timeliness/locale&quot;, &quot;lib/validates_timeliness/locale/en.yml&quot;, &quot;lib/validates_timeliness/spec&quot;, &quot;lib/validates_timeliness/spec/rails&quot;, &quot;lib/validates_timeliness/spec/rails/matchers&quot;, &quot;lib/validates_timeliness/spec/rails/matchers/validate_timeliness.rb&quot;, &quot;lib/validates_timeliness/action_view&quot;, &quot;lib/validates_timeliness/action_view/instance_tag.rb&quot;, &quot;lib/validates_timeliness/formats.rb&quot;, &quot;lib/validates_timeliness.rb&quot;, &quot;spec/active_record&quot;, &quot;spec/active_record/multiparameter_attributes_spec.rb&quot;, &quot;spec/active_record/attribute_methods_spec.rb&quot;, &quot;spec/formats_spec.rb&quot;, &quot;spec/parser_spec.rb&quot;, &quot;spec/core_ext&quot;, &quot;spec/core_ext/dummy_time_spec.rb&quot;, &quot;spec/spec_helper.rb&quot;, &quot;spec/ginger_scenarios.rb&quot;, &quot;spec/time_travel&quot;, &quot;spec/time_travel/time_extensions.rb&quot;, &quot;spec/time_travel/time_travel.rb&quot;, &quot;spec/time_travel/MIT-LICENSE&quot;, &quot;spec/spec&quot;, &quot;spec/spec/rails&quot;, &quot;spec/spec/rails/matchers&quot;, &quot;spec/spec/rails/matchers/validate_timeliness_spec.rb&quot;, &quot;spec/validator_spec.rb&quot;, &quot;spec/action_view&quot;, &quot;spec/action_view/instance_tag_spec.rb&quot;, &quot;spec/resources&quot;, &quot;spec/resources/schema.rb&quot;, &quot;spec/resources/application.rb&quot;, &quot;spec/resources/person.rb&quot;, &quot;spec/resources/sqlite_patch.rb&quot;]
   s.homepage = %q{http://github.com/adzap/validates_timeliness}
   s.require_paths = [&quot;lib&quot;]
   s.rubyforge_project = %q{validatestime}
-  s.rubygems_version = %q{1.3.1}
+  s.rubygems_version = %q{1.3.3}
   s.summary = %q{Date and time validation plugin for Rails 2.x which allows custom formats}
 
   if s.respond_to? :specification_version then
     current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
+    s.specification_version = 3
 
     if Gem::Version.new(Gem::RubyGemsVersion) &gt;= Gem::Version.new('1.2.0') then
     else</diff>
      <filename>validates_timeliness.gemspec</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9b300e084b0064ba063f654f5d1957ad7495425b</id>
    </parent>
  </parents>
  <author>
    <name>Adam Meehan</name>
    <email>adam.meehan@gmail.com</email>
  </author>
  <url>http://github.com/adzap/validates_timeliness/commit/75a3b2bd83323981800071967b5d885115ffe7ce</url>
  <id>75a3b2bd83323981800071967b5d885115ffe7ce</id>
  <committed-date>2009-06-20T05:30:08-07:00</committed-date>
  <authored-date>2009-06-20T05:30:08-07:00</authored-date>
  <message>version 2.1</message>
  <tree>2deb5a16b93b2349e96d807a566aadda95792e11</tree>
  <committer>
    <name>Adam Meehan</name>
    <email>adam.meehan@gmail.com</email>
  </committer>
</commit>
