eager_eye 1.1.1 → 1.1.3

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: 8b6c076a6dd51cb872bfb213cbb83369a7d9f159bb20054b41901710b738b4df
4
- data.tar.gz: 15850c235c48858cbbb2585c83ffaeacf1331a029b959f973aede31ef584ae24
3
+ metadata.gz: 928603853f971cca5717d7db1ca527da41562b4aef18c27b37be3b2824a4993e
4
+ data.tar.gz: b3e7af83cfb0085a6e34ad65e3e633da6d3eaa517d548b530504dbb6f0a7c5c4
5
5
  SHA512:
6
- metadata.gz: 0454d92551dcc8d96ae35513ae89c3198a707ee6aac43538c7233d679cb9328c9190c8def794736c53cf61b06419051baa937a9358288a046590de14d15c22b1
7
- data.tar.gz: bfd0dc368252cf5d0118a5dcf912b981ea02bf6f158a80a59a1fc475f0f5810c302c223c4126dfc639f8a5ad5e8be3fbcfd3ed87d5c21d3e148405a5f5033b1a
6
+ metadata.gz: 1879d46b6a428002adfc1d241b763fb8b59c5f6a0c82656459dbd389fe04d37ffcdf39394185141ce78837cec72386b689147171291a494f7484dbcae0bfe438
7
+ data.tar.gz: b6cdafbe35419653bd4d374504b1d32475c9cab7fc7ec41d8612c77924589aa1d950c819bd901f0196cdf1de33b2f114bbbbb5fcb11defb7d4624f5043356ee2
data/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.1.3] - 2026-01-04
11
+
12
+ ### Fixed
13
+
14
+ - **CallbackQuery False Positive** - Skip iterations over constants, arrays, and ranges
15
+ - `CONDITIONS.each { |c| ... }` no longer triggers warning
16
+ - `[:a, :b].each { |x| ... }` and `(1..5).each { |i| ... }` are now ignored
17
+
18
+ ## [1.1.2] - 2026-01-04
19
+
20
+ ### Fixed
21
+
22
+ - **CallbackQuery False Positive** - Only flag iterations that contain actual AR query methods
23
+ - Non-AR iterations (Redis, Sidekiq, mailers) are no longer flagged
24
+ - `Sidekiq::ScheduledSet.new.select { |job| ... }.each(&:delete)` no longer triggers warning
25
+
10
26
  ## [1.1.1] - 2026-01-03
11
27
 
12
28
  ### Fixed
data/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  <p align="center">
12
12
  <a href="https://github.com/hamzagedikkaya/eager_eye/actions/workflows/main.yml"><img src="https://github.com/hamzagedikkaya/eager_eye/actions/workflows/main.yml/badge.svg" alt="CI"></a>
13
- <a href="https://rubygems.org/gems/eager_eye"><img src="https://img.shields.io/badge/gem-v1.1.1-red.svg" alt="Gem Version"></a>
13
+ <a href="https://rubygems.org/gems/eager_eye"><img src="https://img.shields.io/badge/gem-v1.1.3-red.svg" alt="Gem Version"></a>
14
14
  <a href="https://github.com/hamzagedikkaya/eager_eye"><img src="https://img.shields.io/badge/coverage-95%25-brightgreen.svg" alt="Coverage"></a>
15
15
  <a href="https://www.ruby-lang.org/"><img src="https://img.shields.io/badge/ruby-%3E%3D%203.1-ruby.svg" alt="Ruby"></a>
16
16
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
@@ -85,8 +85,10 @@ module EagerEye
85
85
 
86
86
  if iteration_block?(node)
87
87
  block_var = extract_block_variable(node)
88
- add_iteration_issue(node, method_name, callback_type)
89
- find_query_calls_in_block(node, method_name, callback_type, block_var) if block_var
88
+ if block_var && contains_ar_query_on_variable?(node, block_var)
89
+ add_iteration_issue(node, method_name, callback_type)
90
+ find_query_calls_in_block(node, method_name, callback_type, block_var)
91
+ end
90
92
  end
91
93
 
92
94
  node.children.each { |child| find_iterations_with_queries(child, method_name, callback_type) }
@@ -107,8 +109,16 @@ module EagerEye
107
109
  end
108
110
 
109
111
  def iteration_block?(node)
110
- node.type == :block && node.children[0]&.type == :send &&
111
- ITERATION_METHODS.include?(node.children[0].children[1])
112
+ return false unless node.type == :block && node.children[0]&.type == :send
113
+ return false unless ITERATION_METHODS.include?(node.children[0].children[1])
114
+
115
+ !static_collection?(node.children[0].children[0])
116
+ end
117
+
118
+ def static_collection?(node)
119
+ return true unless node.is_a?(Parser::AST::Node)
120
+
121
+ %i[array const irange erange].include?(node.type)
112
122
  end
113
123
 
114
124
  def add_query_issue(node, method_name, callback_type)
@@ -155,6 +165,13 @@ module EagerEye
155
165
  false
156
166
  end
157
167
  end
168
+
169
+ def contains_ar_query_on_variable?(node, block_var)
170
+ return false unless node.is_a?(Parser::AST::Node)
171
+ return true if query_call?(node) && receiver_chain_starts_with?(node.children[0], block_var)
172
+
173
+ node.children.any? { |child| contains_ar_query_on_variable?(child, block_var) }
174
+ end
158
175
  end
159
176
  end
160
177
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EagerEye
4
- VERSION = "1.1.1"
4
+ VERSION = "1.1.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eager_eye
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - hamzagedikkaya
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-01-03 00:00:00.000000000 Z
11
+ date: 2026-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ast