date_validator 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
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