home_run 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,4 +1,8 @@
1
- === 1.0.5 (2012-12-22)
1
+ === 1.0.6 (2012-02-27)
2
+
3
+ * Merge DateTime#<=> into Date#<=> to work around ActiveSupport bug (#45, #41, #38, #36)
4
+
5
+ === 1.0.5 (2011-12-22)
2
6
 
3
7
  * Handle DateTime.jd with a single float argument (jeremyevans)
4
8
 
@@ -2906,30 +2906,69 @@ static VALUE rhrd_op_relationship(VALUE self, VALUE other) {
2906
2906
  * For an unrecognized type, return +nil+.
2907
2907
  */
2908
2908
  static VALUE rhrd_op_spaceship(VALUE self, VALUE other) {
2909
- rhrd_t *d, *o;
2910
- rhrdt_t *odt;
2911
- long diff;
2912
- Data_Get_Struct(self, rhrd_t, d);
2909
+ if (RTEST(rb_obj_is_kind_of(self, rhrdt_class))) {
2910
+ rhrdt_t *dt, *odt;
2911
+ rhrd_t *od;
2912
+ double diff;
2913
+ int res;
2914
+
2915
+ if (RTEST(rb_obj_is_kind_of(other, rhrdt_class))) {
2916
+ self = rhrdt__new_offset(self, 0.0);
2917
+ other = rhrdt__new_offset(other, 0.0);
2918
+ Data_Get_Struct(self, rhrdt_t, dt);
2919
+ Data_Get_Struct(other, rhrdt_t, odt);
2920
+ return LONG2NUM(rhrdt__spaceship(dt, odt));
2921
+ }
2922
+ if (RTEST(rb_obj_is_kind_of(other, rhrd_class))) {
2923
+ Data_Get_Struct(self, rhrdt_t, dt);
2924
+ Data_Get_Struct(other, rhrd_t, od);
2925
+ RHRDT_FILL_JD(dt)
2926
+ RHR_FILL_JD(od)
2927
+ RHR_SPACE_SHIP(res, dt->jd, od->jd)
2928
+ if (res == 0) {
2929
+ RHRDT_FILL_NANOS(dt)
2930
+ RHR_SPACE_SHIP(res, dt->nanos, 0)
2931
+ }
2932
+ return LONG2NUM(res);
2933
+ }
2934
+ if (RTEST((rb_obj_is_kind_of(other, rb_cNumeric)))) {
2935
+ Data_Get_Struct(self, rhrdt_t, dt);
2936
+ diff = NUM2DBL(other);
2937
+ RHRDT_FILL_JD(dt)
2938
+ RHR_SPACE_SHIP(res, dt->jd, (long)diff)
2939
+ if (res == 0) {
2940
+ RHRDT_FILL_NANOS(dt)
2941
+ RHR_SPACE_SHIP(res, dt->nanos, llround((diff - floor(diff)) * RHR_NANOS_PER_DAY))
2942
+ }
2943
+ return LONG2NUM(res);
2944
+ }
2945
+ } else {
2946
+ rhrd_t *d, *o;
2947
+ rhrdt_t *odt;
2948
+ long diff;
2949
+ Data_Get_Struct(self, rhrd_t, d);
2913
2950
 
2914
- if (RTEST(rb_obj_is_kind_of(other, rhrdt_class))) {
2915
- Data_Get_Struct(other, rhrdt_t, odt);
2916
- RHR_FILL_JD(d)
2917
- RHRDT_FILL_JD(odt)
2918
- RHR_SPACE_SHIP(diff, d->jd, odt->jd)
2919
- if (diff == 0) {
2920
- RHRDT_FILL_NANOS(odt)
2921
- RHR_SPACE_SHIP(diff, 0, odt->nanos)
2951
+ if (RTEST(rb_obj_is_kind_of(other, rhrdt_class))) {
2952
+ Data_Get_Struct(other, rhrdt_t, odt);
2953
+ RHR_FILL_JD(d)
2954
+ RHRDT_FILL_JD(odt)
2955
+ RHR_SPACE_SHIP(diff, d->jd, odt->jd)
2956
+ if (diff == 0) {
2957
+ RHRDT_FILL_NANOS(odt)
2958
+ RHR_SPACE_SHIP(diff, 0, odt->nanos)
2959
+ }
2960
+ return LONG2NUM(diff);
2961
+ } else if (RTEST(rb_obj_is_kind_of(other, rhrd_class))) {
2962
+ Data_Get_Struct(other, rhrd_t, o);
2963
+ return LONG2NUM(rhrd__spaceship(d, o));
2964
+ } else if (RTEST((rb_obj_is_kind_of(other, rb_cNumeric)))) {
2965
+ diff = NUM2LONG(other);
2966
+ RHR_FILL_JD(d)
2967
+ RHR_SPACE_SHIP(diff, d->jd, diff)
2968
+ return LONG2NUM(diff);
2922
2969
  }
2923
- return LONG2NUM(diff);
2924
- } else if (RTEST(rb_obj_is_kind_of(other, rhrd_class))) {
2925
- Data_Get_Struct(other, rhrd_t, o);
2926
- return LONG2NUM(rhrd__spaceship(d, o));
2927
- } else if (RTEST((rb_obj_is_kind_of(other, rb_cNumeric)))) {
2928
- diff = NUM2LONG(other);
2929
- RHR_FILL_JD(d)
2930
- RHR_SPACE_SHIP(diff, d->jd, diff)
2931
- return LONG2NUM(diff);
2932
2970
  }
2971
+
2933
2972
  return Qnil;
2934
2973
  }
2935
2974
 
@@ -181,6 +181,8 @@ VALUE rhrd_s_zone_to_diff(VALUE self, VALUE zone);
181
181
  VALUE rhrd__strftime(rhrdt_t *d, const char * fmt, int fmt_len);
182
182
  long rhrd__ordinal_day(long year, unsigned char month, unsigned char day);
183
183
  VALUE rhrd__ragel_parse(char * p, long len);
184
+ VALUE rhrdt__new_offset(VALUE self, double offset);
185
+ long rhrdt__spaceship(rhrdt_t *dt, rhrdt_t *odt);
184
186
  void Init_datetime(void);
185
187
 
186
188
  #endif /* DATE_EXT_H */
@@ -14,7 +14,6 @@ extern const char * rhrd__abbr_day_names[];
14
14
 
15
15
  static VALUE rhrdt_step(int argc, VALUE *argv, VALUE self);
16
16
  static VALUE rhrdt_to_s(VALUE self);
17
- VALUE rhrdt__new_offset(VALUE self, double offset);
18
17
  void rhrdt__jd_to_civil(rhrdt_t *date);
19
18
  void rhrdt__nanos_to_hms(rhrdt_t *d);
20
19
 
@@ -1908,67 +1907,6 @@ static VALUE rhrdt_op_relationship(VALUE self, VALUE other) {
1908
1907
  return dt->jd == jd ? Qtrue : Qfalse;
1909
1908
  }
1910
1909
 
1911
- /* call-seq:
1912
- * <=>(other) -> -1, 0, 1, or nil
1913
- *
1914
- * If +other+ is a +DateTime+, returns -1 if the absolute date and time of
1915
- * +other+ is before the absolute time of the receiver chronologically,
1916
- * 0 if +other+ is the same absolute date and time as the receiver,
1917
- * or 1 if the absolute date and time of +other+ is before the receiver
1918
- * chronologically. Absolute date and time in this case means after taking
1919
- * account the time zone offset.
1920
- *
1921
- * If +other+ is a +Date+, return 0 if +other+ has the same
1922
- * julian date as the receiver and the receiver has no fractional part,
1923
- * 1 if +other+ has a julian date greater than the receiver's, or
1924
- * -1 if +other+ has a julian date less than the receiver's or
1925
- * a julian date the same as the receiver's and the receiver has a
1926
- * fractional part.
1927
- *
1928
- * If +other+ is a +Numeric+, convert it to an +Float+ and compare
1929
- * it to the receiver's julian date plus the fractional part.
1930
- *
1931
- * For an unrecognized type, return +nil+.
1932
- */
1933
- static VALUE rhrdt_op_spaceship(VALUE self, VALUE other) {
1934
- rhrdt_t *dt, *odt;
1935
- rhrd_t *od;
1936
- double diff;
1937
- int res;
1938
-
1939
- if (RTEST(rb_obj_is_kind_of(other, rhrdt_class))) {
1940
- self = rhrdt__new_offset(self, 0.0);
1941
- other = rhrdt__new_offset(other, 0.0);
1942
- Data_Get_Struct(self, rhrdt_t, dt);
1943
- Data_Get_Struct(other, rhrdt_t, odt);
1944
- return LONG2NUM(rhrdt__spaceship(dt, odt));
1945
- }
1946
- if (RTEST(rb_obj_is_kind_of(other, rhrd_class))) {
1947
- Data_Get_Struct(self, rhrdt_t, dt);
1948
- Data_Get_Struct(other, rhrd_t, od);
1949
- RHRDT_FILL_JD(dt)
1950
- RHR_FILL_JD(od)
1951
- RHR_SPACE_SHIP(res, dt->jd, od->jd)
1952
- if (res == 0) {
1953
- RHRDT_FILL_NANOS(dt)
1954
- RHR_SPACE_SHIP(res, dt->nanos, 0)
1955
- }
1956
- return LONG2NUM(res);
1957
- }
1958
- if (RTEST((rb_obj_is_kind_of(other, rb_cNumeric)))) {
1959
- Data_Get_Struct(self, rhrdt_t, dt);
1960
- diff = NUM2DBL(other);
1961
- RHRDT_FILL_JD(dt)
1962
- RHR_SPACE_SHIP(res, dt->jd, (long)diff)
1963
- if (res == 0) {
1964
- RHRDT_FILL_NANOS(dt)
1965
- RHR_SPACE_SHIP(res, dt->nanos, llround((diff - floor(diff)) * RHR_NANOS_PER_DAY))
1966
- }
1967
- return LONG2NUM(res);
1968
- }
1969
- return Qnil;
1970
- }
1971
-
1972
1910
  #ifdef RUBY19
1973
1911
 
1974
1912
  /* Ruby 1.9 helper methods */
@@ -2858,7 +2796,6 @@ void Init_datetime(void) {
2858
2796
  rb_define_method(rhrdt_class, "+", rhrdt_op_plus, 1);
2859
2797
  rb_define_method(rhrdt_class, "-", rhrdt_op_minus, 1);
2860
2798
  rb_define_method(rhrdt_class, "===", rhrdt_op_relationship, 1);
2861
- rb_define_method(rhrdt_class, "<=>", rhrdt_op_spaceship, 1);
2862
2799
 
2863
2800
  rb_define_alias(rhrdt_class, "ctime", "asctime");
2864
2801
  rb_define_alias(rhrdt_class, "mday", "day");
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: home_run
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-21 00:00:00.000000000 Z
12
+ date: 2012-02-27 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'home_run is an implementation of ruby''s Date/DateTime classes in
15
15
  C,