date 3.1.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4caa8f18343ab584fcbd5be80672d95d6b72574cc75690e2f591fc671f611aa
4
- data.tar.gz: 0d70fbd67392cfdfa0d080d5626808a1c7fc4f834117da812369bf2910c90317
3
+ metadata.gz: 5231d3c74af9144770aee55ae284bd44c05500d08708715c373969db8030b2f8
4
+ data.tar.gz: 2a391128926d0fb3e544bb84b0dfba18b0524fe63069b162c1e7b3875a91f5e9
5
5
  SHA512:
6
- metadata.gz: 3b36c300a66f6dc671293c647e73014dff9c0460216c177a4cff0977973ca62029b3b9053b87d135a50d3885832edbbc36f0f37280008dca39da711d8070f5c6
7
- data.tar.gz: a18e531345a4da23054d03e8480d76afdba97f97a12e56ca840a0dafd6467a1a5d1f9ec9b7e04b0fe6d9e088c1fec078042508aa9cd09e78d4941dc41701662d
6
+ metadata.gz: 7d949a4a1a7bd253d1437ace0831055a52e36d079ebacd42529f0d670c4388ad3836080850d364973304f0a3423442e5af228249d32c21c59208db9ba4ab8d17
7
+ data.tar.gz: 872119e3e9d903e5ed9b6752fc6569b6ae6add45fe909b754d740dd1cd5e07163ab0adab3446489d014695db282ddb98e2992616934ead591c06afaf4f682573
data/ext/date/date_core.c CHANGED
@@ -2973,6 +2973,10 @@ d_lite_memsize(const void *ptr)
2973
2973
  return complex_dat_p(dat) ? sizeof(struct ComplexDateData) : sizeof(struct SimpleDateData);
2974
2974
  }
2975
2975
 
2976
+ #ifndef HAVE_RB_EXT_RACTOR_SAFE
2977
+ # define RUBY_TYPED_FROZEN_SHAREABLE 0
2978
+ #endif
2979
+
2976
2980
  static const rb_data_type_t d_lite_type = {
2977
2981
  "Date",
2978
2982
  {d_lite_gc_mark, RUBY_TYPED_DEFAULT_FREE, d_lite_memsize,},
@@ -4324,12 +4328,37 @@ date_s_strptime(int argc, VALUE *argv, VALUE klass)
4324
4328
 
4325
4329
  VALUE date__parse(VALUE str, VALUE comp);
4326
4330
 
4331
+ static size_t
4332
+ get_limit(VALUE opt)
4333
+ {
4334
+ if (!NIL_P(opt)) {
4335
+ VALUE limit = rb_hash_aref(opt, ID2SYM(rb_intern("limit")));
4336
+ if (NIL_P(limit)) return SIZE_MAX;
4337
+ return NUM2SIZET(limit);
4338
+ }
4339
+ return 128;
4340
+ }
4341
+
4342
+ static void
4343
+ check_limit(VALUE str, VALUE opt)
4344
+ {
4345
+ StringValue(str);
4346
+ size_t slen = RSTRING_LEN(str);
4347
+ size_t limit = get_limit(opt);
4348
+ if (slen > limit) {
4349
+ rb_raise(rb_eArgError,
4350
+ "string length (%"PRI_SIZE_PREFIX"u) exceeds the limit %"PRI_SIZE_PREFIX"u", slen, limit);
4351
+ }
4352
+ }
4353
+
4327
4354
  static VALUE
4328
4355
  date_s__parse_internal(int argc, VALUE *argv, VALUE klass)
4329
4356
  {
4330
- VALUE vstr, vcomp, hash;
4357
+ VALUE vstr, vcomp, hash, opt;
4331
4358
 
4332
- rb_scan_args(argc, argv, "11", &vstr, &vcomp);
4359
+ rb_scan_args(argc, argv, "11:", &vstr, &vcomp, &opt);
4360
+ if (!NIL_P(opt)) argc--;
4361
+ check_limit(vstr, opt);
4333
4362
  StringValue(vstr);
4334
4363
  if (!rb_enc_str_asciicompat_p(vstr))
4335
4364
  rb_raise(rb_eArgError,
@@ -4344,12 +4373,12 @@ date_s__parse_internal(int argc, VALUE *argv, VALUE klass)
4344
4373
 
4345
4374
  /*
4346
4375
  * call-seq:
4347
- * Date._parse(string[, comp=true]) -> hash
4376
+ * Date._parse(string[, comp=true], limit: 128) -> hash
4348
4377
  *
4349
4378
  * Parses the given representation of date and time, and returns a
4350
4379
  * hash of parsed elements.
4351
4380
  *
4352
- * This method **does not** function as a validator. If the input
4381
+ * This method *does not* function as a validator. If the input
4353
4382
  * string does not match valid formats strictly, you may get a cryptic
4354
4383
  * result. Should consider to use `Date._strptime` or
4355
4384
  * `DateTime._strptime` instead of this method as possible.
@@ -4359,6 +4388,10 @@ date_s__parse_internal(int argc, VALUE *argv, VALUE klass)
4359
4388
  * it full.
4360
4389
  *
4361
4390
  * Date._parse('2001-02-03') #=> {:year=>2001, :mon=>2, :mday=>3}
4391
+ *
4392
+ * Raise an ArgumentError when the string length is longer than _limit_.
4393
+ * You can stop this check by passing `limit: nil`, but note that
4394
+ * it may take a long time to parse.
4362
4395
  */
4363
4396
  static VALUE
4364
4397
  date_s__parse(int argc, VALUE *argv, VALUE klass)
@@ -4368,12 +4401,12 @@ date_s__parse(int argc, VALUE *argv, VALUE klass)
4368
4401
 
4369
4402
  /*
4370
4403
  * call-seq:
4371
- * Date.parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]]) -> date
4404
+ * Date.parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]], limit: 128) -> date
4372
4405
  *
4373
4406
  * Parses the given representation of date and time, and creates a
4374
4407
  * date object.
4375
4408
  *
4376
- * This method **does not** function as a validator. If the input
4409
+ * This method *does not* function as a validator. If the input
4377
4410
  * string does not match valid formats strictly, you may get a cryptic
4378
4411
  * result. Should consider to use `Date.strptime` instead of this
4379
4412
  * method as possible.
@@ -4385,13 +4418,18 @@ date_s__parse(int argc, VALUE *argv, VALUE klass)
4385
4418
  * Date.parse('2001-02-03') #=> #<Date: 2001-02-03 ...>
4386
4419
  * Date.parse('20010203') #=> #<Date: 2001-02-03 ...>
4387
4420
  * Date.parse('3rd Feb 2001') #=> #<Date: 2001-02-03 ...>
4421
+ *
4422
+ * Raise an ArgumentError when the string length is longer than _limit_.
4423
+ * You can stop this check by passing `limit: nil`, but note that
4424
+ * it may take a long time to parse.
4388
4425
  */
4389
4426
  static VALUE
4390
4427
  date_s_parse(int argc, VALUE *argv, VALUE klass)
4391
4428
  {
4392
- VALUE str, comp, sg;
4429
+ VALUE str, comp, sg, opt;
4393
4430
 
4394
- rb_scan_args(argc, argv, "03", &str, &comp, &sg);
4431
+ rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt);
4432
+ if (!NIL_P(opt)) argc--;
4395
4433
 
4396
4434
  switch (argc) {
4397
4435
  case 0:
@@ -4403,11 +4441,12 @@ date_s_parse(int argc, VALUE *argv, VALUE klass)
4403
4441
  }
4404
4442
 
4405
4443
  {
4406
- VALUE argv2[2], hash;
4407
-
4408
- argv2[0] = str;
4409
- argv2[1] = comp;
4410
- hash = date_s__parse(2, argv2, klass);
4444
+ int argc2 = 2;
4445
+ VALUE argv2[3];
4446
+ argv2[0] = str;
4447
+ argv2[1] = comp;
4448
+ if (!NIL_P(opt)) argv2[argc2++] = opt;
4449
+ VALUE hash = date_s__parse(argc2, argv2, klass);
4411
4450
  return d_new_by_frags(klass, hash, sg);
4412
4451
  }
4413
4452
  }
@@ -4421,19 +4460,28 @@ VALUE date__jisx0301(VALUE);
4421
4460
 
4422
4461
  /*
4423
4462
  * call-seq:
4424
- * Date._iso8601(string) -> hash
4463
+ * Date._iso8601(string, limit: 128) -> hash
4425
4464
  *
4426
4465
  * Returns a hash of parsed elements.
4466
+ *
4467
+ * Raise an ArgumentError when the string length is longer than _limit_.
4468
+ * You can stop this check by passing `limit: nil`, but note that
4469
+ * it may take a long time to parse.
4427
4470
  */
4428
4471
  static VALUE
4429
- date_s__iso8601(VALUE klass, VALUE str)
4472
+ date_s__iso8601(int argc, VALUE *argv, VALUE klass)
4430
4473
  {
4474
+ VALUE str, opt;
4475
+
4476
+ rb_scan_args(argc, argv, "1:", &str, &opt);
4477
+ check_limit(str, opt);
4478
+
4431
4479
  return date__iso8601(str);
4432
4480
  }
4433
4481
 
4434
4482
  /*
4435
4483
  * call-seq:
4436
- * Date.iso8601(string='-4712-01-01'[, start=Date::ITALY]) -> date
4484
+ * Date.iso8601(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date
4437
4485
  *
4438
4486
  * Creates a new Date object by parsing from a string according to
4439
4487
  * some typical ISO 8601 formats.
@@ -4441,13 +4489,18 @@ date_s__iso8601(VALUE klass, VALUE str)
4441
4489
  * Date.iso8601('2001-02-03') #=> #<Date: 2001-02-03 ...>
4442
4490
  * Date.iso8601('20010203') #=> #<Date: 2001-02-03 ...>
4443
4491
  * Date.iso8601('2001-W05-6') #=> #<Date: 2001-02-03 ...>
4492
+ *
4493
+ * Raise an ArgumentError when the string length is longer than _limit_.
4494
+ * You can stop this check by passing `limit: nil`, but note that
4495
+ * it may take a long time to parse.
4444
4496
  */
4445
4497
  static VALUE
4446
4498
  date_s_iso8601(int argc, VALUE *argv, VALUE klass)
4447
4499
  {
4448
- VALUE str, sg;
4500
+ VALUE str, sg, opt;
4449
4501
 
4450
- rb_scan_args(argc, argv, "02", &str, &sg);
4502
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
4503
+ if (!NIL_P(opt)) argc--;
4451
4504
 
4452
4505
  switch (argc) {
4453
4506
  case 0:
@@ -4457,38 +4510,56 @@ date_s_iso8601(int argc, VALUE *argv, VALUE klass)
4457
4510
  }
4458
4511
 
4459
4512
  {
4460
- VALUE hash = date_s__iso8601(klass, str);
4513
+ int argc2 = 1;
4514
+ VALUE argv2[2];
4515
+ argv2[0] = str;
4516
+ if (!NIL_P(opt)) argv2[argc2++] = opt;
4517
+ VALUE hash = date_s__iso8601(argc2, argv2, klass);
4461
4518
  return d_new_by_frags(klass, hash, sg);
4462
4519
  }
4463
4520
  }
4464
4521
 
4465
4522
  /*
4466
4523
  * call-seq:
4467
- * Date._rfc3339(string) -> hash
4524
+ * Date._rfc3339(string, limit: 128) -> hash
4468
4525
  *
4469
4526
  * Returns a hash of parsed elements.
4527
+ *
4528
+ * Raise an ArgumentError when the string length is longer than _limit_.
4529
+ * You can stop this check by passing `limit: nil`, but note that
4530
+ * it may take a long time to parse.
4470
4531
  */
4471
4532
  static VALUE
4472
- date_s__rfc3339(VALUE klass, VALUE str)
4533
+ date_s__rfc3339(int argc, VALUE *argv, VALUE klass)
4473
4534
  {
4535
+ VALUE str, opt;
4536
+
4537
+ rb_scan_args(argc, argv, "1:", &str, &opt);
4538
+ check_limit(str, opt);
4539
+
4474
4540
  return date__rfc3339(str);
4475
4541
  }
4476
4542
 
4477
4543
  /*
4478
4544
  * call-seq:
4479
- * Date.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> date
4545
+ * Date.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> date
4480
4546
  *
4481
4547
  * Creates a new Date object by parsing from a string according to
4482
4548
  * some typical RFC 3339 formats.
4483
4549
  *
4484
4550
  * Date.rfc3339('2001-02-03T04:05:06+07:00') #=> #<Date: 2001-02-03 ...>
4551
+ *
4552
+ * Raise an ArgumentError when the string length is longer than _limit_.
4553
+ * You can stop this check by passing `limit: nil`, but note that
4554
+ * it may take a long time to parse.
4485
4555
  */
4486
4556
  static VALUE
4487
4557
  date_s_rfc3339(int argc, VALUE *argv, VALUE klass)
4488
4558
  {
4489
- VALUE str, sg;
4559
+ VALUE str, sg, opt;
4490
4560
 
4491
- rb_scan_args(argc, argv, "02", &str, &sg);
4561
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
4562
+ if (!NIL_P(opt)) argc--;
4492
4563
 
4493
4564
  switch (argc) {
4494
4565
  case 0:
@@ -4498,38 +4569,56 @@ date_s_rfc3339(int argc, VALUE *argv, VALUE klass)
4498
4569
  }
4499
4570
 
4500
4571
  {
4501
- VALUE hash = date_s__rfc3339(klass, str);
4572
+ int argc2 = 1;
4573
+ VALUE argv2[2];
4574
+ argv2[0] = str;
4575
+ if (!NIL_P(opt)) argv2[argc2++] = opt;
4576
+ VALUE hash = date_s__rfc3339(argc2, argv2, klass);
4502
4577
  return d_new_by_frags(klass, hash, sg);
4503
4578
  }
4504
4579
  }
4505
4580
 
4506
4581
  /*
4507
4582
  * call-seq:
4508
- * Date._xmlschema(string) -> hash
4583
+ * Date._xmlschema(string, limit: 128) -> hash
4509
4584
  *
4510
4585
  * Returns a hash of parsed elements.
4586
+ *
4587
+ * Raise an ArgumentError when the string length is longer than _limit_.
4588
+ * You can stop this check by passing `limit: nil`, but note that
4589
+ * it may take a long time to parse.
4511
4590
  */
4512
4591
  static VALUE
4513
- date_s__xmlschema(VALUE klass, VALUE str)
4592
+ date_s__xmlschema(int argc, VALUE *argv, VALUE klass)
4514
4593
  {
4594
+ VALUE str, opt;
4595
+
4596
+ rb_scan_args(argc, argv, "1:", &str, &opt);
4597
+ check_limit(str, opt);
4598
+
4515
4599
  return date__xmlschema(str);
4516
4600
  }
4517
4601
 
4518
4602
  /*
4519
4603
  * call-seq:
4520
- * Date.xmlschema(string='-4712-01-01'[, start=Date::ITALY]) -> date
4604
+ * Date.xmlschema(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date
4521
4605
  *
4522
4606
  * Creates a new Date object by parsing from a string according to
4523
4607
  * some typical XML Schema formats.
4524
4608
  *
4525
4609
  * Date.xmlschema('2001-02-03') #=> #<Date: 2001-02-03 ...>
4610
+ *
4611
+ * Raise an ArgumentError when the string length is longer than _limit_.
4612
+ * You can stop this check by passing `limit: nil`, but note that
4613
+ * it may take a long time to parse.
4526
4614
  */
4527
4615
  static VALUE
4528
4616
  date_s_xmlschema(int argc, VALUE *argv, VALUE klass)
4529
4617
  {
4530
- VALUE str, sg;
4618
+ VALUE str, sg, opt;
4531
4619
 
4532
- rb_scan_args(argc, argv, "02", &str, &sg);
4620
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
4621
+ if (!NIL_P(opt)) argc--;
4533
4622
 
4534
4623
  switch (argc) {
4535
4624
  case 0:
@@ -4539,41 +4628,58 @@ date_s_xmlschema(int argc, VALUE *argv, VALUE klass)
4539
4628
  }
4540
4629
 
4541
4630
  {
4542
- VALUE hash = date_s__xmlschema(klass, str);
4631
+ int argc2 = 1;
4632
+ VALUE argv2[2];
4633
+ argv2[0] = str;
4634
+ if (!NIL_P(opt)) argv2[argc2++] = opt;
4635
+ VALUE hash = date_s__xmlschema(argc2, argv2, klass);
4543
4636
  return d_new_by_frags(klass, hash, sg);
4544
4637
  }
4545
4638
  }
4546
4639
 
4547
4640
  /*
4548
4641
  * call-seq:
4549
- * Date._rfc2822(string) -> hash
4550
- * Date._rfc822(string) -> hash
4642
+ * Date._rfc2822(string, limit: 128) -> hash
4643
+ * Date._rfc822(string, limit: 128) -> hash
4551
4644
  *
4552
4645
  * Returns a hash of parsed elements.
4646
+ *
4647
+ * Raise an ArgumentError when the string length is longer than _limit_.
4648
+ * You can stop this check by passing `limit: nil`, but note that
4649
+ * it may take a long time to parse.
4553
4650
  */
4554
4651
  static VALUE
4555
- date_s__rfc2822(VALUE klass, VALUE str)
4652
+ date_s__rfc2822(int argc, VALUE *argv, VALUE klass)
4556
4653
  {
4654
+ VALUE str, opt;
4655
+
4656
+ rb_scan_args(argc, argv, "1:", &str, &opt);
4657
+ check_limit(str, opt);
4658
+
4557
4659
  return date__rfc2822(str);
4558
4660
  }
4559
4661
 
4560
4662
  /*
4561
4663
  * call-seq:
4562
- * Date.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> date
4563
- * Date.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> date
4664
+ * Date.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date
4665
+ * Date.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date
4564
4666
  *
4565
4667
  * Creates a new Date object by parsing from a string according to
4566
4668
  * some typical RFC 2822 formats.
4567
4669
  *
4568
4670
  * Date.rfc2822('Sat, 3 Feb 2001 00:00:00 +0000')
4569
4671
  * #=> #<Date: 2001-02-03 ...>
4672
+ *
4673
+ * Raise an ArgumentError when the string length is longer than _limit_.
4674
+ * You can stop this check by passing `limit: nil`, but note that
4675
+ * it may take a long time to parse.
4570
4676
  */
4571
4677
  static VALUE
4572
4678
  date_s_rfc2822(int argc, VALUE *argv, VALUE klass)
4573
4679
  {
4574
- VALUE str, sg;
4680
+ VALUE str, sg, opt;
4575
4681
 
4576
- rb_scan_args(argc, argv, "02", &str, &sg);
4682
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
4577
4683
 
4578
4684
  switch (argc) {
4579
4685
  case 0:
@@ -4583,39 +4689,56 @@ date_s_rfc2822(int argc, VALUE *argv, VALUE klass)
4583
4689
  }
4584
4690
 
4585
4691
  {
4586
- VALUE hash = date_s__rfc2822(klass, str);
4692
+ int argc2 = 1;
4693
+ VALUE argv2[2];
4694
+ argv2[0] = str;
4695
+ if (!NIL_P(opt)) argv2[argc2++] = opt;
4696
+ VALUE hash = date_s__rfc2822(argc2, argv2, klass);
4587
4697
  return d_new_by_frags(klass, hash, sg);
4588
4698
  }
4589
4699
  }
4590
4700
 
4591
4701
  /*
4592
4702
  * call-seq:
4593
- * Date._httpdate(string) -> hash
4703
+ * Date._httpdate(string, limit: 128) -> hash
4594
4704
  *
4595
4705
  * Returns a hash of parsed elements.
4706
+ *
4707
+ * Raise an ArgumentError when the string length is longer than _limit_.
4708
+ * You can stop this check by passing `limit: nil`, but note that
4709
+ * it may take a long time to parse.
4596
4710
  */
4597
4711
  static VALUE
4598
- date_s__httpdate(VALUE klass, VALUE str)
4712
+ date_s__httpdate(int argc, VALUE *argv, VALUE klass)
4599
4713
  {
4714
+ VALUE str, opt;
4715
+
4716
+ rb_scan_args(argc, argv, "1:", &str, &opt);
4717
+ check_limit(str, opt);
4718
+
4600
4719
  return date__httpdate(str);
4601
4720
  }
4602
4721
 
4603
4722
  /*
4604
4723
  * call-seq:
4605
- * Date.httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY]) -> date
4724
+ * Date.httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY], limit: 128) -> date
4606
4725
  *
4607
4726
  * Creates a new Date object by parsing from a string according to
4608
4727
  * some RFC 2616 format.
4609
4728
  *
4610
4729
  * Date.httpdate('Sat, 03 Feb 2001 00:00:00 GMT')
4611
4730
  * #=> #<Date: 2001-02-03 ...>
4731
+ *
4732
+ * Raise an ArgumentError when the string length is longer than _limit_.
4733
+ * You can stop this check by passing `limit: nil`, but note that
4734
+ * it may take a long time to parse.
4612
4735
  */
4613
4736
  static VALUE
4614
4737
  date_s_httpdate(int argc, VALUE *argv, VALUE klass)
4615
4738
  {
4616
- VALUE str, sg;
4739
+ VALUE str, sg, opt;
4617
4740
 
4618
- rb_scan_args(argc, argv, "02", &str, &sg);
4741
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
4619
4742
 
4620
4743
  switch (argc) {
4621
4744
  case 0:
@@ -4625,26 +4748,39 @@ date_s_httpdate(int argc, VALUE *argv, VALUE klass)
4625
4748
  }
4626
4749
 
4627
4750
  {
4628
- VALUE hash = date_s__httpdate(klass, str);
4751
+ int argc2 = 1;
4752
+ VALUE argv2[2];
4753
+ argv2[0] = str;
4754
+ if (!NIL_P(opt)) argv2[argc2++] = opt;
4755
+ VALUE hash = date_s__httpdate(argc2, argv2, klass);
4629
4756
  return d_new_by_frags(klass, hash, sg);
4630
4757
  }
4631
4758
  }
4632
4759
 
4633
4760
  /*
4634
4761
  * call-seq:
4635
- * Date._jisx0301(string) -> hash
4762
+ * Date._jisx0301(string, limit: 128) -> hash
4636
4763
  *
4637
4764
  * Returns a hash of parsed elements.
4765
+ *
4766
+ * Raise an ArgumentError when the string length is longer than _limit_.
4767
+ * You can stop this check by passing `limit: nil`, but note that
4768
+ * it may take a long time to parse.
4638
4769
  */
4639
4770
  static VALUE
4640
- date_s__jisx0301(VALUE klass, VALUE str)
4771
+ date_s__jisx0301(int argc, VALUE *argv, VALUE klass)
4641
4772
  {
4773
+ VALUE str, opt;
4774
+
4775
+ rb_scan_args(argc, argv, "1:", &str, &opt);
4776
+ check_limit(str, opt);
4777
+
4642
4778
  return date__jisx0301(str);
4643
4779
  }
4644
4780
 
4645
4781
  /*
4646
4782
  * call-seq:
4647
- * Date.jisx0301(string='-4712-01-01'[, start=Date::ITALY]) -> date
4783
+ * Date.jisx0301(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date
4648
4784
  *
4649
4785
  * Creates a new Date object by parsing from a string according to
4650
4786
  * some typical JIS X 0301 formats.
@@ -4654,13 +4790,18 @@ date_s__jisx0301(VALUE klass, VALUE str)
4654
4790
  * For no-era year, legacy format, Heisei is assumed.
4655
4791
  *
4656
4792
  * Date.jisx0301('13.02.03') #=> #<Date: 2001-02-03 ...>
4793
+ *
4794
+ * Raise an ArgumentError when the string length is longer than _limit_.
4795
+ * You can stop this check by passing `limit: nil`, but note that
4796
+ * it may take a long time to parse.
4657
4797
  */
4658
4798
  static VALUE
4659
4799
  date_s_jisx0301(int argc, VALUE *argv, VALUE klass)
4660
4800
  {
4661
- VALUE str, sg;
4801
+ VALUE str, sg, opt;
4662
4802
 
4663
- rb_scan_args(argc, argv, "02", &str, &sg);
4803
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
4804
+ if (!NIL_P(opt)) argc--;
4664
4805
 
4665
4806
  switch (argc) {
4666
4807
  case 0:
@@ -4670,7 +4811,11 @@ date_s_jisx0301(int argc, VALUE *argv, VALUE klass)
4670
4811
  }
4671
4812
 
4672
4813
  {
4673
- VALUE hash = date_s__jisx0301(klass, str);
4814
+ int argc2 = 1;
4815
+ VALUE argv2[2];
4816
+ argv2[0] = str;
4817
+ if (!NIL_P(opt)) argv2[argc2++] = opt;
4818
+ VALUE hash = date_s__jisx0301(argc2, argv2, klass);
4674
4819
  return d_new_by_frags(klass, hash, sg);
4675
4820
  }
4676
4821
  }
@@ -6896,7 +7041,7 @@ date_strftime_internal(int argc, VALUE *argv, VALUE self,
6896
7041
  * %c - date and time (%a %b %e %T %Y)
6897
7042
  * %D - Date (%m/%d/%y)
6898
7043
  * %F - The ISO 8601 date format (%Y-%m-%d)
6899
- * %v - VMS date (%e-%b-%Y)
7044
+ * %v - VMS date (%e-%^b-%Y)
6900
7045
  * %x - Same as %D
6901
7046
  * %X - Same as %T
6902
7047
  * %r - 12-hour time (%I:%M:%S %p)
@@ -7793,7 +7938,7 @@ datetime_s_now(int argc, VALUE *argv, VALUE klass)
7793
7938
  #ifdef HAVE_STRUCT_TM_TM_GMTOFF
7794
7939
  of = tm.tm_gmtoff;
7795
7940
  #elif defined(HAVE_TIMEZONE)
7796
- #ifdef HAVE_ALTZONE
7941
+ #if defined(HAVE_ALTZONE) && !defined(_AIX)
7797
7942
  of = (long)-((tm.tm_isdst > 0) ? altzone : timezone);
7798
7943
  #else
7799
7944
  of = (long)-timezone;
@@ -8009,12 +8154,12 @@ datetime_s_strptime(int argc, VALUE *argv, VALUE klass)
8009
8154
 
8010
8155
  /*
8011
8156
  * call-seq:
8012
- * DateTime.parse(string='-4712-01-01T00:00:00+00:00'[, comp=true[, start=Date::ITALY]]) -> datetime
8157
+ * DateTime.parse(string='-4712-01-01T00:00:00+00:00'[, comp=true[, start=Date::ITALY]], limit: 128) -> datetime
8013
8158
  *
8014
8159
  * Parses the given representation of date and time, and creates a
8015
8160
  * DateTime object.
8016
8161
  *
8017
- * This method **does not** function as a validator. If the input
8162
+ * This method *does not* function as a validator. If the input
8018
8163
  * string does not match valid formats strictly, you may get a cryptic
8019
8164
  * result. Should consider to use `DateTime.strptime` instead of this
8020
8165
  * method as possible.
@@ -8028,13 +8173,18 @@ datetime_s_strptime(int argc, VALUE *argv, VALUE klass)
8028
8173
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8029
8174
  * DateTime.parse('3rd Feb 2001 04:05:06 PM')
8030
8175
  * #=> #<DateTime: 2001-02-03T16:05:06+00:00 ...>
8176
+ *
8177
+ * Raise an ArgumentError when the string length is longer than _limit_.
8178
+ * You can stop this check by passing `limit: nil`, but note that
8179
+ * it may take a long time to parse.
8031
8180
  */
8032
8181
  static VALUE
8033
8182
  datetime_s_parse(int argc, VALUE *argv, VALUE klass)
8034
8183
  {
8035
- VALUE str, comp, sg;
8184
+ VALUE str, comp, sg, opt;
8036
8185
 
8037
- rb_scan_args(argc, argv, "03", &str, &comp, &sg);
8186
+ rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt);
8187
+ if (!NIL_P(opt)) argc--;
8038
8188
 
8039
8189
  switch (argc) {
8040
8190
  case 0:
@@ -8046,18 +8196,20 @@ datetime_s_parse(int argc, VALUE *argv, VALUE klass)
8046
8196
  }
8047
8197
 
8048
8198
  {
8049
- VALUE argv2[2], hash;
8050
-
8051
- argv2[0] = str;
8052
- argv2[1] = comp;
8053
- hash = date_s__parse(2, argv2, klass);
8199
+ int argc2 = 2;
8200
+ VALUE argv2[3];
8201
+ argv2[0] = str;
8202
+ argv2[1] = comp;
8203
+ argv2[2] = opt;
8204
+ if (!NIL_P(opt)) argc2++;
8205
+ VALUE hash = date_s__parse(argc2, argv2, klass);
8054
8206
  return dt_new_by_frags(klass, hash, sg);
8055
8207
  }
8056
8208
  }
8057
8209
 
8058
8210
  /*
8059
8211
  * call-seq:
8060
- * DateTime.iso8601(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime
8212
+ * DateTime.iso8601(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime
8061
8213
  *
8062
8214
  * Creates a new DateTime object by parsing from a string according to
8063
8215
  * some typical ISO 8601 formats.
@@ -8068,13 +8220,18 @@ datetime_s_parse(int argc, VALUE *argv, VALUE klass)
8068
8220
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8069
8221
  * DateTime.iso8601('2001-W05-6T04:05:06+07:00')
8070
8222
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8223
+ *
8224
+ * Raise an ArgumentError when the string length is longer than _limit_.
8225
+ * You can stop this check by passing `limit: nil`, but note that
8226
+ * it may take a long time to parse.
8071
8227
  */
8072
8228
  static VALUE
8073
8229
  datetime_s_iso8601(int argc, VALUE *argv, VALUE klass)
8074
8230
  {
8075
- VALUE str, sg;
8231
+ VALUE str, sg, opt;
8076
8232
 
8077
- rb_scan_args(argc, argv, "02", &str, &sg);
8233
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
8234
+ if (!NIL_P(opt)) argc--;
8078
8235
 
8079
8236
  switch (argc) {
8080
8237
  case 0:
@@ -8084,27 +8241,37 @@ datetime_s_iso8601(int argc, VALUE *argv, VALUE klass)
8084
8241
  }
8085
8242
 
8086
8243
  {
8087
- VALUE hash = date_s__iso8601(klass, str);
8244
+ int argc2 = 1;
8245
+ VALUE argv2[2];
8246
+ argv2[0] = str;
8247
+ argv2[1] = opt;
8248
+ if (!NIL_P(opt)) argc2--;
8249
+ VALUE hash = date_s__iso8601(argc2, argv2, klass);
8088
8250
  return dt_new_by_frags(klass, hash, sg);
8089
8251
  }
8090
8252
  }
8091
8253
 
8092
8254
  /*
8093
8255
  * call-seq:
8094
- * DateTime.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime
8256
+ * DateTime.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime
8095
8257
  *
8096
8258
  * Creates a new DateTime object by parsing from a string according to
8097
8259
  * some typical RFC 3339 formats.
8098
8260
  *
8099
8261
  * DateTime.rfc3339('2001-02-03T04:05:06+07:00')
8100
8262
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8263
+ *
8264
+ * Raise an ArgumentError when the string length is longer than _limit_.
8265
+ * You can stop this check by passing `limit: nil`, but note that
8266
+ * it may take a long time to parse.
8101
8267
  */
8102
8268
  static VALUE
8103
8269
  datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass)
8104
8270
  {
8105
- VALUE str, sg;
8271
+ VALUE str, sg, opt;
8106
8272
 
8107
- rb_scan_args(argc, argv, "02", &str, &sg);
8273
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
8274
+ if (!NIL_P(opt)) argc--;
8108
8275
 
8109
8276
  switch (argc) {
8110
8277
  case 0:
@@ -8114,27 +8281,37 @@ datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass)
8114
8281
  }
8115
8282
 
8116
8283
  {
8117
- VALUE hash = date_s__rfc3339(klass, str);
8284
+ int argc2 = 1;
8285
+ VALUE argv2[2];
8286
+ argv2[0] = str;
8287
+ argv2[1] = opt;
8288
+ if (!NIL_P(opt)) argc2++;
8289
+ VALUE hash = date_s__rfc3339(argc2, argv2, klass);
8118
8290
  return dt_new_by_frags(klass, hash, sg);
8119
8291
  }
8120
8292
  }
8121
8293
 
8122
8294
  /*
8123
8295
  * call-seq:
8124
- * DateTime.xmlschema(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime
8296
+ * DateTime.xmlschema(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime
8125
8297
  *
8126
8298
  * Creates a new DateTime object by parsing from a string according to
8127
8299
  * some typical XML Schema formats.
8128
8300
  *
8129
8301
  * DateTime.xmlschema('2001-02-03T04:05:06+07:00')
8130
8302
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8303
+ *
8304
+ * Raise an ArgumentError when the string length is longer than _limit_.
8305
+ * You can stop this check by passing `limit: nil`, but note that
8306
+ * it may take a long time to parse.
8131
8307
  */
8132
8308
  static VALUE
8133
8309
  datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass)
8134
8310
  {
8135
- VALUE str, sg;
8311
+ VALUE str, sg, opt;
8136
8312
 
8137
- rb_scan_args(argc, argv, "02", &str, &sg);
8313
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
8314
+ if (!NIL_P(opt)) argc--;
8138
8315
 
8139
8316
  switch (argc) {
8140
8317
  case 0:
@@ -8144,28 +8321,38 @@ datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass)
8144
8321
  }
8145
8322
 
8146
8323
  {
8147
- VALUE hash = date_s__xmlschema(klass, str);
8324
+ int argc2 = 1;
8325
+ VALUE argv2[2];
8326
+ argv2[0] = str;
8327
+ argv2[1] = opt;
8328
+ if (!NIL_P(opt)) argc2++;
8329
+ VALUE hash = date_s__xmlschema(argc2, argv2, klass);
8148
8330
  return dt_new_by_frags(klass, hash, sg);
8149
8331
  }
8150
8332
  }
8151
8333
 
8152
8334
  /*
8153
8335
  * call-seq:
8154
- * DateTime.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> datetime
8155
- * DateTime.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> datetime
8336
+ * DateTime.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> datetime
8337
+ * DateTime.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> datetime
8156
8338
  *
8157
8339
  * Creates a new DateTime object by parsing from a string according to
8158
8340
  * some typical RFC 2822 formats.
8159
8341
  *
8160
8342
  * DateTime.rfc2822('Sat, 3 Feb 2001 04:05:06 +0700')
8161
8343
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8344
+ *
8345
+ * Raise an ArgumentError when the string length is longer than _limit_.
8346
+ * You can stop this check by passing `limit: nil`, but note that
8347
+ * it may take a long time to parse.
8162
8348
  */
8163
8349
  static VALUE
8164
8350
  datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass)
8165
8351
  {
8166
- VALUE str, sg;
8352
+ VALUE str, sg, opt;
8167
8353
 
8168
- rb_scan_args(argc, argv, "02", &str, &sg);
8354
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
8355
+ if (!NIL_P(opt)) argc--;
8169
8356
 
8170
8357
  switch (argc) {
8171
8358
  case 0:
@@ -8175,7 +8362,12 @@ datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass)
8175
8362
  }
8176
8363
 
8177
8364
  {
8178
- VALUE hash = date_s__rfc2822(klass, str);
8365
+ int argc2 = 1;
8366
+ VALUE argv2[2];
8367
+ argv2[0] = str;
8368
+ argv2[1] = opt;
8369
+ if (!NIL_P(opt)) argc2++;
8370
+ VALUE hash = date_s__rfc2822(argc2, argv2, klass);
8179
8371
  return dt_new_by_frags(klass, hash, sg);
8180
8372
  }
8181
8373
  }
@@ -8189,13 +8381,18 @@ datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass)
8189
8381
  *
8190
8382
  * DateTime.httpdate('Sat, 03 Feb 2001 04:05:06 GMT')
8191
8383
  * #=> #<DateTime: 2001-02-03T04:05:06+00:00 ...>
8384
+ *
8385
+ * Raise an ArgumentError when the string length is longer than _limit_.
8386
+ * You can stop this check by passing `limit: nil`, but note that
8387
+ * it may take a long time to parse.
8192
8388
  */
8193
8389
  static VALUE
8194
8390
  datetime_s_httpdate(int argc, VALUE *argv, VALUE klass)
8195
8391
  {
8196
- VALUE str, sg;
8392
+ VALUE str, sg, opt;
8197
8393
 
8198
- rb_scan_args(argc, argv, "02", &str, &sg);
8394
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
8395
+ if (!NIL_P(opt)) argc--;
8199
8396
 
8200
8397
  switch (argc) {
8201
8398
  case 0:
@@ -8205,14 +8402,19 @@ datetime_s_httpdate(int argc, VALUE *argv, VALUE klass)
8205
8402
  }
8206
8403
 
8207
8404
  {
8208
- VALUE hash = date_s__httpdate(klass, str);
8405
+ int argc2 = 1;
8406
+ VALUE argv2[2];
8407
+ argv2[0] = str;
8408
+ argv2[1] = opt;
8409
+ if (!NIL_P(opt)) argc2++;
8410
+ VALUE hash = date_s__httpdate(argc2, argv2, klass);
8209
8411
  return dt_new_by_frags(klass, hash, sg);
8210
8412
  }
8211
8413
  }
8212
8414
 
8213
8415
  /*
8214
8416
  * call-seq:
8215
- * DateTime.jisx0301(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime
8417
+ * DateTime.jisx0301(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime
8216
8418
  *
8217
8419
  * Creates a new DateTime object by parsing from a string according to
8218
8420
  * some typical JIS X 0301 formats.
@@ -8224,13 +8426,18 @@ datetime_s_httpdate(int argc, VALUE *argv, VALUE klass)
8224
8426
  *
8225
8427
  * DateTime.jisx0301('13.02.03T04:05:06+07:00')
8226
8428
  * #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
8429
+ *
8430
+ * Raise an ArgumentError when the string length is longer than _limit_.
8431
+ * You can stop this check by passing `limit: nil`, but note that
8432
+ * it may take a long time to parse.
8227
8433
  */
8228
8434
  static VALUE
8229
8435
  datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass)
8230
8436
  {
8231
- VALUE str, sg;
8437
+ VALUE str, sg, opt;
8232
8438
 
8233
- rb_scan_args(argc, argv, "02", &str, &sg);
8439
+ rb_scan_args(argc, argv, "02:", &str, &sg, &opt);
8440
+ if (!NIL_P(opt)) argc--;
8234
8441
 
8235
8442
  switch (argc) {
8236
8443
  case 0:
@@ -8240,7 +8447,12 @@ datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass)
8240
8447
  }
8241
8448
 
8242
8449
  {
8243
- VALUE hash = date_s__jisx0301(klass, str);
8450
+ int argc2 = 1;
8451
+ VALUE argv2[2];
8452
+ argv2[0] = str;
8453
+ argv2[1] = opt;
8454
+ if (!NIL_P(opt)) argc2++;
8455
+ VALUE hash = date_s__jisx0301(argc2, argv2, klass);
8244
8456
  return dt_new_by_frags(klass, hash, sg);
8245
8457
  }
8246
8458
  }
@@ -8376,7 +8588,7 @@ dt_lite_to_s(VALUE self)
8376
8588
  * %c - date and time (%a %b %e %T %Y)
8377
8589
  * %D - Date (%m/%d/%y)
8378
8590
  * %F - The ISO 8601 date format (%Y-%m-%d)
8379
- * %v - VMS date (%e-%b-%Y)
8591
+ * %v - VMS date (%e-%^b-%Y)
8380
8592
  * %x - Same as %D
8381
8593
  * %X - Same as %T
8382
8594
  * %r - 12-hour time (%I:%M:%S %p)
@@ -9399,19 +9611,19 @@ Init_date_core(void)
9399
9611
  rb_define_singleton_method(cDate, "strptime", date_s_strptime, -1);
9400
9612
  rb_define_singleton_method(cDate, "_parse", date_s__parse, -1);
9401
9613
  rb_define_singleton_method(cDate, "parse", date_s_parse, -1);
9402
- rb_define_singleton_method(cDate, "_iso8601", date_s__iso8601, 1);
9614
+ rb_define_singleton_method(cDate, "_iso8601", date_s__iso8601, -1);
9403
9615
  rb_define_singleton_method(cDate, "iso8601", date_s_iso8601, -1);
9404
- rb_define_singleton_method(cDate, "_rfc3339", date_s__rfc3339, 1);
9616
+ rb_define_singleton_method(cDate, "_rfc3339", date_s__rfc3339, -1);
9405
9617
  rb_define_singleton_method(cDate, "rfc3339", date_s_rfc3339, -1);
9406
- rb_define_singleton_method(cDate, "_xmlschema", date_s__xmlschema, 1);
9618
+ rb_define_singleton_method(cDate, "_xmlschema", date_s__xmlschema, -1);
9407
9619
  rb_define_singleton_method(cDate, "xmlschema", date_s_xmlschema, -1);
9408
- rb_define_singleton_method(cDate, "_rfc2822", date_s__rfc2822, 1);
9409
- rb_define_singleton_method(cDate, "_rfc822", date_s__rfc2822, 1);
9620
+ rb_define_singleton_method(cDate, "_rfc2822", date_s__rfc2822, -1);
9621
+ rb_define_singleton_method(cDate, "_rfc822", date_s__rfc2822, -1);
9410
9622
  rb_define_singleton_method(cDate, "rfc2822", date_s_rfc2822, -1);
9411
9623
  rb_define_singleton_method(cDate, "rfc822", date_s_rfc2822, -1);
9412
- rb_define_singleton_method(cDate, "_httpdate", date_s__httpdate, 1);
9624
+ rb_define_singleton_method(cDate, "_httpdate", date_s__httpdate, -1);
9413
9625
  rb_define_singleton_method(cDate, "httpdate", date_s_httpdate, -1);
9414
- rb_define_singleton_method(cDate, "_jisx0301", date_s__jisx0301, 1);
9626
+ rb_define_singleton_method(cDate, "_jisx0301", date_s__jisx0301, -1);
9415
9627
  rb_define_singleton_method(cDate, "jisx0301", date_s_jisx0301, -1);
9416
9628
 
9417
9629
  rb_define_method(cDate, "initialize", date_initialize, -1);
@@ -393,7 +393,7 @@ date_strftime_with_tmx(char *s, const size_t maxsize, const char *format,
393
393
  continue;
394
394
 
395
395
  case 'v':
396
- STRFTIME("%e-%b-%Y");
396
+ STRFTIME("%e-%^b-%Y");
397
397
  continue;
398
398
 
399
399
  case 'w': /* weekday, Sunday == 0, 0 - 6 */
data/ext/date/extconf.rb CHANGED
@@ -3,7 +3,9 @@ require 'mkmf'
3
3
 
4
4
  config_string("strict_warnflags") {|w| $warnflags += " #{w}"}
5
5
 
6
- have_var("timezone", "time.h")
7
- have_var("altzone", "time.h")
6
+ with_werror("", {:werror => true}) do |opt, |
7
+ have_var("timezone", "time.h", opt)
8
+ have_var("altzone", "time.h", opt)
9
+ end
8
10
 
9
11
  create_makefile('date_core')
data/ext/date/prereq.mk CHANGED
@@ -10,3 +10,10 @@ zonetab.h: zonetab.list
10
10
  .PHONY: update-zonetab
11
11
  update-zonetab:
12
12
  $(RUBY) -C $(srcdir) update-abbr
13
+
14
+ .PHONY: update-nothing
15
+ update-nothing:
16
+
17
+ update = nothing
18
+
19
+ zonetab.list: update-$(update)
data/ext/date/zonetab.h CHANGED
@@ -846,7 +846,7 @@ zonetab (register const char *str, register size_t len)
846
846
  {gperf_offsetof(stringpool, 22), 3*3600},
847
847
  {-1},
848
848
  #line 101 "zonetab.list"
849
- {gperf_offsetof(stringpool, 24),10*3600},
849
+ {gperf_offsetof(stringpool, 24),-6*3600},
850
850
  #line 217 "zonetab.list"
851
851
  {gperf_offsetof(stringpool, 25),-18000},
852
852
  #line 19 "zonetab.list"
@@ -875,7 +875,7 @@ zonetab (register const char *str, register size_t len)
875
875
  #line 79 "zonetab.list"
876
876
  {gperf_offsetof(stringpool, 38), 2*3600},
877
877
  #line 65 "zonetab.list"
878
- {gperf_offsetof(stringpool, 39),-10*3600},
878
+ {gperf_offsetof(stringpool, 39),2*3600},
879
879
  {-1},
880
880
  #line 202 "zonetab.list"
881
881
  {gperf_offsetof(stringpool, 41),28800},
@@ -998,7 +998,7 @@ zonetab (register const char *str, register size_t len)
998
998
  #line 148 "zonetab.list"
999
999
  {gperf_offsetof(stringpool, 107), -25200},
1000
1000
  #line 96 "zonetab.list"
1001
- {gperf_offsetof(stringpool, 108), 8*3600},
1001
+ {gperf_offsetof(stringpool, 108), (6*3600+1800)},
1002
1002
  #line 42 "zonetab.list"
1003
1003
  {gperf_offsetof(stringpool, 109), -10*3600},
1004
1004
  #line 31 "zonetab.list"
@@ -1017,11 +1017,11 @@ zonetab (register const char *str, register size_t len)
1017
1017
  {gperf_offsetof(stringpool, 117), 1*3600},
1018
1018
  {-1},
1019
1019
  #line 95 "zonetab.list"
1020
- {gperf_offsetof(stringpool, 119), 7*3600},
1020
+ {gperf_offsetof(stringpool, 119), 2*3600},
1021
1021
  #line 313 "zonetab.list"
1022
1022
  {gperf_offsetof(stringpool, 120),43200},
1023
1023
  #line 55 "zonetab.list"
1024
- {gperf_offsetof(stringpool, 121), -(3*3600+1800)},
1024
+ {gperf_offsetof(stringpool, 121), -(2*3600+1800)},
1025
1025
  #line 184 "zonetab.list"
1026
1026
  {gperf_offsetof(stringpool, 122),31500},
1027
1027
  #line 204 "zonetab.list"
@@ -1168,7 +1168,7 @@ zonetab (register const char *str, register size_t len)
1168
1168
  #line 299 "zonetab.list"
1169
1169
  {gperf_offsetof(stringpool, 206),50400},
1170
1170
  #line 85 "zonetab.list"
1171
- {gperf_offsetof(stringpool, 207), 2*3600},
1171
+ {gperf_offsetof(stringpool, 207), -11*3600},
1172
1172
  {-1},
1173
1173
  #line 142 "zonetab.list"
1174
1174
  {gperf_offsetof(stringpool, 209), 19800},
@@ -1371,7 +1371,7 @@ zonetab (register const char *str, register size_t len)
1371
1371
  {gperf_offsetof(stringpool, 324), 8*3600},
1372
1372
  {-1},
1373
1373
  #line 50 "zonetab.list"
1374
- {gperf_offsetof(stringpool, 326), -(2*3600+1800)},
1374
+ {gperf_offsetof(stringpool, 326), -(1*3600+1800)},
1375
1375
  #line 285 "zonetab.list"
1376
1376
  {gperf_offsetof(stringpool, 327),-10800},
1377
1377
  {-1}, {-1},
data/lib/date.rb CHANGED
@@ -30,6 +30,8 @@ class Date
30
30
  def <=>(other)
31
31
  case other
32
32
  when Infinity; return d <=> other.d
33
+ when Float::INFINITY; return d <=> 1
34
+ when -Float::INFINITY; return d <=> -1
33
35
  when Numeric; return d
34
36
  else
35
37
  begin
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: date
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tadayoshi Funaba
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-23 00:00:00.000000000 Z
11
+ date: 2021-11-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A subclass of Object includes Comparable module for handling dates.
14
14
  email:
15
- -
15
+ -
16
16
  executables: []
17
17
  extensions:
18
18
  - ext/date/extconf.rb
@@ -33,7 +33,7 @@ licenses:
33
33
  - Ruby
34
34
  - BSD-2-Clause
35
35
  metadata: {}
36
- post_install_message:
36
+ post_install_message:
37
37
  rdoc_options: []
38
38
  require_paths:
39
39
  - lib
@@ -48,8 +48,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  requirements: []
51
- rubygems_version: 3.2.2
52
- signing_key:
51
+ rubygems_version: 3.1.4
52
+ signing_key:
53
53
  specification_version: 4
54
54
  summary: A subclass of Object includes Comparable module for handling dates.
55
55
  test_files: []