date_validator 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -4,3 +4,5 @@ coverage
4
4
  rdoc
5
5
  pkg
6
6
  *.rbc
7
+ doc/*
8
+ .yardoc/*
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm --create use ruby-1.9.2@date_validator > /dev/null
1
+ rvm --create use ruby-1.9.2@date_validator
data/Gemfile CHANGED
@@ -1,12 +1,3 @@
1
- # A sample Gemfile
2
- source :gemcutter
1
+ source "http://rubygems.org"
3
2
 
4
- group :development do
5
- gem "rspec", "~> 2.5.0"
6
- gem "simplecov"
7
- gem "jeweler"
8
- gem "activesupport", "~> 3.0.0"
9
- gem "tzinfo"
10
- end
11
-
12
- gem "activemodel", "~> 3.0.0"
3
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,3 +1,9 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ date_validator (0.6.1)
5
+ activemodel (~> 3.0.0)
6
+
1
7
  GEM
2
8
  remote: http://rubygems.org/
3
9
  specs:
@@ -6,16 +12,10 @@ GEM
6
12
  builder (~> 2.1.2)
7
13
  i18n (~> 0.4.1)
8
14
  activesupport (3.0.0)
15
+ bluecloth (2.0.11)
9
16
  builder (2.1.2)
10
17
  diff-lcs (1.1.2)
11
- gemcutter (0.6.1)
12
- git (1.2.5)
13
- i18n (0.4.1)
14
- jeweler (1.4.0)
15
- gemcutter (>= 0.1.0)
16
- git (>= 1.2.5)
17
- rubyforge (>= 2.0.0)
18
- json_pure (1.4.6)
18
+ i18n (0.4.2)
19
19
  rspec (2.5.0)
20
20
  rspec-core (~> 2.5.0)
21
21
  rspec-expectations (~> 2.5.0)
@@ -24,21 +24,21 @@ GEM
24
24
  rspec-expectations (2.5.0)
25
25
  diff-lcs (~> 1.1.2)
26
26
  rspec-mocks (2.5.0)
27
- rubyforge (2.0.4)
28
- json_pure (>= 1.1.7)
29
27
  simplecov (0.3.6)
30
28
  simplecov-html (>= 0.3.7)
31
29
  simplecov-html (0.3.8)
32
30
  tzinfo (0.3.23)
31
+ yard (0.6.4)
33
32
 
34
33
  PLATFORMS
35
34
  java
36
35
  ruby
37
36
 
38
37
  DEPENDENCIES
39
- activemodel (~> 3.0.0)
40
38
  activesupport (~> 3.0.0)
41
- jeweler
39
+ bluecloth
40
+ date_validator!
42
41
  rspec (~> 2.5.0)
43
42
  simplecov
44
- tzinfo
43
+ tzinfo (~> 0.3.0)
44
+ yard
data/Rakefile CHANGED
@@ -1,60 +1,43 @@
1
- # coding: utf-8
2
- require 'rubygems'
3
- require 'rake'
4
-
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |gem|
8
- gem.name = "date_validator"
9
- gem.summary = "A simple, ORM agnostic, Ruby 1.9 compatible date validator for Rails 3, based on ActiveModel."
10
- gem.description = "A simple, ORM agnostic, Ruby 1.9 compatible date validator for Rails 3, based on ActiveModel. Currently supporting :after, :before, :after_or_equal_to and :before_or_equal_to options."
11
- gem.email = "info@codegram.com"
12
- gem.homepage = "http://github.com/codegram/date_validator"
13
- gem.authors = ["Oriol Gual", "Josep M. Bach", "Josep Jaume Rey"]
14
-
15
- gem.add_dependency 'activemodel', '>= 3.0.0'
16
-
17
- gem.add_development_dependency "rspec", '>= 2.0.0.beta.20'
18
- gem.add_development_dependency "activesupport", '>= 3.0.0'
19
- gem.add_development_dependency "bundler", '>= 1.0.0'
20
- gem.add_development_dependency "tzinfo"
21
- end
22
- Jeweler::GemcutterTasks.new
23
- rescue LoadError
24
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
25
- end
26
-
27
-
28
- # Rake RSpec2 task stuff
29
- gem 'rspec', '>= 2.0.0.beta.20'
30
- gem 'rspec-expectations'
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
31
3
 
32
4
  require 'rspec/core/rake_task'
5
+ desc "Run superrtext specs"
6
+ RSpec::Core::RakeTask.new
33
7
 
34
- desc "Run the specs under spec"
35
- RSpec::Core::RakeTask.new do |t|
36
-
8
+ require 'yard'
9
+ YARD::Rake::YardocTask.new(:docs) do |t|
10
+ t.files = ['lib/**/*.rb']
11
+ t.options = ['-m', 'markdown', '--no-private', '-r', 'Readme.md', '--title', 'Date Validator documentation']
37
12
  end
38
13
 
39
- task :default => :spec
40
-
41
- desc 'Run the test suite against 1.8.7-p249, 1.9.2-p0 and jruby-1.5.1'
42
- task :multitest do
43
- system('rvm 1.8.7-p249@date_validator, 1.9.2-p0@date_validator, jruby-1.5.1@date_validator rake')
14
+ site = 'doc'
15
+ source_branch = 'master'
16
+ deploy_branch = 'gh-pages'
17
+
18
+ desc "generate and deploy documentation website to github pages"
19
+ multitask :pages do
20
+ puts ">>> Deploying #{deploy_branch} branch to Github Pages <<<"
21
+ require 'git'
22
+ repo = Git.open('.')
23
+ puts "\n>>> Checking out #{deploy_branch} branch <<<\n"
24
+ repo.branch("#{deploy_branch}").checkout
25
+ (Dir["*"] - [site]).each { |f| rm_rf(f) }
26
+ Dir["#{site}/*"].each {|f| mv(f, "./")}
27
+ rm_rf(site)
28
+ puts "\n>>> Moving generated site files <<<\n"
29
+ Dir["**/*"].each {|f| repo.add(f) }
30
+ repo.status.deleted.each {|f, s| repo.remove(f)}
31
+ puts "\n>>> Commiting: Site updated at #{Time.now.utc} <<<\n"
32
+ message = ENV["MESSAGE"] || "Site updated at #{Time.now.utc}"
33
+ repo.commit(message)
34
+ puts "\n>>> Pushing generated site to #{deploy_branch} branch <<<\n"
35
+ repo.push
36
+ puts "\n>>> Github Pages deploy complete <<<\n"
37
+ repo.branch("#{source_branch}").checkout
44
38
  end
45
39
 
40
+ task :doc => [:docs]
46
41
 
47
- require 'rake/rdoctask'
48
- Rake::RDocTask.new do |rdoc|
49
- if File.exist?('VERSION')
50
- version = File.read('VERSION')
51
- else
52
- version = ""
53
- end
54
-
55
-
56
- rdoc.rdoc_dir = 'rdoc'
57
- rdoc.title = "date_validator #{version}"
58
- rdoc.rdoc_files.include('README*')
59
- rdoc.rdoc_files.include('lib/**/*.rb')
60
- end
42
+ task :default => :spec
43
+ task :test => [:spec]
data/Readme.md ADDED
@@ -0,0 +1,32 @@
1
+ # date_validator
2
+
3
+ A simple date validator for Rails 3. Compatible with Ruby 1.8.7, 1.9.2 and
4
+ Rubinius 1.2.2.
5
+
6
+ $ gem sources -a http://gemcutter.org/
7
+ $ gem install date_validator
8
+
9
+ And I mean simple. In your model:
10
+
11
+ validates :expiration_date,
12
+ :date => {:after => Proc.new { Time.now },
13
+ :before => Proc.new { Time.now + 1.year } }
14
+ # Using Proc.new prevents production cache issues
15
+
16
+ For now the available options you can use are `:after`, `:before`,
17
+ `:after_or_equal_to` and `:before_or_equal_to`.
18
+
19
+ Pretty much self-explanatory! :)
20
+
21
+ ## Note on Patches/Pull Requests
22
+
23
+ * Fork the project.
24
+ * Make your feature addition or bug fix.
25
+ * Add tests for it. This is important so I don't break it in a
26
+ future version unintentionally.
27
+ * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
28
+ * Send us a pull request. Bonus points for topic branches.
29
+
30
+ ## Copyright
31
+
32
+ Copyright (c) 2011 Codegram. See LICENSE for details.
@@ -1,74 +1,31 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "date_validator/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{date_validator}
8
- s.version = "0.6.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Oriol Gual", "Josep M. Bach", "Josep Jaume Rey"]
12
- s.date = %q{2011-02-10}
6
+ s.name = "date_validator"
7
+ s.version = DateValidator::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Oriol Gual", "Josep M. Bach", "Josep Jaume Rey"]
10
+ s.email = ["info@codegram.com"]
11
+ s.homepage = "http://github.com/codegram/date_validator"
12
+ s.summary = %q{A simple, ORM agnostic, Ruby 1.9 compatible date validator for Rails 3, based on ActiveModel.}
13
13
  s.description = %q{A simple, ORM agnostic, Ruby 1.9 compatible date validator for Rails 3, based on ActiveModel. Currently supporting :after, :before, :after_or_equal_to and :before_or_equal_to options.}
14
- s.email = %q{info@codegram.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".bundle/config",
21
- ".document",
22
- ".gitignore",
23
- ".rspec",
24
- ".rvmrc",
25
- "Gemfile",
26
- "Gemfile.lock",
27
- "LICENSE",
28
- "README.rdoc",
29
- "Rakefile",
30
- "VERSION",
31
- "date_validator.gemspec",
32
- "lib/date_validator.rb",
33
- "locales/ca.yml",
34
- "locales/en.yml",
35
- "locales/es.yml",
36
- "spec/date_validator_spec.rb",
37
- "spec/spec_helper.rb"
38
- ]
39
- s.homepage = %q{http://github.com/codegram/date_validator}
40
- s.rdoc_options = ["--charset=UTF-8"]
41
- s.require_paths = ["lib"]
42
- s.rubygems_version = %q{1.3.7}
43
- s.summary = %q{A simple, ORM agnostic, Ruby 1.9 compatible date validator for Rails 3, based on ActiveModel.}
44
- s.test_files = [
45
- "spec/date_validator_spec.rb",
46
- "spec/spec_helper.rb"
47
- ]
48
14
 
49
- if s.respond_to? :specification_version then
50
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
51
- s.specification_version = 3
15
+ s.rubyforge_project = "date_validator"
52
16
 
53
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
- s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0"])
55
- s.add_development_dependency(%q<rspec>, [">= 2.0.0.beta.20"])
56
- s.add_development_dependency(%q<activesupport>, [">= 3.0.0"])
57
- s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
58
- s.add_development_dependency(%q<tzinfo>, [">= 0"])
59
- else
60
- s.add_dependency(%q<activemodel>, [">= 3.0.0"])
61
- s.add_dependency(%q<rspec>, [">= 2.0.0.beta.20"])
62
- s.add_dependency(%q<activesupport>, [">= 3.0.0"])
63
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
64
- s.add_dependency(%q<tzinfo>, [">= 0"])
65
- end
66
- else
67
- s.add_dependency(%q<activemodel>, [">= 3.0.0"])
68
- s.add_dependency(%q<rspec>, [">= 2.0.0.beta.20"])
69
- s.add_dependency(%q<activesupport>, [">= 3.0.0"])
70
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
71
- s.add_dependency(%q<tzinfo>, [">= 0"])
72
- end
73
- end
17
+ s.add_runtime_dependency 'activemodel', '~>3.0.0'
18
+
19
+ s.add_development_dependency 'rspec', '~> 2.5.0'
20
+ s.add_development_dependency 'simplecov'
21
+ s.add_development_dependency 'activesupport', '~> 3.0.0'
22
+ s.add_development_dependency 'tzinfo', '~> 0.3.0'
74
23
 
24
+ s.add_development_dependency 'yard'
25
+ s.add_development_dependency 'bluecloth'
26
+
27
+ s.files = `git ls-files`.split("\n")
28
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
29
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
30
+ s.require_paths = ["lib"]
31
+ end
@@ -0,0 +1,77 @@
1
+ require 'active_model/validations'
2
+
3
+ # ActiveModel Rails module.
4
+ module ActiveModel
5
+
6
+ # ActiveModel::Validations Rails module. Contains all the default validators.
7
+ module Validations
8
+
9
+ # Date Validator. Inherits from ActiveModel::EachValidator.
10
+ #
11
+ # Responds to the regular validator API methods `#check_validity` and
12
+ # `#validate_each`.
13
+ class DateValidator < ActiveModel::EachValidator
14
+
15
+ # Implemented checks and their associated operators.
16
+ CHECKS = { :after => :>, :after_or_equal_to => :>=,
17
+ :before => :<, :before_or_equal_to => :<=}.freeze
18
+
19
+ # Call `#initialize` on the superclass, adding a default
20
+ # `:allow_nil => false` option.
21
+ def initialize(options)
22
+ super(options.reverse_merge(:allow_nil => false))
23
+ end
24
+
25
+ # Validates the arguments passed to the validator.
26
+ #
27
+ # They must be either any kind of <Time>, a <Proc>, or a <Symbol>.
28
+ def check_validity!
29
+ keys = CHECKS.keys
30
+ options.slice(*keys).each do |option, value|
31
+ next if is_time?(value) || value.is_a?(Proc) || value.is_a?(Symbol) || (defined?(ActiveSupport::TimeWithZone) and value.is_a? ActiveSupport::TimeWithZone)
32
+ raise ArgumentError, ":#{option} must be a time, a date, a time_with_zone, a symbol or a proc"
33
+ end
34
+ end
35
+
36
+ # The actual validator method. It is called when ActiveRecord iterates
37
+ # over all the validators.
38
+ def validate_each(record, attr_name, value)
39
+ return if options[:allow_nil] && value.nil?
40
+
41
+ unless value
42
+ record.errors.add(attr_name, :not_a_date, options)
43
+ return
44
+ end
45
+
46
+ options.slice(*CHECKS.keys).each do |option, option_value|
47
+ option_value = option_value.call(record) if option_value.is_a?(Proc)
48
+ option_value = record.send(option_value) if option_value.is_a?(Symbol)
49
+
50
+ original_value = value
51
+ original_option_value = option_value
52
+
53
+ # To enable to_i conversion, these types must be converted to Datetimes
54
+ if defined?(ActiveSupport::TimeWithZone)
55
+ option_value = option_value.to_datetime if option_value.is_a?(ActiveSupport::TimeWithZone)
56
+ value = value.to_datetime if value.is_a?(ActiveSupport::TimeWithZone)
57
+ end
58
+
59
+ if defined?(Date)
60
+ option_value = option_value.to_datetime if option_value.is_a?(Date)
61
+ value = value.to_datetime if value.is_a?(Date)
62
+ end
63
+
64
+ unless is_time?(option_value) && value.to_i.send(CHECKS[option], option_value.to_i)
65
+ record.errors.add(attr_name, option, options.merge(:value => original_value, :date => original_option_value))
66
+ end
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ def is_time?(object)
73
+ object.is_a?(Time) || (defined?(Date) and object.is_a?(Date)) || (defined?(ActiveSupport::TimeWithZone) and object.is_a?(ActiveSupport::TimeWithZone))
74
+ end
75
+ end
76
+ end
77
+ end
@@ -1,63 +1,15 @@
1
- require 'active_model'
2
-
3
- module ActiveModel
4
- module Validations
5
- class DateValidator < ActiveModel::EachValidator
6
- CHECKS = { :after => :>, :after_or_equal_to => :>=,
7
- :before => :<, :before_or_equal_to => :<=}.freeze
8
-
9
- def initialize(options)
10
- super(options.reverse_merge(:allow_nil => false))
11
- end
12
-
13
- def check_validity!
14
- keys = CHECKS.keys
15
- options.slice(*keys).each do |option, value|
16
- next if is_time?(value) || value.is_a?(Proc) || value.is_a?(Symbol) || (defined?(ActiveSupport::TimeWithZone) and value.is_a? ActiveSupport::TimeWithZone)
17
- raise ArgumentError, ":#{option} must be a time, a date, a time_with_zone, a symbol or a proc"
18
- end
19
- end
20
-
21
- def validate_each(record, attr_name, value)
22
-
23
- return if options[:allow_nil] && value.nil?
24
-
25
- unless value
26
- record.errors.add(attr_name, :not_a_date, options)
27
- return
28
- end
29
-
30
- options.slice(*CHECKS.keys).each do |option, option_value|
31
- option_value = option_value.call(record) if option_value.is_a?(Proc)
32
- option_value = record.send(option_value) if option_value.is_a?(Symbol)
33
-
34
- original_value = value
35
- original_option_value = option_value
36
-
37
- # To enable to_i conversion, these types must be converted to Datetimes
38
- if defined?(ActiveSupport::TimeWithZone)
39
- option_value = option_value.to_datetime if option_value.is_a?(ActiveSupport::TimeWithZone)
40
- value = value.to_datetime if value.is_a?(ActiveSupport::TimeWithZone)
41
- end
42
-
43
- if defined?(Date)
44
- option_value = option_value.to_datetime if option_value.is_a?(Date)
45
- value = value.to_datetime if value.is_a?(Date)
46
- end
47
-
48
- unless is_time?(option_value) && value.to_i.send(CHECKS[option], option_value.to_i)
49
- record.errors.add(attr_name, option, options.merge(:value => original_value, :date => original_option_value))
50
- end
51
- end
52
- end
53
-
54
- def is_time?(object)
55
- object.is_a?(Time) || (defined?(Date) and object.is_a?(Date)) || (defined?(ActiveSupport::TimeWithZone) and object.is_a?(ActiveSupport::TimeWithZone))
56
- end
1
+ require 'active_model/validations/date_validator'
2
+ require 'active_support/i18n'
57
3
 
58
- end
59
- end
4
+ # A simple date validator for Rails 3.
5
+ #
6
+ # @example
7
+ # validates :expiration_date,
8
+ # :date => {:after => Proc.new { Time.now },
9
+ # :before => Proc.new { Time.now + 1.year } }
10
+ # # Using Proc.new prevents production cache issues
11
+ #
12
+ module DateValidator
60
13
  end
61
14
 
62
- require 'active_support/i18n'
63
15
  I18n.load_path += Dir[File.expand_path(File.join(File.dirname(__FILE__), '../locales', '*.yml')).to_s]
@@ -0,0 +1,4 @@
1
+ module DateValidator
2
+ # The version number.
3
+ VERSION = "0.6.1"
4
+ end
@@ -1,125 +1,138 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
- require 'active_support/time' # For testing Date and TimeWithZone objects
3
+ module ActiveModel
4
+ module Validations
4
5
 
5
- describe "DateValidator" do
6
+ describe DateValidator do
6
7
 
7
- before(:each) do
8
- TestRecord.reset_callbacks(:validate)
9
- end
10
-
11
- it "checks validity of the arguments" do
12
- [3, "foo", 1..6].each do |wrong_argument|
13
- expect {
14
- TestRecord.validates :expiration_date, :date => {:before => wrong_argument}
15
- }.to raise_error(ArgumentError, ":before must be a time, a date, a time_with_zone, a symbol or a proc")
16
- end
17
- end
18
-
19
- it "complains if provided with no options" do
20
- TestRecord.validates :expiration_date, :date => {:before => Time.now}
21
- model = TestRecord.new(nil)
22
- model.should_not be_valid
23
- model.errors[:expiration_date].should == ["is not a date"]
24
- end
25
-
26
- [:valid,:invalid].each do |should_be|
27
-
28
- _context = should_be == :valid ? 'when value validates correctly' : 'when value does not match validation requirements'
29
-
30
- context _context do
8
+ before do
9
+ TestRecord.reset_callbacks(:validate)
10
+ end
31
11
 
32
- [:after, :before, :after_or_equal_to, :before_or_equal_to].each do |check|
12
+ it "checks validity of the arguments" do
13
+ [3, "foo", 1..6].each do |wrong_argument|
14
+ expect {
15
+ TestRecord.validates :expiration_date,
16
+ :date => {:before => wrong_argument}
17
+ }.to raise_error(ArgumentError, ":before must be a time, a date, a time_with_zone, a symbol or a proc")
18
+ end
19
+ end
33
20
 
34
- now = Time.now.to_datetime
21
+ it "complains when no options are provided" do
22
+ TestRecord.validates :expiration_date,
23
+ :date => {:before => Time.now}
35
24
 
36
- model_date = case check
37
- when :after then should_be == :valid ? now + 21000 : now - 1
38
- when :before then should_be == :valid ? now - 21000 : now + 1
39
- when :after_or_equal_to then should_be == :valid ? now : now - 21000
40
- when :before_or_equal_to then should_be == :valid ? now : now + 21000
41
- end
25
+ model = TestRecord.new(nil)
26
+ model.should_not be_valid
27
+ model.errors[:expiration_date].should eq(["is not a date"])
28
+ end
42
29
 
43
- it "ensures that an attribute is #{should_be} when #{should_be == :valid ? 'respecting' : 'offending' } the #{check} check" do
44
- TestRecord.validates :expiration_date, :date => {:"#{check}" => Time.now}
45
- model = TestRecord.new(model_date)
46
- should_be == :valid ? model.should(be_valid, "an attribute should be valid when respecting the #{check} check") : model.should_not(be_valid, "an attribute should be invalidwhen offending the #{check} check")
30
+ [:valid,:invalid].each do |should_be|
31
+ _context = should_be == :valid ? 'when value validates correctly' : 'when value does not match validation requirements'
32
+
33
+ context _context do
34
+ [:after, :before, :after_or_equal_to, :before_or_equal_to].each do |check|
35
+ now = Time.now.to_datetime
36
+
37
+ model_date = case check
38
+ when :after then should_be == :valid ? now + 21000 : now - 1
39
+ when :before then should_be == :valid ? now - 21000 : now + 1
40
+ when :after_or_equal_to then should_be == :valid ? now : now - 21000
41
+ when :before_or_equal_to then should_be == :valid ? now : now + 21000
42
+ end
43
+
44
+ it "ensures that an attribute is #{should_be} when #{should_be == :valid ? 'respecting' : 'offending' } the #{check} check" do
45
+ TestRecord.validates :expiration_date,
46
+ :date => {:"#{check}" => Time.now}
47
+
48
+ model = TestRecord.new(model_date)
49
+ should_be == :valid ? model.should(be_valid, "an attribute should be valid when respecting the #{check} check")\
50
+ : model.should_not(be_valid, "an attribute should be invalidwhen offending the #{check} check")
51
+ end
52
+
53
+ if _context == 'when value does not match validation requirements'
54
+ it "yields a default error message indicating that value must be #{check} validation requirements" do
55
+ TestRecord.validates :expiration_date,
56
+ :date => {:"#{check}" => Time.now}
57
+
58
+ model = TestRecord.new(model_date)
59
+ model.should_not be_valid
60
+ model.errors[:expiration_date].should eq(["must be " + check.to_s.gsub('_',' ') + " #{Time.now}"])
61
+ end
62
+ end
47
63
  end
48
64
 
49
65
  if _context == 'when value does not match validation requirements'
66
+ it "allows for a custom validation message" do
67
+ TestRecord.validates :expiration_date,
68
+ :date => {:before_or_equal_to => Time.now,
69
+ :message => 'must be after Christmas'}
50
70
 
51
- it "yields a default error message indicating that value must be #{check} validation requirements" do
52
- TestRecord.validates :expiration_date, :date => {:"#{check}" => Time.now}
53
- model = TestRecord.new(model_date)
71
+ model = TestRecord.new(Time.now + 21000)
54
72
  model.should_not be_valid
55
- model.errors[:expiration_date].should == ["must be " + check.to_s.gsub('_',' ') + " #{Time.now}"]
73
+ model.errors[:expiration_date].should eq(["must be after Christmas"])
56
74
  end
57
-
58
- end
59
75
 
60
- end
76
+ it "allows custom validation message to be handled by I18n" do
77
+ custom_message = 'Custom Date Message'
78
+ I18n.backend.store_translations('en', {:errors => {:messages => {:not_a_date => custom_message}}})
61
79
 
62
- if _context == 'when value does not match validation requirements'
80
+ TestRecord.validates :expiration_date, :date => true
63
81
 
64
- it "allows for a custom validation message" do
65
- TestRecord.validates :expiration_date, :date => {:before_or_equal_to => Time.now, :message => 'must be after Christmas'}
66
- model = TestRecord.new(Time.now + 21000)
67
- model.should_not be_valid
68
- model.errors[:expiration_date].should == ["must be after Christmas"]
69
- end
82
+ model = TestRecord.new(nil)
83
+ model.should_not be_valid
84
+ model.errors[:expiration_date].should eq([custom_message])
85
+ end
86
+ end
70
87
 
71
- it "allows custom validation message to be handled by I18n" do
72
- custom_message = 'Custom Date Message'
73
- I18n.backend.store_translations('en', {:errors => {:messages => {:not_a_date => custom_message}}})
74
- TestRecord.validates :expiration_date, :date => true
75
- model = TestRecord.new(nil)
76
- model.should_not be_valid
77
- model.errors[:expiration_date].should == [custom_message]
78
88
  end
89
+ end
79
90
 
91
+ extra_types = [:proc, :symbol]
92
+ extra_types.push(:date) if defined?(Date) and defined?(DateTime)
93
+ extra_types.push(:time_with_zone) if defined?(ActiveSupport::TimeWithZone)
94
+
95
+ extra_types.each do |type|
96
+ it "accepts a #{type} as an argument to a check" do
97
+ case type
98
+ when :proc then
99
+ expect {
100
+ TestRecord.validates :expiration_date,
101
+ :date => {:after => Proc.new{Time.now + 21000}}
102
+ }.to_not raise_error
103
+ when :symbol then
104
+ expect {
105
+ TestRecord.send(:define_method, :min_date, lambda { Time.now + 21000 })
106
+ TestRecord.validates :expiration_date, :date => {:after => :min_date}
107
+ }.to_not raise_error
108
+ when :date then
109
+ expect {
110
+ TestRecord.validates :expiration_date, :date => {:after => Time.now.to_date}
111
+ }.to_not raise_error
112
+ when :time_with_zone then
113
+ expect {
114
+ Time.zone = "Hawaii"
115
+ TestRecord.validates :expiration_date, :date => {:before => Time.zone.parse((Time.now + 21000).to_s)}
116
+ }.to_not raise_error
117
+ end
118
+ end
80
119
  end
81
120
 
82
- end
121
+ it "gracefully handles an unexpected result from a proc argument evaluation" do
122
+ TestRecord.validates :expiration_date,
123
+ :date => {:after => Proc.new{ nil }}
83
124
 
84
- end
125
+ TestRecord.new(Time.now).should_not be_valid
126
+ end
85
127
 
86
- extra_types = [:proc, :symbol]
87
- extra_types.push(:date) if defined?(Date) and defined?(DateTime)
88
- extra_types.push(:time_with_zone) if defined?(ActiveSupport::TimeWithZone)
128
+ it "gracefully handles an unexpected result from a symbol argument evaluation" do
129
+ TestRecord.send(:define_method, :min_date, lambda { nil })
130
+ TestRecord.validates :expiration_date,
131
+ :date => {:after => :min_date}
89
132
 
90
- extra_types.each do |type|
91
- it "accepts a #{type} as an argument to a check" do
92
- case type
93
- when :proc then
94
- expect {
95
- TestRecord.validates :expiration_date, :date => {:after => Proc.new{Time.now + 21000}}
96
- }.to_not raise_error
97
- when :symbol then
98
- expect {
99
- TestRecord.send(:define_method, :min_date, lambda { Time.now + 21000 })
100
- TestRecord.validates :expiration_date, :date => {:after => :min_date}
101
- }.to_not raise_error
102
- when :date then
103
- expect {
104
- TestRecord.validates :expiration_date, :date => {:after => Time.now.to_date}
105
- }.to_not raise_error
106
- when :time_with_zone then
107
- expect {
108
- Time.zone = "Hawaii"
109
- TestRecord.validates :expiration_date, :date => {:before => Time.zone.parse((Time.now + 21000).to_s)}
110
- }.to_not raise_error
133
+ TestRecord.new(Time.now).should_not be_valid
111
134
  end
112
135
  end
113
- end
114
-
115
- it "gracefully handles an unexpected result from a proc argument evaluation" do
116
- TestRecord.validates :expiration_date, :date => {:after => Proc.new{ nil }}
117
- TestRecord.new(Time.now).should_not be_valid
118
- end
119
136
 
120
- it "gracefully handles an unexpected result from a symbol argument evaluation" do
121
- TestRecord.send(:define_method, :min_date, lambda { nil })
122
- TestRecord.validates :expiration_date, :date => {:after => :min_date}
123
- TestRecord.new(Time.now).should_not be_valid
124
137
  end
125
138
  end
data/spec/spec_helper.rb CHANGED
@@ -1,15 +1,14 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
1
  require 'simplecov'
4
2
  SimpleCov.start do
5
3
  add_group "Lib", "lib"
6
4
  end
7
5
 
8
- require 'rubygems'
9
- require 'active_model'
6
+ require 'rspec'
7
+
8
+ require 'active_support/time' # For testing Date and TimeWithZone objects
10
9
 
10
+ require 'active_model'
11
11
  require 'date_validator'
12
- require 'rspec'
13
12
 
14
13
  class TestRecord
15
14
  include ActiveModel::Validations
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: date_validator
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 6
8
- - 0
9
- version: 0.6.0
4
+ prerelease:
5
+ version: 0.6.1
10
6
  platform: ruby
11
7
  authors:
12
8
  - Oriol Gual
@@ -16,7 +12,7 @@ autorequire:
16
12
  bindir: bin
17
13
  cert_chain: []
18
14
 
19
- date: 2011-02-10 00:00:00 +01:00
15
+ date: 2011-03-04 00:00:00 +01:00
20
16
  default_executable:
21
17
  dependencies:
22
18
  - !ruby/object:Gem::Dependency
@@ -25,12 +21,8 @@ dependencies:
25
21
  requirement: &id001 !ruby/object:Gem::Requirement
26
22
  none: false
27
23
  requirements:
28
- - - ">="
24
+ - - ~>
29
25
  - !ruby/object:Gem::Version
30
- segments:
31
- - 3
32
- - 0
33
- - 0
34
26
  version: 3.0.0
35
27
  type: :runtime
36
28
  version_requirements: *id001
@@ -40,69 +32,75 @@ dependencies:
40
32
  requirement: &id002 !ruby/object:Gem::Requirement
41
33
  none: false
42
34
  requirements:
43
- - - ">="
35
+ - - ~>
44
36
  - !ruby/object:Gem::Version
45
- segments:
46
- - 2
47
- - 0
48
- - 0
49
- - beta
50
- - 20
51
- version: 2.0.0.beta.20
37
+ version: 2.5.0
52
38
  type: :development
53
39
  version_requirements: *id002
54
40
  - !ruby/object:Gem::Dependency
55
- name: activesupport
41
+ name: simplecov
56
42
  prerelease: false
57
43
  requirement: &id003 !ruby/object:Gem::Requirement
58
44
  none: false
59
45
  requirements:
60
46
  - - ">="
61
47
  - !ruby/object:Gem::Version
62
- segments:
63
- - 3
64
- - 0
65
- - 0
66
- version: 3.0.0
48
+ version: "0"
67
49
  type: :development
68
50
  version_requirements: *id003
69
51
  - !ruby/object:Gem::Dependency
70
- name: bundler
52
+ name: activesupport
71
53
  prerelease: false
72
54
  requirement: &id004 !ruby/object:Gem::Requirement
73
55
  none: false
74
56
  requirements:
75
- - - ">="
57
+ - - ~>
76
58
  - !ruby/object:Gem::Version
77
- segments:
78
- - 1
79
- - 0
80
- - 0
81
- version: 1.0.0
59
+ version: 3.0.0
82
60
  type: :development
83
61
  version_requirements: *id004
84
62
  - !ruby/object:Gem::Dependency
85
63
  name: tzinfo
86
64
  prerelease: false
87
65
  requirement: &id005 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 0.3.0
71
+ type: :development
72
+ version_requirements: *id005
73
+ - !ruby/object:Gem::Dependency
74
+ name: yard
75
+ prerelease: false
76
+ requirement: &id006 !ruby/object:Gem::Requirement
88
77
  none: false
89
78
  requirements:
90
79
  - - ">="
91
80
  - !ruby/object:Gem::Version
92
- segments:
93
- - 0
94
81
  version: "0"
95
82
  type: :development
96
- version_requirements: *id005
83
+ version_requirements: *id006
84
+ - !ruby/object:Gem::Dependency
85
+ name: bluecloth
86
+ prerelease: false
87
+ requirement: &id007 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: "0"
93
+ type: :development
94
+ version_requirements: *id007
97
95
  description: A simple, ORM agnostic, Ruby 1.9 compatible date validator for Rails 3, based on ActiveModel. Currently supporting :after, :before, :after_or_equal_to and :before_or_equal_to options.
98
- email: info@codegram.com
96
+ email:
97
+ - info@codegram.com
99
98
  executables: []
100
99
 
101
100
  extensions: []
102
101
 
103
- extra_rdoc_files:
104
- - LICENSE
105
- - README.rdoc
102
+ extra_rdoc_files: []
103
+
106
104
  files:
107
105
  - .bundle/config
108
106
  - .document
@@ -111,12 +109,12 @@ files:
111
109
  - .rvmrc
112
110
  - Gemfile
113
111
  - Gemfile.lock
114
- - LICENSE
115
- - README.rdoc
116
112
  - Rakefile
117
- - VERSION
113
+ - Readme.md
118
114
  - date_validator.gemspec
115
+ - lib/active_model/validations/date_validator.rb
119
116
  - lib/date_validator.rb
117
+ - lib/date_validator/version.rb
120
118
  - locales/ca.yml
121
119
  - locales/en.yml
122
120
  - locales/es.yml
@@ -127,8 +125,8 @@ homepage: http://github.com/codegram/date_validator
127
125
  licenses: []
128
126
 
129
127
  post_install_message:
130
- rdoc_options:
131
- - --charset=UTF-8
128
+ rdoc_options: []
129
+
132
130
  require_paths:
133
131
  - lib
134
132
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -136,21 +134,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
134
  requirements:
137
135
  - - ">="
138
136
  - !ruby/object:Gem::Version
139
- segments:
140
- - 0
141
137
  version: "0"
142
138
  required_rubygems_version: !ruby/object:Gem::Requirement
143
139
  none: false
144
140
  requirements:
145
141
  - - ">="
146
142
  - !ruby/object:Gem::Version
147
- segments:
148
- - 0
149
143
  version: "0"
150
144
  requirements: []
151
145
 
152
- rubyforge_project:
153
- rubygems_version: 1.3.7
146
+ rubyforge_project: date_validator
147
+ rubygems_version: 1.5.2
154
148
  signing_key:
155
149
  specification_version: 3
156
150
  summary: A simple, ORM agnostic, Ruby 1.9 compatible date validator for Rails 3, based on ActiveModel.
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2009 Josep Mª Bach
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc DELETED
@@ -1,34 +0,0 @@
1
- = date_validator
2
-
3
- A simple date validator for Rails 3. Compatible with Ruby 1.8, 1.9, JRuby 1.5.3
4
- and Rubinius 1.1.
5
-
6
- gem sources -a http://gemcutter.org/
7
- gem install date_validator
8
-
9
- And I mean simple. In your model:
10
-
11
- validates :expiration_date, :date => {:after => Proc.new { Time.now } :before => Proc.new { Time.now + 1.year } }
12
- # Using Proc.new prevents production cache issues
13
-
14
- For now these are the available options you can use:
15
-
16
- :after
17
- :before
18
- :after_or_equal_to
19
- :before_or_equal_to
20
-
21
- Pretty much self-explanatory! :)
22
-
23
- == Note on Patches/Pull Requests
24
-
25
- * Fork the project.
26
- * Make your feature addition or bug fix.
27
- * Add tests for it. This is important so I don't break it in a
28
- future version unintentionally.
29
- * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
30
- * Send me a pull request. Bonus points for topic branches.
31
-
32
- == Copyright
33
-
34
- Copyright (c) 2010 Codegram. See LICENSE for details.
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.6.0