home_run 1.0.6-x86-mswin32-60 → 1.0.7-x86-mswin32-60
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -1
- data/ext/date_ext/datetime.c +39 -4
- data/lib/1.8/date_ext.so +0 -0
- data/lib/1.9/date_ext.so +0 -0
- data/spec/datetime/constructor_spec.rb +8 -0
- metadata +6 -8
data/CHANGELOG
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
+
=== 1.0.7 (2012-08-08)
|
2
|
+
|
3
|
+
* Make DateTime constructors handle fractional seconds in seconds argument (jeremyevans)
|
4
|
+
|
1
5
|
=== 1.0.6 (2012-02-27)
|
2
6
|
|
3
|
-
* Merge DateTime#<=> into Date#<=> to work around ActiveSupport bug (#45, #41, #38, #36)
|
7
|
+
* Merge DateTime#<=> into Date#<=> to work around ActiveSupport bug (jeremyevans) (#45, #41, #38, #36)
|
4
8
|
|
5
9
|
=== 1.0.5 (2011-12-22)
|
6
10
|
|
data/ext/date_ext/datetime.c
CHANGED
@@ -154,6 +154,33 @@ void rhrdt__set_time(rhrdt_t *dt, long h, long m, long s, double offset) {
|
|
154
154
|
dt->flags |= RHR_HAVE_HMS;
|
155
155
|
}
|
156
156
|
|
157
|
+
/* Call rhrdt__set_time without the nanos. If there are any nanos, convert the hms information
|
158
|
+
* to nanos and add the given nanos. Note that the given nanos should be less than or equal to
|
159
|
+
* 1,000,000,000. */
|
160
|
+
void rhrdt__set_time_nanos(rhrdt_t *dt, long h, long m, long s, long long nanos, double offset) {
|
161
|
+
rhrdt__set_time(dt, h, m, s, offset);
|
162
|
+
if (nanos) {
|
163
|
+
rhrdt__hms_to_nanos(dt);
|
164
|
+
dt->nanos += nanos;
|
165
|
+
if (nanos == 1000000000) {
|
166
|
+
dt->second++;
|
167
|
+
}
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
/* Return the number of nano seconds in the given VALUE. Should
|
172
|
+
* return 0 unless rsecond has a fractional part, and should never
|
173
|
+
* be more than 1,000,000,000. */
|
174
|
+
long long rhrdt__nanos_from_second(VALUE rsecond, long second) {
|
175
|
+
double sec_fraction;
|
176
|
+
|
177
|
+
if ((sec_fraction = (NUM2DBL(rsecond) - second)) > 0) {
|
178
|
+
return llround(sec_fraction * 1000000000);
|
179
|
+
}
|
180
|
+
|
181
|
+
return 0;
|
182
|
+
}
|
183
|
+
|
157
184
|
/* Same as rhrd__civil_to_jd for rhrdt_t. */
|
158
185
|
void rhrdt__civil_to_jd(rhrdt_t *d) {
|
159
186
|
d->jd = rhrd__ymd_to_jd(d->year, d->month, d->day);
|
@@ -617,6 +644,7 @@ static VALUE rhrdt_s_civil(int argc, VALUE *argv, VALUE klass) {
|
|
617
644
|
long hour = 0;
|
618
645
|
long minute = 0;
|
619
646
|
long second = 0;
|
647
|
+
long long nanos = 0;
|
620
648
|
double offset = 0.0;
|
621
649
|
VALUE rdt = Data_Make_Struct(klass, rhrdt_t, NULL, -1, dt);
|
622
650
|
|
@@ -629,6 +657,7 @@ static VALUE rhrdt_s_civil(int argc, VALUE *argv, VALUE klass) {
|
|
629
657
|
offset = rhrdt__constructor_offset(klass, argv[6]);
|
630
658
|
case 6:
|
631
659
|
second = NUM2LONG(argv[5]);
|
660
|
+
nanos = rhrdt__nanos_from_second(argv[5], second);
|
632
661
|
case 5:
|
633
662
|
minute = NUM2LONG(argv[4]);
|
634
663
|
case 4:
|
@@ -648,7 +677,7 @@ static VALUE rhrdt_s_civil(int argc, VALUE *argv, VALUE klass) {
|
|
648
677
|
if (!rhrdt__valid_civil(dt, year, month, day)) {
|
649
678
|
rb_raise(rb_eArgError, "invalid date (year: %li, month: %li, day: %li)", year, month, day);
|
650
679
|
}
|
651
|
-
|
680
|
+
rhrdt__set_time_nanos(dt, hour, minute, second, nanos, offset);
|
652
681
|
return rdt;
|
653
682
|
}
|
654
683
|
|
@@ -674,6 +703,7 @@ static VALUE rhrdt_s_commercial(int argc, VALUE *argv, VALUE klass) {
|
|
674
703
|
long hour = 0;
|
675
704
|
long minute = 0;
|
676
705
|
long second = 0;
|
706
|
+
long long nanos = 0;
|
677
707
|
double offset = 0.0;
|
678
708
|
VALUE rdt = Data_Make_Struct(klass, rhrdt_t, NULL, -1, dt);
|
679
709
|
|
@@ -683,6 +713,7 @@ static VALUE rhrdt_s_commercial(int argc, VALUE *argv, VALUE klass) {
|
|
683
713
|
offset = rhrdt__constructor_offset(klass, argv[6]);
|
684
714
|
case 6:
|
685
715
|
second = NUM2LONG(argv[5]);
|
716
|
+
nanos = rhrdt__nanos_from_second(argv[5], second);
|
686
717
|
case 5:
|
687
718
|
minute = NUM2LONG(argv[4]);
|
688
719
|
case 4:
|
@@ -709,7 +740,7 @@ static VALUE rhrdt_s_commercial(int argc, VALUE *argv, VALUE klass) {
|
|
709
740
|
if(!rhrdt__valid_commercial(dt, cwyear, cweek, cwday)) {
|
710
741
|
rb_raise(rb_eArgError, "invalid date (cwyear: %li, cweek: %li, cwday: %li)", cwyear, cweek, cwday);
|
711
742
|
}
|
712
|
-
|
743
|
+
rhrdt__set_time_nanos(dt, hour, minute, second, nanos, offset);
|
713
744
|
return rdt;
|
714
745
|
}
|
715
746
|
|
@@ -726,6 +757,7 @@ static VALUE rhrdt_s_jd(int argc, VALUE *argv, VALUE klass) {
|
|
726
757
|
long hour = 0;
|
727
758
|
long minute = 0;
|
728
759
|
long second = 0;
|
760
|
+
long long nanos = 0;
|
729
761
|
double offset = 0.0;
|
730
762
|
VALUE rdt = Data_Make_Struct(klass, rhrdt_t, NULL, -1, dt);
|
731
763
|
|
@@ -738,6 +770,7 @@ static VALUE rhrdt_s_jd(int argc, VALUE *argv, VALUE klass) {
|
|
738
770
|
offset = rhrdt__constructor_offset(klass, argv[4]);
|
739
771
|
case 4:
|
740
772
|
second = NUM2LONG(argv[3]);
|
773
|
+
nanos = rhrdt__nanos_from_second(argv[3], second);
|
741
774
|
case 3:
|
742
775
|
minute = NUM2LONG(argv[2]);
|
743
776
|
case 2:
|
@@ -755,7 +788,7 @@ static VALUE rhrdt_s_jd(int argc, VALUE *argv, VALUE klass) {
|
|
755
788
|
|
756
789
|
RHR_CHECK_JD(dt)
|
757
790
|
dt->flags = RHR_HAVE_JD;
|
758
|
-
|
791
|
+
rhrdt__set_time_nanos(dt, hour, minute, second, nanos, offset);
|
759
792
|
if (TYPE(argv[0]) == T_FLOAT) {
|
760
793
|
return rhrdt__add_days(rdt, NUM2DBL(argv[0]) - NUM2LONG(argv[0]));
|
761
794
|
} else {
|
@@ -850,6 +883,7 @@ static VALUE rhrdt_s_ordinal(int argc, VALUE *argv, VALUE klass) {
|
|
850
883
|
long hour = 0;
|
851
884
|
long minute = 0;
|
852
885
|
long second = 0;
|
886
|
+
long long nanos = 0;
|
853
887
|
double offset = 0.0;
|
854
888
|
rhrdt_t *dt;
|
855
889
|
VALUE rdt = Data_Make_Struct(klass, rhrdt_t, NULL, -1, dt);
|
@@ -860,6 +894,7 @@ static VALUE rhrdt_s_ordinal(int argc, VALUE *argv, VALUE klass) {
|
|
860
894
|
offset = rhrdt__constructor_offset(klass, argv[5]);
|
861
895
|
case 5:
|
862
896
|
second = NUM2LONG(argv[4]);
|
897
|
+
nanos = rhrdt__nanos_from_second(argv[4], second);
|
863
898
|
case 4:
|
864
899
|
minute = NUM2LONG(argv[3]);
|
865
900
|
case 3:
|
@@ -881,7 +916,7 @@ static VALUE rhrdt_s_ordinal(int argc, VALUE *argv, VALUE klass) {
|
|
881
916
|
RHR_CHECK_JD(dt)
|
882
917
|
rb_raise(rb_eArgError, "invalid date (year: %li, yday: %li)", year, day);
|
883
918
|
}
|
884
|
-
|
919
|
+
rhrdt__set_time_nanos(dt, hour, minute, second, nanos, offset);
|
885
920
|
return rdt;
|
886
921
|
}
|
887
922
|
|
data/lib/1.8/date_ext.so
CHANGED
Binary file
|
data/lib/1.9/date_ext.so
CHANGED
Binary file
|
@@ -176,4 +176,12 @@ describe "DateTime constructors" do
|
|
176
176
|
DateTime.ordinal(2008, 1, 0, 0, 0, '+1200').should == DateTime.ordinal(2008, 1, 0, 0, 0, 0.5)
|
177
177
|
DateTime.new(2008, 1, 1, 0, 0, 0, '+1200').should == DateTime.new(2008, 1, 1, 0, 0, 0, 0.5)
|
178
178
|
end
|
179
|
+
|
180
|
+
it "should handle fractional seconds in seconds" do
|
181
|
+
DateTime.jd(2008, 0, 0, 1.5).should == DateTime.jd(2008, 0, 0, 1) + (0.5/86400)
|
182
|
+
DateTime.civil(2008, 1, 1, 0, 0, 1.5).should == DateTime.civil(2008, 1, 1, 0, 0, 1) + (0.5/86400)
|
183
|
+
DateTime.commercial(2008, 1, 1, 0, 0, 1.5).should == DateTime.commercial(2008, 1, 1, 0, 0, 1) + (0.5/86400)
|
184
|
+
DateTime.ordinal(2008, 1, 0, 0, 1.5).should == DateTime.ordinal(2008, 1, 0, 0, 1) + (0.5/86400)
|
185
|
+
DateTime.new(2008, 1, 1, 0, 0, 1.5).should == DateTime.new(2008, 1, 1, 0, 0, 1) + (0.5/86400)
|
186
|
+
end
|
179
187
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: home_run
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 7
|
10
|
+
version: 1.0.7
|
11
11
|
platform: x86-mswin32-60
|
12
12
|
authors:
|
13
13
|
- Jeremy Evans
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
18
|
+
date: 2012-04-07 00:00:00 Z
|
20
19
|
dependencies: []
|
21
20
|
|
22
21
|
description: |
|
@@ -122,7 +121,6 @@ files:
|
|
122
121
|
- bench/garbage_bench.rb
|
123
122
|
- lib/1.8/date_ext.so
|
124
123
|
- lib/1.9/date_ext.so
|
125
|
-
has_rdoc: true
|
126
124
|
homepage: http://github.com/jeremyevans/home_run
|
127
125
|
licenses: []
|
128
126
|
|
@@ -160,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
158
|
requirements: []
|
161
159
|
|
162
160
|
rubyforge_project:
|
163
|
-
rubygems_version: 1.
|
161
|
+
rubygems_version: 1.8.21
|
164
162
|
signing_key:
|
165
163
|
specification_version: 3
|
166
164
|
summary: Fast Date/DateTime classes for ruby
|