validates_timeliness 3.0.13 → 3.0.14
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/CHANGELOG.rdoc +3 -0
- data/gemfiles/mongoid_2_1.gemfile +16 -0
- data/gemfiles/mongoid_2_2.gemfile +16 -0
- data/gemfiles/mongoid_2_3.gemfile +16 -0
- data/gemfiles/mongoid_2_4.gemfile +16 -0
- data/lib/validates_timeliness/helper_methods.rb +1 -6
- data/lib/validates_timeliness/orm/mongoid.rb +1 -1
- data/lib/validates_timeliness/validator.rb +7 -0
- data/lib/validates_timeliness/version.rb +1 -1
- data/spec/validates_timeliness/orm/mongoid_spec.rb +97 -45
- data/spec/validates_timeliness/validator_spec.rb +8 -0
- data/validates_timeliness.gemspec +1 -1
- metadata +8 -5
- data/Appraisals +0 -11
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
= 3.0.14 [2012-08-23]
|
2
|
+
* Fix for using validates :timeliness => {} form to correctly add attributes to timeliness validated attributes.
|
3
|
+
|
1
4
|
= 3.0.13 [2012-08-21]
|
2
5
|
* Fix ActiveRecord issues with using plugin parser by using old way of caching values.
|
3
6
|
* Allow any ActiveRecord non-column attribute to be validated
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "http://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 3.2.6"
|
6
|
+
gem "rspec", "~> 2.8"
|
7
|
+
gem "rspec-rails", "~> 2.8"
|
8
|
+
gem "timecop"
|
9
|
+
gem "rspec_tag_matchers"
|
10
|
+
gem "ruby-debug", :platforms=>[:ruby_18, :jruby]
|
11
|
+
gem "debugger", :platforms=>[:ruby_19]
|
12
|
+
gem "appraisal"
|
13
|
+
gem "sqlite3"
|
14
|
+
gem "mongoid", "~> 2.1.0"
|
15
|
+
|
16
|
+
gemspec :path=>"../"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "http://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 3.2.6"
|
6
|
+
gem "rspec", "~> 2.8"
|
7
|
+
gem "rspec-rails", "~> 2.8"
|
8
|
+
gem "timecop"
|
9
|
+
gem "rspec_tag_matchers"
|
10
|
+
gem "ruby-debug", :platforms=>[:ruby_18, :jruby]
|
11
|
+
gem "debugger", :platforms=>[:ruby_19]
|
12
|
+
gem "appraisal"
|
13
|
+
gem "sqlite3"
|
14
|
+
gem "mongoid", "~> 2.2.0"
|
15
|
+
|
16
|
+
gemspec :path=>"../"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "http://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 3.2.6"
|
6
|
+
gem "rspec", "~> 2.8"
|
7
|
+
gem "rspec-rails", "~> 2.8"
|
8
|
+
gem "timecop"
|
9
|
+
gem "rspec_tag_matchers"
|
10
|
+
gem "ruby-debug", :platforms=>[:ruby_18, :jruby]
|
11
|
+
gem "debugger", :platforms=>[:ruby_19]
|
12
|
+
gem "appraisal"
|
13
|
+
gem "sqlite3"
|
14
|
+
gem "mongoid", "~> 2.3.0"
|
15
|
+
|
16
|
+
gemspec :path=>"../"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "http://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 3.2.6"
|
6
|
+
gem "rspec", "~> 2.8"
|
7
|
+
gem "rspec-rails", "~> 2.8"
|
8
|
+
gem "timecop"
|
9
|
+
gem "rspec_tag_matchers"
|
10
|
+
gem "ruby-debug", :platforms=>[:ruby_18, :jruby]
|
11
|
+
gem "debugger", :platforms=>[:ruby_19]
|
12
|
+
gem "appraisal"
|
13
|
+
gem "sqlite3"
|
14
|
+
gem "mongoid", "~> 2.4.0"
|
15
|
+
|
16
|
+
gemspec :path=>"../"
|
@@ -15,12 +15,7 @@ module ActiveModel
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def timeliness_validation_for(attr_names, type)
|
18
|
-
|
19
|
-
if respond_to?(:timeliness_validated_attributes)
|
20
|
-
self.timeliness_validated_attributes ||= []
|
21
|
-
self.timeliness_validated_attributes += (attr_names - self.timeliness_validated_attributes)
|
22
|
-
end
|
23
|
-
validates_with TimelinessValidator, options
|
18
|
+
validates_with TimelinessValidator, _merge_attributes(attr_names).merge(:type => type)
|
24
19
|
end
|
25
20
|
end
|
26
21
|
|
@@ -39,6 +39,13 @@ module ValidatesTimeliness
|
|
39
39
|
super
|
40
40
|
end
|
41
41
|
|
42
|
+
def setup(model)
|
43
|
+
if model.respond_to?(:timeliness_validated_attributes)
|
44
|
+
model.timeliness_validated_attributes ||= []
|
45
|
+
model.timeliness_validated_attributes |= @attributes
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
42
49
|
def validate_each(record, attr_name, value)
|
43
50
|
raw_value = attribute_raw_value(record, attr_name) || value
|
44
51
|
return if (@allow_nil && raw_value.nil?) || (@allow_blank && raw_value.blank?)
|
@@ -5,6 +5,7 @@ begin
|
|
5
5
|
|
6
6
|
require 'mongoid'
|
7
7
|
require 'validates_timeliness/orm/mongoid'
|
8
|
+
|
8
9
|
Mongoid.configure do |config|
|
9
10
|
name = "validates_timeliness_test"
|
10
11
|
host = "localhost"
|
@@ -16,17 +17,17 @@ describe ValidatesTimeliness, 'Mongoid' do
|
|
16
17
|
|
17
18
|
class Article
|
18
19
|
include Mongoid::Document
|
19
|
-
ValidatesTimeliness.use_plugin_parser = true
|
20
20
|
field :publish_date, :type => Date
|
21
21
|
field :publish_time, :type => Time
|
22
22
|
field :publish_datetime, :type => DateTime
|
23
23
|
validates_date :publish_date, :allow_nil => true
|
24
24
|
validates_time :publish_time, :allow_nil => true
|
25
25
|
validates_datetime :publish_datetime, :allow_nil => true
|
26
|
-
ValidatesTimeliness.use_plugin_parser = false
|
27
26
|
end
|
28
27
|
|
29
28
|
context "validation methods" do
|
29
|
+
let(:record) { Article.new }
|
30
|
+
|
30
31
|
it 'should be defined on the class' do
|
31
32
|
Article.should respond_to(:validates_date)
|
32
33
|
Article.should respond_to(:validates_time)
|
@@ -34,33 +35,33 @@ describe ValidatesTimeliness, 'Mongoid' do
|
|
34
35
|
end
|
35
36
|
|
36
37
|
it 'should be defined on the instance' do
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
record.should respond_to(:validates_date)
|
39
|
+
record.should respond_to(:validates_time)
|
40
|
+
record.should respond_to(:validates_datetime)
|
40
41
|
end
|
41
42
|
|
42
43
|
it "should validate a valid value string" do
|
43
|
-
|
44
|
-
r.publish_date = '2012-01-01'
|
44
|
+
record.publish_date = '2012-01-01'
|
45
45
|
|
46
|
-
|
47
|
-
|
46
|
+
record.valid?
|
47
|
+
record.errors[:publish_date].should be_empty
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should validate a invalid value string" do
|
51
|
-
|
52
|
-
|
51
|
+
begin
|
52
|
+
record.publish_date = 'not a date'
|
53
|
+
rescue
|
54
|
+
end
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
+
record.valid?
|
57
|
+
record.errors[:publish_date].should_not be_empty
|
56
58
|
end
|
57
59
|
|
58
60
|
it "should validate a nil value" do
|
59
|
-
|
60
|
-
r.publish_date = nil
|
61
|
+
record.publish_date = nil
|
61
62
|
|
62
|
-
|
63
|
-
|
63
|
+
record.valid?
|
64
|
+
record.errors[:publish_date].should be_empty
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
@@ -69,46 +70,97 @@ describe ValidatesTimeliness, 'Mongoid' do
|
|
69
70
|
end
|
70
71
|
|
71
72
|
context "attribute write method" do
|
73
|
+
let(:record) { Article.new }
|
74
|
+
|
72
75
|
it 'should cache attribute raw value' do
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
+
record.publish_datetime = date_string = '2010-01-01'
|
77
|
+
|
78
|
+
record._timeliness_raw_value_for('publish_datetime').should == date_string
|
76
79
|
end
|
77
80
|
|
78
81
|
context "with plugin parser" do
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
82
|
+
let(:record) { ArticleWithParser.new }
|
83
|
+
|
84
|
+
class ArticleWithParser
|
85
|
+
include Mongoid::Document
|
86
|
+
field :publish_date, :type => Date
|
87
|
+
field :publish_time, :type => Time
|
88
|
+
field :publish_datetime, :type => DateTime
|
89
|
+
|
90
|
+
ValidatesTimeliness.use_plugin_parser = true
|
91
|
+
validates_date :publish_date, :allow_nil => true
|
92
|
+
validates_time :publish_time, :allow_nil => true
|
93
|
+
validates_datetime :publish_datetime, :allow_nil => true
|
94
|
+
ValidatesTimeliness.use_plugin_parser = false
|
85
95
|
end
|
86
96
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
r.publish_date = 'bad value'
|
97
|
+
context "for a date column" do
|
98
|
+
it 'should parse a string value' do
|
99
|
+
Timeliness::Parser.should_receive(:parse)
|
91
100
|
|
92
|
-
|
93
|
-
|
101
|
+
record.publish_date = '2010-01-01'
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should parse a invalid string value as nil' do
|
105
|
+
Timeliness::Parser.should_receive(:parse)
|
106
|
+
|
107
|
+
record.publish_date = 'not valid'
|
108
|
+
end
|
94
109
|
|
95
|
-
context "for a date column" do
|
96
110
|
it 'should store a Date value after parsing string' do
|
97
|
-
|
98
|
-
r.publish_date = '2010-01-01'
|
111
|
+
record.publish_date = '2010-01-01'
|
99
112
|
|
100
|
-
|
101
|
-
|
113
|
+
record.publish_date.should be_kind_of(Date)
|
114
|
+
record.publish_date.should eq Date.new(2010, 1, 1)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "for a time column" do
|
119
|
+
it 'should parse a string value' do
|
120
|
+
Timeliness::Parser.should_receive(:parse)
|
121
|
+
|
122
|
+
record.publish_time = '12:30'
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should parse a invalid string value as nil' do
|
126
|
+
Timeliness::Parser.should_receive(:parse)
|
127
|
+
|
128
|
+
record.publish_time = 'not valid'
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'should store a Time value after parsing string' do
|
132
|
+
record.publish_time = '12:30'
|
133
|
+
|
134
|
+
record.publish_time.should be_kind_of(Time)
|
135
|
+
record.publish_time.should eq Time.utc(2000, 1, 1, 12, 30)
|
102
136
|
end
|
103
137
|
end
|
104
138
|
|
105
139
|
context "for a datetime column" do
|
140
|
+
with_config(:default_timezone, 'Australia/Melbourne')
|
141
|
+
|
142
|
+
it 'should parse a string value' do
|
143
|
+
Timeliness::Parser.should_receive(:parse)
|
144
|
+
|
145
|
+
record.publish_datetime = '2010-01-01 12:00'
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'should parse a invalid string value as nil' do
|
149
|
+
Timeliness::Parser.should_receive(:parse)
|
150
|
+
|
151
|
+
record.publish_datetime = 'not valid'
|
152
|
+
end
|
153
|
+
|
106
154
|
it 'should parse string into DateTime value' do
|
107
|
-
|
108
|
-
|
155
|
+
record.publish_datetime = '2010-01-01 12:00'
|
156
|
+
|
157
|
+
record.publish_datetime.should be_kind_of(DateTime)
|
158
|
+
end
|
159
|
+
|
160
|
+
pending 'should parse string as current timezone' do
|
161
|
+
record.publish_datetime = '2010-06-01 12:00'
|
109
162
|
|
110
|
-
|
111
|
-
r.publish_datetime.should == DateTime.new(2010,1,1,12,0)
|
163
|
+
record.publish_datetime.utc_offset.should eq Time.zone.utc_offset
|
112
164
|
end
|
113
165
|
end
|
114
166
|
end
|
@@ -116,10 +168,10 @@ describe ValidatesTimeliness, 'Mongoid' do
|
|
116
168
|
|
117
169
|
context "cached value" do
|
118
170
|
it 'should be cleared on reload' do
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
171
|
+
record = Article.create!
|
172
|
+
record.publish_date = '2010-01-01'
|
173
|
+
record.reload
|
174
|
+
record._timeliness_raw_value_for('publish_date').should be_nil
|
123
175
|
end
|
124
176
|
end
|
125
177
|
|
@@ -19,6 +19,14 @@ describe ValidatesTimeliness::Validator do
|
|
19
19
|
Person.validates :birth_datetime, :timeliness => {:is_at => Time.mktime(2010,1,1)}
|
20
20
|
Person.validators.first.type.should == :datetime
|
21
21
|
end
|
22
|
+
|
23
|
+
it 'should add attribute to timeliness attributes set' do
|
24
|
+
PersonWithShim.timeliness_validated_attributes.should_not include(:birth_time)
|
25
|
+
|
26
|
+
PersonWithShim.validates :birth_time, :timeliness => {:is_at => "12:30"}
|
27
|
+
|
28
|
+
PersonWithShim.timeliness_validated_attributes.should include(:birth_time)
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
32
|
it 'should not be valid for value which not valid date or time value' do
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.homepage = %q{http://github.com/adzap/validates_timeliness}
|
13
13
|
|
14
14
|
s.require_paths = ["lib"]
|
15
|
-
s.files = `git ls-files`.split("\n") - %w{ .gitignore .rspec Gemfile Gemfile.lock autotest/discover.rb }
|
15
|
+
s.files = `git ls-files`.split("\n") - %w{ .gitignore .rspec Gemfile Gemfile.lock autotest/discover.rb Appraisals Travis.yml } - Dir['gemsfiles/*']
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
17
|
s.extra_rdoc_files = ["README.rdoc", "CHANGELOG.rdoc", "LICENSE"]
|
18
18
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_timeliness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 3.0.
|
9
|
+
- 14
|
10
|
+
version: 3.0.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Adam Meehan
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-08-
|
18
|
+
date: 2012-08-23 00:00:00 +10:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -45,11 +45,14 @@ extra_rdoc_files:
|
|
45
45
|
- CHANGELOG.rdoc
|
46
46
|
- LICENSE
|
47
47
|
files:
|
48
|
-
- Appraisals
|
49
48
|
- CHANGELOG.rdoc
|
50
49
|
- LICENSE
|
51
50
|
- README.rdoc
|
52
51
|
- Rakefile
|
52
|
+
- gemfiles/mongoid_2_1.gemfile
|
53
|
+
- gemfiles/mongoid_2_2.gemfile
|
54
|
+
- gemfiles/mongoid_2_3.gemfile
|
55
|
+
- gemfiles/mongoid_2_4.gemfile
|
53
56
|
- gemfiles/rails_3_0.gemfile
|
54
57
|
- gemfiles/rails_3_1.gemfile
|
55
58
|
- gemfiles/rails_3_2.gemfile
|