groupdate 2.5.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e5361eb118741ab6aae412f5463db1813f85fe2
4
- data.tar.gz: 0aa40c54eadeb578914db75567bff930fb0dbef8
3
+ metadata.gz: 1388ce20a1c1a41fdd0fe87d5cda7d28522ad2d2
4
+ data.tar.gz: 62660c4bb7aabbf6e619274038f2335c0dbed0dd
5
5
  SHA512:
6
- metadata.gz: e642a4eb6084d4a1d339a193b549dd34e13298d082f42ecc58b02803c37296e62d8f5df7773a5cfbe4e8ba087ece17b7b52c362219d0cc307ab2210e25a88f4e
7
- data.tar.gz: f55793c8987b1dd1d49ce7dbba35ddaf8033e5a4b627e983b208df5daf296b150afc4816fcd8c425bfaccc1c3842a83af631cb50e5d21b0fa700d36ef563b5e7
6
+ metadata.gz: 471f406dd29530940a51bd7b1547a3a19d8399098a6949d50a94e08be5fefb1e256cd3b996f0f964101541858b4744d85e6e85d1eb2c162e35ffc3fec2eb4df5
7
+ data.tar.gz: d199353fbccd7b4c1aa74609e4c28d187fc19036785c236cd23e4d0559a2c50a380fe3e273fd8a1f324d13b42e9e3b90b9ebc75bea7527a2661083bca1e2f43f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 3.0.0
2
+
3
+ Breaking changes
4
+
5
+ - `Date` objects are now returned for day, week, month, quarter, and year by default. Use `dates: false` for the previous behavior, or change this globally with `Groupdate.dates = false`.
6
+ - Array and hash methods no longer return the entire series by default. Use `series: true` for the previous behavior.
7
+ - The `series: false` option now returns the correct types and order, and plays nicely with other options.
8
+
1
9
  ## 2.5.3
2
10
 
3
11
  - All tests green with `mysql` gem
data/README.md CHANGED
@@ -7,7 +7,7 @@ The simplest way to group by:
7
7
  - hour of the day
8
8
  - and more (complete list below)
9
9
 
10
- :tada: Time zones supported!! **the best part**
10
+ :tada: Time zones - including daylight saving time - supported!! **the best part**
11
11
 
12
12
  :cake: Get the entire series - **the other best part**
13
13
 
@@ -19,14 +19,16 @@ Supports PostgreSQL and MySQL, plus arrays and hashes
19
19
 
20
20
  :cupid: Goes hand in hand with [Chartkick](http://ankane.github.io/chartkick/)
21
21
 
22
+ **Groupdate 3.0 was just released!** See [instructions for upgrading](#30). If you use Chartkick with Groupdate, we recommend Chartkick 2.0 and above.
23
+
22
24
  ## Get Started
23
25
 
24
26
  ```ruby
25
27
  User.group_by_day(:created_at).count
26
28
  # {
27
- # 2013-04-16 00:00:00 UTC => 50,
28
- # 2013-04-17 00:00:00 UTC => 100,
29
- # 2013-04-18 00:00:00 UTC => 34
29
+ # Sat, 28 May 2016 => 50,
30
+ # Sun, 29 May 2016 => 100,
31
+ # Mon, 30 May 2016 => 34
30
32
  # }
31
33
  ```
32
34
 
@@ -65,9 +67,9 @@ or
65
67
  ```ruby
66
68
  User.group_by_week(:created_at, time_zone: "Pacific Time (US & Canada)").count
67
69
  # {
68
- # 2013-03-10 00:00:00 PST => 70,
69
- # 2013-03-17 00:00:00 PDT => 54,
70
- # 2013-03-24 00:00:00 PDT => 80
70
+ # Sun, 06 Mar 2016 => 70,
71
+ # Sun, 13 Mar 2016 => 54,
72
+ # Sun, 20 Mar 2016 => 80
71
73
  # }
72
74
  ```
73
75
 
@@ -137,24 +139,7 @@ User.group_by_day(:created_at).order("day desc").count
137
139
 
138
140
  ### Keys
139
141
 
140
- Keys are returned as time objects for the start of the period.
141
-
142
- To get keys as date objects instead, use:
143
-
144
- ```ruby
145
- User.group_by_day(:created_at, dates: true).count
146
- # {
147
- # 2013-03-10 => 70,
148
- # 2013-03-17 => 54,
149
- # 2013-03-24 => 80
150
- # }
151
- ```
152
-
153
- or make this the default with:
154
-
155
- ```ruby
156
- Groupdate.dates = true
157
- ```
142
+ Keys are returned as date or time objects for the start of the period.
158
143
 
159
144
  To get keys in a different format, use:
160
145
 
@@ -229,9 +214,19 @@ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
229
214
 
230
215
  or copy and paste [these statements](https://gist.githubusercontent.com/ankane/1d6b0022173186accbf0/raw/time_zone_support.sql) into a SQL console.
231
216
 
232
- ## Upgrading to 2.0
217
+ ## Upgrading
218
+
219
+ ### 3.0
220
+
221
+ Groupdate 3.0 brings a number of improvements. Here are a few to be aware of:
222
+
223
+ - `Date` objects are now returned for day, week, month, quarter, and year by default. Use `dates: false` for the previous behavior, or change this globally with `Groupdate.dates = false`.
224
+ - Array and hash methods no longer return the entire series by default. Use `series: true` for the previous behavior.
225
+ - The `series: false` option now returns the correct type and order, and plays nicely with other options.
226
+
227
+ ### 2.0
233
228
 
234
- Groupdate 2.0 brings a number a great improvements. Here are two things to be aware of:
229
+ Groupdate 2.0 brings a number of improvements. Here are two things to be aware of:
235
230
 
236
231
  - the entire series is returned by default
237
232
  - `ActiveSupport::TimeWithZone` keys are now returned for every database adapter - adapters previously returned `Time` or `String` keys
data/groupdate.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "https://github.com/ankane/groupdate"
14
14
  spec.license = "MIT"
15
15
 
16
- spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
+ spec.files = `git ls-files`.split($/)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
data/lib/groupdate.rb CHANGED
@@ -12,7 +12,7 @@ module Groupdate
12
12
  mattr_accessor :week_start, :day_start, :time_zone, :dates
13
13
  self.week_start = :sun
14
14
  self.day_start = 0
15
- self.dates = false
15
+ self.dates = true
16
16
  end
17
17
 
18
18
  require "groupdate/enumerable"
@@ -26,7 +26,7 @@ module ActiveRecord
26
26
  module Associations
27
27
  class CollectionProxy
28
28
  if ActiveRecord::VERSION::MAJOR == 3
29
- delegate *Groupdate::METHODS, to: :scoped
29
+ delegate(*Groupdate::METHODS, to: :scoped)
30
30
  end
31
31
  end
32
32
  end
@@ -15,11 +15,7 @@ module Groupdate
15
15
 
16
16
  def group_by(enum, &_block)
17
17
  group = enum.group_by { |v| v = yield(v); v ? round_time(v) : nil }
18
- if options[:series] == false
19
- group
20
- else
21
- series(group, [])
22
- end
18
+ series(group, [], false, false, false)
23
19
  end
24
20
 
25
21
  def relation(column, relation)
@@ -90,22 +86,18 @@ module Groupdate
90
86
  end
91
87
 
92
88
  group = relation.group(Groupdate::OrderHack.new(relation.send(:sanitize_sql_array, query), field, time_zone))
93
- if options[:series] == false
94
- group
95
- else
96
- relation =
97
- if time_range.is_a?(Range)
98
- # doesn't matter whether we include the end of a ... range - it will be excluded later
99
- group.where("#{column} >= ? AND #{column} <= ?", time_range.first, time_range.last)
100
- else
101
- group.where("#{column} IS NOT NULL")
102
- end
89
+ relation =
90
+ if time_range.is_a?(Range)
91
+ # doesn't matter whether we include the end of a ... range - it will be excluded later
92
+ group.where("#{column} >= ? AND #{column} <= ?", time_range.first, time_range.last)
93
+ else
94
+ group.where("#{column} IS NOT NULL")
95
+ end
103
96
 
104
- # TODO do not change object state
105
- @group_index = group.group_values.size - 1
97
+ # TODO do not change object state
98
+ @group_index = group.group_values.size - 1
106
99
 
107
- Groupdate::Series.new(self, relation)
108
- end
100
+ Groupdate::Series.new(self, relation)
109
101
  end
110
102
 
111
103
  def perform(relation, method, *args, &block)
@@ -175,7 +167,7 @@ module Groupdate
175
167
  end
176
168
  end
177
169
 
178
- def series(count, default_value, multiple_groups = false, reverse = false)
170
+ def series(count, default_value, multiple_groups = false, reverse = false, series_default = true)
179
171
  reverse = !reverse if options[:reverse]
180
172
 
181
173
  series =
@@ -238,6 +230,7 @@ module Groupdate
238
230
  series = series.to_a.reverse if !multiple_groups && reverse
239
231
 
240
232
  locale = options[:locale] || I18n.locale
233
+ use_dates = options.key?(:dates) ? options[:dates] : Groupdate.dates
241
234
  key_format =
242
235
  if options[:format]
243
236
  if options[:format].respond_to?(:call)
@@ -258,12 +251,17 @@ module Groupdate
258
251
  I18n.localize(key, format: options[:format], locale: locale)
259
252
  end
260
253
  end
261
- elsif (options[:dates] || (Groupdate.dates && !options.key?(:dates))) && [:day, :week, :month, :quarter, :year].include?(field)
254
+ elsif [:day, :week, :month, :quarter, :year].include?(field) && use_dates
262
255
  lambda { |k| k.to_date }
263
256
  else
264
257
  lambda { |k| k }
265
258
  end
266
259
 
260
+ use_series = options.key?(:series) ? options[:series] : series_default
261
+ if use_series == false
262
+ series = series.select { |k| count[k] }
263
+ end
264
+
267
265
  value = 0
268
266
  Hash[series.map do |k|
269
267
  value = count[k] || (@options[:carry_forward] && value) || default_value
@@ -1,3 +1,3 @@
1
1
  module Groupdate
2
- VERSION = "2.5.3"
2
+ VERSION = "3.0.0"
3
3
  end
@@ -8,13 +8,23 @@ class TestEnumerable < Minitest::Test
8
8
  user_a = create_user("2014-01-21")
9
9
  user_b = create_user("2014-03-14")
10
10
  expected = {
11
- utc.parse("2014-01-01") => [user_a],
12
- utc.parse("2014-02-01") => [],
13
- utc.parse("2014-03-01") => [user_b]
11
+ Date.parse("2014-01-01") => [user_a],
12
+ Date.parse("2014-03-01") => [user_b]
14
13
  }
15
14
  assert_equal expected, [user_a, user_b].group_by_month(&:created_at)
16
15
  end
17
16
 
17
+ def test_enumerable_series
18
+ user_a = create_user("2014-01-21")
19
+ user_b = create_user("2014-03-14")
20
+ expected = {
21
+ Date.parse("2014-01-01") => [user_a],
22
+ Date.parse("2014-02-01") => [],
23
+ Date.parse("2014-03-01") => [user_b]
24
+ }
25
+ assert_equal expected, [user_a, user_b].group_by_month(series: true, &:created_at)
26
+ end
27
+
18
28
  def test_no_block
19
29
  assert_raises(ArgumentError) { [].group_by_day(:created_at) }
20
30
  end
@@ -3,4 +3,4 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in searchkick.gemspec
4
4
  gemspec path: "../../"
5
5
 
6
- gem "activerecord", "~> 5.0.0.beta1"
6
+ gem "activerecord", "~> 5.0.0.rc1"
data/test/test_helper.rb CHANGED
@@ -51,11 +51,11 @@ end
51
51
 
52
52
  module TestDatabase
53
53
  def test_zeros_previous_scope
54
- create_user "2013-05-01 00:00:00 UTC"
54
+ create_user "2013-05-01"
55
55
  expected = {
56
- utc.parse("2013-05-01 00:00:00 UTC") => 0
56
+ Date.parse("2013-05-01") => 0
57
57
  }
58
- 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
58
+ assert_equal expected, User.where("id = 0").group_by_day(:created_at, range: Date.parse("2013-05-01")..Date.parse("2013-05-01 23:59:59 UTC")).count
59
59
  end
60
60
 
61
61
  def test_order_hour_of_day
@@ -81,51 +81,51 @@ module TestDatabase
81
81
  end
82
82
 
83
83
  def test_previous_scopes
84
- create_user "2013-05-01 00:00:00 UTC"
84
+ create_user "2013-05-01"
85
85
  assert_empty User.where("id = 0").group_by_day(:created_at).count
86
86
  end
87
87
 
88
88
  def test_where_after
89
- create_user "2013-05-01 00:00:00 UTC"
90
- create_user "2013-05-02 00:00:00 UTC"
91
- expected = {utc.parse("2013-05-02 00:00:00 UTC") => 1}
92
- assert_equal expected, User.group_by_day(:created_at).where("created_at > ?", "2013-05-01 00:00:00 UTC").count
89
+ create_user "2013-05-01"
90
+ create_user "2013-05-02"
91
+ expected = {Date.parse("2013-05-02") => 1}
92
+ assert_equal expected, User.group_by_day(:created_at).where("created_at > ?", "2013-05-01").count
93
93
  end
94
94
 
95
95
  def test_group_before
96
- create_user "2013-05-01 00:00:00 UTC", 1
97
- create_user "2013-05-02 00:00:00 UTC", 2
98
- create_user "2013-05-03 00:00:00 UTC", 2
96
+ create_user "2013-05-01", 1
97
+ create_user "2013-05-02", 2
98
+ create_user "2013-05-03", 2
99
99
  expected = {
100
- [1, utc.parse("2013-05-01 00:00:00 UTC")] => 1,
101
- [1, utc.parse("2013-05-02 00:00:00 UTC")] => 0,
102
- [1, utc.parse("2013-05-03 00:00:00 UTC")] => 0,
103
- [2, utc.parse("2013-05-01 00:00:00 UTC")] => 0,
104
- [2, utc.parse("2013-05-02 00:00:00 UTC")] => 1,
105
- [2, utc.parse("2013-05-03 00:00:00 UTC")] => 1
100
+ [1, Date.parse("2013-05-01")] => 1,
101
+ [1, Date.parse("2013-05-02")] => 0,
102
+ [1, Date.parse("2013-05-03")] => 0,
103
+ [2, Date.parse("2013-05-01")] => 0,
104
+ [2, Date.parse("2013-05-02")] => 1,
105
+ [2, Date.parse("2013-05-03")] => 1
106
106
  }
107
107
  assert_equal expected, User.group(:score).group_by_day(:created_at).order(:score).count
108
108
  end
109
109
 
110
110
  def test_group_after
111
- create_user "2013-05-01 00:00:00 UTC", 1
112
- create_user "2013-05-02 00:00:00 UTC", 2
113
- create_user "2013-05-03 00:00:00 UTC", 2
111
+ create_user "2013-05-01", 1
112
+ create_user "2013-05-02", 2
113
+ create_user "2013-05-03", 2
114
114
  expected = {
115
- [utc.parse("2013-05-01 00:00:00 UTC"), 1] => 1,
116
- [utc.parse("2013-05-02 00:00:00 UTC"), 1] => 0,
117
- [utc.parse("2013-05-03 00:00:00 UTC"), 1] => 0,
118
- [utc.parse("2013-05-01 00:00:00 UTC"), 2] => 0,
119
- [utc.parse("2013-05-02 00:00:00 UTC"), 2] => 1,
120
- [utc.parse("2013-05-03 00:00:00 UTC"), 2] => 1
115
+ [Date.parse("2013-05-01"), 1] => 1,
116
+ [Date.parse("2013-05-02"), 1] => 0,
117
+ [Date.parse("2013-05-03"), 1] => 0,
118
+ [Date.parse("2013-05-01"), 2] => 0,
119
+ [Date.parse("2013-05-02"), 2] => 1,
120
+ [Date.parse("2013-05-03"), 2] => 1
121
121
  }
122
122
  assert_equal expected, User.group_by_day(:created_at).group(:score).order(:score).count
123
123
  end
124
124
 
125
125
  def test_group_day_of_week
126
- create_user "2013-05-01 00:00:00 UTC", 1
127
- create_user "2013-05-02 00:00:00 UTC", 2
128
- create_user "2013-05-03 00:00:00 UTC", 2
126
+ create_user "2013-05-01", 1
127
+ create_user "2013-05-02", 2
128
+ create_user "2013-05-03", 2
129
129
  expected = {
130
130
  [1, 0] => 0,
131
131
  [1, 1] => 0,
@@ -146,9 +146,9 @@ module TestDatabase
146
146
  end
147
147
 
148
148
  def test_groupdate_multiple
149
- create_user "2013-05-01 00:00:00 UTC", 1
149
+ create_user "2013-05-01", 1
150
150
  expected = {
151
- [utc.parse("2013-05-01 00:00:00 UTC"), utc.parse("2013-01-01 00:00:00 UTC")] => 1
151
+ [Date.parse("2013-05-01"), Date.parse("2013-01-01")] => 1
152
152
  }
153
153
  assert_equal expected, User.group_by_day(:created_at).group_by_year(:created_at).count
154
154
  end
@@ -165,10 +165,10 @@ module TestDatabase
165
165
  end
166
166
 
167
167
  def test_not_modified
168
- create_user "2013-05-01 00:00:00 UTC"
169
- expected = {utc.parse("2013-05-01 00:00:00 UTC") => 1}
168
+ create_user "2013-05-01"
169
+ expected = {Date.parse("2013-05-01") => 1}
170
170
  relation = User.group_by_day(:created_at)
171
- relation.where("created_at > ?", "2013-05-01 00:00:00 UTC")
171
+ relation.where("created_at > ?", "2013-05-01")
172
172
  assert_equal expected, relation.count
173
173
  end
174
174
 
@@ -185,38 +185,38 @@ module TestDatabase
185
185
  end
186
186
 
187
187
  def test_last
188
- create_user "#{this_year - 3}-01-01 00:00:00 UTC"
189
- create_user "#{this_year - 1}-01-01 00:00:00 UTC"
188
+ create_user "#{this_year - 3}-01-01"
189
+ create_user "#{this_year - 1}-01-01"
190
190
  expected = {
191
- utc.parse("#{this_year - 2}-01-01 00:00:00 UTC") => 0,
192
- utc.parse("#{this_year - 1}-01-01 00:00:00 UTC") => 1,
193
- utc.parse("#{this_year}-01-01 00:00:00 UTC") => 0
191
+ Date.parse("#{this_year - 2}-01-01") => 0,
192
+ Date.parse("#{this_year - 1}-01-01") => 1,
193
+ Date.parse("#{this_year}-01-01") => 0
194
194
  }
195
195
  assert_equal expected, User.group_by_year(:created_at, last: 3).count
196
196
  end
197
197
 
198
198
  def test_current
199
- create_user "#{this_year - 3}-01-01 00:00:00 UTC"
200
- create_user "#{this_year - 1}-01-01 00:00:00 UTC"
199
+ create_user "#{this_year - 3}-01-01"
200
+ create_user "#{this_year - 1}-01-01"
201
201
  expected = {
202
- utc.parse("#{this_year - 2}-01-01 00:00:00 UTC") => 0,
203
- utc.parse("#{this_year - 1}-01-01 00:00:00 UTC") => 1
202
+ Date.parse("#{this_year - 2}-01-01") => 0,
203
+ Date.parse("#{this_year - 1}-01-01") => 1
204
204
  }
205
205
  assert_equal expected, User.group_by_year(:created_at, last: 2, current: false).count
206
206
  end
207
207
 
208
208
  def test_format_locale
209
- create_user "2014-10-01 00:00:00 UTC"
209
+ create_user "2014-10-01"
210
210
  assert_equal ({"Okt" => 1}), User.group_by_day(:created_at, format: "%b", locale: :de).count
211
211
  end
212
212
 
213
213
  def test_format_locale_by_symbol
214
- create_user "2014-10-01 00:00:00 UTC"
214
+ create_user "2014-10-01"
215
215
  assert_equal ({"Okt 1, 2014" => 1}), User.group_by_day(:created_at, format: :special, locale: :de).count
216
216
  end
217
217
 
218
218
  def test_format_locale_global
219
- create_user "2014-10-01 00:00:00 UTC"
219
+ create_user "2014-10-01"
220
220
  I18n.locale = :de
221
221
  assert_equal ({"Okt" => 1}), User.group_by_day(:created_at, format: "%b").count
222
222
  ensure
@@ -224,7 +224,7 @@ module TestDatabase
224
224
  end
225
225
 
226
226
  def test_format_multiple_groups
227
- create_user "2014-03-01 00:00:00 UTC"
227
+ create_user "2014-03-01"
228
228
  assert_equal ({["Sun", 1] => 1}), User.group_by_week(:created_at, format: "%a").group(:score).count
229
229
  assert_equal ({[1, "Sun"] => 1}), User.group(:score).group_by_week(:created_at, format: "%a").count
230
230
  end
@@ -258,10 +258,10 @@ module TestDatabase
258
258
  # default value
259
259
 
260
260
  def test_default_value
261
- create_user "#{this_year}-01-01 00:00:00 UTC"
261
+ create_user "#{this_year}-01-01"
262
262
  expected = {
263
- utc.parse("#{this_year - 1}-01-01 00:00:00 UTC") => nil,
264
- utc.parse("#{this_year}-01-01 00:00:00 UTC") => 1
263
+ Date.parse("#{this_year - 1}-01-01") => nil,
264
+ Date.parse("#{this_year}-01-01") => 1
265
265
  }
266
266
  assert_equal expected, User.group_by_year(:created_at, last: 2, default_value: nil).count
267
267
  end
@@ -269,10 +269,10 @@ module TestDatabase
269
269
  # associations
270
270
 
271
271
  def test_associations
272
- user = create_user("2014-03-01 00:00:00 UTC")
272
+ user = create_user("2014-03-01")
273
273
  user.posts.create!(created_at: "2014-04-01 00:00:00 UTC")
274
274
  expected = {
275
- utc.parse("2014-04-01 00:00:00 UTC") => 1
275
+ Date.parse("2014-04-01") => 1
276
276
  }
277
277
  assert_equal expected, user.posts.group_by_day(:created_at).count
278
278
  end
@@ -293,8 +293,8 @@ module TestDatabase
293
293
  create_user(brasilia.parse("2014-10-19 02:00:00").utc.to_s)
294
294
  create_user(brasilia.parse("2014-10-20 02:00:00").utc.to_s)
295
295
  expected = {
296
- brasilia.parse("2014-10-19 01:00:00") => 1,
297
- brasilia.parse("2014-10-20 00:00:00") => 1
296
+ Date.parse("2014-10-19") => 1,
297
+ Date.parse("2014-10-20") => 1
298
298
  }
299
299
  assert_equal expected, User.group_by_day(:created_at, time_zone: "Brasilia").count
300
300
  end
@@ -302,10 +302,10 @@ module TestDatabase
302
302
  # carry_forward option
303
303
 
304
304
  def test_carry_forward
305
- create_user "2014-05-01 00:00:00 UTC"
306
- create_user "2014-05-01 00:00:00 UTC"
307
- create_user "2014-05-03 00:00:00 UTC"
308
- assert_equal 2, User.group_by_day(:created_at, carry_forward: true).count[utc.parse("2014-05-02 00:00:00 UTC")]
305
+ create_user "2014-05-01"
306
+ create_user "2014-05-01"
307
+ create_user "2014-05-03"
308
+ assert_equal 2, User.group_by_day(:created_at, carry_forward: true).count[Date.parse("2014-05-02")]
309
309
  end
310
310
 
311
311
  # dates
@@ -333,7 +333,7 @@ module TestDatabase
333
333
  )
334
334
 
335
335
  # hack for MySQL adapter
336
- user.update_attributes(created_at: nil, created_on: nil) if created_at.nil?
336
+ # user.update_attributes(created_at: nil, created_on: nil) if created_at.nil?
337
337
 
338
338
  user
339
339
  end
@@ -389,217 +389,217 @@ module TestGroupdate
389
389
  # day
390
390
 
391
391
  def test_day_end_of_day
392
- assert_result_time :day, "2013-05-03 00:00:00 UTC", "2013-05-03 23:59:59"
392
+ assert_result_date :day, "2013-05-03", "2013-05-03 23:59:59"
393
393
  end
394
394
 
395
395
  def test_day_start_of_day
396
- assert_result_time :day, "2013-05-04 00:00:00 UTC", "2013-05-04 00:00:00"
396
+ assert_result_date :day, "2013-05-04", "2013-05-04 00:00:00"
397
397
  end
398
398
 
399
399
  def test_day_end_of_day_with_time_zone
400
- assert_result_time :day, "2013-05-02 00:00:00 PDT", "2013-05-03 06:59:59", true
400
+ assert_result_date :day, "2013-05-02", "2013-05-03 06:59:59", true
401
401
  end
402
402
 
403
403
  def test_day_start_of_day_with_time_zone
404
- assert_result_time :day, "2013-05-03 00:00:00 PDT", "2013-05-03 07:00:00", true
404
+ assert_result_date :day, "2013-05-03", "2013-05-03 07:00:00", true
405
405
  end
406
406
 
407
407
  # day hour starts at 2 am
408
408
 
409
409
  def test_test_day_end_of_day_day_start_2am
410
- assert_result_time :day, "2013-05-03 02:00:00 UTC", "2013-05-04 01:59:59", false, day_start: 2
410
+ assert_result_date :day, "2013-05-03", "2013-05-04 01:59:59", false, day_start: 2
411
411
  end
412
412
 
413
413
  def test_test_day_start_of_day_day_start_2am
414
- assert_result_time :day, "2013-05-03 02:00:00 UTC", "2013-05-03 02:00:00", false, day_start: 2
414
+ assert_result_date :day, "2013-05-03", "2013-05-03 02:00:00", false, day_start: 2
415
415
  end
416
416
 
417
417
  def test_test_day_end_of_day_with_time_zone_day_start_2am
418
- assert_result_time :day, "2013-05-03 02:00:00 PDT", "2013-05-04 07:59:59", true, day_start: 2
418
+ assert_result_date :day, "2013-05-03", "2013-05-04 07:59:59", true, day_start: 2
419
419
  end
420
420
 
421
421
  def test_test_day_start_of_day_with_time_zone_day_start_2am
422
- assert_result_time :day, "2013-05-03 02:00:00 PDT", "2013-05-03 09:00:00", true, day_start: 2
422
+ assert_result_date :day, "2013-05-03", "2013-05-03 09:00:00", true, day_start: 2
423
423
  end
424
424
 
425
425
  # week
426
426
 
427
427
  def test_week_end_of_week
428
- assert_result_time :week, "2013-03-17 00:00:00 UTC", "2013-03-23 23:59:59"
428
+ assert_result_date :week, "2013-03-17", "2013-03-23 23:59:59"
429
429
  end
430
430
 
431
431
  def test_week_start_of_week
432
- assert_result_time :week, "2013-03-24 00:00:00 UTC", "2013-03-24 00:00:00"
432
+ assert_result_date :week, "2013-03-24", "2013-03-24 00:00:00"
433
433
  end
434
434
 
435
435
  def test_week_end_of_week_with_time_zone
436
- assert_result_time :week, "2013-03-10 00:00:00 PST", "2013-03-17 06:59:59", true
436
+ assert_result_date :week, "2013-03-10", "2013-03-17 06:59:59", true
437
437
  end
438
438
 
439
439
  def test_week_start_of_week_with_time_zone
440
- assert_result_time :week, "2013-03-17 00:00:00 PDT", "2013-03-17 07:00:00", true
440
+ assert_result_date :week, "2013-03-17", "2013-03-17 07:00:00", true
441
441
  end
442
442
 
443
443
  # week starting on monday
444
444
 
445
445
  def test_week_end_of_week_mon
446
- assert_result_time :week, "2013-03-18 00:00:00 UTC", "2013-03-24 23:59:59", false, week_start: :mon
446
+ assert_result_date :week, "2013-03-18", "2013-03-24 23:59:59", false, week_start: :mon
447
447
  end
448
448
 
449
449
  def test_week_start_of_week_mon
450
- assert_result_time :week, "2013-03-25 00:00:00 UTC", "2013-03-25 00:00:00", false, week_start: :mon
450
+ assert_result_date :week, "2013-03-25", "2013-03-25 00:00:00", false, week_start: :mon
451
451
  end
452
452
 
453
453
  def test_week_end_of_week_with_time_zone_mon
454
- assert_result_time :week, "2013-03-11 00:00:00 PDT", "2013-03-18 06:59:59", true, week_start: :mon
454
+ assert_result_date :week, "2013-03-11", "2013-03-18 06:59:59", true, week_start: :mon
455
455
  end
456
456
 
457
457
  def test_week_start_of_week_with_time_zone_mon
458
- assert_result_time :week, "2013-03-18 00:00:00 PDT", "2013-03-18 07:00:00", true, week_start: :mon
458
+ assert_result_date :week, "2013-03-18", "2013-03-18 07:00:00", true, week_start: :mon
459
459
  end
460
460
 
461
461
  # week starting on saturday
462
462
 
463
463
  def test_week_end_of_week_sat
464
- assert_result_time :week, "2013-03-16 00:00:00 UTC", "2013-03-22 23:59:59", false, week_start: :sat
464
+ assert_result_date :week, "2013-03-16", "2013-03-22 23:59:59", false, week_start: :sat
465
465
  end
466
466
 
467
467
  def test_week_start_of_week_sat
468
- assert_result_time :week, "2013-03-23 00:00:00 UTC", "2013-03-23 00:00:00", false, week_start: :sat
468
+ assert_result_date :week, "2013-03-23", "2013-03-23 00:00:00", false, week_start: :sat
469
469
  end
470
470
 
471
471
  def test_week_end_of_week_with_time_zone_sat
472
- assert_result_time :week, "2013-03-09 00:00:00 PST", "2013-03-16 06:59:59", true, week_start: :sat
472
+ assert_result_date :week, "2013-03-09", "2013-03-16 06:59:59", true, week_start: :sat
473
473
  end
474
474
 
475
475
  def test_week_start_of_week_with_time_zone_sat
476
- assert_result_time :week, "2013-03-16 00:00:00 PDT", "2013-03-16 07:00:00", true, week_start: :sat
476
+ assert_result_date :week, "2013-03-16", "2013-03-16 07:00:00", true, week_start: :sat
477
477
  end
478
478
 
479
479
  # week starting at 2am
480
480
 
481
481
  def test_week_end_of_week_day_start_2am
482
- assert_result_time :week, "2013-03-17 02:00:00 UTC", "2013-03-24 01:59:59", false, day_start: 2
482
+ assert_result_date :week, "2013-03-17", "2013-03-24 01:59:59", false, day_start: 2
483
483
  end
484
484
 
485
485
  def test_week_start_of_week_day_start_2am
486
- assert_result_time :week, "2013-03-17 02:00:00 UTC", "2013-03-17 02:00:00", false, day_start: 2
486
+ assert_result_date :week, "2013-03-17", "2013-03-17 02:00:00", false, day_start: 2
487
487
  end
488
488
 
489
489
  def test_week_end_of_week_day_with_time_zone_start_2am
490
- assert_result_time :week, "2013-03-17 02:00:00 PDT", "2013-03-24 08:59:59", true, day_start: 2
490
+ assert_result_date :week, "2013-03-17", "2013-03-24 08:59:59", true, day_start: 2
491
491
  end
492
492
 
493
493
  def test_week_start_of_week_day_with_time_zone_start_2am
494
- assert_result_time :week, "2013-03-17 02:00:00 PDT", "2013-03-17 09:00:00", true, day_start: 2
494
+ assert_result_date :week, "2013-03-17", "2013-03-17 09:00:00", true, day_start: 2
495
495
  end
496
496
 
497
497
  # month
498
498
 
499
499
  def test_month_end_of_month
500
- assert_result_time :month, "2013-05-01 00:00:00 UTC", "2013-05-31 23:59:59"
500
+ assert_result_date :month, "2013-05-01", "2013-05-31 23:59:59"
501
501
  end
502
502
 
503
503
  def test_month_start_of_month
504
- assert_result_time :month, "2013-06-01 00:00:00 UTC", "2013-06-01 00:00:00"
504
+ assert_result_date :month, "2013-06-01", "2013-06-01 00:00:00"
505
505
  end
506
506
 
507
507
  def test_month_end_of_month_with_time_zone
508
- assert_result_time :month, "2013-05-01 00:00:00 PDT", "2013-06-01 06:59:59", true
508
+ assert_result_date :month, "2013-05-01", "2013-06-01 06:59:59", true
509
509
  end
510
510
 
511
511
  def test_month_start_of_month_with_time_zone
512
- assert_result_time :month, "2013-06-01 00:00:00 PDT", "2013-06-01 07:00:00", true
512
+ assert_result_date :month, "2013-06-01", "2013-06-01 07:00:00", true
513
513
  end
514
514
 
515
515
  # month starts at 2am
516
516
 
517
517
  def test_month_end_of_month_day_start_2am
518
- assert_result_time :month, "2013-03-01 02:00:00 UTC", "2013-04-01 01:59:59", false, day_start: 2
518
+ assert_result_date :month, "2013-03-01", "2013-04-01 01:59:59", false, day_start: 2
519
519
  end
520
520
 
521
521
  def test_month_start_of_month_day_start_2am
522
- assert_result_time :month, "2013-03-01 02:00:00 UTC", "2013-03-01 02:00:00", false, day_start: 2
522
+ assert_result_date :month, "2013-03-01", "2013-03-01 02:00:00", false, day_start: 2
523
523
  end
524
524
 
525
525
  def test_month_end_of_month_with_time_zone_day_start_2am
526
- assert_result_time :month, "2013-03-01 02:00:00 PST", "2013-04-01 08:59:59", true, day_start: 2
526
+ assert_result_date :month, "2013-03-01", "2013-04-01 08:59:59", true, day_start: 2
527
527
  end
528
528
 
529
529
  def test_month_start_of_month_with_time_zone_day_start_2am
530
- assert_result_time :month, "2013-03-01 02:00:00 PST", "2013-03-01 10:00:00", true, day_start: 2
530
+ assert_result_date :month, "2013-03-01", "2013-03-01 10:00:00", true, day_start: 2
531
531
  end
532
532
 
533
533
  # quarter
534
534
 
535
535
  def test_quarter_end_of_quarter
536
- assert_result_time :quarter, "2013-04-01 00:00:00 UTC", "2013-06-30 23:59:59"
536
+ assert_result_date :quarter, "2013-04-01", "2013-06-30 23:59:59"
537
537
  end
538
538
 
539
539
  def test_quarter_start_of_quarter
540
- assert_result_time :quarter, "2013-04-01 00:00:00 UTC", "2013-04-01 00:00:00"
540
+ assert_result_date :quarter, "2013-04-01", "2013-04-01 00:00:00"
541
541
  end
542
542
 
543
543
  def test_quarter_end_of_quarter_with_time_zone
544
- assert_result_time :quarter, "2013-04-01 00:00:00 PDT", "2013-07-01 06:59:59", true
544
+ assert_result_date :quarter, "2013-04-01", "2013-07-01 06:59:59", true
545
545
  end
546
546
 
547
547
  def test_quarter_start_of_quarter_with_time_zone
548
- assert_result_time :quarter, "2013-04-01 00:00:00 PDT", "2013-04-01 07:00:00", true
548
+ assert_result_date :quarter, "2013-04-01", "2013-04-01 07:00:00", true
549
549
  end
550
550
 
551
551
  # quarter starts at 2am
552
552
 
553
553
  def test_quarter_end_of_quarter_day_start_2am
554
- assert_result_time :quarter, "2013-04-01 02:00:00 UTC", "2013-07-01 01:59:59", false, day_start: 2
554
+ assert_result_date :quarter, "2013-04-01", "2013-07-01 01:59:59", false, day_start: 2
555
555
  end
556
556
 
557
557
  def test_quarter_start_of_quarter_day_start_2am
558
- assert_result_time :quarter, "2013-04-01 02:00:00 UTC", "2013-04-01 02:00:00", false, day_start: 2
558
+ assert_result_date :quarter, "2013-04-01", "2013-04-01 02:00:00", false, day_start: 2
559
559
  end
560
560
 
561
561
  def test_quarter_end_of_quarter_with_time_zone_day_start_2am
562
- assert_result_time :quarter, "2013-01-01 02:00:00 PST", "2013-04-01 08:59:59", true, day_start: 2
562
+ assert_result_date :quarter, "2013-01-01", "2013-04-01 08:59:59", true, day_start: 2
563
563
  end
564
564
 
565
565
  def test_quarter_start_of_quarter_with_time_zone_day_start_2am
566
- assert_result_time :quarter, "2013-01-01 02:00:00 PST", "2013-01-01 10:00:00", true, day_start: 2
566
+ assert_result_date :quarter, "2013-01-01", "2013-01-01 10:00:00", true, day_start: 2
567
567
  end
568
568
 
569
569
  # year
570
570
 
571
571
  def test_year_end_of_year
572
- assert_result_time :year, "2013-01-01 00:00:00 UTC", "2013-12-31 23:59:59"
572
+ assert_result_date :year, "2013-01-01", "2013-12-31 23:59:59"
573
573
  end
574
574
 
575
575
  def test_year_start_of_year
576
- assert_result_time :year, "2014-01-01 00:00:00 UTC", "2014-01-01 00:00:00"
576
+ assert_result_date :year, "2014-01-01", "2014-01-01 00:00:00"
577
577
  end
578
578
 
579
579
  def test_year_end_of_year_with_time_zone
580
- assert_result_time :year, "2013-01-01 00:00:00 PST", "2014-01-01 07:59:59", true
580
+ assert_result_date :year, "2013-01-01", "2014-01-01 07:59:59", true
581
581
  end
582
582
 
583
583
  def test_year_start_of_year_with_time_zone
584
- assert_result_time :year, "2014-01-01 00:00:00 PST", "2014-01-01 08:00:00", true
584
+ assert_result_date :year, "2014-01-01", "2014-01-01 08:00:00", true
585
585
  end
586
586
 
587
587
  # year starts at 2am
588
588
 
589
589
  def test_year_end_of_year_day_start_2am
590
- assert_result_time :year, "2013-01-01 02:00:00 UTC", "2014-01-01 01:59:59", false, day_start: 2
590
+ assert_result_date :year, "2013-01-01", "2014-01-01 01:59:59", false, day_start: 2
591
591
  end
592
592
 
593
593
  def test_year_start_of_year_day_start_2am
594
- assert_result_time :year, "2013-01-01 02:00:00 UTC", "2013-01-01 02:00:00", false, day_start: 2
594
+ assert_result_date :year, "2013-01-01", "2013-01-01 02:00:00", false, day_start: 2
595
595
  end
596
596
 
597
597
  def test_year_end_of_year_with_time_zone_day_start_2am
598
- assert_result_time :year, "2013-01-01 02:00:00 PST", "2014-01-01 09:59:59", true, day_start: 2
598
+ assert_result_date :year, "2013-01-01", "2014-01-01 09:59:59", true, day_start: 2
599
599
  end
600
600
 
601
601
  def test_year_start_of_year_with_time_zone_day_start_2am
602
- assert_result_time :year, "2013-01-01 02:00:00 PST", "2013-01-01 10:00:00", true, day_start: 2
602
+ assert_result_date :year, "2013-01-01", "2013-01-01 10:00:00", true, day_start: 2
603
603
  end
604
604
 
605
605
  # hour of day
@@ -765,68 +765,68 @@ module TestGroupdate
765
765
  end
766
766
 
767
767
  def test_zeros_day
768
- assert_zeros :day, "2013-05-01 20:00:00 UTC", ["2013-04-30 00:00:00 UTC", "2013-05-01 00:00:00 UTC", "2013-05-02 00:00:00 UTC"], "2013-04-30 00:00:00 UTC", "2013-05-02 23:59:59 UTC"
768
+ assert_zeros_date :day, "2013-05-01 20:00:00 UTC", ["2013-04-30", "2013-05-01", "2013-05-02"], "2013-04-30 00:00:00 UTC", "2013-05-02 23:59:59 UTC"
769
769
  end
770
770
 
771
771
  def test_zeros_day_time_zone
772
- assert_zeros :day, "2013-05-01 20:00:00 PDT", ["2013-04-30 00:00:00 PDT", "2013-05-01 00:00:00 PDT", "2013-05-02 00:00:00 PDT"], "2013-04-30 00:00:00 PDT", "2013-05-02 23:59:59 PDT", true
772
+ assert_zeros_date :day, "2013-05-01 20:00:00 PDT", ["2013-04-30", "2013-05-01", "2013-05-02"], "2013-04-30 00:00:00 PDT", "2013-05-02 23:59:59 PDT", true
773
773
  end
774
774
 
775
775
  def test_zeros_week
776
- assert_zeros :week, "2013-05-01 20:00:00 UTC", ["2013-04-21 00:00:00 UTC", "2013-04-28 00:00:00 UTC", "2013-05-05 00:00:00 UTC"], "2013-04-27 23:59:59 UTC", "2013-05-11 23:59:59 UTC"
776
+ assert_zeros_date :week, "2013-05-01 20:00:00 UTC", ["2013-04-21", "2013-04-28", "2013-05-05"], "2013-04-27 23:59:59 UTC", "2013-05-11 23:59:59 UTC"
777
777
  end
778
778
 
779
779
  def test_zeros_week_time_zone
780
- assert_zeros :week, "2013-05-01 20:00:00 PDT", ["2013-04-21 00:00:00 PDT", "2013-04-28 00:00:00 PDT", "2013-05-05 00:00:00 PDT"], "2013-04-27 23:59:59 PDT", "2013-05-11 23:59:59 PDT", true
780
+ assert_zeros_date :week, "2013-05-01 20:00:00 PDT", ["2013-04-21", "2013-04-28", "2013-05-05"], "2013-04-27 23:59:59 PDT", "2013-05-11 23:59:59 PDT", true
781
781
  end
782
782
 
783
783
  def test_zeros_week_mon
784
- assert_zeros :week, "2013-05-01 20:00:00 UTC", ["2013-04-22 00:00:00 UTC", "2013-04-29 00:00:00 UTC", "2013-05-06 00:00:00 UTC"], "2013-04-27 23:59:59 UTC", "2013-05-11 23:59:59 UTC", false, week_start: :mon
784
+ assert_zeros_date :week, "2013-05-01 20:00:00 UTC", ["2013-04-22", "2013-04-29", "2013-05-06"], "2013-04-27 23:59:59 UTC", "2013-05-11 23:59:59 UTC", false, week_start: :mon
785
785
  end
786
786
 
787
787
  def test_zeros_week_time_zone_mon
788
- assert_zeros :week, "2013-05-01 20:00:00 PDT", ["2013-04-22 00:00:00 PDT", "2013-04-29 00:00:00 PDT", "2013-05-06 00:00:00 PDT"], "2013-04-27 23:59:59 PDT", "2013-05-11 23:59:59 PDT", true, week_start: :mon
788
+ assert_zeros_date :week, "2013-05-01 20:00:00 PDT", ["2013-04-22", "2013-04-29", "2013-05-06"], "2013-04-27 23:59:59 PDT", "2013-05-11 23:59:59 PDT", true, week_start: :mon
789
789
  end
790
790
 
791
791
  def test_zeros_week_sat
792
- assert_zeros :week, "2013-05-01 20:00:00 UTC", ["2013-04-20 00:00:00 UTC", "2013-04-27 00:00:00 UTC", "2013-05-04 00:00:00 UTC"], "2013-04-26 23:59:59 UTC", "2013-05-10 23:59:59 UTC", false, week_start: :sat
792
+ assert_zeros_date :week, "2013-05-01 20:00:00 UTC", ["2013-04-20", "2013-04-27", "2013-05-04"], "2013-04-26 23:59:59 UTC", "2013-05-10 23:59:59 UTC", false, week_start: :sat
793
793
  end
794
794
 
795
795
  def test_zeros_week_time_zone_sat
796
- assert_zeros :week, "2013-05-01 20:00:00 PDT", ["2013-04-20 00:00:00 PDT", "2013-04-27 00:00:00 PDT", "2013-05-04 00:00:00 PDT"], "2013-04-26 23:59:59 PDT", "2013-05-10 23:59:59 PDT", true, week_start: :sat
796
+ assert_zeros_date :week, "2013-05-01 20:00:00 PDT", ["2013-04-20", "2013-04-27", "2013-05-04"], "2013-04-26 23:59:59 PDT", "2013-05-10 23:59:59 PDT", true, week_start: :sat
797
797
  end
798
798
 
799
799
  def test_zeros_month
800
- assert_zeros :month, "2013-04-16 20:00:00 UTC", ["2013-03-01 00:00:00 UTC", "2013-04-01 00:00:00 UTC", "2013-05-01 00:00:00 UTC"], "2013-03-01 00:00:00 UTC", "2013-05-31 23:59:59 UTC"
800
+ assert_zeros_date :month, "2013-04-16 20:00:00 UTC", ["2013-03-01", "2013-04-01", "2013-05-01"], "2013-03-01", "2013-05-31 23:59:59 UTC"
801
801
  end
802
802
 
803
803
  def test_zeros_month_time_zone
804
- assert_zeros :month, "2013-04-16 20:00:00 PDT", ["2013-03-01 00:00:00 PST", "2013-04-01 00:00:00 PDT", "2013-05-01 00:00:00 PDT"], "2013-03-01 00:00:00 PST", "2013-05-31 23:59:59 PDT", true
804
+ assert_zeros_date :month, "2013-04-16 20:00:00 PDT", ["2013-03-01", "2013-04-01", "2013-05-01"], "2013-03-01 00:00:00 PST", "2013-05-31 23:59:59 PDT", true
805
805
  end
806
806
 
807
807
  def test_zeros_quarter
808
- assert_zeros :quarter, "2013-04-16 20:00:00 UTC", ["2013-01-01 00:00:00 UTC", "2013-04-01 00:00:00 UTC", "2013-07-01 00:00:00 UTC"], "2013-01-01 00:00:00 UTC", "2013-09-30 23:59:59 UTC"
808
+ assert_zeros_date :quarter, "2013-04-16 20:00:00 UTC", ["2013-01-01", "2013-04-01", "2013-07-01"], "2013-01-01", "2013-09-30 23:59:59 UTC"
809
809
  end
810
810
 
811
811
  def test_zeros_quarter_time_zone
812
- assert_zeros :quarter, "2013-04-16 20:00:00 PDT", ["2013-01-01 00:00:00 PST", "2013-04-01 00:00:00 PDT", "2013-07-01 00:00:00 PDT"], "2013-01-01 00:00:00 PST", "2013-09-30 23:59:59 PDT", true
812
+ assert_zeros_date :quarter, "2013-04-16 20:00:00 PDT", ["2013-01-01", "2013-04-01", "2013-07-01"], "2013-01-01 00:00:00 PST", "2013-09-30 23:59:59 PDT", true
813
813
  end
814
814
 
815
815
  def test_zeros_year
816
- assert_zeros :year, "2013-04-16 20:00:00 UTC", ["2012-01-01 00:00:00 UTC", "2013-01-01 00:00:00 UTC", "2014-01-01 00:00:00 UTC"], "2012-01-01 00:00:00 UTC", "2014-12-31 23:59:59 UTC"
816
+ assert_zeros_date :year, "2013-04-16 20:00:00 UTC", ["2012-01-01", "2013-01-01", "2014-01-01"], "2012-01-01", "2014-12-31 23:59:59 UTC"
817
817
  end
818
818
 
819
819
  def test_zeros_year_time_zone
820
- assert_zeros :year, "2013-04-16 20:00:00 PDT", ["2012-01-01 00:00:00 PST", "2013-01-01 00:00:00 PST", "2014-01-01 00:00:00 PST"], "2012-01-01 00:00:00 PST", "2014-12-31 23:59:59 PST", true
820
+ assert_zeros_date :year, "2013-04-16 20:00:00 PDT", ["2012-01-01 00:00:00 PST", "2013-01-01 00:00:00 PST", "2014-01-01 00:00:00 PST"], "2012-01-01 00:00:00 PST", "2014-12-31 23:59:59 PST", true
821
821
  end
822
822
 
823
823
  def test_zeros_day_of_week
824
- create_user "2013-05-01 00:00:00 UTC"
824
+ create_user "2013-05-01"
825
825
  expected = {}
826
826
  7.times do |n|
827
827
  expected[n] = n == 3 ? 1 : 0
828
828
  end
829
- assert_equal expected, call_method(:day_of_week, :created_at, {})
829
+ assert_equal expected, call_method(:day_of_week, :created_at, {series: true})
830
830
  end
831
831
 
832
832
  def test_zeros_hour_of_day
@@ -835,130 +835,130 @@ module TestGroupdate
835
835
  24.times do |n|
836
836
  expected[n] = n == 20 ? 1 : 0
837
837
  end
838
- assert_equal expected, call_method(:hour_of_day, :created_at, {})
838
+ assert_equal expected, call_method(:hour_of_day, :created_at, {series: true})
839
839
  end
840
840
 
841
841
  def test_zeros_day_of_month
842
- create_user "1978-12-18 00:00:00 UTC"
842
+ create_user "1978-12-18"
843
843
  expected = {}
844
844
  (1..31).each do |n|
845
845
  expected[n] = n == 18 ? 1 : 0
846
846
  end
847
- assert_equal expected, call_method(:day_of_month, :created_at, {})
847
+ assert_equal expected, call_method(:day_of_month, :created_at, {series: true})
848
848
  end
849
849
 
850
850
  def test_zeros_month_of_year
851
- create_user "2013-05-01 00:00:00 UTC"
851
+ create_user "2013-05-01"
852
852
  expected = {}
853
853
  (1..12).each do |n|
854
854
  expected[n] = n == 5 ? 1 : 0
855
855
  end
856
- assert_equal expected, call_method(:month_of_year, :created_at, {})
856
+ assert_equal expected, call_method(:month_of_year, :created_at, {series: true})
857
857
  end
858
858
 
859
859
  def test_zeros_excludes_end
860
- create_user "2013-05-02 00:00:00 UTC"
860
+ create_user "2013-05-02"
861
861
  expected = {
862
- utc.parse("2013-05-01 00:00:00 UTC") => 0
862
+ Date.parse("2013-05-01") => 0
863
863
  }
864
- 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"))
864
+ assert_equal expected, call_method(:day, :created_at, range: Date.parse("2013-05-01")...Date.parse("2013-05-02"), series: true)
865
865
  end
866
866
 
867
867
  def test_zeros_datetime
868
- create_user "2013-05-01 00:00:00 UTC"
868
+ create_user "2013-05-01"
869
869
  expected = {
870
- utc.parse("2013-05-01 00:00:00 UTC") => 1
870
+ Date.parse("2013-05-01") => 1
871
871
  }
872
- 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"))
872
+ assert_equal expected, call_method(:day, :created_at, range: DateTime.parse("2013-05-01")..DateTime.parse("2013-05-01"), series: true)
873
873
  end
874
874
 
875
875
  def test_zeros_null_value
876
876
  create_user nil
877
- assert_equal 0, call_method(:hour_of_day, :created_at, range: true)[0]
877
+ assert_equal 0, call_method(:hour_of_day, :created_at, range: true, series: true)[0]
878
878
  end
879
879
 
880
880
  def test_zeroes_range_true
881
- create_user "2013-05-01 00:00:00 UTC"
882
- create_user "2013-05-03 00:00:00 UTC"
881
+ create_user "2013-05-01"
882
+ create_user "2013-05-03"
883
883
  expected = {
884
- utc.parse("2013-05-01 00:00:00 UTC") => 1,
885
- utc.parse("2013-05-02 00:00:00 UTC") => 0,
886
- utc.parse("2013-05-03 00:00:00 UTC") => 1
884
+ Date.parse("2013-05-01") => 1,
885
+ Date.parse("2013-05-02") => 0,
886
+ Date.parse("2013-05-03") => 1
887
887
  }
888
- assert_equal expected, call_method(:day, :created_at, range: true)
888
+ assert_equal expected, call_method(:day, :created_at, range: true, series: true)
889
889
  end
890
890
 
891
891
  # week_start
892
892
 
893
893
  def test_week_start
894
894
  Groupdate.week_start = :mon
895
- assert_result_time :week, "2013-03-18 00:00:00 UTC", "2013-03-24 23:59:59"
895
+ assert_result_date :week, "2013-03-18", "2013-03-24 23:59:59"
896
896
  end
897
897
 
898
898
  def test_week_start_and_start_option
899
899
  Groupdate.week_start = :mon
900
- assert_result_time :week, "2013-03-16 00:00:00 UTC", "2013-03-22 23:59:59", false, week_start: :sat
900
+ assert_result_date :week, "2013-03-16", "2013-03-22 23:59:59", false, week_start: :sat
901
901
  end
902
902
 
903
903
  # misc
904
904
 
905
905
  def test_order_hour_of_day_reverse_option
906
- assert_equal 23, call_method(:hour_of_day, :created_at, reverse: true).keys.first
906
+ assert_equal 23, call_method(:hour_of_day, :created_at, reverse: true, series: true).keys.first
907
907
  end
908
908
 
909
909
  def test_time_zone
910
- create_user "2013-05-01 00:00:00 UTC"
910
+ create_user "2013-05-01"
911
911
  time_zone = "Pacific Time (US & Canada)"
912
- assert_equal time_zone, call_method(:day, :created_at, time_zone: time_zone).keys.first.time_zone.name
912
+ assert_equal time_zone, call_method(:hour, :created_at, time_zone: time_zone).keys.first.time_zone.name
913
913
  end
914
914
 
915
915
  def test_format_day
916
- create_user "2014-03-01 00:00:00 UTC"
916
+ create_user "2014-03-01"
917
917
  assert_format :day, "March 1, 2014", "%B %-e, %Y"
918
918
  end
919
919
 
920
920
  def test_format_month
921
- create_user "2014-03-01 00:00:00 UTC"
921
+ create_user "2014-03-01"
922
922
  assert_format :month, "March 2014", "%B %Y"
923
923
  end
924
924
 
925
925
  def test_format_quarter
926
- create_user "2014-03-05 00:00:00 UTC"
926
+ create_user "2014-03-05"
927
927
  assert_format :quarter, "January 1, 2014", "%B %-e, %Y"
928
928
  end
929
929
 
930
930
  def test_format_year
931
- create_user "2014-03-01 00:00:00 UTC"
931
+ create_user "2014-03-01"
932
932
  assert_format :year, "2014", "%Y"
933
933
  end
934
934
 
935
935
  def test_format_hour_of_day
936
- create_user "2014-03-01 00:00:00 UTC"
936
+ create_user "2014-03-01"
937
937
  assert_format :hour_of_day, "12 am", "%-l %P"
938
938
  end
939
939
 
940
940
  def test_format_hour_of_day_day_start
941
- create_user "2014-03-01 00:00:00 UTC"
941
+ create_user "2014-03-01"
942
942
  assert_format :hour_of_day, "2 am", "%-l %P", day_start: 2
943
943
  end
944
944
 
945
945
  def test_format_day_of_week
946
- create_user "2014-03-01 00:00:00 UTC"
946
+ create_user "2014-03-01"
947
947
  assert_format :day_of_week, "Sun", "%a"
948
948
  end
949
949
 
950
950
  def test_format_day_of_week_week_start
951
- create_user "2014-03-01 00:00:00 UTC"
951
+ create_user "2014-03-01"
952
952
  assert_format :day_of_week, "Sun", "%a", week_start: :sat
953
953
  end
954
954
 
955
955
  def test_format_day_of_month
956
- create_user "2014-03-01 00:00:00 UTC"
956
+ create_user "2014-03-01"
957
957
  assert_format :day_of_month, " 1", "%e"
958
958
  end
959
959
 
960
960
  def test_format_month_of_year
961
- create_user "2014-01-01 00:00:00 UTC"
961
+ create_user "2014-01-01"
962
962
  assert_format :month_of_year, "Jan", "%b"
963
963
  end
964
964
 
@@ -983,17 +983,17 @@ module TestGroupdate
983
983
  # day start
984
984
 
985
985
  def test_day_start_decimal_end_of_day
986
- assert_result_time :day, "2013-05-03 02:30:00 UTC", "2013-05-04 02:29:59", false, day_start: 2.5
986
+ assert_result_date :day, "2013-05-03", "2013-05-04 02:29:59", false, day_start: 2.5
987
987
  end
988
988
 
989
989
  def test_day_start_decimal_start_of_day
990
- assert_result_time :day, "2013-05-03 02:30:00 UTC", "2013-05-03 02:30:00", false, day_start: 2.5
990
+ assert_result_date :day, "2013-05-03", "2013-05-03 02:30:00", false, day_start: 2.5
991
991
  end
992
992
 
993
993
  # helpers
994
994
 
995
995
  def assert_format(method, expected, format, options = {})
996
- assert_equal expected, call_method(method, :created_at, options.merge(format: format)).keys.first
996
+ assert_equal expected, call_method(method, :created_at, options.merge(format: format, series: true)).keys.first
997
997
  end
998
998
 
999
999
  def assert_result_time(method, expected, time_str, time_zone = false, options = {})
@@ -1001,6 +1001,15 @@ module TestGroupdate
1001
1001
  assert_equal expected, result(method, time_str, time_zone, options)
1002
1002
  end
1003
1003
 
1004
+ def assert_result_date(method, expected_str, time_str, time_zone = false, options = {})
1005
+ create_user time_str
1006
+ expected = {Date.parse(expected_str) => 1}
1007
+ assert_equal expected, call_method(method, :created_at, options.merge(time_zone: time_zone ? "Pacific Time (US & Canada)" : nil))
1008
+ expected = {(time_zone ? pt : utc).parse(expected_str) + options[:day_start].to_f.hours => 1}
1009
+ assert_equal expected, call_method(method, :created_at, options.merge(dates: false, time_zone: time_zone ? "Pacific Time (US & Canada)" : nil))
1010
+ # assert_equal expected, call_method(method, :created_on, options.merge(time_zone: time_zone ? "Pacific Time (US & Canada)" : nil))
1011
+ end
1012
+
1004
1013
  def assert_result(method, expected, time_str, time_zone = false, options = {})
1005
1014
  assert_equal 1, result(method, time_str, time_zone, options)[expected]
1006
1015
  end
@@ -1016,7 +1025,16 @@ module TestGroupdate
1016
1025
  keys.each_with_index do |key, i|
1017
1026
  expected[utc.parse(key).in_time_zone(time_zone ? "Pacific Time (US & Canada)" : utc)] = i == 1 ? 1 : 0
1018
1027
  end
1019
- 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)))
1028
+ assert_equal expected, call_method(method, :created_at, options.merge(series: true, time_zone: time_zone ? "Pacific Time (US & Canada)" : nil, range: Time.parse(range_start)..Time.parse(range_end)))
1029
+ end
1030
+
1031
+ def assert_zeros_date(method, created_at, keys, range_start, range_end, time_zone = nil, options = {})
1032
+ create_user created_at
1033
+ expected = {}
1034
+ keys.each_with_index do |key, i|
1035
+ expected[Date.parse(key)] = i == 1 ? 1 : 0
1036
+ end
1037
+ assert_equal expected, call_method(method, :created_at, options.merge(series: true, time_zone: time_zone ? "Pacific Time (US & Canada)" : nil, range: Time.parse(range_start)..Time.parse(range_end)))
1020
1038
  end
1021
1039
 
1022
1040
  def this_year
@@ -1027,6 +1045,10 @@ module TestGroupdate
1027
1045
  ActiveSupport::TimeZone["UTC"]
1028
1046
  end
1029
1047
 
1048
+ def pt
1049
+ ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
1050
+ end
1051
+
1030
1052
  def brasilia
1031
1053
  ActiveSupport::TimeZone["Brasilia"]
1032
1054
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groupdate
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-28 00:00:00.000000000 Z
11
+ date: 2016-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport