Method get_token
has 42 lines of code (exceeds 25 allowed). Consider refactoring. Open
def get_token(args)
getHostedProfilePageRequest = <<~EOR
<?xml version="1.0" encoding="utf-8"?>
<getHostedProfilePageRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
<merchantAuthentication>
PaymentGateways::AuthorizeNetCimCrypt#get_token has approx 12 statements Open
def get_token(args)
- Read upRead up
- Exclude checks
A method with Too Many Statements
is any method that has a large number of lines.
Too Many Statements
warns about any method that has more than 5 statements. Reek's smell detector for Too Many Statements
counts +1 for every simple statement in a method and +1 for every statement within a control structure (if
, else
, case
, when
, for
, while
, until
, begin
, rescue
) but it doesn't count the control structure itself.
So the following method would score +6 in Reek's statement-counting algorithm:
def parse(arg, argv, &error)
if !(val = arg) and (argv.empty? or /\A-/ =~ (val = argv[0]))
return nil, block, nil # +1
end
opt = (val = parse_arg(val, &error))[1] # +2
val = conv_arg(*val) # +3
if opt and !arg
argv.shift # +4
else
val[0] = nil # +5
end
val # +6
end
(You might argue that the two assigments within the first @if@ should count as statements, and that perhaps the nested assignment should count as +2.)
PaymentGateways::AuthorizeNetCimCrypt#update_user has approx 15 statements Open
def update_user(auth_response)
- Read upRead up
- Exclude checks
A method with Too Many Statements
is any method that has a large number of lines.
Too Many Statements
warns about any method that has more than 5 statements. Reek's smell detector for Too Many Statements
counts +1 for every simple statement in a method and +1 for every statement within a control structure (if
, else
, case
, when
, for
, while
, until
, begin
, rescue
) but it doesn't count the control structure itself.
So the following method would score +6 in Reek's statement-counting algorithm:
def parse(arg, argv, &error)
if !(val = arg) and (argv.empty? or /\A-/ =~ (val = argv[0]))
return nil, block, nil # +1
end
opt = (val = parse_arg(val, &error))[1] # +2
val = conv_arg(*val) # +3
if opt and !arg
argv.shift # +4
else
val[0] = nil # +5
end
val # +6
end
(You might argue that the two assigments within the first @if@ should count as statements, and that perhaps the nested assignment should count as +2.)
PaymentGateways::AuthorizeNetCimCrypt#get_token calls 'user.id' 2 times Open
log_gateway_action("Getting token for user #{user.id}")
crypted_request = RestClient.post authorize_api_url, getHostedProfilePageRequest,
:content_type => "text/xml"
xml_reply = Nokogiri::XML::Document.parse(crypted_request)
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#has_credit_card? calls 'auth_response.params['profile']' 3 times Open
auth_response.params['profile'].key?('payment_profiles') &&
auth_response.params['profile']['payment_profiles'].key?('payment') &&
auth_response.params['profile']['payment_profiles']['payment'].key?('credit_card')
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#update_user calls 'auth_response.params['profile']' 3 times Open
payment_profiles = auth_response.params['profile']['payment_profiles']
if payment_profiles && payment_profiles['bill_to']
bill_info = payment_profiles['bill_to']
account.billing_address_name = bill_info['company']
account.billing_address_address1 = bill_info['address']
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#has_credit_card? calls 'auth_response.params['profile']['payment_profiles']' 2 times Open
auth_response.params['profile']['payment_profiles'].key?('payment') &&
auth_response.params['profile']['payment_profiles']['payment'].key?('credit_card')
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#has_credit_card? calls 'auth_response.params' 3 times Open
auth_response.params['profile'].key?('payment_profiles') &&
auth_response.params['profile']['payment_profiles'].key?('payment') &&
auth_response.params['profile']['payment_profiles']['payment'].key?('credit_card')
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#update_user calls 'auth_response.params' 4 times Open
return :error unless auth_response.params['messages']['result_code'] == 'Ok'
log_gateway_action("updating user #{user}")
payment_profiles = auth_response.params['profile']['payment_profiles']
if payment_profiles && payment_profiles['bill_to']
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#update_user calls 'auth_response.params['profile']['payment_profiles']' 3 times Open
payment_profiles = auth_response.params['profile']['payment_profiles']
if payment_profiles && payment_profiles['bill_to']
bill_info = payment_profiles['bill_to']
account.billing_address_name = bill_info['company']
account.billing_address_address1 = bill_info['address']
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#update_user calls 'payment_profiles['bill_to']' 2 times Open
if payment_profiles && payment_profiles['bill_to']
bill_info = payment_profiles['bill_to']
- Read upRead up
- Exclude checks
Duplication occurs when two fragments of code look nearly identical, or when two fragments of code have nearly identical effects at some conceptual level.
Reek implements a check for Duplicate Method Call.
Example
Here's a very much simplified and contrived example. The following method will report a warning:
def double_thing()
@other.thing + @other.thing
end
One quick approach to silence Reek would be to refactor the code thus:
def double_thing()
thing = @other.thing
thing + thing
end
A slightly different approach would be to replace all calls of double_thing
by calls to @other.double_thing
:
class Other
def double_thing()
thing + thing
end
end
The approach you take will depend on balancing other factors in your code.
PaymentGateways::AuthorizeNetCimCrypt#has_credit_card? doesn't depend on instance state (maybe move it to another class?) Open
def has_credit_card?(auth_response)
- Read upRead up
- Exclude checks
A Utility Function is any instance method that has no dependency on the state of the instance.
PaymentGateways::AuthorizeNetCimCrypt#get_token has the variable name 'getHostedProfilePageRequest' Open
getHostedProfilePageRequest = <<~EOR
- Read upRead up
- Exclude checks
An Uncommunicative Variable Name
is a variable name that doesn't communicate its intent well enough.
Poor names make it hard for the reader to build a mental picture of what's going on in the code. They can also be mis-interpreted; and they hurt the flow of reading, because the reader must slow down to interpret the names.
PaymentGateways::AuthorizeNetCimCrypt#get_token has the variable name 'e' Open
rescue SocketError => e
- Read upRead up
- Exclude checks
An Uncommunicative Variable Name
is a variable name that doesn't communicate its intent well enough.
Poor names make it hard for the reader to build a mental picture of what's going on in the code. They can also be mis-interpreted; and they hurt the flow of reading, because the reader must slow down to interpret the names.