groupdate 3.2.0 → 6.2.1

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
- SHA1:
3
- metadata.gz: df818b929dceeddfccab948ceb591ad26c7334c8
4
- data.tar.gz: 370a704d7ff6a17fb82bb057d717141ed87bc69f
2
+ SHA256:
3
+ metadata.gz: 372cf4471ee65729f41e684b45f5b3e05333379390fab3956df568a2fa89c8cd
4
+ data.tar.gz: 549f1a34474348dfc96c7a0c244218688e4c2d45cd9b935a3c5ff63b03873968
5
5
  SHA512:
6
- metadata.gz: 7a77d1af0c530bfab9552ddff8f7149575c9821bcff772d33454b50c0050561d861a7eb5f220c5aa19200f80194f07c6a550c412be2ac76eedd88dbddb143faf
7
- data.tar.gz: 91d207a5493bcafe51e94a884809e37b8250e9c2e581bf26172a5d0810d32c64aa63f21aead7935d1096c4d27dcde4c8d49cc8de821cdae4c83634e6a168cf94
6
+ metadata.gz: 17009c3b4061583998a5419edca9b62fb138136097d9ef1a719dc04a09bd5f3583be45bae5639498000318cffa2d5d2e0a31b0e2f564a1d3cc61016d1db7f4f2
7
+ data.tar.gz: 1fcb4a2a87baf147fa763508f0b17b01bbae8c28fed284055282ec196163e92026548f87ddcf381fba280c2d5a2e4a61adb54d8e8f4334252ec481e4f04f92d9
data/CHANGELOG.md CHANGED
@@ -1,29 +1,148 @@
1
- ## 3.2.0
1
+ ## 6.2.1 (2023-04-18)
2
+
3
+ - Fixed extra day with `DateTime` ranges
4
+
5
+ ## 6.2.0 (2023-01-29)
6
+
7
+ - Added support for async methods with Active Record 7.1
8
+
9
+ ## 6.1.0 (2022-04-05)
10
+
11
+ - Added `expand_range` option
12
+
13
+ ## 6.0.1 (2022-01-16)
14
+
15
+ - Fixed incorrect results (error before 6.0) with `includes` with Active Record 6.1+
16
+
17
+ ## 6.0.0 (2022-01-15)
18
+
19
+ - Raise `ActiveRecord::UnknownAttributeReference` for non-attribute arguments
20
+ - Raise `ArgumentError` for ranges with string bounds
21
+ - Added `n` option for Redshift
22
+ - Changed SQL to return dates instead of times for day, week, month, quarter, and year
23
+ - Removed `dates` option
24
+ - Dropped support for Ruby < 2.6 and Rails < 5.2
25
+
26
+ ## 5.2.4 (2021-12-15)
27
+
28
+ - Simplified queries for Active Record 7 and MySQL
29
+
30
+ ## 5.2.3 (2021-12-06)
31
+
32
+ - Fixed error and warnings with Active Record 7
33
+
34
+ ## 5.2.2 (2021-02-08)
35
+
36
+ - Added support for `nil..nil` ranges in `range` option
37
+
38
+ ## 5.2.1 (2020-09-09)
39
+
40
+ - Improved error message for invalid ranges
41
+ - Fixed bug with date string ranges
42
+
43
+ ## 5.2.0 (2020-09-07)
44
+
45
+ - Added warning for non-attribute argument
46
+ - Added support for beginless and endless ranges in `range` option
47
+
48
+ ## 5.1.0 (2020-07-30)
49
+
50
+ - Added `n` option to minute and second for custom durations
51
+
52
+ ## 5.0.0 (2020-02-18)
53
+
54
+ - Added support for `week_start` for SQLite
55
+ - Added support for full weekday names
56
+ - Made `day_start` behavior consistent between Active Record and enumerable
57
+ - Made `last` option extend to end of current period
58
+ - Raise error when `day_start` and `week_start` passed to unsupported methods
59
+ - The `day_start` option no longer applies to shorter periods
60
+ - Fixed `inconsistent time zone info` errors around DST with MySQL and PostgreSQL
61
+ - Improved performance of `format` option
62
+ - Removed deprecated positional arguments for time zone and range
63
+ - Dropped support for `mysql` gem (last release was 2013)
64
+
65
+ ## 4.3.0 (2019-12-26)
66
+
67
+ - Fixed error with empty results in Ruby 2.7
68
+ - Fixed deprecation warnings in Ruby 2.7
69
+ - Deprecated positional arguments for time zone and range
70
+
71
+ ## 4.2.0 (2019-10-28)
72
+
73
+ - Added `day_of_year`
74
+ - Dropped support for Rails 4.2
75
+
76
+ ## 4.1.2 (2019-05-26)
77
+
78
+ - Fixed error with empty data and `current: false`
79
+ - Fixed error in time zone check for Rails < 5.2
80
+ - Prevent infinite loop with endless ranges
81
+
82
+ ## 4.1.1 (2018-12-11)
83
+
84
+ - Made column resolution consistent with `group`
85
+ - Added support for `alias_attribute`
86
+
87
+ ## 4.1.0 (2018-11-04)
88
+
89
+ - Many performance improvements
90
+ - Added check for consistent time zone info
91
+ - Fixed error message for invalid queries with MySQL and SQLite
92
+ - Fixed issue with enumerable methods ignoring nils
93
+
94
+ ## 4.0.2 (2018-10-15)
95
+
96
+ - Make `current` option work without `last`
97
+ - 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)
98
+
99
+ ## 4.0.1 (2018-05-03)
100
+
101
+ - Fixed incorrect range with `last` option near time change
102
+
103
+ ## 4.0.0 (2018-02-21)
104
+
105
+ - Custom calculation methods are supported by default - `groupdate_calculation_methods` is no longer needed
106
+
107
+ Breaking changes
108
+
109
+ - Dropped support for Rails < 4.2
110
+ - Invalid options now throw an `ArgumentError`
111
+ - `group_by` methods return an `ActiveRecord::Relation` instead of a `Groupdate::Series`
112
+ - `week_start` now affects `day_of_week`
113
+ - Removed support for `reverse_order` (was never supported in Rails 5)
114
+
115
+ ## 3.2.1 (2018-02-21)
116
+
117
+ - Added `minute_of_hour`
118
+ - Added support for `unscoped`
119
+
120
+ ## 3.2.0 (2017-01-30)
2
121
 
3
122
  - Added limited support for SQLite
4
123
 
5
- ## 3.1.1
124
+ ## 3.1.1 (2016-10-25)
6
125
 
7
126
  - Fixed `current: false`
8
127
  - Fixed `last` with `group_by_quarter`
9
128
  - Raise `ArgumentError` when `last` option is not supported
10
129
 
11
- ## 3.1.0
130
+ ## 3.1.0 (2016-10-22)
12
131
 
13
132
  - Better support for date columns with `time_zone: false`
14
133
  - Better date range handling for `range` option
15
134
 
16
- ## 3.0.2
135
+ ## 3.0.2 (2016-08-09)
17
136
 
18
137
  - Fixed `group_by_period` with associations
19
138
  - Fixed `week_start` option for enumerables
20
139
 
21
- ## 3.0.1
140
+ ## 3.0.1 (2016-07-13)
22
141
 
23
142
  - Added support for Redshift
24
143
  - Fix for infinite loop in certain cases for Rails 5
25
144
 
26
- ## 3.0.0
145
+ ## 3.0.0 (2016-05-30)
27
146
 
28
147
  Breaking changes
29
148
 
@@ -31,16 +150,16 @@ Breaking changes
31
150
  - Array and hash methods no longer return the entire series by default. Use `series: true` for the previous behavior.
32
151
  - The `series: false` option now returns the correct types and order, and plays nicely with other options.
33
152
 
34
- ## 2.5.3
153
+ ## 2.5.3 (2016-04-28)
35
154
 
36
155
  - All tests green with `mysql` gem
37
156
  - Added support for decimal day start
38
157
 
39
- ## 2.5.2
158
+ ## 2.5.2 (2016-02-16)
40
159
 
41
160
  - Added `dates` option to return dates for day, week, month, quarter, and year
42
161
 
43
- ## 2.5.1
162
+ ## 2.5.1 (2016-02-03)
44
163
 
45
164
  - Added `group_by_quarter`
46
165
  - Added `default_value` option
@@ -48,13 +167,13 @@ Breaking changes
48
167
  - Raise `ArgumentError` if no field specified
49
168
  - Added support for ActiveRecord 5 beta
50
169
 
51
- ## 2.5.0
170
+ ## 2.5.0 (2015-09-29)
52
171
 
53
172
  - Added `group_by_period` method
54
173
  - Added `current` option
55
174
  - Raise `ArgumentError` if no block given to enumerable
56
175
 
57
- ## 2.4.0
176
+ ## 2.4.0 (2014-12-28)
58
177
 
59
178
  - Added localization
60
179
  - Added `carry_forward` option
@@ -62,77 +181,77 @@ Breaking changes
62
181
  - Fixed issue w/ Brasilia Summer Time
63
182
  - Fixed issues w/ ActiveRecord 4.2
64
183
 
65
- ## 2.3.0
184
+ ## 2.3.0 (2014-08-31)
66
185
 
67
186
  - Raise error when ActiveRecord::Base.default_timezone is not `:utc`
68
187
  - Added `day_of_month`
69
188
  - Added `month_of_year`
70
189
  - Do not quote column name
71
190
 
72
- ## 2.2.1
191
+ ## 2.2.1 (2014-06-23)
73
192
 
74
193
  - Fixed ActiveRecord 3 associations
75
194
 
76
- ## 2.2.0
195
+ ## 2.2.0 (2014-06-22)
77
196
 
78
197
  - Added support for arrays and hashes
79
198
 
80
- ## 2.1.1
199
+ ## 2.1.1 (2014-05-17)
81
200
 
82
201
  - Fixed format option with multiple groups
83
202
  - Better error message if time zone support is missing for MySQL
84
203
 
85
- ## 2.1.0
204
+ ## 2.1.0 (2014-03-16)
86
205
 
87
206
  - Added last option
88
207
  - Added format option
89
208
 
90
- ## 2.0.4
209
+ ## 2.0.4 (2014-03-12)
91
210
 
92
211
  - Added multiple groups
93
212
  - Added order
94
213
  - Subsequent methods no longer modify relation
95
214
 
96
- ## 2.0.3
215
+ ## 2.0.3 (2014-03-11)
97
216
 
98
217
  - Implemented respond_to?
99
218
 
100
- ## 2.0.2
219
+ ## 2.0.2 (2014-03-11)
101
220
 
102
221
  - where, joins, and includes no longer need to be before the group_by method
103
222
 
104
- ## 2.0.1
223
+ ## 2.0.1 (2014-03-07)
105
224
 
106
225
  - Use time zone instead of UTC for results
107
226
 
108
- ## 2.0.0
227
+ ## 2.0.0 (2014-03-07)
109
228
 
110
229
  - Returns entire series by default
111
230
  - Added day_start option
112
231
  - Better interface
113
232
 
114
- ## 1.0.5
233
+ ## 1.0.5 (2014-03-06)
115
234
 
116
235
  - Added global time_zone option
117
236
 
118
- ## 1.0.4
237
+ ## 1.0.4 (2013-07-20)
119
238
 
120
239
  - Added global week_start option
121
240
  - Fixed bug with NULL values and series
122
241
 
123
- ## 1.0.3
242
+ ## 1.0.3 (2013-07-05)
124
243
 
125
244
  - Fixed deprecation warning when used with will_paginate
126
245
  - Fixed bug with DateTime series
127
246
 
128
- ## 1.0.2
247
+ ## 1.0.2 (2013-06-10)
129
248
 
130
249
  - Added :start option for custom week start for group_by_week
131
250
 
132
- ## 1.0.1
251
+ ## 1.0.1 (2013-06-03)
133
252
 
134
253
  - Fixed series for Rails < 3.2 and MySQL
135
254
 
136
- ## 1.0.0
255
+ ## 1.0.0 (2013-05-15)
137
256
 
138
257
  - First major release
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,75 @@
1
+ # Contributing
2
+
3
+ First, thanks for wanting to contribute. You’re awesome! :heart:
4
+
5
+ ## Help
6
+
7
+ We’re not able to provide support through GitHub Issues. If you’re looking for help with your code, try posting on [Stack Overflow](https://stackoverflow.com/).
8
+
9
+ All features should be documented. If you don’t see a feature in the docs, assume it doesn’t exist.
10
+
11
+ ## Bugs
12
+
13
+ Think you’ve discovered a bug?
14
+
15
+ 1. Search existing issues to see if it’s been reported.
16
+ 2. Try the `master` branch to make sure it hasn’t been fixed.
17
+
18
+ ```rb
19
+ gem "groupdate", github: "ankane/groupdate"
20
+ ```
21
+
22
+ If the above steps don’t help, create an issue. Include:
23
+
24
+ - Detailed steps to reproduce
25
+ - Complete backtraces for exceptions
26
+
27
+ ## New Features
28
+
29
+ If you’d like to discuss a new feature, create an issue and start the title with `[Idea]`.
30
+
31
+ ## Pull Requests
32
+
33
+ Fork the project and create a pull request. A few tips:
34
+
35
+ - Keep changes to a minimum. If you have multiple features or fixes, submit multiple pull requests.
36
+ - Follow the existing style. The code should read like it’s written by a single person.
37
+ - Add one or more tests if possible. Make sure existing tests pass with:
38
+
39
+ ```sh
40
+ bundle exec rake test
41
+ ```
42
+
43
+ Feel free to open an issue to get feedback on your idea before spending too much time on it.
44
+
45
+ ## Dev Setup
46
+
47
+ On Mac:
48
+
49
+ ```sh
50
+ # install and run PostgreSQL
51
+ brew install postgresql
52
+ brew services start postgresql
53
+
54
+ # install and run MySQL
55
+ brew install mysql
56
+ brew services start mysql
57
+
58
+ # create databases
59
+ createdb groupdate_test
60
+ mysqladmin create groupdate_test
61
+ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
62
+
63
+ # clone the repo and run the tests
64
+ git clone https://github.com/ankane/groupdate.git
65
+ cd groupdate
66
+ bundle install
67
+ bundle exec rake test
68
+
69
+ # run a single test file
70
+ ruby test/postgresql_test.rb
71
+ ```
72
+
73
+ ---
74
+
75
+ This contributing guide is released under [CCO](https://creativecommons.org/publicdomain/zero/1.0/) (public domain). Use it for your own project without attribution.
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Andrew Kane
1
+ Copyright (c) 2013-2022 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -11,24 +11,30 @@ The simplest way to group by:
11
11
 
12
12
  :cake: Get the entire series - **the other best part**
13
13
 
14
- Supports PostgreSQL, MySQL, and Redshift, plus arrays and hashes
14
+ Supports PostgreSQL, MySQL, and Redshift, plus arrays and hashes (and limited support for [SQLite](#for-sqlite))
15
15
 
16
- Limited support for [SQLite](#for-sqlite)
16
+ :cupid: Goes hand in hand with [Chartkick](https://www.chartkick.com)
17
17
 
18
- [![Build Status](https://travis-ci.org/ankane/groupdate.svg?branch=master)](https://travis-ci.org/ankane/groupdate)
18
+ [![Build Status](https://github.com/ankane/groupdate/workflows/build/badge.svg?branch=master)](https://github.com/ankane/groupdate/actions)
19
19
 
20
- :cupid: Goes hand in hand with [Chartkick](http://ankane.github.io/chartkick/)
20
+ ## Installation
21
+
22
+ Add this line to your application’s Gemfile:
21
23
 
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.
24
+ ```ruby
25
+ gem "groupdate"
26
+ ```
23
27
 
24
- ## Get Started
28
+ For MySQL and SQLite, also follow [these instructions](#additional-instructions).
29
+
30
+ ## Getting Started
25
31
 
26
32
  ```ruby
27
33
  User.group_by_day(:created_at).count
28
34
  # {
29
- # Sat, 28 May 2016 => 50,
30
- # Sun, 29 May 2016 => 100,
31
- # Mon, 30 May 2016 => 34
35
+ # Sat, 24 May 2020 => 50,
36
+ # Sun, 25 May 2020 => 100,
37
+ # Mon, 26 May 2020 => 34
32
38
  # }
33
39
  ```
34
40
 
@@ -47,12 +53,14 @@ You can group by:
47
53
 
48
54
  and
49
55
 
56
+ - minute_of_hour
50
57
  - hour_of_day
51
58
  - day_of_week (Sunday = 0, Monday = 1, etc)
52
59
  - day_of_month
60
+ - day_of_year
53
61
  - month_of_year
54
62
 
55
- Use it anywhere you can use `group`.
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).
56
64
 
57
65
  ### Time Zones
58
66
 
@@ -67,9 +75,9 @@ or
67
75
  ```ruby
68
76
  User.group_by_week(:created_at, time_zone: "Pacific Time (US & Canada)").count
69
77
  # {
70
- # Sun, 06 Mar 2016 => 70,
71
- # Sun, 13 Mar 2016 => 54,
72
- # Sun, 20 Mar 2016 => 80
78
+ # Sun, 08 Mar 2020 => 70,
79
+ # Sun, 15 Mar 2020 => 54,
80
+ # Sun, 22 Mar 2020 => 80
73
81
  # }
74
82
  ```
75
83
 
@@ -80,13 +88,13 @@ Time zone objects also work. To see a list of available time zones in Rails, run
80
88
  Weeks start on Sunday by default. Change this with:
81
89
 
82
90
  ```ruby
83
- Groupdate.week_start = :mon # first three letters of day
91
+ Groupdate.week_start = :monday
84
92
  ```
85
93
 
86
94
  or
87
95
 
88
96
  ```ruby
89
- User.group_by_week(:created_at, week_start: :mon).count
97
+ User.group_by_week(:created_at, week_start: :monday).count
90
98
  ```
91
99
 
92
100
  ### Day Start
@@ -111,6 +119,12 @@ To get a specific time range, use:
111
119
  User.group_by_day(:created_at, range: 2.weeks.ago.midnight..Time.now).count
112
120
  ```
113
121
 
122
+ To expand the range to the start and end of the time period, use:
123
+
124
+ ```ruby
125
+ User.group_by_day(:created_at, range: 2.weeks.ago..Time.now, expand_range: true).count
126
+ ```
127
+
114
128
  To get the most recent time periods, use:
115
129
 
116
130
  ```ruby
@@ -140,8 +154,8 @@ To get keys in a different format, use:
140
154
  ```ruby
141
155
  User.group_by_month(:created_at, format: "%b %Y").count
142
156
  # {
143
- # "Jan 2015" => 10
144
- # "Feb 2015" => 12
157
+ # "Jan 2020" => 10
158
+ # "Feb 2020" => 12
145
159
  # }
146
160
  ```
147
161
 
@@ -181,11 +195,19 @@ User.group_by_period(:day, :created_at).count
181
195
  Limit groupings with the `permit` option.
182
196
 
183
197
  ```ruby
184
- User.group_by_period(params[:period], :created_at, permit: %w[day week]).count
198
+ User.group_by_period(params[:period], :created_at, permit: ["day", "week"]).count
185
199
  ```
186
200
 
187
201
  Raises an `ArgumentError` for unpermitted periods.
188
202
 
203
+ ### Custom Duration
204
+
205
+ To group by a specific number of minutes or seconds, use:
206
+
207
+ ```ruby
208
+ User.group_by_minute(:created_at, n: 10).count # 10 minutes
209
+ ```
210
+
189
211
  ### Date Columns
190
212
 
191
213
  If grouping on date columns which don’t need time zone conversion, use:
@@ -194,6 +216,14 @@ If grouping on date columns which don’t need time zone conversion, use:
194
216
  User.group_by_week(:created_on, time_zone: false).count
195
217
  ```
196
218
 
219
+ ### Default Scopes
220
+
221
+ If you use Postgres and have a default scope that uses `order`, you may get a `column must appear in the GROUP BY clause` error (just like with Active Record’s `group` method). Remove the `order` scope with:
222
+
223
+ ```ruby
224
+ User.unscope(:order).group_by_day(:count).count
225
+ ```
226
+
197
227
  ## Arrays and Hashes
198
228
 
199
229
  ```ruby
@@ -206,44 +236,42 @@ Supports the same options as above
206
236
  users.group_by_day(time_zone: time_zone) { |u| u.created_at }
207
237
  ```
208
238
 
209
- Count
239
+ Get the entire series with:
210
240
 
211
241
  ```ruby
212
- Hash[ users.group_by_day { |u| u.created_at }.map { |k, v| [k, v.size] } ]
242
+ users.group_by_day(series: true) { |u| u.created_at }
213
243
  ```
214
244
 
215
- ## Installation
216
-
217
- Add this line to your application’s Gemfile:
245
+ Count
218
246
 
219
247
  ```ruby
220
- gem 'groupdate'
248
+ users.group_by_day { |u| u.created_at }.to_h { |k, v| [k, v.count] }
221
249
  ```
222
250
 
223
- #### For MySQL
251
+ ## Additional Instructions
224
252
 
225
- [Time zone support](http://dev.mysql.com/doc/refman/5.6/en/time-zone-support.html) must be installed on the server.
253
+ ### For MySQL
254
+
255
+ [Time zone support](https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html) must be installed on the server.
226
256
 
227
257
  ```sh
228
258
  mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
229
259
  ```
230
260
 
231
- or copy and paste [these statements](https://gist.githubusercontent.com/ankane/1d6b0022173186accbf0/raw/time_zone_support.sql) into a SQL console.
232
-
233
261
  You can confirm it worked with:
234
262
 
235
263
  ```sql
236
- SELECT CONVERT_TZ(NOW(), '+00:00', 'Etc/UTC');
264
+ SELECT CONVERT_TZ(NOW(), '+00:00', 'Pacific/Honolulu');
237
265
  ```
238
266
 
239
267
  It should return the time instead of `NULL`.
240
268
 
241
- #### For SQLite
269
+ ### For SQLite
242
270
 
243
271
  Groupdate has limited support for SQLite.
244
272
 
245
273
  - No time zone support
246
- - No `day_start` or `week_start` options
274
+ - No `day_start` option
247
275
  - No `group_by_quarter` method
248
276
 
249
277
  If your application’s time zone is set to something other than `Etc/UTC` (the default), create an initializer with:
@@ -254,27 +282,20 @@ Groupdate.time_zone = false
254
282
 
255
283
  ## Upgrading
256
284
 
257
- ### 3.0
258
-
259
- Groupdate 3.0 brings a number of improvements. Here are a few to be aware of:
260
-
261
- - `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`.
262
- - Array and hash methods no longer return the entire series by default. Use `series: true` for the previous behavior.
263
- - The `series: false` option now returns the correct type and order, and plays nicely with other options.
285
+ ### 6.0
264
286
 
265
- ### 2.0
287
+ Groupdate 6.0 protects against unsafe input by default. For non-attribute arguments, use:
266
288
 
267
- Groupdate 2.0 brings a number of improvements. Here are two things to be aware of:
289
+ ```ruby
290
+ User.group_by_day(Arel.sql(known_safe_value)).count
291
+ ```
268
292
 
269
- - the entire series is returned by default
270
- - `ActiveSupport::TimeWithZone` keys are now returned for every database adapter - adapters previously returned `Time` or `String` keys
293
+ Also, the `dates` option has been removed.
271
294
 
272
295
  ## History
273
296
 
274
297
  View the [changelog](https://github.com/ankane/groupdate/blob/master/CHANGELOG.md)
275
298
 
276
- Groupdate follows [Semantic Versioning](http://semver.org/)
277
-
278
299
  ## Contributing
279
300
 
280
301
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
@@ -283,3 +304,5 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
283
304
  - Fix bugs and [submit pull requests](https://github.com/ankane/groupdate/pulls)
284
305
  - Write, clarify, or fix documentation
285
306
  - Suggest or add new features
307
+
308
+ To get started with development and testing, check out the [Contributing Guide](CONTRIBUTING.md).
@@ -1,53 +1,6 @@
1
1
  require "active_record"
2
- require "groupdate/order_hack"
3
- require "groupdate/scopes"
4
- require "groupdate/calculations"
5
- require "groupdate/series"
2
+ require "groupdate/query_methods"
3
+ require "groupdate/relation"
6
4
 
7
- ActiveRecord::Base.send(:extend, Groupdate::Scopes)
8
-
9
- module ActiveRecord
10
- class Relation
11
- if ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR < 2
12
-
13
- def method_missing_with_hack(method, *args, &block)
14
- if Groupdate::METHODS.include?(method)
15
- scoping { @klass.send(method, *args, &block) }
16
- else
17
- method_missing_without_hack(method, *args, &block)
18
- end
19
- end
20
- alias_method_chain :method_missing, :hack
21
-
22
- end
23
- end
24
- end
25
-
26
- module ActiveRecord
27
- module Associations
28
- class CollectionProxy
29
- if ActiveRecord::VERSION::MAJOR == 3
30
- delegate(*Groupdate::METHODS, to: :scoped)
31
- end
32
- end
33
- end
34
- end
35
-
36
- # hack for issue before Rails 5
37
- # https://github.com/rails/rails/issues/7121
38
- module ActiveRecord
39
- module Calculations
40
- private
41
-
42
- if ActiveRecord::VERSION::MAJOR < 5
43
- def column_alias_for_with_hack(*keys)
44
- if keys.first.is_a?(Groupdate::OrderHack)
45
- keys.first.field
46
- else
47
- column_alias_for_without_hack(*keys)
48
- end
49
- end
50
- alias_method_chain :column_alias_for, :hack
51
- end
52
- end
53
- end
5
+ ActiveRecord::Base.extend(Groupdate::QueryMethods)
6
+ ActiveRecord::Relation.include(Groupdate::Relation)