|
423 | 423 | it "can be set" do |
424 | 424 | options[:mday] = [1, 20, 31] |
425 | 425 |
|
426 | | - _(options.mday).must_equal [1, 20, 31] |
427 | | - _(options[:mday]).must_equal [1, 20, 31] |
| 426 | + _(options.mday).must_equal({default: [1, 20, 31], overrides: {}, fallback: nil}) |
| 427 | + _(options[:mday]).must_equal({default: [1, 20, 31], overrides: {}, fallback: nil}) |
| 428 | + end |
| 429 | + |
| 430 | + it "can be set to a hash" do |
| 431 | + options[:mday] = {default: [1, 20, 31]} |
| 432 | + |
| 433 | + _(options.mday).must_equal({default: [1, 20, 31], overrides: {}, fallback: nil}) |
| 434 | + _(options[:mday]).must_equal({default: [1, 20, 31], overrides: {}, fallback: nil}) |
428 | 435 | end |
429 | 436 |
|
430 | 437 | it "casts to element to array" do |
431 | 438 | options[:mday] = 1 |
432 | 439 |
|
433 | | - _(options.mday).must_equal [1] |
434 | | - _(options[:mday]).must_equal [1] |
| 440 | + _(options.mday).must_equal({default: [1], overrides: {}, fallback: nil}) |
| 441 | + _(options[:mday]).must_equal({default: [1], overrides: {}, fallback: nil}) |
| 442 | + end |
| 443 | + |
| 444 | + it "casts default element to array" do |
| 445 | + options[:mday] = {default: 1} |
| 446 | + |
| 447 | + _(options.mday).must_equal({default: [1], overrides: {}, fallback: nil}) |
| 448 | + _(options[:mday]).must_equal({default: [1], overrides: {}, fallback: nil}) |
435 | 449 | end |
436 | 450 |
|
437 | 451 | it "allows negative numbers" do |
438 | | - options[:yday] = [-1] |
| 452 | + options[:mday] = [-1] |
439 | 453 |
|
440 | | - _(options.yday).must_equal [-1] |
441 | | - _(options[:yday]).must_equal [-1] |
| 454 | + _(options.mday).must_equal({default: [-1], overrides: {}, fallback: nil}) |
| 455 | + _(options[:mday]).must_equal({default: [-1], overrides: {}, fallback: nil}) |
| 456 | + end |
| 457 | + |
| 458 | + it "allows default negative numbers" do |
| 459 | + options[:mday] = {default: [-1]} |
| 460 | + |
| 461 | + _(options.mday).must_equal({default: [-1], overrides: {}, fallback: nil}) |
| 462 | + _(options[:mday]).must_equal({default: [-1], overrides: {}, fallback: nil}) |
442 | 463 | end |
443 | 464 |
|
444 | 465 | it "casts range to array" do |
445 | 466 | options[:mday] = 6..8 |
446 | 467 |
|
447 | | - _(options.mday).must_equal [6, 7, 8] |
448 | | - _(options[:mday]).must_equal [6, 7, 8] |
| 468 | + _(options.mday).must_equal({default: [6, 7, 8], overrides: {}, fallback: nil}) |
| 469 | + _(options[:mday]).must_equal({default: [6, 7, 8], overrides: {}, fallback: nil}) |
| 470 | + end |
| 471 | + |
| 472 | + it "casts default range to array" do |
| 473 | + options[:mday] = {default: 6..8} |
| 474 | + |
| 475 | + _(options.mday).must_equal({default: [6, 7, 8], overrides: {}, fallback: nil}) |
| 476 | + _(options[:mday]).must_equal({default: [6, 7, 8], overrides: {}, fallback: nil}) |
449 | 477 | end |
450 | 478 |
|
451 | 479 | it "casts nil to empty array" do |
|
455 | 483 | _(options[:day]).must_be_nil |
456 | 484 | end |
457 | 485 |
|
| 486 | + it "casts default nil to empty array" do |
| 487 | + options[:mday] = {default: nil} |
| 488 | + |
| 489 | + _(options.mday).must_be_nil |
| 490 | + _(options[:mday]).must_be_nil |
| 491 | + end |
| 492 | + |
458 | 493 | it "raises for out of range" do |
459 | 494 | _(-> { options[:mday] = [1, 100] }).must_raise |
460 | 495 | end |
| 496 | + |
| 497 | + it "raises for default out of range" do |
| 498 | + _(-> { options[:mday] = {default: [1, 100]} }).must_raise |
| 499 | + end |
| 500 | + |
| 501 | + it "raises for array override" do |
| 502 | + _(-> { options[:mday] = {default: 31, february: [28, 29]} }).must_raise |
| 503 | + end |
| 504 | + |
| 505 | + it "raises for array fallback" do |
| 506 | + _(-> { options[:mday] = {default: 31, fallback: [28, 29]} }).must_raise |
| 507 | + end |
| 508 | + |
| 509 | + it "allows negative overrides" do |
| 510 | + options[:mday] = {default: 31, february: -1} |
| 511 | + |
| 512 | + _(options.mday).must_equal({default: [31], overrides: {february: -1}, fallback: nil}) |
| 513 | + _(options[:mday]).must_equal({default: [31], overrides: {february: -1}, fallback: nil}) |
| 514 | + end |
| 515 | + |
| 516 | + it "allows negative fallback" do |
| 517 | + options[:mday] = {default: 31, fallback: -1} |
| 518 | + |
| 519 | + _(options.mday).must_equal({default: [31], overrides: {}, fallback: -1}) |
| 520 | + _(options[:mday]).must_equal({default: [31], overrides: {}, fallback: -1}) |
| 521 | + end |
| 522 | + |
| 523 | + it "raises for override out of range" do |
| 524 | + _(-> { options[:mday] = {default: 31, february: 100} }).must_raise |
| 525 | + end |
| 526 | + |
| 527 | + it "raises for fallback out of range" do |
| 528 | + _(-> { options[:mday] = {default: 31, fallback: 100} }).must_raise |
| 529 | + end |
| 530 | + |
| 531 | + it "collects overrides" do |
| 532 | + options[:mday] = {default: 31, september: 30, february: 28} |
| 533 | + |
| 534 | + _(options.mday).must_equal({default: [31], overrides: {september: 30, february: 28}, fallback: nil}) |
| 535 | + _(options[:mday]).must_equal({default: [31], overrides: {september: 30, february: 28}, fallback: nil}) |
| 536 | + end |
| 537 | + |
| 538 | + it "flattens overrides" do |
| 539 | + options[:mday] = {:default => 31, [:september, :april, :june, :november] => 30, :february => 28} |
| 540 | + |
| 541 | + _(options.mday).must_equal({default: [31], overrides: {september: 30, april: 30, june: 30, november: 30, february: 28}, fallback: nil}) |
| 542 | + _(options[:mday]).must_equal({default: [31], overrides: {september: 30, april: 30, june: 30, november: 30, february: 28}, fallback: nil}) |
| 543 | + end |
461 | 544 | end |
462 | 545 |
|
463 | 546 | describe "#yday" do |
|
767 | 850 | options[:on] = {friday: 13} |
768 | 851 |
|
769 | 852 | _(options[:day]).must_equal [5] |
770 | | - _(options[:mday]).must_equal [13] |
| 853 | + _(options[:mday]).must_equal({default: [13], overrides: {}, fallback: nil}) |
771 | 854 | _(options[:on]).must_equal(friday: 13) |
772 | 855 | end |
773 | 856 |
|
|
776 | 859 | options[:on] = {tuesday: 2..8} |
777 | 860 |
|
778 | 861 | _(options[:day]).must_equal [2] |
779 | | - _(options[:mday]).must_equal((2..8).to_a) |
| 862 | + _(options[:mday]).must_equal({default: (2..8).to_a, overrides: {}, fallback: nil}) |
780 | 863 | _(options[:month]).must_equal [11] |
781 | 864 | end |
782 | 865 |
|
783 | 866 | it "decompose month name => month day to month and mday" do |
784 | 867 | options[:on] = {january: 31} |
785 | 868 |
|
786 | 869 | _(options[:month]).must_equal [1] |
787 | | - _(options[:mday]).must_equal [31] |
| 870 | + _(options[:mday]).must_equal({default: [31], overrides: {}, fallback: nil}) |
788 | 871 | end |
789 | 872 |
|
790 | 873 | it { _(-> { options[:on] = -3 }).must_raise Montrose::ConfigurationError } |
|
0 commit comments