public
Description: A rails plugin to validate date time attributes which also supports setting time values via strings.
Homepage: http://github.com/lawrencepit/validates_as_time.git
Clone URL: git://github.com/lawrencepit/validates_as_time.git
name age message
file MIT-LICENSE Sun May 18 15:14:52 -0700 2008 initial version [lawrencepit]
file README.rdoc Mon Aug 04 01:29:44 -0700 2008 Added :preparser option. [lawrencepit]
file Rakefile Sun May 18 15:14:52 -0700 2008 initial version [lawrencepit]
file init.rb Sun May 18 15:14:52 -0700 2008 initial version [lawrencepit]
directory lib/ Mon Aug 04 20:41:57 -0700 2008 added *_string_before_type_cast method [lawrencepit]
directory test/ Mon Jul 21 19:04:36 -0700 2008 Various fixes. All tests pass. [lawrencepit]
file validates_as_time.gemspec Sun May 18 15:14:52 -0700 2008 initial version [lawrencepit]
README.rdoc

validates_as_time

A rails plugin to validate date time attributes which also supports setting time values via strings.

This plugin helps with writing minimal code to add date time attributes to your models that are parsed using strings. The strings are parsed using the Time.parse method, or if you have required chronic in your code it will use Chronic.parse for all kinds of extra niceness. For more information on chronic see http://chronic.rubyforge.org.

In addition this plugin can be used to simply validate date time attributes with the usual options like :minimum, :maximum, :allow_nil, etc.

Install

If you want a static version of this plugin you can download the tarball from:

  http://github.com/lawrencepit/validates_as_time/tarball/master

or if you have git installed:

  cd myapp
  git clone git://github.com/lawrencepit/validates_as_time.git vendor/plugins/validates_as_time
  rm -Rf vendor/plugins/validates_as_time/.git

Or add as a submodule:

  git submodule add git://github.com/lawrencepit/validates_as_time.git vendor/plugins/validates_as_time

Usage

For example:

  class Project < ActiveRecord::Base
    validates_as_time :starts_at, :ends_at
  end

This also creates accessor methods named starts_at_string and ends_at_string.

and in your view:

  <%= f.text_field :starts_at_string %>
  <%= f.text_field :ends_at_string %>

You can also provide extra configuration parameters like you are used to with the standard rails validates methods. For example:

  validates_as_time :starts_at, :message => "could not be parsed",
                    :allow_nil => false, :if => Proc.new { |user| user.signup_step > 2 })

or:

  validates_as_time :due_at, :minimum => Time.now, :maximum => "1 jan 2009",
                    :too_early => "You cannot create a task that is due before the current time",
                    :too_late => "You cannot create a task that is due next year"

Configuration options

  • :default - The default value to use when the attribute is empty. This default is only used to present the string value of the time attribute. Default is Time.now
  • :format - The format used to present a Time object. Default is "%Y-%m-%d %H:%M". See the method Time.strftime for more formatting options.
  • :minimum - The minimum value allowed for the attribute. You can provide a Time object or a string which will be parsed by Chronic.parse.
  • :maximum - The maximum value allowed for the attribute. You can provide a Time object or a string which will be parsed by Chronic.parse.
  • :message - A custom error message (default is: "is invalid")
  • :too_early - A custom error message when the time falls before the :minimum given (default is: "cannot be before %s").
  • :too_late - A custom error message when the time falls on or after the :maximum given (default is: "cannot be on or after %s").
  • :allow_nil - Skip validation if attribute is nil (default is: true).
  • :if - Specifies a method, proc or string to call to determine if the validation should occur (e.g. :if => :allow_validation, or :if => Proc.new { |user| user.signup_step > 2 }). The method, proc or string should return or evaluate to a true or false value.
  • :unless - Specifies a method, proc or string to call to determine if the validation should not occur (e.g. :unless => :skip_validation, or :unless => Proc.new { |user| user.signup_step <= 2 }).
  • :on - Specifies when this validation is active (default is :save, other options :create, :update)
  • <tt>:preparser<tt> - Specifies a method or proc to call with the string value that was entered. The return value is used as the argument to the parse method of Time.

You could override these options globally by modifying the following hash:

  ValidatesAsTime.default_options

Localization

To localize the default messages, override:

  ActiveRecord::Errors.default_error_messages[:invalid]
  ActiveRecord::Errors.default_error_messages[:blank]
  ValidatesAsTime.default_options[:too_early]
  ValidatesAsTime.default_options[:too_late]

The messages :too_early and :too_late can accept a placeholder %s which will be replaced with the given minimum resp. maximum value.

Author

Lawrence Pit (lawrence.pit@gmail.com)