Class: RuboCop::Cop::Netsoft::AuthHttpPositionalArguments
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Netsoft::AuthHttpPositionalArguments
- Extended by:
- TargetRailsVersion
- Defined in:
- lib/netsoft/rubocop/cops/netsoft/auth_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
Netsoft/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`.'- KEYWORD_ARGS =
%i[method params session body flash xhr as headers env].freeze
- HTTP_METHODS =
%i[get post put patch delete head].freeze
- HTTP_AUTH_METHODS =
%i[get_with post_with put_with patch_with delete_with].freeze
Instance Method Summary collapse
-
#autocorrect(node) ⇒ Object
given a pre Rails 5 method: get :new, @user.id, {}.
- #on_send(node) ⇒ Object
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
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/netsoft/rubocop/cops/netsoft/auth_http_positional_arguments.rb', line 65 def autocorrect(node) has_auth = HTTP_AUTH_METHODS.include?(node.method_name.to_sym) if has_auth user, http_path, *data = *node.arguments else http_path, *data = *node.arguments end controller_action = http_path.source params = convert_hash_data(data.first, 'params') session = convert_hash_data(data.last, 'session') if data.size > 1 # the range of the text to replace, which is the whole line code_to_replace = node.loc.expression # what to replace with format = parentheses_format(node) new_code = format % {name: node.method_name, action: has_auth ? [user.source, controller_action].join(',') : controller_action, params: params, session: session} ->(corrector) { corrector.replace(code_to_replace, new_code) } end |
#on_send(node) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/netsoft/rubocop/cops/netsoft/auth_http_positional_arguments.rb', line 39 def on_send(node) = MSG % {verb: node.method_name} http_request?(node) do |data| return unless needs_conversion?(data) add_offense(node, location: :selector, message: ) end http_auth_request?(node) do |data| return unless auth_needs_conversion?(data) add_offense(node, location: :selector, message: ) end end |