has_safe_dates 0.0.3 → 0.0.4
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.
- checksums.yaml +7 -0
- data/Gemfile +1 -1
- data/has_safe_dates.gemspec +6 -6
- data/lib/has_safe_dates/core_ext.rb +27 -22
- data/lib/has_safe_dates/version.rb +1 -1
- data/spec/has_safe_dates_spec.rb +18 -11
- data/spec/spec_helper.rb +1 -0
- metadata +123 -143
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b7568105303c5f9d5c1b89473f2285b06e7c3edc
|
4
|
+
data.tar.gz: 5b5d33acc5958d838bdec27cef14a0ac7c148058
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 744066114fa7efe60a406f1bdbae48b90d6127ead6c021646c208adf391fa899808f0bf7b7e441881d232cd34ccf86237cd13797046a8356778362c466319932
|
7
|
+
data.tar.gz: 0043062b200e8a6d55f241ef4a9ec5f6c87bd7b3a25dd65b2d4ee1e3ad52a41453d4a137321372a3363dbd02c783b242c0e8f708e1c5f300e077044a30aa6cc2
|
data/Gemfile
CHANGED
data/has_safe_dates.gemspec
CHANGED
@@ -39,15 +39,15 @@ Gem::Specification.new do |s|
|
|
39
39
|
s.specification_version = 3
|
40
40
|
|
41
41
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
42
|
-
s.add_development_dependency("activerecord", ['
|
43
|
-
s.
|
44
|
-
s.add_development_dependency("rspec", [">= 0"])
|
42
|
+
s.add_development_dependency("activerecord", ['~> 4.0.0'])
|
43
|
+
s.add_dependency("chronic")
|
44
|
+
s.add_development_dependency("rspec", [">= 0", "< 3"])
|
45
45
|
s.add_development_dependency("rdoc", ["~> 3.12"])
|
46
|
-
s.add_development_dependency("bundler", ["~> 1.0
|
46
|
+
s.add_development_dependency("bundler", ["~> 1.0"])
|
47
47
|
s.add_development_dependency("sqlite3")
|
48
|
-
s.add_development_dependency("rspec")
|
49
48
|
s.add_development_dependency('database_cleaner')
|
50
|
-
|
49
|
+
s.add_development_dependency('debugger')
|
50
|
+
else
|
51
51
|
s.add_dependency("activerecord", ['>= 3.1.0'])
|
52
52
|
s.add_dependency("chronic")
|
53
53
|
s.add_dependency("rspec", [">= 0"])
|
@@ -6,7 +6,6 @@ module HasSafeDates
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
module ClassMethods
|
9
|
-
|
10
9
|
def has_safe_fields_config
|
11
10
|
@@has_safe_fields_config ||= {}
|
12
11
|
end
|
@@ -25,42 +24,48 @@ module HasSafeDates
|
|
25
24
|
raise ArgumentError, 'Must define the fields you want to be converted to safe dates with "has_safe_dates :my_field_name_date, :my_other_field_name_date"'
|
26
25
|
end
|
27
26
|
has_safe_fields_config[self][:fields] = args.map(&:to_s)
|
27
|
+
|
28
28
|
has_safe_fields_config[self][:fields].each do |field|
|
29
29
|
define_method "#{field.to_s}=" do |value|
|
30
30
|
if value.present?
|
31
31
|
value = Chronic.parse(value.to_s)
|
32
|
-
|
33
|
-
|
32
|
+
if value.blank? && self.class.has_safe_fields_config[self.class][:error_message].present?
|
33
|
+
@safe_date_validation_errors ||= {}
|
34
|
+
@safe_date_validation_errors[field] = self.class.has_safe_fields_config[self.class][:error_message]
|
34
35
|
end
|
35
36
|
end
|
36
37
|
super value
|
37
38
|
end
|
38
39
|
end
|
39
|
-
end
|
40
|
-
end
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
return nil if (1..3).any? {|position| values_hash_from_param[position].blank?}
|
51
|
-
set_values = (1..max_position).collect{|position| values_hash_from_param[position] }
|
41
|
+
define_method "_set_safe_date_validation_errors" do
|
42
|
+
if @safe_date_validation_errors.present?
|
43
|
+
@safe_date_validation_errors.each_pair do |field, error|
|
44
|
+
errors.add(field, error)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
@safe_date_validation_errors = nil
|
48
|
+
end
|
52
49
|
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
class_eval do
|
51
|
+
validate :_set_safe_date_validation_errors
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
56
|
|
57
|
-
|
57
|
+
module MultiparameterAttributeExt
|
58
|
+
# Overrides #read_date when has_safe_dates is enabled for the current field the multiparameter.
|
59
|
+
# Otherwise the original #read_date method is invoked.
|
60
|
+
def read_date
|
61
|
+
if ActiveRecord::Base.has_safe_fields_config[object.class] && ActiveRecord::Base.has_safe_fields_config[object.class][:fields].include?(name)
|
62
|
+
values.values_at(1,2,3).join("-") # Convert multiparameter parts into a Date string, e.g. "2011-4-23", return it, and allow CoreExt methods handle the result.
|
58
63
|
else
|
59
|
-
super
|
64
|
+
super # has_safe_dates is not enabled for the current field, so invoke the super method (original #read_date method).
|
60
65
|
end
|
61
66
|
end
|
62
|
-
|
63
67
|
end
|
64
68
|
end
|
65
|
-
|
69
|
+
|
66
70
|
ActiveRecord::Base.send :include, HasSafeDates::CoreExt
|
71
|
+
ActiveRecord::AttributeAssignment::MultiparameterAttribute.send :prepend, HasSafeDates::MultiparameterAttributeExt
|
data/spec/has_safe_dates_spec.rb
CHANGED
@@ -12,7 +12,7 @@ end
|
|
12
12
|
|
13
13
|
describe "HasSafeDates" do
|
14
14
|
|
15
|
-
before(:each) do
|
15
|
+
before(:each) do
|
16
16
|
@post = Post.new
|
17
17
|
@comment = Comment.new
|
18
18
|
end
|
@@ -53,8 +53,8 @@ describe "HasSafeDates" do
|
|
53
53
|
|
54
54
|
[' ', '', nil].each do |date|
|
55
55
|
it "sets the field to nil if given the blank value #{date.inspect}" do
|
56
|
-
@post.
|
57
|
-
@post.
|
56
|
+
@post.safe_date = date
|
57
|
+
@post.valid?
|
58
58
|
@post.safe_date.should == nil
|
59
59
|
@post.errors.should be_blank
|
60
60
|
end
|
@@ -62,18 +62,21 @@ describe "HasSafeDates" do
|
|
62
62
|
|
63
63
|
['random', 'does not compute'].each do |date|
|
64
64
|
it "sets the field to nil and sets a validation error if given the value #{date.inspect}" do
|
65
|
-
@post.
|
66
|
-
@post.
|
65
|
+
@post.safe_date = date
|
66
|
+
@post.valid?
|
67
67
|
@post.safe_date.should == nil
|
68
68
|
@post.errors.should_not be_blank
|
69
|
+
@post.errors[:safe_date].should == ['is not a real date']
|
69
70
|
end
|
70
71
|
end
|
72
|
+
|
71
73
|
end
|
72
74
|
|
73
75
|
describe "multiparameter parsing" do
|
76
|
+
|
74
77
|
it "doesn't blow up when given an incorrect values" do
|
75
|
-
invalid_post_attributes = {'published_date(
|
76
|
-
invalid_comment_attributes = {'approved_at(
|
78
|
+
invalid_post_attributes = {'published_date(1i)' => "2001", 'published_date(2i)' => "12", 'published_date(3i)' => "abc"}
|
79
|
+
invalid_comment_attributes = {'approved_at(1i)' => "2001", 'approved_at(2i)' => "12", 'approved_at(3i)' => "abc"}
|
77
80
|
expect {
|
78
81
|
@post.update_attributes(invalid_post_attributes)
|
79
82
|
@comment.update_attributes(invalid_comment_attributes)
|
@@ -81,14 +84,18 @@ describe "HasSafeDates" do
|
|
81
84
|
end
|
82
85
|
|
83
86
|
it "does not interfere with a date column that it has not been told to make safe" do
|
84
|
-
invalid_attributes = {'unsafe_date(
|
87
|
+
invalid_attributes = {'unsafe_date(1i)' => "2001", 'unsafe_date(2i)' => "12", 'unsafe_date(3i)' => "abc"}
|
85
88
|
expect {
|
86
89
|
@post.update_attributes(invalid_attributes)
|
87
|
-
}.to raise_error(ActiveRecord::MultiparameterAssignmentErrors
|
90
|
+
}.to raise_error(ActiveRecord::MultiparameterAssignmentErrors)
|
88
91
|
end
|
89
92
|
|
90
|
-
|
91
|
-
|
93
|
+
it "adds an error when Chronic returns nil" do
|
94
|
+
invalid_post_attributes = {'published_date(1i)' => "2001", 'published_date(2i)' => "12", 'published_date(3i)' => "abc"}
|
95
|
+
@post.update_attributes(invalid_post_attributes)
|
96
|
+
@post.errors[:published_date].should == ['is not a real date']
|
97
|
+
end
|
92
98
|
|
99
|
+
end
|
93
100
|
|
94
101
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,150 +1,142 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_safe_dates
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- kylejginavan
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2012-02-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
22
14
|
name: activerecord
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 3
|
32
|
-
- 1
|
33
|
-
- 0
|
34
|
-
version: 3.1.0
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
35
20
|
type: :development
|
36
|
-
|
37
|
-
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
38
28
|
name: chronic
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
39
35
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
version: "0"
|
49
|
-
type: :development
|
50
|
-
version_requirements: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
52
42
|
name: rspec
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
- 0
|
62
|
-
version: "0"
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
- - <
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '3'
|
63
51
|
type: :development
|
64
|
-
version_requirements: *id003
|
65
|
-
- !ruby/object:Gem::Dependency
|
66
|
-
name: rdoc
|
67
52
|
prerelease: false
|
68
|
-
|
69
|
-
|
70
|
-
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
- - <
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rdoc
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
71
65
|
- - ~>
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
74
|
-
segments:
|
75
|
-
- 3
|
76
|
-
- 12
|
77
|
-
version: "3.12"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.12'
|
78
68
|
type: :development
|
79
|
-
version_requirements: *id004
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: bundler
|
82
69
|
prerelease: false
|
83
|
-
|
84
|
-
|
85
|
-
requirements:
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
86
72
|
- - ~>
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.12'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: bundler
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ~>
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '1.0'
|
94
82
|
type: :development
|
95
|
-
version_requirements: *id005
|
96
|
-
- !ruby/object:Gem::Dependency
|
97
|
-
name: sqlite3
|
98
83
|
prerelease: false
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '1.0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: sqlite3
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
108
96
|
type: :development
|
109
|
-
version_requirements: *id006
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: rspec
|
112
97
|
prerelease: false
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
segments:
|
120
|
-
- 0
|
121
|
-
version: "0"
|
122
|
-
type: :development
|
123
|
-
version_requirements: *id007
|
124
|
-
- !ruby/object:Gem::Dependency
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
125
104
|
name: database_cleaner
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
126
111
|
prerelease: false
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: debugger
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
136
124
|
type: :development
|
137
|
-
|
138
|
-
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
description: Uses Chronic to parse incoming dates and does not raise errors on invalid
|
132
|
+
multi parameter settings
|
139
133
|
email: kylejginavan@gmail.com
|
140
134
|
executables: []
|
141
|
-
|
142
135
|
extensions: []
|
143
|
-
|
144
|
-
extra_rdoc_files:
|
136
|
+
extra_rdoc_files:
|
145
137
|
- MIT-LICENSE.txt
|
146
138
|
- README.md
|
147
|
-
files:
|
139
|
+
files:
|
148
140
|
- Gemfile
|
149
141
|
- Rakefile
|
150
142
|
- MIT-LICENSE.txt
|
@@ -157,39 +149,27 @@ files:
|
|
157
149
|
- spec/db/schema.rb
|
158
150
|
- spec/has_safe_dates_spec.rb
|
159
151
|
- spec/spec_helper.rb
|
160
|
-
has_rdoc: true
|
161
152
|
homepage: http://github.com/kylejginavan/has_safe_dates
|
162
153
|
licenses: []
|
163
|
-
|
154
|
+
metadata: {}
|
164
155
|
post_install_message:
|
165
156
|
rdoc_options: []
|
166
|
-
|
167
|
-
require_paths:
|
157
|
+
require_paths:
|
168
158
|
- lib
|
169
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
none: false
|
180
|
-
requirements:
|
181
|
-
- - ">="
|
182
|
-
- !ruby/object:Gem::Version
|
183
|
-
hash: 3
|
184
|
-
segments:
|
185
|
-
- 0
|
186
|
-
version: "0"
|
159
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
187
169
|
requirements: []
|
188
|
-
|
189
170
|
rubyforge_project:
|
190
|
-
rubygems_version:
|
171
|
+
rubygems_version: 2.0.14
|
191
172
|
signing_key:
|
192
173
|
specification_version: 3
|
193
174
|
summary: Chronic based date setting for ActiveRecord models
|
194
175
|
test_files: []
|
195
|
-
|