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,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