lib/rubocop/cop/rspec/instance_variable.rb in rubocop-rspec-1.21.0 vs lib/rubocop/cop/rspec/instance_variable.rb in rubocop-rspec-1.22.0
- old
+ new
@@ -51,24 +51,33 @@
EXAMPLE_GROUP_METHODS = ExampleGroups::ALL + SharedGroups::ALL
def_node_matcher :spec_group?, EXAMPLE_GROUP_METHODS.block_pattern
+ def_node_matcher :dynamic_class?, <<-PATTERN
+ (block (send (const nil? :Class) :new ...) ...)
+ PATTERN
+
def_node_search :ivar_usage, '$(ivar $_)'
def_node_search :ivar_assigned?, '(ivasgn % ...)'
def on_block(node)
return unless spec_group?(node)
ivar_usage(node) do |ivar, name|
+ return if inside_dynamic_class?(ivar)
return if assignment_only? && !ivar_assigned?(node, name)
add_offense(ivar, location: :expression)
end
end
private
+
+ def inside_dynamic_class?(node)
+ node.each_ancestor(:block).any? { |block| dynamic_class?(block) }
+ end
def assignment_only?
cop_config['AssignmentOnly']
end
end