From 4246441a35f5ca5d9c816fecb805152520a45479 Mon Sep 17 00:00:00 2001 From: Burdette Lamar Date: Tue, 12 Jul 2022 08:57:20 -0500 Subject: [PATCH] [DOC] Enhanced RDoc (#63) Treats: #next #<< #>> #next_month #prev_month #next_year #prev_year #step #upto #downto --- ext/date/date_core.c | 142 ++++++++++++++++++++++++------------------- 1 file changed, 78 insertions(+), 64 deletions(-) diff --git a/ext/date/date_core.c b/ext/date/date_core.c index c365dad..a1dc938 100644 --- a/ext/date/date_core.c +++ b/ext/date/date_core.c @@ -6340,10 +6340,15 @@ d_lite_prev_day(int argc, VALUE *argv, VALUE self) /* * call-seq: - * d.succ -> date - * d.next -> date + * d.next -> new_date * - * Returns a date object denoting the following day. + * Returns a new \Date object representing the following day: + * + * d = Date.today + * d.to_s # => "2022-07-11" + * d.next.to_s # => "2022-07-12" + * + * Date#succ is an alias for Date#next. */ static VALUE d_lite_next(VALUE self) @@ -6353,26 +6358,30 @@ d_lite_next(VALUE self) /* * call-seq: - * d >> n -> date + * d >> n -> new_date * - * Returns a date object pointing +n+ months after self. - * The argument +n+ should be a numeric value. + * Returns a new \Date object representing the date + * +n+ months later; +n+ should be a numeric: * - * Date.new(2001,2,3) >> 1 #=> # - * Date.new(2001,2,3) >> -2 #=> # + * (Date.new(2001, 2, 3) >> 1).to_s # => "2001-03-03" + * (Date.new(2001, 2, 3) >> -2).to_s # => "2000-12-03" * - * When the same day does not exist for the corresponding month, - * the last day of the month is used instead: + * When the same day does not exist for the new month, + * the last day of that month is used instead: * - * Date.new(2001,1,28) >> 1 #=> # - * Date.new(2001,1,31) >> 1 #=> # + * (Date.new(2001, 1, 31) >> 1).to_s # => "2001-02-28" + * (Date.new(2001, 1, 31) >> -4).to_s # => "2000-09-30" * - * This also results in the following, possibly unexpected, behavior: + * This results in the following, possibly unexpected, behaviors: * - * Date.new(2001,1,31) >> 2 #=> # - * Date.new(2001,1,31) >> 1 >> 1 #=> # + * d0 = Date.new(2001, 1, 31) + * d1 = d0 >> 1 # => # + * d2 = d1 >> 1 # => # + * + * d0 = Date.new(2001, 1, 31) + * d1 = d0 >> 1 # => # + * d2 = d1 >> -1 # => # * - * Date.new(2001,1,31) >> 1 >> -1 #=> # */ static VALUE d_lite_rshift(VALUE self, VALUE other) @@ -6417,24 +6426,28 @@ d_lite_rshift(VALUE self, VALUE other) * call-seq: * d << n -> date * - * Returns a date object pointing +n+ months before self. - * The argument +n+ should be a numeric value. + * Returns a new \Date object representing the date + * +n+ months earlier; +n+ should be a numeric: + * + * (Date.new(2001, 2, 3) << 1).to_s # => "2001-01-03" + * (Date.new(2001, 2, 3) << -2).to_s # => "2001-04-03" * - * Date.new(2001,2,3) << 1 #=> # - * Date.new(2001,2,3) << -2 #=> # + * When the same day does not exist for the new month, + * the last day of that month is used instead: * - * When the same day does not exist for the corresponding month, - * the last day of the month is used instead: + * (Date.new(2001, 3, 31) << 1).to_s # => "2001-02-28" + * (Date.new(2001, 3, 31) << -6).to_s # => "2001-09-30" * - * Date.new(2001,3,28) << 1 #=> # - * Date.new(2001,3,31) << 1 #=> # + * This results in the following, possibly unexpected, behaviors: * - * This also results in the following, possibly unexpected, behavior: + * d0 = Date.new(2001, 3, 31) + * d0 << 2 # => # + * d0 << 1 << 1 # => # * - * Date.new(2001,3,31) << 2 #=> # - * Date.new(2001,3,31) << 1 << 1 #=> # + * d0 = Date.new(2001, 3, 31) + * d1 = d0 << 1 # => # + * d2 = d1 << -1 # => # * - * Date.new(2001,3,31) << 1 << -1 #=> # */ static VALUE d_lite_lshift(VALUE self, VALUE other) @@ -6445,11 +6458,9 @@ d_lite_lshift(VALUE self, VALUE other) /* * call-seq: - * d.next_month([n=1]) -> date + * next_month(n = 1) -> new_date * - * This method is equivalent to d >> n. - * - * See Date#>> for examples. + * Equivalent to #>> with argument +n+. */ static VALUE d_lite_next_month(int argc, VALUE *argv, VALUE self) @@ -6464,11 +6475,9 @@ d_lite_next_month(int argc, VALUE *argv, VALUE self) /* * call-seq: - * d.prev_month([n=1]) -> date - * - * This method is equivalent to d << n. + * prev_month(n = 1) -> new_date * - * See Date#<< for examples. + * Equivalent to #<< with argument +n+. */ static VALUE d_lite_prev_month(int argc, VALUE *argv, VALUE self) @@ -6483,15 +6492,9 @@ d_lite_prev_month(int argc, VALUE *argv, VALUE self) /* * call-seq: - * d.next_year([n=1]) -> date - * - * This method is equivalent to d >> (n * 12). - * - * Date.new(2001,2,3).next_year #=> # - * Date.new(2008,2,29).next_year #=> # - * Date.new(2008,2,29).next_year(4) #=> # + * next_year(n = 1) -> new_date * - * See also Date#>>. + * Equivalent to #>> with argument n * 12. */ static VALUE d_lite_next_year(int argc, VALUE *argv, VALUE self) @@ -6506,15 +6509,9 @@ d_lite_next_year(int argc, VALUE *argv, VALUE self) /* * call-seq: - * d.prev_year([n=1]) -> date + * prev_year(n = 1) -> new_date * - * This method is equivalent to d << (n * 12). - * - * Date.new(2001,2,3).prev_year #=> # - * Date.new(2008,2,29).prev_year #=> # - * Date.new(2008,2,29).prev_year(4) #=> # - * - * See also Date#<<. + * Equivalent to #<< with argument n * 12. */ static VALUE d_lite_prev_year(int argc, VALUE *argv, VALUE self) @@ -6531,14 +6528,33 @@ static VALUE d_lite_cmp(VALUE, VALUE); /* * call-seq: - * d.step(limit[, step=1]) -> enumerator - * d.step(limit[, step=1]){|date| ...} -> self + * step(limit, step = 1){|date| ... } -> self + * + * Calls the block with specified dates; + * returns +self+. + * + * - The first +date+ is +self+. + * - Each successive +date+ is date + step, + * where +step+ is the numeric step size in days. + * - The last date is the last one that is before or equal to +limit+, + * which should be a \Date object. + * + * Example: + * + * limit = Date.new(2001, 12, 31) + * Date.new(2001).step(limit){|date| p date.to_s if date.mday == 31 } + * + * Output: * - * Iterates evaluation of the given block, which takes a date object. - * The limit should be a date object. + * "2001-01-31" + * "2001-03-31" + * "2001-05-31" + * "2001-07-31" + * "2001-08-31" + * "2001-10-31" + * "2001-12-31" * - * Date.new(2001).step(Date.new(2001,-1,-1)).select{|d| d.sunday?}.size - * #=> 52 + * Returns an Enumerator if no block is given. */ static VALUE d_lite_step(int argc, VALUE *argv, VALUE self) @@ -6581,10 +6597,9 @@ d_lite_step(int argc, VALUE *argv, VALUE self) /* * call-seq: - * d.upto(max) -> enumerator - * d.upto(max){|date| ...} -> self + * upto(max){|date| ... } -> self * - * This method is equivalent to step(max, 1){|date| ...}. + * Equivalent to #step with arguments +max+ and +1+. */ static VALUE d_lite_upto(VALUE self, VALUE max) @@ -6603,10 +6618,9 @@ d_lite_upto(VALUE self, VALUE max) /* * call-seq: - * d.downto(min) -> enumerator - * d.downto(min){|date| ...} -> self + * downto(min){|date| ... } -> self * - * This method is equivalent to step(min, -1){|date| ...}. + * Equivalent to #step with arguments +min+ and -1. */ static VALUE d_lite_downto(VALUE self, VALUE min)