class RuboCop::Cop::Freee::ScopeReturnValue
scope内でselfを返していないかチェックするcop. selfを返すとwhere句がすべて外れ、全ユーザーのデータが 見えてしまう恐れがある.
autocorrectは実装しない.
Constants
- MSG
Public Instance Methods
on_send(node)
click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 19 def on_send(node) return unless scope_node?(node) scope_call(node) do |args| n = args.find(&:lambda_or_proc?) return unless n add_offense(node, :expression, MSG) unless check_scope_node(n) end end
Private Instance Methods
caller_node?(node)
click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 40 def caller_node?(node) node.parent.send_type? end
check_scope_node(node)
click to toggle source
末端のNodeかつtypeがselfなものがあればアウト
# File lib/rubocop/cop/scope_return_value.rb, line 45 def check_scope_node(node) res = true node.each_descendant do |n| res = false if self_of_end?(n) && !caller_node?(n) end res end
scope_node?(node)
click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 32 def scope_node?(node) node.send_type? && node.method_name == :scope end
self_of_end?(node)
click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 36 def self_of_end?(node) node.self_type? && node.descendants.size.zero? end