Class: RuboCop::Cop::Rails::ResponseParsedBody

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector, TargetRailsVersion
Defined in:
lib/rubocop/cop/rails/response_parsed_body.rb

Overview

Prefer ‘response.parsed_body` to custom parsing logic for `response.body`.

Examples:

# bad
JSON.parse(response.body)
Nokogiri::HTML(response.body)
Nokogiri::HTML4(response.body)
Nokogiri::HTML5(response.body)
Nokogiri::HTML.parse(response.body)
Nokogiri::HTML4.parse(response.body)
Nokogiri::HTML5.parse(response.body)
Nokogiri::HTML::Document.parse(response.body)
Nokogiri::HTML4::Document.parse(response.body)
Nokogiri::HTML5::Document.parse(response.body)

# good
response.parsed_body

Constant Summary collapse

MSG =
'Prefer `response.parsed_body`.'
HTML =
%i[HTML HTML4 HTML5].to_set.freeze
RESTRICT_ON_SEND =
[:parse, *HTML].freeze

Constants included from TargetRailsVersion

TargetRailsVersion::TARGET_GEM_NAME, TargetRailsVersion::USES_REQUIRES_GEM_API

Instance Method Summary collapse

Methods included from TargetRailsVersion

minimum_target_rails_version, support_target_rails_version?

Instance Method Details

#json?(node) ⇒ Object



62
63
64
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 62

def_node_matcher :json?, <<~PATTERN
  (const {nil? cbase} :JSON)
PATTERN

#json_parse_response_body?(node) ⇒ Object



42
43
44
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 42

def_node_matcher :json_parse_response_body?, <<~PATTERN
  (send #json? :parse #response_body?)
PATTERN

#nokogiri?(node) ⇒ Object



67
68
69
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 67

def_node_matcher :nokogiri?, <<~PATTERN
  (const {nil? cbase} :Nokogiri)
PATTERN

#nokogiri_html?(node) ⇒ Object



72
73
74
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 72

def_node_matcher :nokogiri_html?, <<~PATTERN
  (const #nokogiri? HTML)
PATTERN

#nokogiri_html_document_parse_response_body?(node) ⇒ Object



57
58
59
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 57

def_node_matcher :nokogiri_html_document_parse_response_body?, <<~PATTERN
  (send (const #nokogiri_html? :Document) :parse #response_body?)
PATTERN

#nokogiri_html_parse_response_body?(node) ⇒ Object



52
53
54
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 52

def_node_matcher :nokogiri_html_parse_response_body?, <<~PATTERN
  (send #nokogiri_html? :parse #response_body?)
PATTERN

#nokogiri_html_response_body?(node) ⇒ Object



47
48
49
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 47

def_node_matcher :nokogiri_html_response_body?, <<~PATTERN
  (send #nokogiri? HTML #response_body?)
PATTERN

#on_send(node) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 81

def on_send(node)
  return unless html_offense?(node) || json_offense?(node)

  add_offense(node) do |corrector|
    corrector.replace(node, 'response.parsed_body')
  end
end

#response_body?(node) ⇒ Object



77
78
79
# File 'lib/rubocop/cop/rails/response_parsed_body.rb', line 77

def_node_matcher :response_body?, <<~PATTERN
  (send (send nil? :response) :body)
PATTERN