Commit ca5a01d8e9969565da5036a73c3e912fecc66f40
1 parent
dbd9727a
Exists in
date
Return dates for day, week, month, and year
Showing
3 changed files
with
49 additions
and
33 deletions
Show diff stats
lib/groupdate/magic.rb
@@ -255,6 +255,8 @@ module Groupdate | @@ -255,6 +255,8 @@ module Groupdate | ||
255 | I18n.localize(key, format: options[:format].to_s, locale: locale) | 255 | I18n.localize(key, format: options[:format].to_s, locale: locale) |
256 | end | 256 | end |
257 | end | 257 | end |
258 | + elsif [:day, :week, :month, :year].include?(field) | ||
259 | + lambda { |k| k.to_date } | ||
258 | else | 260 | else |
259 | lambda { |k| k } | 261 | lambda { |k| k } |
260 | end | 262 | end |
test/enumerable_test.rb
@@ -7,9 +7,9 @@ class TestEnumerable < Minitest::Test | @@ -7,9 +7,9 @@ class TestEnumerable < Minitest::Test | ||
7 | user_a = User.new(created_at: utc.parse("2014-01-21")) | 7 | user_a = User.new(created_at: utc.parse("2014-01-21")) |
8 | user_b = User.new(created_at: utc.parse("2014-03-14")) | 8 | user_b = User.new(created_at: utc.parse("2014-03-14")) |
9 | expected = { | 9 | expected = { |
10 | - utc.parse("2014-01-01") => [user_a], | ||
11 | - utc.parse("2014-02-01") => [], | ||
12 | - utc.parse("2014-03-01") => [user_b] | 10 | + Date.parse("2014-01-01") => [user_a], |
11 | + Date.parse("2014-02-01") => [], | ||
12 | + Date.parse("2014-03-01") => [user_b] | ||
13 | } | 13 | } |
14 | assert_equal expected, [user_a, user_b].group_by_month(&:created_at) | 14 | assert_equal expected, [user_a, user_b].group_by_month(&:created_at) |
15 | end | 15 | end |
test/test_helper.rb
@@ -512,7 +512,7 @@ module TestGroupdate | @@ -512,7 +512,7 @@ module TestGroupdate | ||
512 | def test_zeros_excludes_end | 512 | def test_zeros_excludes_end |
513 | create_user "2013-05-02 00:00:00 UTC" | 513 | create_user "2013-05-02 00:00:00 UTC" |
514 | expected = { | 514 | expected = { |
515 | - utc.parse("2013-05-01 00:00:00 UTC") => 0 | 515 | + Date.parse("2013-05-01") => 0 |
516 | } | 516 | } |
517 | assert_equal expected, call_method(:day, :created_at, range: Time.parse("2013-05-01 00:00:00 UTC")...Time.parse("2013-05-02 00:00:00 UTC")) | 517 | assert_equal expected, call_method(:day, :created_at, range: Time.parse("2013-05-01 00:00:00 UTC")...Time.parse("2013-05-02 00:00:00 UTC")) |
518 | end | 518 | end |
@@ -520,7 +520,7 @@ module TestGroupdate | @@ -520,7 +520,7 @@ module TestGroupdate | ||
520 | def test_zeros_previous_scope | 520 | def test_zeros_previous_scope |
521 | create_user "2013-05-01 00:00:00 UTC" | 521 | create_user "2013-05-01 00:00:00 UTC" |
522 | expected = { | 522 | expected = { |
523 | - utc.parse("2013-05-01 00:00:00 UTC") => 0 | 523 | + Date.parse("2013-05-01") => 0 |
524 | } | 524 | } |
525 | assert_equal expected, User.where("id = 0").group_by_day(:created_at, range: Time.parse("2013-05-01 00:00:00 UTC")..Time.parse("2013-05-01 23:59:59 UTC")).count | 525 | assert_equal expected, User.where("id = 0").group_by_day(:created_at, range: Time.parse("2013-05-01 00:00:00 UTC")..Time.parse("2013-05-01 23:59:59 UTC")).count |
526 | end | 526 | end |
@@ -528,7 +528,7 @@ module TestGroupdate | @@ -528,7 +528,7 @@ module TestGroupdate | ||
528 | def test_zeros_datetime | 528 | def test_zeros_datetime |
529 | create_user "2013-05-01 00:00:00 UTC" | 529 | create_user "2013-05-01 00:00:00 UTC" |
530 | expected = { | 530 | expected = { |
531 | - utc.parse("2013-05-01 00:00:00 UTC") => 1 | 531 | + Date.parse("2013-05-01") => 1 |
532 | } | 532 | } |
533 | assert_equal expected, call_method(:day, :created_at, range: DateTime.parse("2013-05-01 00:00:00 UTC")..DateTime.parse("2013-05-01 00:00:00 UTC")) | 533 | assert_equal expected, call_method(:day, :created_at, range: DateTime.parse("2013-05-01 00:00:00 UTC")..DateTime.parse("2013-05-01 00:00:00 UTC")) |
534 | end | 534 | end |
@@ -543,9 +543,9 @@ module TestGroupdate | @@ -543,9 +543,9 @@ module TestGroupdate | ||
543 | create_user "2013-05-01 00:00:00 UTC" | 543 | create_user "2013-05-01 00:00:00 UTC" |
544 | create_user "2013-05-03 00:00:00 UTC" | 544 | create_user "2013-05-03 00:00:00 UTC" |
545 | expected = { | 545 | expected = { |
546 | - utc.parse("2013-05-01 00:00:00 UTC") => 1, | ||
547 | - utc.parse("2013-05-02 00:00:00 UTC") => 0, | ||
548 | - utc.parse("2013-05-03 00:00:00 UTC") => 1 | 546 | + Date.parse("2013-05-01") => 1, |
547 | + Date.parse("2013-05-02") => 0, | ||
548 | + Date.parse("2013-05-03") => 1 | ||
549 | } | 549 | } |
550 | assert_equal expected, call_method(:day, :created_at, range: true) | 550 | assert_equal expected, call_method(:day, :created_at, range: true) |
551 | end | 551 | end |
@@ -596,13 +596,13 @@ module TestGroupdate | @@ -596,13 +596,13 @@ module TestGroupdate | ||
596 | def test_time_zone | 596 | def test_time_zone |
597 | create_user "2013-05-01 00:00:00 UTC" | 597 | create_user "2013-05-01 00:00:00 UTC" |
598 | time_zone = "Pacific Time (US & Canada)" | 598 | time_zone = "Pacific Time (US & Canada)" |
599 | - assert_equal time_zone, call_method(:day, :created_at, time_zone: time_zone).keys.first.time_zone.name | 599 | + assert_equal time_zone, call_method(:hour, :created_at, time_zone: time_zone).keys.first.time_zone.name |
600 | end | 600 | end |
601 | 601 | ||
602 | def test_where_after | 602 | def test_where_after |
603 | create_user "2013-05-01 00:00:00 UTC" | 603 | create_user "2013-05-01 00:00:00 UTC" |
604 | create_user "2013-05-02 00:00:00 UTC" | 604 | create_user "2013-05-02 00:00:00 UTC" |
605 | - expected = {utc.parse("2013-05-02 00:00:00 UTC") => 1} | 605 | + expected = {Date.parse("2013-05-02") => 1} |
606 | assert_equal expected, User.group_by_day(:created_at).where("created_at > ?", "2013-05-01 00:00:00 UTC").count | 606 | assert_equal expected, User.group_by_day(:created_at).where("created_at > ?", "2013-05-01 00:00:00 UTC").count |
607 | end | 607 | end |
608 | 608 | ||
@@ -611,12 +611,12 @@ module TestGroupdate | @@ -611,12 +611,12 @@ module TestGroupdate | ||
611 | create_user "2013-05-02 00:00:00 UTC", 2 | 611 | create_user "2013-05-02 00:00:00 UTC", 2 |
612 | create_user "2013-05-03 00:00:00 UTC", 2 | 612 | create_user "2013-05-03 00:00:00 UTC", 2 |
613 | expected = { | 613 | expected = { |
614 | - [1, utc.parse("2013-05-01 00:00:00 UTC")] => 1, | ||
615 | - [1, utc.parse("2013-05-02 00:00:00 UTC")] => 0, | ||
616 | - [1, utc.parse("2013-05-03 00:00:00 UTC")] => 0, | ||
617 | - [2, utc.parse("2013-05-01 00:00:00 UTC")] => 0, | ||
618 | - [2, utc.parse("2013-05-02 00:00:00 UTC")] => 1, | ||
619 | - [2, utc.parse("2013-05-03 00:00:00 UTC")] => 1 | 614 | + [1, Date.parse("2013-05-01")] => 1, |
615 | + [1, Date.parse("2013-05-02")] => 0, | ||
616 | + [1, Date.parse("2013-05-03")] => 0, | ||
617 | + [2, Date.parse("2013-05-01")] => 0, | ||
618 | + [2, Date.parse("2013-05-02")] => 1, | ||
619 | + [2, Date.parse("2013-05-03")] => 1 | ||
620 | } | 620 | } |
621 | assert_equal expected, User.group(:score).group_by_day(:created_at).order(:score).count | 621 | assert_equal expected, User.group(:score).group_by_day(:created_at).order(:score).count |
622 | end | 622 | end |
@@ -626,12 +626,12 @@ module TestGroupdate | @@ -626,12 +626,12 @@ module TestGroupdate | ||
626 | create_user "2013-05-02 00:00:00 UTC", 2 | 626 | create_user "2013-05-02 00:00:00 UTC", 2 |
627 | create_user "2013-05-03 00:00:00 UTC", 2 | 627 | create_user "2013-05-03 00:00:00 UTC", 2 |
628 | expected = { | 628 | expected = { |
629 | - [utc.parse("2013-05-01 00:00:00 UTC"), 1] => 1, | ||
630 | - [utc.parse("2013-05-02 00:00:00 UTC"), 1] => 0, | ||
631 | - [utc.parse("2013-05-03 00:00:00 UTC"), 1] => 0, | ||
632 | - [utc.parse("2013-05-01 00:00:00 UTC"), 2] => 0, | ||
633 | - [utc.parse("2013-05-02 00:00:00 UTC"), 2] => 1, | ||
634 | - [utc.parse("2013-05-03 00:00:00 UTC"), 2] => 1 | 629 | + [Date.parse("2013-05-01"), 1] => 1, |
630 | + [Date.parse("2013-05-02"), 1] => 0, | ||
631 | + [Date.parse("2013-05-03"), 1] => 0, | ||
632 | + [Date.parse("2013-05-01"), 2] => 0, | ||
633 | + [Date.parse("2013-05-02"), 2] => 1, | ||
634 | + [Date.parse("2013-05-03"), 2] => 1 | ||
635 | } | 635 | } |
636 | assert_equal expected, User.group_by_day(:created_at).group(:score).order(:score).count | 636 | assert_equal expected, User.group_by_day(:created_at).group(:score).order(:score).count |
637 | end | 637 | end |
@@ -662,14 +662,14 @@ module TestGroupdate | @@ -662,14 +662,14 @@ module TestGroupdate | ||
662 | def test_groupdate_multiple | 662 | def test_groupdate_multiple |
663 | create_user "2013-05-01 00:00:00 UTC", 1 | 663 | create_user "2013-05-01 00:00:00 UTC", 1 |
664 | expected = { | 664 | expected = { |
665 | - [utc.parse("2013-05-01 00:00:00 UTC"), utc.parse("2013-01-01 00:00:00 UTC")] => 1 | 665 | + [Date.parse("2013-05-01"), Date.parse("2013-01-01")] => 1 |
666 | } | 666 | } |
667 | assert_equal expected, User.group_by_day(:created_at).group_by_year(:created_at).count | 667 | assert_equal expected, User.group_by_day(:created_at).group_by_year(:created_at).count |
668 | end | 668 | end |
669 | 669 | ||
670 | def test_not_modified | 670 | def test_not_modified |
671 | create_user "2013-05-01 00:00:00 UTC" | 671 | create_user "2013-05-01 00:00:00 UTC" |
672 | - expected = {utc.parse("2013-05-01 00:00:00 UTC") => 1} | 672 | + expected = {Date.parse("2013-05-01") => 1} |
673 | relation = User.group_by_day(:created_at) | 673 | relation = User.group_by_day(:created_at) |
674 | relation.where("created_at > ?", "2013-05-01 00:00:00 UTC") | 674 | relation.where("created_at > ?", "2013-05-01 00:00:00 UTC") |
675 | assert_equal expected, relation.count | 675 | assert_equal expected, relation.count |
@@ -691,9 +691,9 @@ module TestGroupdate | @@ -691,9 +691,9 @@ module TestGroupdate | ||
691 | create_user "2012-05-01 00:00:00 UTC" | 691 | create_user "2012-05-01 00:00:00 UTC" |
692 | create_user "2014-05-01 00:00:00 UTC" | 692 | create_user "2014-05-01 00:00:00 UTC" |
693 | expected = { | 693 | expected = { |
694 | - utc.parse("2013-01-01 00:00:00 UTC") => 0, | ||
695 | - utc.parse("2014-01-01 00:00:00 UTC") => 1, | ||
696 | - utc.parse("2015-01-01 00:00:00 UTC") => 0 | 694 | + Date.parse("2013-01-01") => 0, |
695 | + Date.parse("2014-01-01") => 1, | ||
696 | + Date.parse("2015-01-01") => 0 | ||
697 | } | 697 | } |
698 | assert_equal expected, User.group_by_year(:created_at, last: 3).count | 698 | assert_equal expected, User.group_by_year(:created_at, last: 3).count |
699 | end | 699 | end |
@@ -785,8 +785,8 @@ module TestGroupdate | @@ -785,8 +785,8 @@ module TestGroupdate | ||
785 | create_user(brasilia.parse("2014-10-19 02:00:00").utc.to_s) | 785 | create_user(brasilia.parse("2014-10-19 02:00:00").utc.to_s) |
786 | create_user(brasilia.parse("2014-10-20 02:00:00").utc.to_s) | 786 | create_user(brasilia.parse("2014-10-20 02:00:00").utc.to_s) |
787 | expected = { | 787 | expected = { |
788 | - brasilia.parse("2014-10-19 01:00:00") => 1, | ||
789 | - brasilia.parse("2014-10-20 00:00:00") => 1 | 788 | + Date.parse("2014-10-19") => 1, |
789 | + Date.parse("2014-10-20") => 1 | ||
790 | } | 790 | } |
791 | assert_equal expected, User.group_by_day(:created_at, time_zone: "Brasilia").count | 791 | assert_equal expected, User.group_by_day(:created_at, time_zone: "Brasilia").count |
792 | end | 792 | end |
@@ -797,7 +797,7 @@ module TestGroupdate | @@ -797,7 +797,7 @@ module TestGroupdate | ||
797 | create_user "2014-05-01 00:00:00 UTC" | 797 | create_user "2014-05-01 00:00:00 UTC" |
798 | create_user "2014-05-01 00:00:00 UTC" | 798 | create_user "2014-05-01 00:00:00 UTC" |
799 | create_user "2014-05-03 00:00:00 UTC" | 799 | create_user "2014-05-03 00:00:00 UTC" |
800 | - assert_equal 2, User.group_by_day(:created_at, carry_forward: true).count[utc.parse("2014-05-02 00:00:00 UTC")] | 800 | + assert_equal 2, User.group_by_day(:created_at, carry_forward: true).count[Date.parse("2014-05-02")] |
801 | end | 801 | end |
802 | 802 | ||
803 | # helpers | 803 | # helpers |
@@ -807,7 +807,14 @@ module TestGroupdate | @@ -807,7 +807,14 @@ module TestGroupdate | ||
807 | end | 807 | end |
808 | 808 | ||
809 | def assert_result_time(method, expected, time_str, time_zone = false, options = {}) | 809 | def assert_result_time(method, expected, time_str, time_zone = false, options = {}) |
810 | - expected = {utc.parse(expected).in_time_zone(time_zone ? "Pacific Time (US & Canada)" : utc) => 1} | 810 | + key = |
811 | + if [:day, :week, :month, :year].include?(method) | ||
812 | + Date.parse(expected) | ||
813 | + else | ||
814 | + utc.parse(expected).in_time_zone(time_zone ? "Pacific Time (US & Canada)" : utc) | ||
815 | + end | ||
816 | + | ||
817 | + expected = {key => 1} | ||
811 | assert_equal expected, result(method, time_str, time_zone, options) | 818 | assert_equal expected, result(method, time_str, time_zone, options) |
812 | end | 819 | end |
813 | 820 | ||
@@ -824,7 +831,14 @@ module TestGroupdate | @@ -824,7 +831,14 @@ module TestGroupdate | ||
824 | create_user created_at | 831 | create_user created_at |
825 | expected = {} | 832 | expected = {} |
826 | keys.each_with_index do |key, i| | 833 | keys.each_with_index do |key, i| |
827 | - expected[utc.parse(key).in_time_zone(time_zone ? "Pacific Time (US & Canada)" : utc)] = i == 1 ? 1 : 0 | 834 | + k = |
835 | + if [:day, :week, :month, :year].include?(method) | ||
836 | + Date.parse(key) | ||
837 | + else | ||
838 | + utc.parse(key).in_time_zone(time_zone ? "Pacific Time (US & Canada)" : utc) | ||
839 | + end | ||
840 | + | ||
841 | + expected[k] = i == 1 ? 1 : 0 | ||
828 | end | 842 | end |
829 | assert_equal expected, call_method(method, :created_at, options.merge(time_zone: time_zone ? "Pacific Time (US & Canada)" : nil, range: Time.parse(range_start)..Time.parse(range_end))) | 843 | assert_equal expected, call_method(method, :created_at, options.merge(time_zone: time_zone ? "Pacific Time (US & Canada)" : nil, range: Time.parse(range_start)..Time.parse(range_end))) |
830 | end | 844 | end |