date_validator 0.0.0 → 0.2.0
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/README.rdoc +8 -7
- data/Rakefile +5 -1
- data/VERSION +1 -1
- data/date_validator.gemspec +11 -5
- data/init.rb +1 -0
- data/lib/date_validator.rb +38 -25
- data/spec/date_validator_spec.rb +55 -3
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +6 -3
- metadata +23 -6
data/README.rdoc
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
= date_validator
|
2
2
|
|
3
|
-
A simple date validator for Rails 3.
|
3
|
+
A simple date validator for Rails 3.
|
4
4
|
|
5
|
-
gem
|
6
|
-
|
7
|
-
In your model:
|
5
|
+
gem sources -a http://gemcutter.org/
|
6
|
+
gem install date_validator
|
8
7
|
|
9
|
-
|
8
|
+
And I mean simple. In your model:
|
10
9
|
|
11
|
-
|
10
|
+
validates :expiration_date, :date => { :after => Time.now, :before => Time.now + 1.year }
|
11
|
+
|
12
|
+
For now these are the available options you can use:
|
12
13
|
|
13
14
|
:after
|
14
15
|
:before
|
@@ -17,7 +18,7 @@ For now these the available options you can use:
|
|
17
18
|
|
18
19
|
Pretty much self-explanatory! :) And if you like remarkable, just install this gem as well:
|
19
20
|
|
20
|
-
gem install
|
21
|
+
gem install remarkable_date_validator
|
21
22
|
|
22
23
|
== Note on Patches/Pull Requests
|
23
24
|
|
data/Rakefile
CHANGED
@@ -9,8 +9,12 @@ begin
|
|
9
9
|
gem.description = "A simple date validator for Rails 3. Currently supporting :after, :before, :after_or_equal_to and :before_or_equal_to options. Remarkable-friendly :)"
|
10
10
|
gem.email = "info@codegram.com"
|
11
11
|
gem.homepage = "http://github.com/codegram/date_validator"
|
12
|
-
gem.authors = ["Oriol Gual", "Josep
|
12
|
+
gem.authors = ["Oriol Gual", "Josep Mª Bach", "Josep Jaume Rey"]
|
13
|
+
|
14
|
+
gem.add_dependency 'activemodel', '>= 3.0.0.beta3'
|
15
|
+
|
13
16
|
gem.add_development_dependency "rspec"
|
17
|
+
|
14
18
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
19
|
end
|
16
20
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/date_validator.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{date_validator}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Oriol Gual", "Josep
|
12
|
-
s.date = %q{2010-04-
|
11
|
+
s.authors = ["Oriol Gual", "Josep M\302\252 Bach", "Josep Jaume Rey"]
|
12
|
+
s.date = %q{2010-04-27}
|
13
13
|
s.description = %q{A simple date validator for Rails 3. Currently supporting :after, :before, :after_or_equal_to and :before_or_equal_to options. Remarkable-friendly :)}
|
14
14
|
s.email = %q{info@codegram.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,8 +24,10 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"date_validator.gemspec",
|
27
|
+
"init.rb",
|
27
28
|
"lib/date_validator.rb",
|
28
29
|
"spec/date_validator_spec.rb",
|
30
|
+
"spec/spec.opts",
|
29
31
|
"spec/spec_helper.rb"
|
30
32
|
]
|
31
33
|
s.homepage = %q{http://github.com/codegram/date_validator}
|
@@ -43,11 +45,15 @@ Gem::Specification.new do |s|
|
|
43
45
|
s.specification_version = 3
|
44
46
|
|
45
47
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
48
|
+
s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0.beta3"])
|
46
49
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
47
50
|
else
|
51
|
+
s.add_dependency(%q<activemodel>, [">= 3.0.0.beta3"])
|
48
52
|
s.add_dependency(%q<rspec>, [">= 0"])
|
49
53
|
end
|
50
54
|
else
|
55
|
+
s.add_dependency(%q<activemodel>, [">= 3.0.0.beta3"])
|
51
56
|
s.add_dependency(%q<rspec>, [">= 0"])
|
52
57
|
end
|
53
58
|
end
|
59
|
+
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'date_validator'
|
data/lib/date_validator.rb
CHANGED
@@ -1,35 +1,48 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module ActiveModel
|
2
|
+
module Validations
|
3
|
+
class DateValidator < ActiveModel::EachValidator
|
4
|
+
CHECKS = { :after => :>, :after_or_equal_to => :>=,
|
5
|
+
:before => :<, :before_or_equal_to => :<=}.freeze
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
7
|
+
def initialize(options)
|
8
|
+
super(options.reverse_merge(:allow_nil => false))
|
9
|
+
end
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
def check_validity!
|
12
|
+
keys = CHECKS.keys
|
13
|
+
options.slice(*keys).each do |option, value|
|
14
|
+
next if value.is_a?(Time) || value.is_a?(Proc) || value.is_a?(Symbol) || (defined?(Date) and value.is_a?(Date))
|
15
|
+
raise ArgumentError, ":#{option} must be a time, a date, a symbol or a proc"
|
16
|
+
end
|
17
|
+
end
|
16
18
|
|
17
|
-
|
19
|
+
def validate_each(record, attr_name, value)
|
18
20
|
|
19
|
-
|
21
|
+
return if options[:allow_nil] && value.nil?
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
unless value
|
24
|
+
record.errors.add(attr_name, :not_a_date, :value => value, :default => options[:message])
|
25
|
+
return
|
26
|
+
end
|
25
27
|
|
26
|
-
|
27
|
-
|
28
|
-
|
28
|
+
options.slice(*CHECKS.keys).each do |option, option_value|
|
29
|
+
option_value = option_value.call(record) if option_value.is_a?(Proc)
|
30
|
+
option_value = record.send(option_value) if option_value.is_a?(Symbol)
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
+
unless value.send(CHECKS[option], option_value)
|
33
|
+
record.errors.add(attr_name, option, :default => options[:message], :value => value, :date => option_value)
|
34
|
+
end
|
35
|
+
end
|
32
36
|
end
|
33
|
-
|
37
|
+
|
38
|
+
module ClassMethods
|
39
|
+
|
40
|
+
def validates_date_of(*attr_names)
|
41
|
+
validates_with DateValidator, _merge_attributes(attr_names)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
34
47
|
end
|
35
48
|
end
|
data/spec/date_validator_spec.rb
CHANGED
@@ -1,8 +1,60 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "DateValidator" do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
TestRecord.reset_callbacks(:validate)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should check validity of the arguments" do
|
10
|
+
[3, "foo", 1..6].each do |wrong_argument|
|
11
|
+
begin
|
12
|
+
TestRecord.validates :expiration_date, :date => {:before => wrong_argument}
|
13
|
+
fail "should not accept a #{wrong_argument.class} as an option (only Time, Date, Symbol or Proc)"
|
14
|
+
rescue=>e
|
15
|
+
fail e unless e.is_a?(ArgumentError)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
[:after, :before, :after_or_equal_to, :before_or_equal_to].each do |check|
|
21
|
+
[:valid,:invalid].each do |should_be|
|
22
|
+
|
23
|
+
model_date = case check
|
24
|
+
when :after then should_be == :valid ? Time.now + 21000 : Time.now - 1
|
25
|
+
when :before then should_be == :valid ? Time.now - 21000 : Time.now + 1
|
26
|
+
when :after_or_equal_to then should_be == :valid ? Time.now + 21000 : Time.now - 21000
|
27
|
+
when :before_or_equal_to then should_be == :valid ? Time.now - 21000 : Time.now + 21000
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should ensure that an attribute is #{should_be} when #{should_be == :valid ? 'respecting' : 'offending' } the #{check} check" do
|
31
|
+
TestRecord.validates :expiration_date, :date => {:"#{check}" => Time.now}
|
32
|
+
model = TestRecord.new(model_date)
|
33
|
+
should_be == :valid ? model.should(be_valid, "an attribute should be valid when respecting the #{check} check") : model.should(be_invalid, "an attribute should be invalid when offending the #{check} check")
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
extra_types = [:proc, :symbol]
|
40
|
+
# extra_types.push(:date) if defined?(Date) and defined?(DateTime)
|
41
|
+
|
42
|
+
extra_types.each do |type|
|
43
|
+
it "should accept a #{type} as an argument to a check" do
|
44
|
+
case type
|
45
|
+
when :proc then
|
46
|
+
TestRecord.validates :expiration_date, :date => {:after => Proc.new{Time.now + 21000}}
|
47
|
+
when :symbol then
|
48
|
+
begin
|
49
|
+
TestRecord.send(:define_method, :min_date, lambda { Time.now + 21000 })
|
50
|
+
TestRecord.validates :expiration_date, :date => {:after => :min_date}
|
51
|
+
rescue=>e
|
52
|
+
fail "is not accepting a #{type} as an argument to a check"
|
53
|
+
end
|
54
|
+
# when :date then
|
55
|
+
# TestRecord.validates :expiration_date, :date => {:after => Time.now.to_date}
|
56
|
+
end
|
57
|
+
end
|
7
58
|
end
|
59
|
+
|
8
60
|
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'active_model'
|
6
|
+
|
7
|
+
require 'lib/date_validator'
|
4
8
|
require 'spec'
|
5
9
|
require 'spec/autorun'
|
6
10
|
|
7
|
-
require 'active_model'
|
8
|
-
require 'date_validator'
|
9
11
|
|
10
12
|
class TestRecord
|
11
13
|
include ActiveModel::Validations
|
12
14
|
attr_accessor :expiration_date
|
15
|
+
|
13
16
|
def initialize(expiration_date)
|
14
17
|
@expiration_date = expiration_date
|
15
18
|
end
|
metadata
CHANGED
@@ -4,25 +4,40 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
+
- 2
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 0.0.0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Oriol Gual
|
13
|
-
- Josep Jaume Rey
|
14
13
|
- "Josep M\xC2\xAA Bach"
|
14
|
+
- Josep Jaume Rey
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-04-
|
19
|
+
date: 2010-04-27 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
|
-
name:
|
23
|
+
name: activemodel
|
24
24
|
prerelease: false
|
25
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 3
|
31
|
+
- 0
|
32
|
+
- 0
|
33
|
+
- beta3
|
34
|
+
version: 3.0.0.beta3
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
26
41
|
requirements:
|
27
42
|
- - ">="
|
28
43
|
- !ruby/object:Gem::Version
|
@@ -30,7 +45,7 @@ dependencies:
|
|
30
45
|
- 0
|
31
46
|
version: "0"
|
32
47
|
type: :development
|
33
|
-
version_requirements: *
|
48
|
+
version_requirements: *id002
|
34
49
|
description: A simple date validator for Rails 3. Currently supporting :after, :before, :after_or_equal_to and :before_or_equal_to options. Remarkable-friendly :)
|
35
50
|
email: info@codegram.com
|
36
51
|
executables: []
|
@@ -48,8 +63,10 @@ files:
|
|
48
63
|
- Rakefile
|
49
64
|
- VERSION
|
50
65
|
- date_validator.gemspec
|
66
|
+
- init.rb
|
51
67
|
- lib/date_validator.rb
|
52
68
|
- spec/date_validator_spec.rb
|
69
|
+
- spec/spec.opts
|
53
70
|
- spec/spec_helper.rb
|
54
71
|
has_rdoc: true
|
55
72
|
homepage: http://github.com/codegram/date_validator
|