groupdate 4.1.2 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28ba8881c2af7869f774eceebed739e851e81d7d28b53473762260e7c4297134
4
- data.tar.gz: e0031f94b52b53255bdbe01c0f72d5c7abcb20d94b02d81bf9e31344a957919a
3
+ metadata.gz: 0d18870af57fc18006c5f176fa3138dfe36a715b16e5a6113f447aee6d3b7468
4
+ data.tar.gz: 889870a1a2db8784e28413c6071a784dff66d00b4aaf05a323e70e5d16f09fd8
5
5
  SHA512:
6
- metadata.gz: cb863625ed13dea87c18b31bf897f0e6d6c00bb02b3c41aaf08a11221cc52a8cbfea5cb4f8fe991d33552b0f9294c9c2c04bfb1c220bdcfb8688dbacc848ceed
7
- data.tar.gz: 805c5290d0652b2f82c3426fb253dc962bc9c2e4903b3edb1aa2451dc252f0c94bbc7737d3c1b8ddd429c5844ca99c8c01b1e872f1efd4980a747eb4cd2c4294
6
+ metadata.gz: 2ae29a1e8d0eb14c4ef904fbe366cb5f7029d9e94429a74f6f70073a880f2910f62d5161d39618808c09dc937185cc79ba233ac3fc7e34f983a8e32d60e0be70
7
+ data.tar.gz: 6348f6853cf2015f6777bcc63e1e416a31456a0e779678164992bd6424daca73272bb5fcb12016d1f3c085b4e14e991afa067f4f93354982e7229699f3ea2eab
@@ -1,31 +1,64 @@
1
- ## 4.1.2
1
+ ## 5.2.0 (2020-09-07)
2
+
3
+ - Added warning for non-attribute argument
4
+ - Added support for beginless and endless ranges in `range` option
5
+
6
+ ## 5.1.0 (2020-07-30)
7
+
8
+ - Added `n` option to minute and second for custom durations
9
+
10
+ ## 5.0.0 (2020-02-18)
11
+
12
+ - Added support for `week_start` for SQLite
13
+ - Added support for full weekday names
14
+ - Made `day_start` behavior consistent between Active Record and enumerable
15
+ - Made `last` option extend to end of current period
16
+ - Raise error when `day_start` and `week_start` passed to unsupported methods
17
+ - The `day_start` option no longer applies to shorter periods
18
+ - Fixed `inconsistent time zone info` errors around DST with MySQL and PostgreSQL
19
+ - Improved performance of `format` option
20
+ - Removed deprecated positional arguments for time zone and range
21
+ - Dropped support for `mysql` gem (last release was 2013)
22
+
23
+ ## 4.3.0 (2019-12-26)
24
+
25
+ - Fixed error with empty results in Ruby 2.7
26
+ - Fixed deprecation warnings in Ruby 2.7
27
+ - Deprecated positional arguments for time zone and range
28
+
29
+ ## 4.2.0 (2019-10-28)
30
+
31
+ - Added `day_of_year`
32
+ - Dropped support for Rails 4.2
33
+
34
+ ## 4.1.2 (2019-05-26)
2
35
 
3
36
  - Fixed error with empty data and `current: false`
4
37
  - Fixed error in time zone check for Rails < 5.2
5
38
  - Prevent infinite loop with endless ranges
6
39
 
7
- ## 4.1.1
40
+ ## 4.1.1 (2018-12-11)
8
41
 
9
42
  - Made column resolution consistent with `group`
10
43
  - Added support for `alias_attribute`
11
44
 
12
- ## 4.1.0
45
+ ## 4.1.0 (2018-11-04)
13
46
 
14
47
  - Many performance improvements
15
48
  - Added check for consistent time zone info
16
49
  - Fixed error message for invalid queries with MySQL and SQLite
17
50
  - Fixed issue with enumerable methods ignoring nils
18
51
 
19
- ## 4.0.2
52
+ ## 4.0.2 (2018-10-15)
20
53
 
21
54
  - Make `current` option work without `last`
22
55
  - Fixed default value for `maximum`, `minimum`, and `average` (periods with no results now return `nil` instead of `0`, pass `default_value: 0` for previous behavior)
23
56
 
24
- ## 4.0.1
57
+ ## 4.0.1 (2018-05-03)
25
58
 
26
59
  - Fixed incorrect range with `last` option near time change
27
60
 
28
- ## 4.0.0
61
+ ## 4.0.0 (2018-02-21)
29
62
 
30
63
  - Custom calculation methods are supported by default - `groupdate_calculation_methods` is no longer needed
31
64
 
@@ -37,37 +70,37 @@ Breaking changes
37
70
  - `week_start` now affects `day_of_week`
38
71
  - Removed support for `reverse_order` (was never supported in Rails 5)
39
72
 
40
- ## 3.2.1
73
+ ## 3.2.1 (2018-02-21)
41
74
 
42
75
  - Added `minute_of_hour`
43
76
  - Added support for `unscoped`
44
77
 
45
- ## 3.2.0
78
+ ## 3.2.0 (2017-01-30)
46
79
 
47
80
  - Added limited support for SQLite
48
81
 
49
- ## 3.1.1
82
+ ## 3.1.1 (2016-10-25)
50
83
 
51
84
  - Fixed `current: false`
52
85
  - Fixed `last` with `group_by_quarter`
53
86
  - Raise `ArgumentError` when `last` option is not supported
54
87
 
55
- ## 3.1.0
88
+ ## 3.1.0 (2016-10-22)
56
89
 
57
90
  - Better support for date columns with `time_zone: false`
58
91
  - Better date range handling for `range` option
59
92
 
60
- ## 3.0.2
93
+ ## 3.0.2 (2016-08-09)
61
94
 
62
95
  - Fixed `group_by_period` with associations
63
96
  - Fixed `week_start` option for enumerables
64
97
 
65
- ## 3.0.1
98
+ ## 3.0.1 (2016-07-13)
66
99
 
67
100
  - Added support for Redshift
68
101
  - Fix for infinite loop in certain cases for Rails 5
69
102
 
70
- ## 3.0.0
103
+ ## 3.0.0 (2016-05-30)
71
104
 
72
105
  Breaking changes
73
106
 
@@ -75,16 +108,16 @@ Breaking changes
75
108
  - Array and hash methods no longer return the entire series by default. Use `series: true` for the previous behavior.
76
109
  - The `series: false` option now returns the correct types and order, and plays nicely with other options.
77
110
 
78
- ## 2.5.3
111
+ ## 2.5.3 (2016-04-28)
79
112
 
80
113
  - All tests green with `mysql` gem
81
114
  - Added support for decimal day start
82
115
 
83
- ## 2.5.2
116
+ ## 2.5.2 (2016-02-16)
84
117
 
85
118
  - Added `dates` option to return dates for day, week, month, quarter, and year
86
119
 
87
- ## 2.5.1
120
+ ## 2.5.1 (2016-02-03)
88
121
 
89
122
  - Added `group_by_quarter`
90
123
  - Added `default_value` option
@@ -92,13 +125,13 @@ Breaking changes
92
125
  - Raise `ArgumentError` if no field specified
93
126
  - Added support for ActiveRecord 5 beta
94
127
 
95
- ## 2.5.0
128
+ ## 2.5.0 (2015-09-29)
96
129
 
97
130
  - Added `group_by_period` method
98
131
  - Added `current` option
99
132
  - Raise `ArgumentError` if no block given to enumerable
100
133
 
101
- ## 2.4.0
134
+ ## 2.4.0 (2014-12-28)
102
135
 
103
136
  - Added localization
104
137
  - Added `carry_forward` option
@@ -106,77 +139,77 @@ Breaking changes
106
139
  - Fixed issue w/ Brasilia Summer Time
107
140
  - Fixed issues w/ ActiveRecord 4.2
108
141
 
109
- ## 2.3.0
142
+ ## 2.3.0 (2014-08-31)
110
143
 
111
144
  - Raise error when ActiveRecord::Base.default_timezone is not `:utc`
112
145
  - Added `day_of_month`
113
146
  - Added `month_of_year`
114
147
  - Do not quote column name
115
148
 
116
- ## 2.2.1
149
+ ## 2.2.1 (2014-06-23)
117
150
 
118
151
  - Fixed ActiveRecord 3 associations
119
152
 
120
- ## 2.2.0
153
+ ## 2.2.0 (2014-06-22)
121
154
 
122
155
  - Added support for arrays and hashes
123
156
 
124
- ## 2.1.1
157
+ ## 2.1.1 (2014-05-17)
125
158
 
126
159
  - Fixed format option with multiple groups
127
160
  - Better error message if time zone support is missing for MySQL
128
161
 
129
- ## 2.1.0
162
+ ## 2.1.0 (2014-03-16)
130
163
 
131
164
  - Added last option
132
165
  - Added format option
133
166
 
134
- ## 2.0.4
167
+ ## 2.0.4 (2014-03-12)
135
168
 
136
169
  - Added multiple groups
137
170
  - Added order
138
171
  - Subsequent methods no longer modify relation
139
172
 
140
- ## 2.0.3
173
+ ## 2.0.3 (2014-03-11)
141
174
 
142
175
  - Implemented respond_to?
143
176
 
144
- ## 2.0.2
177
+ ## 2.0.2 (2014-03-11)
145
178
 
146
179
  - where, joins, and includes no longer need to be before the group_by method
147
180
 
148
- ## 2.0.1
181
+ ## 2.0.1 (2014-03-07)
149
182
 
150
183
  - Use time zone instead of UTC for results
151
184
 
152
- ## 2.0.0
185
+ ## 2.0.0 (2014-03-07)
153
186
 
154
187
  - Returns entire series by default
155
188
  - Added day_start option
156
189
  - Better interface
157
190
 
158
- ## 1.0.5
191
+ ## 1.0.5 (2014-03-06)
159
192
 
160
193
  - Added global time_zone option
161
194
 
162
- ## 1.0.4
195
+ ## 1.0.4 (2013-07-20)
163
196
 
164
197
  - Added global week_start option
165
198
  - Fixed bug with NULL values and series
166
199
 
167
- ## 1.0.3
200
+ ## 1.0.3 (2013-07-05)
168
201
 
169
202
  - Fixed deprecation warning when used with will_paginate
170
203
  - Fixed bug with DateTime series
171
204
 
172
- ## 1.0.2
205
+ ## 1.0.2 (2013-06-10)
173
206
 
174
207
  - Added :start option for custom week start for group_by_week
175
208
 
176
- ## 1.0.1
209
+ ## 1.0.1 (2013-06-03)
177
210
 
178
211
  - Fixed series for Rails < 3.2 and MySQL
179
212
 
180
- ## 1.0.0
213
+ ## 1.0.0 (2013-05-15)
181
214
 
182
215
  - First major release
@@ -57,7 +57,7 @@ brew services start mysql
57
57
 
58
58
  # create databases
59
59
  createdb groupdate_test
60
- mysql -u root -e "create database groupdate_test"
60
+ mysqladmin create groupdate_test
61
61
  mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
62
62
 
63
63
  # clone the repo and run the tests
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2019 Andrew Kane
1
+ Copyright (c) 2013-2020 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -32,9 +32,9 @@ For MySQL and SQLite, also follow [these instructions](#additional-instructions)
32
32
  ```ruby
33
33
  User.group_by_day(:created_at).count
34
34
  # {
35
- # Sat, 28 May 2016 => 50,
36
- # Sun, 29 May 2016 => 100,
37
- # Mon, 30 May 2016 => 34
35
+ # Sat, 24 May 2020 => 50,
36
+ # Sun, 25 May 2020 => 100,
37
+ # Mon, 26 May 2020 => 34
38
38
  # }
39
39
  ```
40
40
 
@@ -53,12 +53,14 @@ You can group by:
53
53
 
54
54
  and
55
55
 
56
+ - minute_of_hour
56
57
  - hour_of_day
57
58
  - day_of_week (Sunday = 0, Monday = 1, etc)
58
59
  - day_of_month
60
+ - day_of_year
59
61
  - month_of_year
60
62
 
61
- Use it anywhere you can use `group`. Works with `count`, `sum`, `minimum`, `maximum`, and `average`. For `median`, check out [ActiveMedian](https://github.com/ankane/active_median). For other aggregate functions, including multiple together, check out [CalculateAll](https://github.com/codesnik/calculate-all).
63
+ Use it anywhere you can use `group`. Works with `count`, `sum`, `minimum`, `maximum`, and `average`. For `median` and `percentile`, check out [ActiveMedian](https://github.com/ankane/active_median).
62
64
 
63
65
  ### Time Zones
64
66
 
@@ -73,9 +75,9 @@ or
73
75
  ```ruby
74
76
  User.group_by_week(:created_at, time_zone: "Pacific Time (US & Canada)").count
75
77
  # {
76
- # Sun, 06 Mar 2016 => 70,
77
- # Sun, 13 Mar 2016 => 54,
78
- # Sun, 20 Mar 2016 => 80
78
+ # Sun, 08 Mar 2020 => 70,
79
+ # Sun, 15 Mar 2020 => 54,
80
+ # Sun, 22 Mar 2020 => 80
79
81
  # }
80
82
  ```
81
83
 
@@ -86,13 +88,13 @@ Time zone objects also work. To see a list of available time zones in Rails, run
86
88
  Weeks start on Sunday by default. Change this with:
87
89
 
88
90
  ```ruby
89
- Groupdate.week_start = :mon # first three letters of day
91
+ Groupdate.week_start = :monday
90
92
  ```
91
93
 
92
94
  or
93
95
 
94
96
  ```ruby
95
- User.group_by_week(:created_at, week_start: :mon).count
97
+ User.group_by_week(:created_at, week_start: :monday).count
96
98
  ```
97
99
 
98
100
  ### Day Start
@@ -146,8 +148,8 @@ To get keys in a different format, use:
146
148
  ```ruby
147
149
  User.group_by_month(:created_at, format: "%b %Y").count
148
150
  # {
149
- # "Jan 2015" => 10
150
- # "Feb 2015" => 12
151
+ # "Jan 2020" => 10
152
+ # "Feb 2020" => 12
151
153
  # }
152
154
  ```
153
155
 
@@ -192,6 +194,14 @@ User.group_by_period(params[:period], :created_at, permit: ["day", "week"]).coun
192
194
 
193
195
  Raises an `ArgumentError` for unpermitted periods.
194
196
 
197
+ ### Custom Duration
198
+
199
+ To group by a specific number of minutes or seconds, use:
200
+
201
+ ```ruby
202
+ User.group_by_minute(:created_at, n: 10).count # 10 minutes
203
+ ```
204
+
195
205
  ### Date Columns
196
206
 
197
207
  If grouping on date columns which don’t need time zone conversion, use:
@@ -225,17 +235,23 @@ Supports the same options as above
225
235
  users.group_by_day(time_zone: time_zone) { |u| u.created_at }
226
236
  ```
227
237
 
238
+ Get the entire series with:
239
+
240
+ ```ruby
241
+ users.group_by_day(series: true) { |u| u.created_at }
242
+ ```
243
+
228
244
  Count
229
245
 
230
246
  ```ruby
231
- Hash[ users.group_by_day { |u| u.created_at }.map { |k, v| [k, v.size] } ]
247
+ users.group_by_day { |u| u.created_at }.map { |k, v| [k, v.count] }.to_h
232
248
  ```
233
249
 
234
250
  ## Additional Instructions
235
251
 
236
252
  ### For MySQL
237
253
 
238
- [Time zone support](https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html) must be installed on the server.
254
+ [Time zone support](https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html) must be installed on the server.
239
255
 
240
256
  ```sh
241
257
  mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
@@ -256,7 +272,7 @@ It should return the time instead of `NULL`.
256
272
  Groupdate has limited support for SQLite.
257
273
 
258
274
  - No time zone support
259
- - No `day_start` or `week_start` options
275
+ - No `day_start` option
260
276
  - No `group_by_quarter` method
261
277
 
262
278
  If your application’s time zone is set to something other than `Etc/UTC` (the default), create an initializer with:
@@ -267,36 +283,18 @@ Groupdate.time_zone = false
267
283
 
268
284
  ## Upgrading
269
285
 
270
- ### 4.0
271
-
272
- Groupdate 4.0 brings a number of improvements. Here are a few to be aware of:
273
-
274
- - `group_by` methods return an `ActiveRecord::Relation` instead of a `Groupdate::Series`
275
- - Invalid options now throw an `ArgumentError`
276
- - `week_start` now affects `day_of_week`
277
- - Custom calculation methods are supported by default
278
-
279
- ### 3.0
286
+ ### 5.0
280
287
 
281
- Groupdate 3.0 brings a number of improvements. Here are a few to be aware of:
288
+ Groupdate 5.0 brings a number of improvements. Here are a few to be aware of:
282
289
 
283
- - `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`.
284
- - Array and hash methods no longer return the entire series by default. Use `series: true` for the previous behavior.
285
- - The `series: false` option now returns the correct type and order, and plays nicely with other options.
286
-
287
- ### 2.0
288
-
289
- Groupdate 2.0 brings a number of improvements. Here are two things to be aware of:
290
-
291
- - the entire series is returned by default
292
- - `ActiveSupport::TimeWithZone` keys are now returned for every database adapter - adapters previously returned `Time` or `String` keys
290
+ - The `week_start` option is now supported for SQLite
291
+ - The `day_start` option is now consistent between Active Record and enumerable
292
+ - Deprecated positional arguments for time zone and range have been removed
293
293
 
294
294
  ## History
295
295
 
296
296
  View the [changelog](https://github.com/ankane/groupdate/blob/master/CHANGELOG.md)
297
297
 
298
- Groupdate follows [Semantic Versioning](https://semver.org/)
299
-
300
298
  ## Contributing
301
299
 
302
300
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
@@ -1,18 +1,21 @@
1
+ # dependencies
1
2
  require "active_support/core_ext/module/attribute_accessors"
2
3
  require "active_support/time"
3
- require "groupdate/version"
4
+
5
+ # modules
6
+ require "groupdate/magic"
4
7
  require "groupdate/relation_builder"
5
8
  require "groupdate/series_builder"
6
- require "groupdate/magic"
9
+ require "groupdate/version"
7
10
 
8
11
  module Groupdate
9
12
  class Error < RuntimeError; end
10
13
 
11
- PERIODS = [:second, :minute, :hour, :day, :week, :month, :quarter, :year, :day_of_week, :hour_of_day, :minute_of_hour, :day_of_month, :month_of_year]
14
+ PERIODS = [:second, :minute, :hour, :day, :week, :month, :quarter, :year, :day_of_week, :hour_of_day, :minute_of_hour, :day_of_month, :day_of_year, :month_of_year]
12
15
  METHODS = PERIODS.map { |v| :"group_by_#{v}" } + [:group_by_period]
13
16
 
14
17
  mattr_accessor :week_start, :day_start, :time_zone, :dates
15
- self.week_start = :sun
18
+ self.week_start = :sunday
16
19
  self.day_start = 0
17
20
  self.dates = true
18
21