<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/date_time_text_field_helpers/form_builder.rb</filename>
    </added>
    <added>
      <filename>lib/date_time_text_field_helpers/form_helpers.rb</filename>
    </added>
    <added>
      <filename>lib/date_time_text_field_helpers/instance_tag.rb</filename>
    </added>
    <added>
      <filename>spec/form_builder_spec.rb</filename>
    </added>
    <added>
      <filename>spec/form_helpers_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,9 @@
+[2008-07-12]
+  - refactored to be a better plugin citizen using modules and a cleanup
+  - fixed laziness by removing Time and DateTime aliases for second and minute
+  - removed unused tasks folder
+  - tidied up rakefile
+
 [2008-06-17]
   - moved to http://github.com/adzap/date_time_text_field_helpers
   </diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,8 @@ require 'rake/testtask'
 require 'rake/rdoctask'
 require 'spec/rake/spectask'
 
-desc 'Default: run unit tests.'
-task :default =&gt; :test
+desc 'Default: run specs'
+task :default =&gt; :spec
 
 spec_files = Rake::FileList[&quot;spec/**/*_spec.rb&quot;]
 
@@ -21,13 +21,6 @@ Spec::Rake::SpecTask.new(:coverage) do |t|
   t.rcov_opts = ['--exclude', 'spec,/var/lib/gems']
 end
 
-desc 'Test the date_time_text_field_helpers plugin.'
-Rake::TestTask.new(:test) do |t|
-  t.libs &lt;&lt; 'lib'
-  t.pattern = 'test/**/*_test.rb'
-  t.verbose = true
-end
-
 desc 'Generate documentation for the date_time_text_field_helpers plugin.'
 Rake::RDocTask.new(:rdoc) do |rdoc|
   rdoc.rdoc_dir = 'rdoc'</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1 @@
-# Include hook code here
 require 'date_time_text_field_helpers'</diff>
      <filename>init.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,153 +1,7 @@
-require 'date'
-module DateTimeTextFieldHelpers
-  def date_text_field(object_name, method, options = {})
-    ActionView::Helpers::InstanceTag.new(object_name, method, self, nil, options.delete(:object)).to_date_text_field_tag(options)
-  end
-  
-  def time_text_field(object_name, method, options = {})
-    ActionView::Helpers::InstanceTag.new(object_name, method, self, nil, options.delete(:object)).to_time_text_field_tag(options)
-  end
-  
-  def datetime_text_field(object_name, method, options = {})
-    ActionView::Helpers::InstanceTag.new(object_name, method, self, nil, options.delete(:object)).to_datetime_text_field_tag(options)
-  end
+require 'date_time_text_field_helpers/form_helpers'
+require 'date_time_text_field_helpers/instance_tag'
+require 'date_time_text_field_helpers/form_builder'
 
-  def text_field_for_date_part(part, datetime, options = {})
-    val = datetime ? (datetime.kind_of?(Fixnum) ? datetime : datetime.send(part)) : ''
-    if options[:use_hidden]
-      hidden_html(options[:field_name] || part, val, options)
-    else
-      value = val.blank? ? '' : leading_zero_on_single_digits(val)
-      datetime_text_field_html(part, value, options.merge(:class =&gt; &quot;#{part}_field&quot;))
-    end
-  end
-  
-  
-  # Extracts field name with position as params key to find
-  # value user submitted for this field if any
-  def extract_field_param_value(options)
-    field_name = options[:name].scan(/\[(.*?)\]/).first.first
-    param_value = nil
-    if @template_object.params[@object_name] 
-      param_value = @template_object.params[@object_name][field_name]
-    end
-    param_value
-  end  
-  
-  # Constructs html for field and inserts value from params if exists
-  # otherwise it uses the column value from the object. This allows
-  # better user feedback if they have put in bogus values, they will 
-  # be able see the value after submitting and getting an error back.
-  def datetime_text_field_html(type, value, options)
-    name_and_id_from_options(options, type)
-    value = extract_field_param_value(options) || value
-    size = case type
-      when :hour, :minute, :second : 2
-      when :year : 4
-      else 2
-    end
-    datetime_text_field_html = %(&lt;input type=&quot;text&quot; id=&quot;#{options[:id]}&quot; name=&quot;#{options[:name]}&quot; size=&quot;#{size}&quot; value=&quot;#{value}&quot; class=&quot;#{options[:class]}&quot; /&gt;)
-  end
-end
-
-ActionView::Base.send(:include, DateTimeTextFieldHelpers)
-
-ActionView::Helpers::InstanceTag.class_eval do  
-  include DateTimeTextFieldHelpers
-
-  def to_date_text_field_tag(options = {})
-    date_or_time_text_field(options.merge(:discard_hour =&gt; true))
-  end
-
-  def to_time_text_field_tag(options = {})
-    date_or_time_text_field options.merge(:discard_year =&gt; true, :discard_month =&gt; true)
-  end
-
-  def to_datetime_text_field_tag(options = {})
-    date_or_time_text_field options
-  end
-  
-  private
-  
-  # Adapted from the Rails source date_or_time_select method to use text fields
-  # instead of selects and adds a few extra options
-  def date_or_time_text_field(options)
-    defaults = { :discard_type =&gt; true, 
-                 :date_separator =&gt; '-',
-                 :time_separator =&gt; ':',
-                 :date_time_separator =&gt; '&amp;mdash;', 
-                 :class =&gt; 'date_time_field' }
-                 
-    options  = defaults.merge(options)
-    datetime = value(object)
-    datetime ||= default_time_from_options(options[:default]) unless options[:blank]
-
-    position = { :year =&gt; 1, :month =&gt; 2, :day =&gt; 3, :hour =&gt; 4, :minute =&gt; 5, :second =&gt; 6 }
-
-    order = (options[:order] ||= [:year, :month, :day])
-
-    # Discard explicit and implicit by not being included in the :order
-    discard = {}
-    discard[:year]   = true if options[:discard_year] or !order.include?(:year)
-    discard[:month]  = true if options[:discard_month] or !order.include?(:month)
-    discard[:day]    = true if options[:discard_day] or discard[:month] or !order.include?(:day)
-    discard[:hour]   = true if options[:discard_hour]
-    discard[:minute] = true if options[:discard_minute] or discard[:hour]
-    discard[:second] = true unless options[:include_seconds] &amp;&amp; !discard[:minute]
-
-    # If the day is hidden and the month is visible, the day should be set to the 1st so all month choices are valid
-    # (otherwise it could be 31 and february wouldn't be a valid date)
-    if datetime &amp;&amp; discard[:day] &amp;&amp; !discard[:month]
-      datetime = datetime.change(:day =&gt; 1)
-    end
-
-    # Maintain valid dates by including hidden fields for discarded elements
-    [:day, :month, :year].each { |o| order.unshift(o) unless order.include?(o) }
-
-    # Ensure proper ordering of :hour, :minute and :second
-    [:hour, :minute, :second].each { |o| order.delete(o); order.push(o) }
-
-    date_or_time_text_field = ''
-    order.reverse.each do |param|
-      # Send hidden fields for discarded elements once output has started
-      # This ensures AR can reconstruct valid dates using ParseDate
-      next if discard[param] &amp;&amp; date_or_time_text_field.empty?
-
-      date_or_time_text_field.insert(0, self.send(:text_field_for_date_part, param, datetime, options_with_prefix(position[param], options.merge(:use_hidden =&gt; discard[param]))))
-      date_or_time_text_field.insert(0,
-        case param
-          when :year, :month, :day then (discard[param] || order.index(param) == 0)  ? '' : &quot; #{options[:date_separator]} &quot;
-          when :hour then (discard[:year] &amp;&amp; discard[:day] ? &quot;&quot; : &quot; #{options[:date_time_separator]} &quot;)
-          when :minute then &quot; #{options[:time_separator]} &quot;
-          when :second then options[:include_seconds] ? &quot; #{options[:time_separator]} &quot; : &quot;&quot;          
-          else ''
-        end)
-    end
-
-    content_tag(:span, date_or_time_text_field, :class =&gt; options[:class], :id =&gt; &quot;#{@object_name}_#{@method_name}&quot;)
-  end      
-end
-
-ActionView::Helpers::FormBuilder.class_eval do
-  def date_text_field(method, options = {})
-    @template.date_text_field(@object_name, method, options.merge(:object =&gt; @object))
-  end
-
-  def time_text_field(method, options = {})
-    @template.time_text_field(@object_name, method, options.merge(:object =&gt; @object))
-  end
-
-  def datetime_text_field(method, options = {})
-    @template.datetime_text_field(@object_name, method, options.merge(:object =&gt; @object))
-  end
-end
-
-Time.class_eval do
-  alias :second :sec
-  alias :minute :min
-end
-
-DateTime.class_eval do
-  alias :second :sec
-  alias :minute :min
-end
+ActionView::Base.send(:include, DateTimeTextFieldHelpers::FormHelpers)
+ActionView::Helpers::InstanceTag.send(:include, DateTimeTextFieldHelpers::InstanceTag)
+ActionView::Helpers::FormBuilder.send(:include, DateTimeTextFieldHelpers::FormBuilder)</diff>
      <filename>lib/date_time_text_field_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,15 +3,14 @@ require 'rubygems'
 require 'spec'
 require 'spec/interop/test'
 
+require 'active_support'
 require 'action_controller'
 require 'action_controller/test_process'
-require 'action_controller/assertions/selector_assertions'
 require 'action_view'
 
-require 'rspec_on_rails/assert_select'
+require 'rspec-rails/rspec-rails'
 require 'date_time_text_field_helpers'
 
 Spec::Runner.configure do |config|
   config.include Spec::Rails::Matchers
-  config.include ActionController::Assertions::SelectorAssertions
-end
\ No newline at end of file
+end</diff>
      <filename>spec/spec_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>eb50ce1eb3eda663299f0574681d7cb5ec09354b</id>
    </parent>
  </parents>
  <author>
    <name>Adam Meehan</name>
    <email>adam.meehan@gmail.com</email>
  </author>
  <url>http://github.com/adzap/date_time_text_field_helpers/commit/2e11dbf1211e5b55af5401f45f41f2dd485dea40</url>
  <id>2e11dbf1211e5b55af5401f45f41f2dd485dea40</id>
  <committed-date>2008-07-11T23:00:17-07:00</committed-date>
  <authored-date>2008-07-11T23:00:17-07:00</authored-date>
  <message>refactored into modules to better plugin design and removed some cruft</message>
  <tree>f74b856d70e0f9db2076bf1ef54e56084c8c5fcd</tree>
  <committer>
    <name>Adam Meehan</name>
    <email>adam.meehan@gmail.com</email>
  </committer>
</commit>
