Skip to content

Commit

Permalink
Added support for async methods with Active Record 7.1
Browse files Browse the repository at this point in the history
  • Loading branch information
ankane committed Dec 20, 2022
1 parent b2e7580 commit c531c73
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ jobs:
fail-fast: false
matrix:
include:
- ruby: 3.1
gemfile: gemfiles/activerecord71.gemfile
- ruby: 3.1
gemfile: Gemfile
- ruby: "3.0"
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 6.2.0 (unreleased)

- Added support for async methods with Active Record 7.1

## 6.1.0 (2022-04-05)

- Added `expand_range` option
Expand Down
10 changes: 10 additions & 0 deletions gemfiles/activerecord71.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
source "https://rubygems.org"

gemspec path: ".."

gem "rake"
gem "minitest"
gem "activerecord", "~> 7.1.0.alpha", github: "rails/rails"
gem "pg"
gem "mysql2"
gem "sqlite3"
4 changes: 4 additions & 0 deletions lib/groupdate/magic.rb
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,10 @@ def initialize(**options)
end

def perform(relation, result, default_value:)
if defined?(ActiveRecord::Promise) && result.is_a?(ActiveRecord::Promise)
return result.then { |r| perform(relation, r, default_value: default_value) }
end

multiple_groups = relation.group_values.size > 1

check_nils(result, multiple_groups, relation)
Expand Down
6 changes: 5 additions & 1 deletion test/adapters/mysql.rb
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
ActiveRecord::Base.establish_connection adapter: "mysql2", database: "groupdate_test"
options = {}
if ActiveRecord::VERSION::STRING.to_f == 7.1
options[:prepared_statements] = true
end
ActiveRecord::Base.establish_connection adapter: "mysql2", database: "groupdate_test", **options
73 changes: 73 additions & 0 deletions test/async_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
require_relative "test_helper"

class AsyncTest < Minitest::Test
def setup
skip if ActiveRecord::VERSION::STRING.to_f < 7.1 || enumerable?
super
end

def test_count
create_user "2013-05-01"
create_user "2013-05-03"
create_user "2013-05-03", 9
promise = User.group_by_day(:created_at).async_count
expected = {
Date.parse("2013-05-01") => 1,
Date.parse("2013-05-02") => 0,
Date.parse("2013-05-03") => 2
}
assert_equal expected, promise.value
end

def test_sum
create_user "2013-05-01"
create_user "2013-05-03"
create_user "2013-05-03", 9
promise = User.group_by_day(:created_at).async_sum(:score)
expected = {
Date.parse("2013-05-01") => 1,
Date.parse("2013-05-02") => 0,
Date.parse("2013-05-03") => 10
}
assert_equal expected, promise.value
end

def test_minimum
create_user "2013-05-01"
create_user "2013-05-03"
create_user "2013-05-03", 9
promise = User.group_by_day(:created_at).async_minimum(:score)
expected = {
Date.parse("2013-05-01") => 1,
Date.parse("2013-05-02") => nil,
Date.parse("2013-05-03") => 1
}
assert_equal expected, promise.value
end

def test_maximum
create_user "2013-05-01"
create_user "2013-05-03"
create_user "2013-05-03", 9
promise = User.group_by_day(:created_at).async_maximum(:score)
expected = {
Date.parse("2013-05-01") => 1,
Date.parse("2013-05-02") => nil,
Date.parse("2013-05-03") => 9
}
assert_equal expected, promise.value
end

def test_average
create_user "2013-05-01"
create_user "2013-05-03"
create_user "2013-05-03", 9
promise = User.group_by_day(:created_at).async_average(:score)
expected = {
Date.parse("2013-05-01") => 1,
Date.parse("2013-05-02") => nil,
Date.parse("2013-05-03") => 5
}
assert_equal expected, promise.value
end
end

0 comments on commit c531c73

Please sign in to comment.