home_run 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ === 1.0.4 (2011-09-02)
2
+
3
+ * Handle time zone offsets given as strings in the constructors (jeremyevans) (#37)
4
+
1
5
  === 1.0.3 (2011-07-05)
2
6
 
3
7
  * Work around segfault in rb_ary_push during extension initialization (jeremyevans)
data/README.rdoc CHANGED
@@ -222,6 +222,8 @@ bugs, so please report any other differences you find.
222
222
  Some other libraries are known to be incompatible with this
223
223
  extension due to the above differences:
224
224
 
225
+ * ActiveSupport 3.1 - DateTime#<=> broken because it relies on
226
+ Date#<=> working for DateTimes.
225
227
  * Date::Performance - Date#<=> assumes @ajd instance variable
226
228
  (unnecessary anyway, as home_run is faster)
227
229
  * Runt - assumes @ajd instance variable
@@ -512,6 +512,15 @@ VALUE rhrdt__new_offset(VALUE self, double offset) {
512
512
  return rhrdt__from_jd_nanos(rb_obj_class(self), dt->jd, dt->nanos - (dt->offset - offset_min)*RHR_NANOS_PER_MINUTE, (short)offset_min);
513
513
  }
514
514
 
515
+ /* Handle both string timezones and numeric offsets in
516
+ * constructors and new_offset */
517
+ double rhrdt__constructor_offset(VALUE self, VALUE offset) {
518
+ if (TYPE(offset) == T_STRING) {
519
+ return NUM2LONG(rhrd_s_zone_to_diff(self, offset))/RHR_SECONDS_PER_DAYD;
520
+ }
521
+ return NUM2DBL(offset);
522
+ }
523
+
515
524
  /* Class methods */
516
525
 
517
526
  /* call-seq:
@@ -618,7 +627,7 @@ static VALUE rhrdt_s_civil(int argc, VALUE *argv, VALUE klass) {
618
627
  return rdt;
619
628
  case 8:
620
629
  case 7:
621
- offset = NUM2DBL(argv[6]);
630
+ offset = rhrdt__constructor_offset(klass, argv[6]);
622
631
  case 6:
623
632
  second = NUM2LONG(argv[5]);
624
633
  case 5:
@@ -672,7 +681,7 @@ static VALUE rhrdt_s_commercial(int argc, VALUE *argv, VALUE klass) {
672
681
  switch(argc) {
673
682
  case 8:
674
683
  case 7:
675
- offset = NUM2DBL(argv[6]);
684
+ offset = rhrdt__constructor_offset(klass, argv[6]);
676
685
  case 6:
677
686
  second = NUM2LONG(argv[5]);
678
687
  case 5:
@@ -727,7 +736,7 @@ static VALUE rhrdt_s_jd(int argc, VALUE *argv, VALUE klass) {
727
736
  return rdt;
728
737
  case 6:
729
738
  case 5:
730
- offset = NUM2DBL(argv[4]);
739
+ offset = rhrdt__constructor_offset(klass, argv[4]);
731
740
  case 4:
732
741
  second = NUM2LONG(argv[3]);
733
742
  case 3:
@@ -842,7 +851,7 @@ static VALUE rhrdt_s_ordinal(int argc, VALUE *argv, VALUE klass) {
842
851
  switch(argc) {
843
852
  case 7:
844
853
  case 6:
845
- offset = NUM2DBL(argv[5]);
854
+ offset = rhrdt__constructor_offset(klass, argv[5]);
846
855
  case 5:
847
856
  second = NUM2LONG(argv[4]);
848
857
  case 4:
@@ -1378,11 +1387,7 @@ static VALUE rhrdt_new_offset(int argc, VALUE *argv, VALUE self) {
1378
1387
  offset = 0;
1379
1388
  break;
1380
1389
  case 1:
1381
- if (RTEST(rb_obj_is_kind_of(argv[0], rb_cString))) {
1382
- offset = NUM2LONG(rhrd_s_zone_to_diff(self, argv[0]))/RHR_SECONDS_PER_DAYD;
1383
- } else {
1384
- offset = NUM2DBL(argv[0]);
1385
- }
1390
+ offset= rhrdt__constructor_offset(rb_obj_class(self), argv[0]);
1386
1391
  break;
1387
1392
  default:
1388
1393
  rb_raise(rb_eArgError, "wrong number of arguments: %i for 1", argc);
@@ -149,4 +149,18 @@ describe "DateTime constructors" do
149
149
  c.new!.should be_kind_of(c)
150
150
  c.new.should be_kind_of(c)
151
151
  end
152
+
153
+ it "should handle strings for the offset" do
154
+ DateTime.jd(2008, 0, 0, 0, 'Z').should == DateTime.jd(2008, 0, 0, 0, 0)
155
+ DateTime.civil(2008, 1, 1, 0, 0, 0, 'Z').should == DateTime.civil(2008, 1, 1, 0, 0, 0, 0)
156
+ DateTime.commercial(2008, 1, 1, 0, 0, 0, 'Z').should == DateTime.commercial(2008, 1, 1, 0, 0, 0, 0)
157
+ DateTime.ordinal(2008, 1, 0, 0, 0, 'Z').should == DateTime.ordinal(2008, 1, 0, 0, 0, 0)
158
+ DateTime.new(2008, 1, 1, 0, 0, 0, 'Z').should == DateTime.new(2008, 1, 1, 0, 0, 0, 0)
159
+
160
+ DateTime.jd(2008, 0, 0, 0, '+1200').should == DateTime.jd(2008, 0, 0, 0, 0.5)
161
+ DateTime.civil(2008, 1, 1, 0, 0, 0, '+1200').should == DateTime.civil(2008, 1, 1, 0, 0, 0, 0.5)
162
+ DateTime.commercial(2008, 1, 1, 0, 0, 0, '+1200').should == DateTime.commercial(2008, 1, 1, 0, 0, 0, 0.5)
163
+ DateTime.ordinal(2008, 1, 0, 0, 0, '+1200').should == DateTime.ordinal(2008, 1, 0, 0, 0, 0.5)
164
+ DateTime.new(2008, 1, 1, 0, 0, 0, '+1200').should == DateTime.new(2008, 1, 1, 0, 0, 0, 0.5)
165
+ end
152
166
  end
@@ -5,6 +5,10 @@ describe "DateTime conversions" do
5
5
  DateTime.new(2008, 1, 1).new_offset(0.5).to_s.should == DateTime.new(2008, 1, 1, 12, 0, 0, 0.5).to_s
6
6
  end
7
7
 
8
+ it "#new_offset should work with strings" do
9
+ DateTime.new(2008, 1, 1).new_offset('+12:00').to_s.should == DateTime.new(2008, 1, 1, 12, 0, 0, 0.5).to_s
10
+ end
11
+
8
12
  it "#new_offset result should be equal to the receiver" do
9
13
  DateTime.new(2008, 1, 1).new_offset(0.5).should == DateTime.new(2008, 1, 1)
10
14
  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: 17
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 3
10
- version: 1.0.3
9
+ - 4
10
+ version: 1.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jeremy Evans
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-05 00:00:00 -07:00
18
+ date: 2011-09-02 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies: []
21
21