date_time_precision 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71536a97bec964927b020bef1a1eb66e9701f3ac
4
- data.tar.gz: 565285ab3969674b1af42a04da76e47d99211520
3
+ metadata.gz: d9e306c98b83f8d976c0f1499b17b3fe57503797
4
+ data.tar.gz: cf7744903d1a1ea1c3aa8fef6bc98896853bf27a
5
5
  SHA512:
6
- metadata.gz: a50f19fe82162b7e3248c3b3691c69c72a486c5660741bfacfa0e3426ce563c77fe6c69a237bbe0e4ce71921a50e48a425ec10a7af0ac671f36271361a359de3
7
- data.tar.gz: 3e4ae33d5bf281f1ca2c6f5ec79c51e1d471f1f98c54ee3bc35076b76bcc7d75c9df71ddfe1c6b943812775baaf0eefa2b9a814a456fa4de5985eab0843aee3f
6
+ metadata.gz: 5ec71030888d088622a1a30e92767beb730e10a4168da758b7ac623e188c9d995d9daf5b83b5c402a1106e681bf7be70dd49630e0d870963327aca95cd439500
7
+ data.tar.gz: b832c62848bae15b69ed22b1c7111d97916458b7f84f0ae8884d00ec35a260e3e95ca482bd1c6166d28f6aecb564ad3c20b988b2e002874facf9c5ed75299ee4
data/README.md CHANGED
@@ -51,6 +51,14 @@ The currently supported formats are Hash, JSON, and ISO 8601.
51
51
 
52
52
  Examples:
53
53
 
54
+ ```ruby
55
+ # Requires Active Support
56
+ require 'date_time_precision/format/string'
57
+
58
+ Date.new(2000, 5).to_s(:long)
59
+ # => "May 2000"
60
+ ```
61
+
54
62
  ```ruby
55
63
  require 'date_time_precision/format/hash'
56
64
 
@@ -100,7 +108,7 @@ modifications to how the core Date/Time classes work. (For example, by allowing
100
108
 
101
109
  So far, the following gems are on the compatibility watch list:
102
110
 
103
- - [x] [ActiveSupport](https://github.com/rails/rails/tree/master/activesupport)
111
+ - [.] [ActiveSupport](https://github.com/rails/rails/tree/master/activesupport)
104
112
  - [x] [Virtus](https://github.com/solnic/virtus)
105
113
  - [x] [Coercible](https://github.com/solnic/coercible)
106
114
  - [ ] [Chronic](https://github.com/mojombo/chronic)
@@ -123,14 +131,15 @@ Or install it yourself as:
123
131
 
124
132
  $ gem install date_time_precision
125
133
 
126
- ## Wishlist
134
+ ## Wishlist / TO-DO
127
135
 
128
- - [x] Support Time::mktime
129
- - [x] Support Time::utc and Time#utc
130
- - [x] Support Time::local
131
- - [.] Support correct generation (done) and parsing (not done) of the ISO 8601 format, which supports partial dates
132
- - [ ] Support the various time zone methods (partially done)
133
- - [ ] Support easy string formatting based on precision
136
+ - [x] Time::mktime
137
+ - [x] Time::utc and Time#utc
138
+ - [x] Time::local
139
+ - [.] Correct generation and parsing of the ISO 8601 format, which supports partial dates and times
140
+ - [ ] The various time zone methods (partially done)
141
+ - [.] Easy string formatting based on precision
142
+ - [ ] [ActiveSupport::TimeWithZone](http://apidock.com/rails/ActiveSupport/TimeWithZone)
134
143
 
135
144
  ## Contributing
136
145
 
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require "bundler/gem_tasks"
3
3
 
4
4
  Dir['gem_tasks/**/*.rake'].each { |rake| load rake }
5
5
 
6
- task :default => [:spec, :active_support_spec, :compatibility_spec]
6
+ task :default => [:spec, 'spec:format', 'spec:active_support', 'spec:compatibility']
@@ -3,17 +3,25 @@ require 'rspec/core/rake_task'
3
3
  desc "Run RSpec"
4
4
  RSpec::Core::RakeTask.new do |t|
5
5
  t.verbose = true
6
- t.pattern = "spec/date_time_precision/date_time_precision_spec.rb"
6
+ t.pattern = "spec/date_time_precision_spec.rb"
7
7
  end
8
8
 
9
- desc "Run ActiveSupport spec"
10
- RSpec::Core::RakeTask.new(:active_support_spec) do |t|
11
- t.verbose = true
12
- t.pattern = "spec/date_time_precision/active_support_spec.rb"
13
- end
9
+ namespace :spec do
10
+ desc "Run format specs"
11
+ RSpec::Core::RakeTask.new(:format) do |t|
12
+ t.verbose = true
13
+ t.pattern = "spec/format_spec.rb"
14
+ end
14
15
 
15
- desc "Run Compatibility spec"
16
- RSpec::Core::RakeTask.new(:compatibility_spec) do |t|
17
- t.verbose = true
18
- t.pattern = "spec/date_time_precision/compatibility_spec.rb"
16
+ desc "Run ActiveSupport specs"
17
+ RSpec::Core::RakeTask.new(:active_support) do |t|
18
+ t.verbose = true
19
+ t.pattern = "spec/active_support_spec.rb"
20
+ end
21
+
22
+ desc "Run gem compatibility specs"
23
+ RSpec::Core::RakeTask.new(:compatibility) do |t|
24
+ t.verbose = true
25
+ t.pattern = "spec/compatibility_spec.rb"
26
+ end
19
27
  end
@@ -0,0 +1,31 @@
1
+ require 'active_support/core_ext/date/conversions'
2
+
3
+ Date::DATE_FORMATS[:long] = lambda do |date|
4
+ case
5
+ when date.precision.nil?, date.precision >= DateTimePrecision::DAY
6
+ date.strftime("%B %e, %Y")
7
+ when date.precision == DateTimePrecision::MONTH
8
+ date.strftime("%B %Y")
9
+ when date.precision == DateTimePrecision::YEAR
10
+ date.strftime("%Y")
11
+ else
12
+ ""
13
+ end
14
+ end
15
+
16
+ Time::DATE_FORMATS[:long] = lambda do |time|
17
+ case
18
+ when time.precision.nil?, time.precision >= DateTimePrecision::MIN
19
+ time.strftime("%B %d, %Y %H:%M")
20
+ #when time.precision == DateTimePrecision::HOUR
21
+ # time.strftime("%B %d, %Y %H")
22
+ when time.precision >= DateTimePrecision::DAY
23
+ time.strftime("%B %d, %Y")
24
+ when time.precision == DateTimePrecision::MONTH
25
+ time.strftime("%B %Y")
26
+ when time.precision == DateTimePrecision::YEAR
27
+ time.strftime("%Y")
28
+ else
29
+ ""
30
+ end
31
+ end
@@ -147,17 +147,25 @@ module DateTimePrecision
147
147
  [:to_date, :to_time, :to_datetime].each do |conversion_method|
148
148
  orig = :"orig_#{conversion_method}"
149
149
  if base.method_defined?(conversion_method) && !base.instance_methods(false).map(&:to_sym).include?(orig)
150
- base.class_exec {
150
+ base.class_eval do
151
151
  alias_method orig, conversion_method
152
- define_method(conversion_method) {
152
+ define_method(conversion_method) do
153
153
  d = send(orig)
154
154
  d.precision = [self.precision, d.class::MAX_PRECISION].min
155
155
  DATE_ATTRIBUTES.each do |attribute|
156
156
  d.instance_variable_set(:"@#{attribute}_set", self.instance_variable_get(:"@#{attribute}_set"))
157
157
  end
158
158
  d
159
- }
160
- }
159
+ end
160
+ end
161
+ else
162
+ # Define our own conversion methods by converting to hash first
163
+ require 'date_time_precision/format/hash'
164
+ base.class_eval do
165
+ define_method(conversion_method) do
166
+ to_h.send(conversion_method)
167
+ end
168
+ end
161
169
  end
162
170
  end
163
171
 
@@ -1,3 +1,3 @@
1
1
  module DateTimePrecision
2
- VERSION = "0.5.3"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+ require 'securerandom'
4
+ require 'active_support'
5
+
6
+ require 'date_time_precision'
7
+
8
+ require 'date_time_precision/format/json'
9
+
10
+ describe DateTimePrecision, 'Conversions' do
11
+ context 'when converting from Date to Time or DateTime' do
12
+ it 'maintains precision' do
13
+ d = Date.new(2005, 1)
14
+ d.precision.should == DateTimePrecision::MONTH
15
+ d.to_date.precision.should == DateTimePrecision::MONTH
16
+ d.to_datetime.precision.should == DateTimePrecision::MONTH
17
+ end
18
+ end
19
+
20
+ it 'loses precision when converting from DateTime or Time to Date' do
21
+ t = Time::parse('2000-1-1 00:00:00 EST') # => Fri Dec 31 21:00:00 -0800 1999
22
+ t.precision.should == DateTimePrecision::SEC
23
+ t.to_datetime.precision.should == DateTime::MAX_PRECISION
24
+ t.to_date.precision.should == DateTimePrecision::DAY
25
+ end
26
+
27
+ it 'converts a date to a hash' do
28
+ date = Date.new(1999, 10)
29
+ date.as_json.should == date.to_h
30
+ end
31
+
32
+ it 'retains precision when converting to and from JSON' do
33
+ date = Date.new(1999, 10)
34
+ date.precision.should == DateTimePrecision::MONTH
35
+ json = ActiveSupport::JSON.encode(date)
36
+
37
+ date_from_json = ActiveSupport::JSON.decode(json).to_date
38
+ date_from_json.precision.should == date.precision
39
+ end
40
+
41
+ context 'when formatting as a string' do
42
+ require 'date_time_precision/format/string'
43
+
44
+ it 'takes precision into account for the :long format' do
45
+ Date.new(2000).to_s(:long).should == "2000"
46
+ Date.new(2000, 8).to_s(:long).should == "August 2000"
47
+ Date.new(2000, 3, 9).to_s(:long).should == "March 9, 2000"
48
+
49
+ DateTime.new(1800).to_s(:long).should == "1800"
50
+ DateTime.new(1990, 8).to_s(:long).should == "August 1990"
51
+ DateTime.new(-50, 3, 9).to_s(:long).should == "March 09, -0050"
52
+ DateTime.new(2004, 7, 8, 10).to_s(:long).should == "July 08, 2004"
53
+ DateTime.new(2004, 7, 8, 10, 5).to_s(:long).should == "July 08, 2004 10:05"
54
+
55
+ Time.mktime(1800).to_s(:long).should == "1800"
56
+ Time::mktime(1990, 8).to_s(:long).should == "August 1990"
57
+
58
+ # Every Ruby seems to have a different idea about how to format this exactly
59
+ Time::mktime(-50, 3, 9).to_s(:long).should match /^March 09, 0*\-0*50$/
60
+
61
+ Time::mktime(2004, 7, 8, 10).to_s(:long).should == "July 08, 2004"
62
+ Time::mktime(2004, 7, 8, 10, 5).to_s(:long).should == "July 08, 2004 10:05"
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,177 @@
1
+ require 'spec_helper'
2
+ require 'date_time_precision'
3
+
4
+ describe DateTimePrecision do
5
+ context 'Constructors' do
6
+ it 'has no precision for unspecified date' do
7
+ d = Date.new
8
+ d.precision.should == DateTimePrecision::NONE
9
+ d.year?.should be_false
10
+
11
+ dt = DateTime.new
12
+ dt.precision.should == DateTimePrecision::NONE
13
+ dt.year?.should be_false
14
+ end
15
+
16
+ it 'has no precision for nil values' do
17
+ nil.precision.should == DateTimePrecision::NONE
18
+ end
19
+
20
+ it 'has year precision when only year is supplied' do
21
+ d = Date.new(1982)
22
+ d.precision.should == DateTimePrecision::YEAR
23
+ d.year?.should be_true
24
+ d.month?.should be_false
25
+ d.day?.should be_false
26
+ end
27
+
28
+ it 'has month precision when year and month are supplied' do
29
+ d = Date.new(1982, 11)
30
+ d.precision.should == DateTimePrecision::MONTH
31
+ d.year?.should be_true
32
+ d.month?.should be_true
33
+ d.day?.should be_false
34
+ end
35
+
36
+ it 'has day precision when year, month, and day are passed in' do
37
+ dt = DateTime.new(1987,10,19)
38
+ dt.precision.should == DateTimePrecision::DAY
39
+ dt.year?.should be_true
40
+ dt.month?.should be_true
41
+ dt.day?.should be_true
42
+ dt.hour?.should be_false
43
+ end
44
+
45
+ it 'has hour precision' do
46
+ dt = DateTime.new(1970, 1, 2, 3)
47
+ dt.precision.should == DateTimePrecision::HOUR
48
+ dt.year?.should be_true
49
+ dt.month?.should be_true
50
+ dt.day?.should be_true
51
+ dt.hour?.should be_true
52
+ dt.min?.should be_false
53
+ end
54
+
55
+ it 'tracks which attributes were explicitly set separately from precision' do
56
+ [Date.new(nil, 11, 12), DateTime.new(nil, 10, 11, nil), Time.mktime(nil, 12, 13, nil, 14)].each do |d|
57
+ d.year?.should be_false
58
+ d.month?.should be_true
59
+ d.day?.should be_true
60
+ d.hour?.should be_false
61
+ d.min?.should be_true if d.is_a? Time
62
+ d.precision.should == DateTimePrecision::NONE
63
+ end
64
+ end
65
+
66
+ it 'has max precision for fully specified dates/times' do
67
+ # Time.new is an alias for Time.now
68
+ [Time.new, Time.now, DateTime.now, Date.today].each do |t|
69
+ t.precision.should == t.class::MAX_PRECISION
70
+ end
71
+ end
72
+
73
+ it 'accepts nil values in the constructor' do
74
+ Date.new(nil).precision.should == DateTimePrecision::NONE
75
+ Date.new(2000, nil).precision.should == DateTimePrecision::YEAR
76
+ DateTime.new(2000, 1, nil).precision.should == DateTimePrecision::MONTH
77
+ Time.mktime(2000, 1, 1, nil, nil).precision.should == DateTimePrecision::DAY
78
+ end
79
+ end
80
+
81
+ context 'Time Zones' do
82
+ it 'should retain precision when switching to UTC' do
83
+ Time.mktime(2000).utc.precision.should == DateTimePrecision::YEAR
84
+ Time.mktime(2000).gmtime.precision.should == DateTimePrecision::YEAR
85
+ end
86
+
87
+ it 'should track precision when creating a time in UTC' do
88
+ Time.utc(1945, 10).precision.should == DateTimePrecision::MONTH
89
+ Time.gm(1945, 10).precision.should == DateTimePrecision::MONTH
90
+ end
91
+
92
+ it 'should track precision when creating a time in the local timezone' do
93
+ Time.local(2004, 5, 6).precision.should == DateTimePrecision::DAY
94
+ end
95
+ end
96
+
97
+ context 'Parsing' do
98
+ it 'should have second/frac precision when parsing a timestamp' do
99
+ t = Time::parse('2000-2-3 00:00:00 UTC')
100
+ t.precision.should == DateTimePrecision::SEC
101
+ t.year.should == 2000
102
+ t.month.should == 2
103
+ t.day.should == 3
104
+ end
105
+
106
+ it 'should have minute precision when seconds are not in the timestamp' do
107
+ dt = DateTime::parse('2000-1-1 00:00 EST') # => Sat, 01 Jan 2000 00:00:00 -0500
108
+ dt.precision.should == DateTimePrecision::MIN
109
+ dt.year.should == 2000
110
+ dt.day.should == 1
111
+ end
112
+
113
+ it 'should have day precision wehn parsing into a Date object' do
114
+ d = Date::parse('2000-1-1 00:00:00 EST') # => Sat, 01 Jan 2000
115
+ d.precision.should == DateTimePrecision::DAY
116
+ end
117
+
118
+ it 'should have month precision when day is not in the parsed string' do
119
+ t = Time::parse('January 2000 UTC').utc # => Sat Jan 01 00:00:00 -0800 2000
120
+ t.precision.should == DateTimePrecision::MONTH
121
+ t.year.should == 2000
122
+ t.month.should == 1
123
+ end
124
+ end
125
+
126
+ context 'strptime' do
127
+ it 'should have day precision when day is specified in date string' do
128
+ d = Date.strptime('02/09/1968', '%m/%d/%Y')
129
+ d.precision.should == DateTimePrecision::DAY
130
+ end
131
+
132
+ it 'should have minute precision when extracting down to the minute' do
133
+ dt = DateTime.strptime('2011-02-03 15:14:52','%Y-%m-%d %H:%M')
134
+ dt.precision.should == DateTimePrecision::MIN
135
+ end
136
+
137
+ it 'should have second precision when extracting down to the second' do
138
+ t = DateTime.strptime('2011-02-03 15:14:52','%Y-%m-%d %H:%M:%S')
139
+ t.precision.should == DateTimePrecision::SEC
140
+ end
141
+ end
142
+
143
+ context 'Addition' do
144
+ it 'should default to max precision when adding or subtracting' do
145
+ d = Date.new
146
+ d.precision.should == DateTimePrecision::NONE
147
+ d += 3
148
+ d.precision.should == Date::MAX_PRECISION
149
+ d -= 2
150
+ d.precision.should == Date::MAX_PRECISION
151
+
152
+ dt = DateTime.new
153
+ dt.precision.should == DateTimePrecision::NONE
154
+ dt += 3
155
+ dt.precision.should == DateTime::MAX_PRECISION
156
+ dt -= 2
157
+ dt.precision.should == DateTime::MAX_PRECISION
158
+
159
+ t = Time::parse('January 2000 UTC').utc
160
+ t.precision.should == DateTimePrecision::MONTH
161
+ t += 10
162
+ t.precision.should == Time::MAX_PRECISION
163
+ t -= 8
164
+ t.precision.should == Time::MAX_PRECISION
165
+ end
166
+ end
167
+
168
+ context 'Partial Matching' do
169
+ it 'should match when differing only in day precision' do
170
+ d1 = Date.new(2001,3,2)
171
+ d2 = Date.new(2001,3)
172
+ d1.partial_match?(d2).should be_true
173
+ d2.partial_match?(d1).should be_true
174
+ end
175
+ end
176
+
177
+ end
@@ -2,179 +2,8 @@ require 'spec_helper'
2
2
  require 'date_time_precision'
3
3
 
4
4
  describe DateTimePrecision do
5
- context 'Constructors' do
6
- it 'has no precision for unspecified date' do
7
- d = Date.new
8
- d.precision.should == DateTimePrecision::NONE
9
- d.year?.should be_false
10
-
11
- dt = DateTime.new
12
- dt.precision.should == DateTimePrecision::NONE
13
- dt.year?.should be_false
14
- end
15
-
16
- it 'has no precision for nil values' do
17
- nil.precision.should == DateTimePrecision::NONE
18
- end
19
-
20
- it 'has year precision when only year is supplied' do
21
- d = Date.new(1982)
22
- d.precision.should == DateTimePrecision::YEAR
23
- d.year?.should be_true
24
- d.month?.should be_false
25
- d.day?.should be_false
26
- end
27
-
28
- it 'has month precision when year and month are supplied' do
29
- d = Date.new(1982, 11)
30
- d.precision.should == DateTimePrecision::MONTH
31
- d.year?.should be_true
32
- d.month?.should be_true
33
- d.day?.should be_false
34
- end
35
-
36
- it 'has day precision when year, month, and day are passed in' do
37
- dt = DateTime.new(1987,10,19)
38
- dt.precision.should == DateTimePrecision::DAY
39
- dt.year?.should be_true
40
- dt.month?.should be_true
41
- dt.day?.should be_true
42
- dt.hour?.should be_false
43
- end
44
-
45
- it 'has hour precision' do
46
- dt = DateTime.new(1970, 1, 2, 3)
47
- dt.precision.should == DateTimePrecision::HOUR
48
- dt.year?.should be_true
49
- dt.month?.should be_true
50
- dt.day?.should be_true
51
- dt.hour?.should be_true
52
- dt.min?.should be_false
53
- end
54
-
55
- it 'tracks which attributes were explicitly set separately from precision' do
56
- [Date.new(nil, 11, 12), DateTime.new(nil, 10, 11, nil), Time.mktime(nil, 12, 13, nil, 14)].each do |d|
57
- d.year?.should be_false
58
- d.month?.should be_true
59
- d.day?.should be_true
60
- d.hour?.should be_false
61
- d.min?.should be_true if d.is_a? Time
62
- d.precision.should == DateTimePrecision::NONE
63
- end
64
- end
65
-
66
- it 'has max precision for fully specified dates/times' do
67
- # Time.new is an alias for Time.now
68
- [Time.new, Time.now, DateTime.now, Date.today].each do |t|
69
- t.precision.should == t.class::MAX_PRECISION
70
- end
71
- end
72
-
73
- it 'accepts nil values in the constructor' do
74
- Date.new(nil).precision.should == DateTimePrecision::NONE
75
- Date.new(2000, nil).precision.should == DateTimePrecision::YEAR
76
- DateTime.new(2000, 1, nil).precision.should == DateTimePrecision::MONTH
77
- Time.mktime(2000, 1, 1, nil, nil).precision.should == DateTimePrecision::DAY
78
- end
79
- end
80
-
81
- context 'Time Zones' do
82
- it 'should retain precision when switching to UTC' do
83
- Time.mktime(2000).utc.precision.should == DateTimePrecision::YEAR
84
- Time.mktime(2000).gmtime.precision.should == DateTimePrecision::YEAR
85
- end
86
-
87
- it 'should track precision when creating a time in UTC' do
88
- Time.utc(1945, 10).precision.should == DateTimePrecision::MONTH
89
- Time.gm(1945, 10).precision.should == DateTimePrecision::MONTH
90
- end
91
-
92
- it 'should track precision when creating a time in the local timezone' do
93
- Time.local(2004, 5, 6).precision.should == DateTimePrecision::DAY
94
- end
95
- end
96
-
97
- context 'Parsing' do
98
- it 'should have second/frac precision when parsing a timestamp' do
99
- t = Time::parse('2000-2-3 00:00:00 UTC')
100
- t.precision.should == DateTimePrecision::SEC
101
- t.year.should == 2000
102
- t.month.should == 2
103
- t.day.should == 3
104
- end
105
-
106
- it 'should have minute precision when seconds are not in the timestamp' do
107
- dt = DateTime::parse('2000-1-1 00:00 EST') # => Sat, 01 Jan 2000 00:00:00 -0500
108
- dt.precision.should == DateTimePrecision::MIN
109
- dt.year.should == 2000
110
- dt.day.should == 1
111
- end
112
-
113
- it 'should have day precision wehn parsing into a Date object' do
114
- d = Date::parse('2000-1-1 00:00:00 EST') # => Sat, 01 Jan 2000
115
- d.precision.should == DateTimePrecision::DAY
116
- end
117
-
118
- it 'should have month precision when day is not in the parsed string' do
119
- t = Time::parse('January 2000 UTC').utc # => Sat Jan 01 00:00:00 -0800 2000
120
- t.precision.should == DateTimePrecision::MONTH
121
- t.year.should == 2000
122
- t.month.should == 1
123
- end
124
- end
125
-
126
- context 'strptime' do
127
- it 'should have day precision when day is specified in date string' do
128
- d = Date.strptime('02/09/1968', '%m/%d/%Y')
129
- d.precision.should == DateTimePrecision::DAY
130
- end
131
5
 
132
- it 'should have minute precision when extracting down to the minute' do
133
- dt = DateTime.strptime('2011-02-03 15:14:52','%Y-%m-%d %H:%M')
134
- dt.precision.should == DateTimePrecision::MIN
135
- end
136
-
137
- it 'should have second precision when extracting down to the second' do
138
- t = DateTime.strptime('2011-02-03 15:14:52','%Y-%m-%d %H:%M:%S')
139
- t.precision.should == DateTimePrecision::SEC
140
- end
141
- end
142
-
143
- context 'Addition' do
144
- it 'should default to max precision when adding or subtracting' do
145
- d = Date.new
146
- d.precision.should == DateTimePrecision::NONE
147
- d += 3
148
- d.precision.should == Date::MAX_PRECISION
149
- d -= 2
150
- d.precision.should == Date::MAX_PRECISION
151
-
152
- dt = DateTime.new
153
- dt.precision.should == DateTimePrecision::NONE
154
- dt += 3
155
- dt.precision.should == DateTime::MAX_PRECISION
156
- dt -= 2
157
- dt.precision.should == DateTime::MAX_PRECISION
158
-
159
- t = Time::parse('January 2000 UTC').utc
160
- t.precision.should == DateTimePrecision::MONTH
161
- t += 10
162
- t.precision.should == Time::MAX_PRECISION
163
- t -= 8
164
- t.precision.should == Time::MAX_PRECISION
165
- end
166
- end
167
-
168
- context 'Partial Matching' do
169
- it 'should match when differing only in day precision' do
170
- d1 = Date.new(2001,3,2)
171
- d2 = Date.new(2001,3)
172
- d1.partial_match?(d2).should be_true
173
- d2.partial_match?(d1).should be_true
174
- end
175
- end
176
-
177
- context 'Formats' do
6
+ context 'when formatting as' do
178
7
  let(:date) { Date.new(1989, 3, 11) }
179
8
  let(:datetime) { DateTime.new(1989, 3, 11, 8, 30, 15) }
180
9
  let(:time) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: date_time_precision
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Butler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-06 00:00:00.000000000 Z
11
+ date: 2013-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -119,6 +119,7 @@ files:
119
119
  - lib/date_time_precision/format/iso8601.rb
120
120
  - lib/date_time_precision/format/json.rb
121
121
  - lib/date_time_precision/format/nil.rb
122
+ - lib/date_time_precision/format/string.rb
122
123
  - lib/date_time_precision/lib.rb
123
124
  - lib/date_time_precision/patch.rb
124
125
  - lib/date_time_precision/patch/1.8.7/date.rb
@@ -131,9 +132,10 @@ files:
131
132
  - lib/date_time_precision/patch/1.9.3/date_time.rb
132
133
  - lib/date_time_precision/patch/1.9.3/time.rb
133
134
  - lib/date_time_precision/version.rb
134
- - spec/date_time_precision/active_support_spec.rb
135
- - spec/date_time_precision/compatibility_spec.rb
136
- - spec/date_time_precision/date_time_precision_spec.rb
135
+ - spec/active_support_spec.rb
136
+ - spec/compatibility_spec.rb
137
+ - spec/date_time_precision_spec.rb
138
+ - spec/format_spec.rb
137
139
  - spec/spec_helper.rb
138
140
  homepage: http://github.com/Spokeo/date_time_precision
139
141
  licenses: []
@@ -159,7 +161,8 @@ signing_key:
159
161
  specification_version: 4
160
162
  summary: Patches Date, Time, and DateTime ruby classes to keep track of precision
161
163
  test_files:
162
- - spec/date_time_precision/active_support_spec.rb
163
- - spec/date_time_precision/compatibility_spec.rb
164
- - spec/date_time_precision/date_time_precision_spec.rb
164
+ - spec/active_support_spec.rb
165
+ - spec/compatibility_spec.rb
166
+ - spec/date_time_precision_spec.rb
167
+ - spec/format_spec.rb
165
168
  - spec/spec_helper.rb
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
- require 'json'
3
- require 'securerandom'
4
- require 'active_support'
5
-
6
- require 'date_time_precision'
7
-
8
- require 'date_time_precision/format/json'
9
-
10
- describe DateTimePrecision, 'Conversions' do
11
- context 'when converting from Date to Time or DateTime' do
12
- it 'should maintain precision' do
13
- d = Date.new(2005, 1)
14
- d.precision.should == DateTimePrecision::MONTH
15
- d.to_date.precision.should == DateTimePrecision::MONTH
16
- d.to_datetime.precision.should == DateTimePrecision::MONTH
17
- end
18
- end
19
-
20
- it 'will lose precision when converting from DateTime or Time to Date' do
21
- t = Time::parse('2000-1-1 00:00:00 EST') # => Fri Dec 31 21:00:00 -0800 1999
22
- t.precision.should == DateTimePrecision::SEC
23
- t.to_datetime.precision.should == DateTime::MAX_PRECISION
24
- t.to_date.precision.should == DateTimePrecision::DAY
25
- end
26
-
27
- it 'will convert a date to a hash' do
28
- date = Date.new(1999, 10)
29
- date.as_json.should == date.to_h
30
- end
31
-
32
- it 'will retain precision when converting to and from JSON' do
33
- date = Date.new(1999, 10)
34
- date.precision.should == DateTimePrecision::MONTH
35
- json = ActiveSupport::JSON.encode(date)
36
-
37
- date_from_json = ActiveSupport::JSON.decode(json).to_date
38
- date_from_json.precision.should == date.precision
39
-
40
- end
41
- end