Commit ca5a01d8e9969565da5036a73c3e912fecc66f40

Authored by Andrew Kane
1 parent dbd9727a
Exists in date

Return dates for day, week, month, and year

lib/groupdate/magic.rb
... ... @@ -255,6 +255,8 @@ module Groupdate
255 255 I18n.localize(key, format: options[:format].to_s, locale: locale)
256 256 end
257 257 end
  258 + elsif [:day, :week, :month, :year].include?(field)
  259 + lambda { |k| k.to_date }
258 260 else
259 261 lambda { |k| k }
260 262 end
... ...
test/enumerable_test.rb
... ... @@ -7,9 +7,9 @@ class TestEnumerable < Minitest::Test
7 7 user_a = User.new(created_at: utc.parse("2014-01-21"))
8 8 user_b = User.new(created_at: utc.parse("2014-03-14"))
9 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 14 assert_equal expected, [user_a, user_b].group_by_month(&:created_at)
15 15 end
... ...
test/test_helper.rb
... ... @@ -512,7 +512,7 @@ module TestGroupdate
512 512 def test_zeros_excludes_end
513 513 create_user "2013-05-02 00:00:00 UTC"
514 514 expected = {
515   - utc.parse("2013-05-01 00:00:00 UTC") => 0
  515 + Date.parse("2013-05-01") => 0
516 516 }
517 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 518 end
... ... @@ -520,7 +520,7 @@ module TestGroupdate
520 520 def test_zeros_previous_scope
521 521 create_user "2013-05-01 00:00:00 UTC"
522 522 expected = {
523   - utc.parse("2013-05-01 00:00:00 UTC") => 0
  523 + Date.parse("2013-05-01") => 0
524 524 }
525 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 526 end
... ... @@ -528,7 +528,7 @@ module TestGroupdate
528 528 def test_zeros_datetime
529 529 create_user "2013-05-01 00:00:00 UTC"
530 530 expected = {
531   - utc.parse("2013-05-01 00:00:00 UTC") => 1
  531 + Date.parse("2013-05-01") => 1
532 532 }
533 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 534 end
... ... @@ -543,9 +543,9 @@ module TestGroupdate
543 543 create_user "2013-05-01 00:00:00 UTC"
544 544 create_user "2013-05-03 00:00:00 UTC"
545 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 550 assert_equal expected, call_method(:day, :created_at, range: true)
551 551 end
... ... @@ -596,13 +596,13 @@ module TestGroupdate
596 596 def test_time_zone
597 597 create_user "2013-05-01 00:00:00 UTC"
598 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 600 end
601 601  
602 602 def test_where_after
603 603 create_user "2013-05-01 00:00:00 UTC"
604 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 606 assert_equal expected, User.group_by_day(:created_at).where("created_at > ?", "2013-05-01 00:00:00 UTC").count
607 607 end
608 608  
... ... @@ -611,12 +611,12 @@ module TestGroupdate
611 611 create_user "2013-05-02 00:00:00 UTC", 2
612 612 create_user "2013-05-03 00:00:00 UTC", 2
613 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 621 assert_equal expected, User.group(:score).group_by_day(:created_at).order(:score).count
622 622 end
... ... @@ -626,12 +626,12 @@ module TestGroupdate
626 626 create_user "2013-05-02 00:00:00 UTC", 2
627 627 create_user "2013-05-03 00:00:00 UTC", 2
628 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 636 assert_equal expected, User.group_by_day(:created_at).group(:score).order(:score).count
637 637 end
... ... @@ -662,14 +662,14 @@ module TestGroupdate
662 662 def test_groupdate_multiple
663 663 create_user "2013-05-01 00:00:00 UTC", 1
664 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 667 assert_equal expected, User.group_by_day(:created_at).group_by_year(:created_at).count
668 668 end
669 669  
670 670 def test_not_modified
671 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 673 relation = User.group_by_day(:created_at)
674 674 relation.where("created_at > ?", "2013-05-01 00:00:00 UTC")
675 675 assert_equal expected, relation.count
... ... @@ -691,9 +691,9 @@ module TestGroupdate
691 691 create_user "2012-05-01 00:00:00 UTC"
692 692 create_user "2014-05-01 00:00:00 UTC"
693 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 698 assert_equal expected, User.group_by_year(:created_at, last: 3).count
699 699 end
... ... @@ -785,8 +785,8 @@ module TestGroupdate
785 785 create_user(brasilia.parse("2014-10-19 02:00:00").utc.to_s)
786 786 create_user(brasilia.parse("2014-10-20 02:00:00").utc.to_s)
787 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 791 assert_equal expected, User.group_by_day(:created_at, time_zone: "Brasilia").count
792 792 end
... ... @@ -797,7 +797,7 @@ module TestGroupdate
797 797 create_user "2014-05-01 00:00:00 UTC"
798 798 create_user "2014-05-01 00:00:00 UTC"
799 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 801 end
802 802  
803 803 # helpers
... ... @@ -807,7 +807,14 @@ module TestGroupdate
807 807 end
808 808  
809 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 818 assert_equal expected, result(method, time_str, time_zone, options)
812 819 end
813 820  
... ... @@ -824,7 +831,14 @@ module TestGroupdate
824 831 create_user created_at
825 832 expected = {}
826 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 842 end
829 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 844 end
... ...