Class: RuboCop::Cop::Rails::HttpPositionalArguments
- Extended by:
- TargetRailsVersion
- Defined in:
- lib/rubocop/cop/rails/http_positional_arguments.rb
Overview
This cop is used to identify usages of http methods like get, post, put, patch without the usage of keyword arguments in your tests and change them to use keyword args. This cop only applies to Rails >= 5. If you are running Rails < 5 you should disable the Rails/HttpPositionalArguments cop or set your TargetRailsVersion in your .rubocop.yml file to 4.0, etc.
Constant Summary collapse
- MSG =
'Use keyword arguments instead of ' \ 'positional arguments for http call: `%<verb>s`.'.freeze
- KEYWORD_ARGS =
i[ method params session body flash xhr as headers env ].freeze
- HTTP_METHODS =
i[get post put patch delete head].freeze
Constants included from Util
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offenses, #processed_source
Instance Method Summary collapse
-
#autocorrect(node) ⇒ Object
given a pre Rails 5 method: get :new, @user.id, {}.
- #on_send(node) ⇒ Object
Methods included from TargetRailsVersion
minimum_target_rails_version, support_target_rails_version?
Methods inherited from Cop
#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, #correct, department, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version
Methods included from AST::Sexp
Methods included from NodePattern::Macros
#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
begins_its_line?, comment_line?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens
Methods included from PathUtil
absolute?, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path
Constructor Details
This class inherits a constructor from RuboCop::Cop::Cop
Instance Method Details
#autocorrect(node) ⇒ Object
given a pre Rails 5 method: get :new, @user.id, {}
the result should look like:
get :new, params: { user_id: @user.id }, session: {}
the http_method is the method used to call the controller the controller node can be a symbol, method, object or string that represents the path/action on the Rails controller the data is the http parameters and environment sent in the Rails 5 http call
54 55 56 57 58 |
# File 'lib/rubocop/cop/rails/http_positional_arguments.rb', line 54 def autocorrect(node) lambda do |corrector| corrector.replace(node.loc.expression, correction(node)) end end |
#on_send(node) ⇒ Object
35 36 37 38 39 40 41 42 |
# File 'lib/rubocop/cop/rails/http_positional_arguments.rb', line 35 def on_send(node) http_request?(node) do |data| return unless needs_conversion?(data) add_offense(node, location: :selector, message: format(MSG, verb: node.method_name)) end end |