date 3.3.1 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/date/date_core.c +147 -0
- data/lib/date.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75e3a4cb744689e80e55cc75831e2b6f13961ed10b2b0867a8a01d2ce33c28fc
|
4
|
+
data.tar.gz: 2391f862cb91c7aed10383225fd6b6c0d8fe37cbd82cac038420ff2e6a6292c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1e7086f78e0951e84ba1a7dc349868d32a74dee4afc8bf5202e5d9d48f275feaa986b7968684b9bfafa027f25b6bee2e3b9fc68f6c6eaf261eeaac5565961fd
|
7
|
+
data.tar.gz: 7e027f42df681fccf94500a543f19ca23a332f322db4d7ee10f533e1ff47d27ff28fb024131e93039d61eaca91f5386f3fc63edd6d2e00d3a25a10ca935dab98
|
data/ext/date/date_core.c
CHANGED
@@ -27,6 +27,10 @@ static VALUE eDateError;
|
|
27
27
|
static VALUE half_days_in_day, day_in_nanoseconds;
|
28
28
|
static double positive_inf, negative_inf;
|
29
29
|
|
30
|
+
// used by deconstruct_keys
|
31
|
+
static VALUE sym_year, sym_month, sym_day, sym_yday, sym_wday;
|
32
|
+
static VALUE sym_hour, sym_min, sym_sec, sym_sec_fraction, sym_zone;
|
33
|
+
|
30
34
|
#define f_boolcast(x) ((x) ? Qtrue : Qfalse)
|
31
35
|
|
32
36
|
#define f_abs(x) rb_funcall(x, rb_intern("abs"), 0)
|
@@ -7432,6 +7436,94 @@ d_lite_jisx0301(VALUE self)
|
|
7432
7436
|
return strftimev(fmt, self, set_tmx);
|
7433
7437
|
}
|
7434
7438
|
|
7439
|
+
static VALUE
|
7440
|
+
deconstruct_keys(VALUE self, VALUE keys, int is_datetime) {
|
7441
|
+
VALUE h = rb_hash_new();
|
7442
|
+
long i;
|
7443
|
+
|
7444
|
+
get_d1(self);
|
7445
|
+
|
7446
|
+
if (NIL_P(keys)) {
|
7447
|
+
rb_hash_aset(h, sym_year, m_real_year(dat));
|
7448
|
+
rb_hash_aset(h, sym_month, INT2FIX(m_mon(dat)));
|
7449
|
+
rb_hash_aset(h, sym_day, INT2FIX(m_mday(dat)));
|
7450
|
+
rb_hash_aset(h, sym_yday, INT2FIX(m_yday(dat)));
|
7451
|
+
rb_hash_aset(h, sym_wday, INT2FIX(m_wday(dat)));
|
7452
|
+
if (is_datetime) {
|
7453
|
+
rb_hash_aset(h, sym_hour, INT2FIX(m_hour(dat)));
|
7454
|
+
rb_hash_aset(h, sym_min, INT2FIX(m_min(dat)));
|
7455
|
+
rb_hash_aset(h, sym_sec, INT2FIX(m_sec(dat)));
|
7456
|
+
rb_hash_aset(h, sym_sec_fraction, m_sf_in_sec(dat));
|
7457
|
+
rb_hash_aset(h, sym_zone, m_zone(dat));
|
7458
|
+
}
|
7459
|
+
|
7460
|
+
return h;
|
7461
|
+
}
|
7462
|
+
if (!RB_TYPE_P(keys, T_ARRAY)) {
|
7463
|
+
rb_raise(rb_eTypeError,
|
7464
|
+
"wrong argument type %"PRIsVALUE" (expected Array or nil)",
|
7465
|
+
rb_obj_class(keys));
|
7466
|
+
|
7467
|
+
}
|
7468
|
+
|
7469
|
+
for (i=0; i<RARRAY_LEN(keys); i++) {
|
7470
|
+
VALUE key = RARRAY_AREF(keys, i);
|
7471
|
+
|
7472
|
+
if (sym_year == key) rb_hash_aset(h, key, m_real_year(dat));
|
7473
|
+
if (sym_month == key) rb_hash_aset(h, key, INT2FIX(m_mon(dat)));
|
7474
|
+
if (sym_day == key) rb_hash_aset(h, key, INT2FIX(m_mday(dat)));
|
7475
|
+
if (sym_yday == key) rb_hash_aset(h, key, INT2FIX(m_yday(dat)));
|
7476
|
+
if (sym_wday == key) rb_hash_aset(h, key, INT2FIX(m_wday(dat)));
|
7477
|
+
if (is_datetime) {
|
7478
|
+
if (sym_hour == key) rb_hash_aset(h, key, INT2FIX(m_hour(dat)));
|
7479
|
+
if (sym_min == key) rb_hash_aset(h, key, INT2FIX(m_min(dat)));
|
7480
|
+
if (sym_sec == key) rb_hash_aset(h, key, INT2FIX(m_sec(dat)));
|
7481
|
+
if (sym_sec_fraction == key) rb_hash_aset(h, key, m_sf_in_sec(dat));
|
7482
|
+
if (sym_zone == key) rb_hash_aset(h, key, m_zone(dat));
|
7483
|
+
}
|
7484
|
+
}
|
7485
|
+
return h;
|
7486
|
+
}
|
7487
|
+
|
7488
|
+
/*
|
7489
|
+
* call-seq:
|
7490
|
+
* deconstruct_keys(array_of_names_or_nil) -> hash
|
7491
|
+
*
|
7492
|
+
* Returns a hash of the name/value pairs, to use in pattern matching.
|
7493
|
+
* Possible keys are: <tt>:year</tt>, <tt>:month</tt>, <tt>:day</tt>,
|
7494
|
+
* <tt>:wday</tt>, <tt>:yday</tt>.
|
7495
|
+
*
|
7496
|
+
* Possible usages:
|
7497
|
+
*
|
7498
|
+
* d = Date.new(2022, 10, 5)
|
7499
|
+
*
|
7500
|
+
* if d in wday: 3, day: ..7 # uses deconstruct_keys underneath
|
7501
|
+
* puts "first Wednesday of the month"
|
7502
|
+
* end
|
7503
|
+
* #=> prints "first Wednesday of the month"
|
7504
|
+
*
|
7505
|
+
* case d
|
7506
|
+
* in year: ...2022
|
7507
|
+
* puts "too old"
|
7508
|
+
* in month: ..9
|
7509
|
+
* puts "quarter 1-3"
|
7510
|
+
* in wday: 1..5, month:
|
7511
|
+
* puts "working day in month #{month}"
|
7512
|
+
* end
|
7513
|
+
* #=> prints "working day in month 10"
|
7514
|
+
*
|
7515
|
+
* Note that deconstruction by pattern can also be combined with class check:
|
7516
|
+
*
|
7517
|
+
* if d in Date(wday: 3, day: ..7)
|
7518
|
+
* puts "first Wednesday of the month"
|
7519
|
+
* end
|
7520
|
+
*
|
7521
|
+
*/
|
7522
|
+
static VALUE
|
7523
|
+
d_lite_deconstruct_keys(VALUE self, VALUE keys) {
|
7524
|
+
return deconstruct_keys(self, keys, /* is_datetime=false */ 0);
|
7525
|
+
}
|
7526
|
+
|
7435
7527
|
#ifndef NDEBUG
|
7436
7528
|
/* :nodoc: */
|
7437
7529
|
static VALUE
|
@@ -8740,6 +8832,46 @@ dt_lite_jisx0301(int argc, VALUE *argv, VALUE self)
|
|
8740
8832
|
iso8601_timediv(self, n));
|
8741
8833
|
}
|
8742
8834
|
|
8835
|
+
/*
|
8836
|
+
* call-seq:
|
8837
|
+
* deconstruct_keys(array_of_names_or_nil) -> hash
|
8838
|
+
*
|
8839
|
+
* Returns a hash of the name/value pairs, to use in pattern matching.
|
8840
|
+
* Possible keys are: <tt>:year</tt>, <tt>:month</tt>, <tt>:day</tt>,
|
8841
|
+
* <tt>:wday</tt>, <tt>:yday</tt>, <tt>:hour</tt>, <tt>:min</tt>,
|
8842
|
+
* <tt>:sec</tt>, <tt>:sec_fraction</tt>, <tt>:zone</tt>.
|
8843
|
+
*
|
8844
|
+
* Possible usages:
|
8845
|
+
*
|
8846
|
+
* dt = DateTime.new(2022, 10, 5, 13, 30)
|
8847
|
+
*
|
8848
|
+
* if d in wday: 1..5, hour: 10..18 # uses deconstruct_keys underneath
|
8849
|
+
* puts "Working time"
|
8850
|
+
* end
|
8851
|
+
* #=> prints "Working time"
|
8852
|
+
*
|
8853
|
+
* case dt
|
8854
|
+
* in year: ...2022
|
8855
|
+
* puts "too old"
|
8856
|
+
* in month: ..9
|
8857
|
+
* puts "quarter 1-3"
|
8858
|
+
* in wday: 1..5, month:
|
8859
|
+
* puts "working day in month #{month}"
|
8860
|
+
* end
|
8861
|
+
* #=> prints "working day in month 10"
|
8862
|
+
*
|
8863
|
+
* Note that deconstruction by pattern can also be combined with class check:
|
8864
|
+
*
|
8865
|
+
* if d in DateTime(wday: 1..5, hour: 10..18, day: ..7)
|
8866
|
+
* puts "Working time, first week of the month"
|
8867
|
+
* end
|
8868
|
+
*
|
8869
|
+
*/
|
8870
|
+
static VALUE
|
8871
|
+
dt_lite_deconstruct_keys(VALUE self, VALUE keys) {
|
8872
|
+
return deconstruct_keys(self, keys, /* is_datetime=true */ 1);
|
8873
|
+
}
|
8874
|
+
|
8743
8875
|
/* conversions */
|
8744
8876
|
|
8745
8877
|
#define f_subsec(x) rb_funcall(x, rb_intern("subsec"), 0)
|
@@ -9370,6 +9502,17 @@ Init_date_core(void)
|
|
9370
9502
|
id_ge_p = rb_intern_const(">=");
|
9371
9503
|
id_eqeq_p = rb_intern_const("==");
|
9372
9504
|
|
9505
|
+
sym_year = ID2SYM(rb_intern_const("year"));
|
9506
|
+
sym_month = ID2SYM(rb_intern_const("month"));
|
9507
|
+
sym_yday = ID2SYM(rb_intern_const("yday"));
|
9508
|
+
sym_wday = ID2SYM(rb_intern_const("wday"));
|
9509
|
+
sym_day = ID2SYM(rb_intern_const("day"));
|
9510
|
+
sym_hour = ID2SYM(rb_intern_const("hour"));
|
9511
|
+
sym_min = ID2SYM(rb_intern_const("min"));
|
9512
|
+
sym_sec = ID2SYM(rb_intern_const("sec"));
|
9513
|
+
sym_sec_fraction = ID2SYM(rb_intern_const("sec_fraction"));
|
9514
|
+
sym_zone = ID2SYM(rb_intern_const("zone"));
|
9515
|
+
|
9373
9516
|
half_days_in_day = rb_rational_new2(INT2FIX(1), INT2FIX(2));
|
9374
9517
|
|
9375
9518
|
#if (LONG_MAX / DAY_IN_SECONDS) > SECOND_IN_NANOSECONDS
|
@@ -9691,6 +9834,8 @@ Init_date_core(void)
|
|
9691
9834
|
rb_define_method(cDate, "httpdate", d_lite_httpdate, 0);
|
9692
9835
|
rb_define_method(cDate, "jisx0301", d_lite_jisx0301, 0);
|
9693
9836
|
|
9837
|
+
rb_define_method(cDate, "deconstruct_keys", d_lite_deconstruct_keys, 1);
|
9838
|
+
|
9694
9839
|
#ifndef NDEBUG
|
9695
9840
|
rb_define_method(cDate, "marshal_dump_old", d_lite_marshal_dump_old, 0);
|
9696
9841
|
#endif
|
@@ -9901,6 +10046,8 @@ Init_date_core(void)
|
|
9901
10046
|
rb_define_method(cDateTime, "rfc3339", dt_lite_rfc3339, -1);
|
9902
10047
|
rb_define_method(cDateTime, "jisx0301", dt_lite_jisx0301, -1);
|
9903
10048
|
|
10049
|
+
rb_define_method(cDateTime, "deconstruct_keys", dt_lite_deconstruct_keys, 1);
|
10050
|
+
|
9904
10051
|
/* conversions */
|
9905
10052
|
|
9906
10053
|
rb_define_method(rb_cTime, "to_time", time_to_time, 0);
|
data/lib/date.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: date
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tadayoshi Funaba
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-12-
|
11
|
+
date: 2022-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A subclass of Object includes Comparable module for handling dates.
|
14
14
|
email:
|
@@ -42,14 +42,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
42
42
|
requirements:
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 2.
|
45
|
+
version: 2.6.0
|
46
46
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
48
|
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '0'
|
51
51
|
requirements: []
|
52
|
-
rubygems_version: 3.
|
52
|
+
rubygems_version: 3.3.26
|
53
53
|
signing_key:
|
54
54
|
specification_version: 4
|
55
55
|
summary: A subclass of Object includes Comparable module for handling dates.
|