activerecord_follow_assoc 0.1.0 → 0.1.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
2
  SHA256:
3
- metadata.gz: 4b8caccb83e94c7443d397e3821ff1e82bd7b97e70eaf4069a35199cec86e4d5
4
- data.tar.gz: 974c2775d84c5d1863288bab1d25844c46e3a068502d56885ff0e8b061f61bd4
3
+ metadata.gz: dc13a864fee3460feeb38797a0a95dd93816110f888d45fbd6423fab825d4b56
4
+ data.tar.gz: 8009a86c5b5f8f30f6920954ac58af1765bd3085e3e069311d5711ff20632740
5
5
  SHA512:
6
- metadata.gz: 6a24b54072e35365c17cc80a6b112fabab2e535b42f2d6063065fafd1defbd02cb619638d06bfbddb7ac080a74b6476d033d075075fcbeee96fbe7c85f755608
7
- data.tar.gz: 27a15ff6481ec90f3dba7d71b1f8b13e82bec4a56918735edf2676f1b6f7fef971372336f881e83a1422cfb79e88a358f36501080ad26395e0635d9ea0685b1b
6
+ metadata.gz: 845ad4b08f3160bce65fd7872267c9bc7d1bbe286ffc47c850eef53313b69c42a999c0c77323651bebe8c512fecd111a6de7f20bf58aa0d0bdec3a2672b3d817
7
+ data.tar.gz: bf81aed74ebab4c6b1be90021ce76bb76d0392a9f10e4c1cb4f25f60699e783dade093492e04fbbb1b2a780ab2e11eee19ba2f57a24754c1ef67475df4c2eb20
data/README.md CHANGED
@@ -1,5 +1,3 @@
1
- This gem is still a work in progress. It hasn't been released yet.
2
-
3
1
  # ActiveRecord Follow Assoc
4
2
 
5
3
  ![Test supported versions](https://github.com/MaxLap/activerecord_follow_assoc/workflows/Test%20supported%20versions/badge.svg)
@@ -15,7 +13,7 @@ Here's how this gem allows you to do it:
15
13
  current_user.posts.recent.follow_assoc(:comments)
16
14
  ```
17
15
 
18
- The `follow_assoc` method, added by this gem allows you to query the specified association
16
+ The `follow_assoc` method, added by this gem, allows you to query the specified association
19
17
  of the records that the current query would return.
20
18
 
21
19
  Here is a more complete [introduction to this gem](INTRODUCTION.md).
@@ -46,7 +44,6 @@ Doing this without follow_assoc can be verbose, error-prone and less efficient d
46
44
 
47
45
  ## Installation
48
46
 
49
- **This is not released yet. This won't work.**
50
47
  Rails 4.1 to 6.1 are supported with Ruby 2.1 to 3.0. Tested against SQLite3, PostgreSQL and MySQL. The gem
51
48
  only depends on the `activerecord` gem.
52
49
 
@@ -125,9 +122,7 @@ It allows you to make conditions based on your associations (without changing th
125
122
  Post.where_assoc_exists([:comments, :author], &:admins)
126
123
  ```
127
124
 
128
- This could be done with `follow_assoc`: `User.admins.follow_assoc(:comments, :post)`. But if you wanted conditions on
129
- a second association, then `follow_assoc` wouldn't work. It all depends on the context where you need to do the query
130
- and what starting point you have.
125
+ This could be done with `follow_assoc`: `User.admins.follow_assoc(:comments, :post)`. But if you wanted conditions on a second association, then `follow_assoc` wouldn't work. On the other hand, if you received a scope on users and wanted their posts, then `follow_assoc` would be a nicer tool for the job. It all depends on the context where you need to do the query and what starting point you have.
131
126
 
132
127
  ## Development
133
128
 
@@ -61,6 +61,16 @@ module ActiveRecordFollowAssoc
61
61
  end
62
62
  end
63
63
 
64
+ if ActiveRecord.gem_version >= Gem::Version.new("7.1.0.alpha")
65
+ def self.null_relation?(reflection)
66
+ reflection.null_relation?
67
+ end
68
+ else
69
+ def self.null_relation?(reflection)
70
+ reflection.is_a?(ActiveRecord::NullRelation)
71
+ end
72
+ end
73
+
64
74
  if ActiveRecord.gem_version >= Gem::Version.new("5.0")
65
75
  def self.parent_reflection(reflection)
66
76
  reflection.parent_reflection
@@ -10,7 +10,7 @@ module ActiveRecordFollowAssoc
10
10
  # => "EXISTS (SELECT... *relation1*) OR EXISTS (SELECT... *relation2*)"
11
11
  def self.sql_for_any_exists(relations)
12
12
  relations = [relations] unless relations.is_a?(Array)
13
- relations = relations.reject { |rel| rel.is_a?(ActiveRecord::NullRelation) }
13
+ relations = relations.reject { |rel| ActiveRecordCompat.null_relation?(rel) }
14
14
  sqls = relations.map { |rel| "EXISTS (#{rel.select('1').to_sql})" }
15
15
  if sqls.size > 1
16
16
  "(#{sqls.join(" OR ")})" # Parens needed when embedding the sql in a `where`, because the OR could make things wrong
@@ -1,3 +1,3 @@
1
1
  module ActiveRecordFollowAssoc
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_follow_assoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxime Lapointe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2023-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -189,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
189
  - !ruby/object:Gem::Version
190
190
  version: '0'
191
191
  requirements: []
192
- rubygems_version: 3.0.3
192
+ rubygems_version: 3.4.10
193
193
  signing_key:
194
194
  specification_version: 4
195
195
  summary: Follow associations within your ActiveRecord queries