date_parity 0.0.1 → 0.0.2
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.md +32 -15
- data/lib/date_parity/core_ext/date.rb +12 -0
- data/lib/date_parity/version.rb +1 -1
- data/lib/date_parity.rb +0 -2
- data/test/date_parity_test.rb +24 -0
- metadata +10 -11
- data/lib/date_parity/core_ext/string.rb +0 -13
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# DateParity
|
2
2
|
|
3
|
-
Consistent date formatting
|
4
|
-
string.to\_date.
|
3
|
+
Consistent date formatting and parsing for Rails applications. Creates parity between date.to\_s and
|
4
|
+
string.to\_date in Rails applications.
|
5
5
|
|
6
|
-
|
7
|
-
set per request (i.e. per user).
|
6
|
+
This is implemented with a "Date.format" syntax and usage, similar to "Time.zone" in rails. This can be
|
7
|
+
set per request (i.e. per user) in a controller before or around filter.
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
@@ -24,22 +24,39 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
In Rails controller before\_filter:
|
26
26
|
Date.format = '%m/%d/%Y'
|
27
|
-
|
27
|
+
|
28
|
+
or from a persisted field that stores the desired format:
|
28
29
|
Date.format = current\_user.date\_format
|
29
30
|
|
30
|
-
In any view assuming @
|
31
|
-
|
32
|
-
|
31
|
+
In any view assuming @model\_created\_on is a date, and Date.format
|
32
|
+
was set as above:
|
33
|
+
<%=@modele.created\_on %>
|
34
|
+
=> 12/31/2012
|
33
35
|
|
34
36
|
And then you get parity when a form with this field is posted.
|
35
37
|
Rails will attempt to convert the posted string value of "12/31/2012"
|
36
|
-
using
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
using Date.\_parse, which DateParity overrides and respects your Date.format.
|
39
|
+
Without DateParity gem, @model.start\_on would have ended up nil because
|
40
|
+
"12/31/2012" is invalid argument Ruby Date.\_parse. However, when date\_parity is
|
41
|
+
included, Date will use the format string stored on Date.format
|
42
|
+
(if it exist) to correctly parse "12/31/2012", as December 31, 2012, when
|
43
|
+
Date.format = "%m/%d/%Y"
|
44
|
+
|
45
|
+
Note: Rails text\_field form helper uses @model.attribute\before\_type\_cast by default.
|
46
|
+
When using date\_parity on plain text fields, you will probably want to set your value
|
47
|
+
to explicitly use @model.attribute if it exists. Otherwise, you won't see the formatted
|
48
|
+
date field:
|
49
|
+
For example:
|
50
|
+
<%= f.text_field :created_on, :value => @user.created\_on || @user.created\_on\_before\_type\_cast %>
|
51
|
+
|
52
|
+
Date.format can be set to any date format that is parsable by strptime.
|
53
|
+
For example, the following are all valid:<br>
|
54
|
+
Date.format = "%m/%d/%Y"<br>
|
55
|
+
Date.format = "%d/%m/%Y"<br>
|
56
|
+
Date.format = '%Y-%m-%d'<br>
|
57
|
+
Date.format = '%d.%m.%Y'<br>
|
58
|
+
Date.format = '%Y.%m.%d'<br>
|
59
|
+
Date.format = '%Y/%m/%d'<br>
|
43
60
|
|
44
61
|
## Contributing
|
45
62
|
|
@@ -6,7 +6,19 @@ class Date
|
|
6
6
|
def format=(format)
|
7
7
|
Thread.current[:date_format] = format
|
8
8
|
end
|
9
|
+
|
10
|
+
def _parse_with_date_parity_format(string, comp=false)
|
11
|
+
return _parse_without_date_parity_format(string, comp) if string.blank? or Date.format.blank?
|
12
|
+
# normalize date by first respecting custom date_parity Date.format,
|
13
|
+
# then formatting back to iso/db string for normal _parse call.
|
14
|
+
_parse_without_date_parity_format(Date.strptime(string, Date.format).to_s(:db), comp)
|
15
|
+
rescue
|
16
|
+
_parse_without_date_parity_format(string, comp)
|
17
|
+
end
|
18
|
+
|
19
|
+
alias_method_chain :_parse, :date_parity_format
|
9
20
|
end
|
21
|
+
|
10
22
|
end
|
11
23
|
|
12
24
|
|
data/lib/date_parity/version.rb
CHANGED
data/lib/date_parity.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'date'
|
2
2
|
require 'active_support/core_ext/date/conversions'
|
3
3
|
require 'active_support/core_ext/string/conversions'
|
4
|
-
|
5
4
|
require "date_parity/version"
|
6
|
-
require 'date_parity/core_ext/string'
|
7
5
|
require 'date_parity/core_ext/date'
|
8
6
|
|
9
7
|
# ActiveSupport provides an implementation of Date.to_s that uses
|
data/test/date_parity_test.rb
CHANGED
@@ -25,7 +25,31 @@ class DateParityTest < MiniTest::Unit::TestCase
|
|
25
25
|
|
26
26
|
end
|
27
27
|
|
28
|
+
def test_date_parse
|
29
|
+
date_hash = { :year => 2012, :mon => 8, :mday => 12 }
|
30
|
+
|
31
|
+
Date.format = "%m/%d/%Y"
|
32
|
+
assert_equal date_hash, Date._parse("08/12/2012")
|
33
|
+
|
34
|
+
Date.format = "%d/%m/%Y"
|
35
|
+
assert_equal date_hash, Date._parse("12/08/2012")
|
36
|
+
|
37
|
+
Date.format = '%Y-%m-%d'
|
38
|
+
assert_equal date_hash, Date._parse("2012-08-12")
|
39
|
+
|
40
|
+
Date.format = '%d.%m.%Y'
|
41
|
+
assert_equal date_hash, Date._parse("12.08.2012")
|
42
|
+
|
43
|
+
Date.format = '%Y.%m.%d'
|
44
|
+
assert_equal date_hash, Date._parse("2012.08.12")
|
45
|
+
|
46
|
+
Date.format = '%Y/%m/%d'
|
47
|
+
assert_equal date_hash, Date._parse("2012/08/12")
|
48
|
+
end
|
49
|
+
|
28
50
|
def test_string_to_date_respects_format
|
51
|
+
# This works because Rails ActiveSupport provides
|
52
|
+
# string.to_date, which uses Date._parse
|
29
53
|
Date.format = "%m/%d/%Y"
|
30
54
|
assert_equal Date.parse("2012-08-12"), "08/12/2012".to_date
|
31
55
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: date_parity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &70261701192120 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70261701192120
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70261701191700 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70261701191700
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest
|
38
|
-
requirement: &
|
38
|
+
requirement: &70261701191240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70261701191240
|
47
47
|
description: Consistent date formatting done simple
|
48
48
|
email: scottpstewart@gamil.com
|
49
49
|
executables: []
|
@@ -58,7 +58,6 @@ files:
|
|
58
58
|
- date_parity.gemspec
|
59
59
|
- lib/date_parity.rb
|
60
60
|
- lib/date_parity/core_ext/date.rb
|
61
|
-
- lib/date_parity/core_ext/string.rb
|
62
61
|
- lib/date_parity/version.rb
|
63
62
|
- test/date_parity_test.rb
|
64
63
|
- test/lib/date_parity/test_helper.rb
|
@@ -76,7 +75,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
75
|
version: '0'
|
77
76
|
segments:
|
78
77
|
- 0
|
79
|
-
hash:
|
78
|
+
hash: 2984063008747520348
|
80
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
80
|
none: false
|
82
81
|
requirements:
|
@@ -85,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
84
|
version: '0'
|
86
85
|
segments:
|
87
86
|
- 0
|
88
|
-
hash:
|
87
|
+
hash: 2984063008747520348
|
89
88
|
requirements: []
|
90
89
|
rubyforge_project:
|
91
90
|
rubygems_version: 1.8.11
|