basestylo/Tweakphoeus

View on GitHub
lib/tweakphoeus.rb

Summary

Maintainability
A
0 mins
Test Coverage

Tweakphoeus::Client#initialize has boolean parameter 'redirect'
Open

    def initialize(ua_systems: %i[linux mac], ssl_verifypeer: true, redirect: false)
Severity: Minor
Found in lib/tweakphoeus.rb by reek

Boolean Parameter is a special case of Control Couple, where a method parameter is defaulted to true or false. A Boolean Parameter effectively permits a method's caller to decide which execution path to take. This is a case of bad cohesion. You're creating a dependency between methods that is not really necessary, thus increasing coupling.

Example

Given

class Dummy
  def hit_the_switch(switch = true)
    if switch
      puts 'Hitting the switch'
      # do other things...
    else
      puts 'Not hitting the switch'
      # do other things...
    end
  end
end

Reek would emit the following warning:

test.rb -- 3 warnings:
  [1]:Dummy#hit_the_switch has boolean parameter 'switch' (BooleanParameter)
  [2]:Dummy#hit_the_switch is controlled by argument switch (ControlParameter)

Note that both smells are reported, Boolean Parameter and Control Parameter.

Getting rid of the smell

This is highly dependent on your exact architecture, but looking at the example above what you could do is:

  • Move everything in the if branch into a separate method
  • Move everything in the else branch into a separate method
  • Get rid of the hit_the_switch method alltogether
  • Make the decision what method to call in the initial caller of hit_the_switch

Tweakphoeus::Client has at least 7 instance variables
Open

  class Client
Severity: Minor
Found in lib/tweakphoeus.rb by reek

Too Many Instance Variables is a special case of LargeClass.

Example

Given this configuration

TooManyInstanceVariables:
  max_instance_variables: 3

and this code:

class TooManyInstanceVariables
  def initialize
    @arg_1 = :dummy
    @arg_2 = :dummy
    @arg_3 = :dummy
    @arg_4 = :dummy
  end
end

Reek would emit the following warning:

test.rb -- 5 warnings:
  [1]:TooManyInstanceVariables has at least 4 instance variables (TooManyInstanceVariables)

Tweakphoeus::Client#initialize has boolean parameter 'ssl_verifypeer'
Open

    def initialize(ua_systems: %i[linux mac], ssl_verifypeer: true, redirect: false)
Severity: Minor
Found in lib/tweakphoeus.rb by reek

Boolean Parameter is a special case of Control Couple, where a method parameter is defaulted to true or false. A Boolean Parameter effectively permits a method's caller to decide which execution path to take. This is a case of bad cohesion. You're creating a dependency between methods that is not really necessary, thus increasing coupling.

Example

Given

class Dummy
  def hit_the_switch(switch = true)
    if switch
      puts 'Hitting the switch'
      # do other things...
    else
      puts 'Not hitting the switch'
      # do other things...
    end
  end
end

Reek would emit the following warning:

test.rb -- 3 warnings:
  [1]:Dummy#hit_the_switch has boolean parameter 'switch' (BooleanParameter)
  [2]:Dummy#hit_the_switch is controlled by argument switch (ControlParameter)

Note that both smells are reported, Boolean Parameter and Control Parameter.

Getting rid of the smell

This is highly dependent on your exact architecture, but looking at the example above what you could do is:

  • Move everything in the if branch into a separate method
  • Move everything in the else branch into a separate method
  • Get rid of the hit_the_switch method alltogether
  • Make the decision what method to call in the initial caller of hit_the_switch

Tweakphoeus::Client#get has 4 parameters
Open

    def get(url, body: nil, params: nil, headers: nil)
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A Long Parameter List occurs when a method has a lot of parameters.

Example

Given

class Dummy
  def long_list(foo,bar,baz,fling,flung)
    puts foo,bar,baz,fling,flung
  end
end

Reek would report the following warning:

test.rb -- 1 warning:
  [2]:Dummy#long_list has 5 parameters (LongParameterList)

A common solution to this problem would be the introduction of parameter objects.

Tweakphoeus::Client#http_request has 5 parameters
Open

    def http_request(url, body: nil, params: nil, headers: nil, method: :get)
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A Long Parameter List occurs when a method has a lot of parameters.

Example

Given

class Dummy
  def long_list(foo,bar,baz,fling,flung)
    puts foo,bar,baz,fling,flung
  end
end

Reek would report the following warning:

test.rb -- 1 warning:
  [2]:Dummy#long_list has 5 parameters (LongParameterList)

A common solution to this problem would be the introduction of parameter objects.

Tweakphoeus::Client#redirect_url doesn't depend on instance state (maybe move it to another class?)
Open

    def redirect_url(response)
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A Utility Function is any instance method that has no dependency on the state of the instance.

Tweakphoeus::Client#base_headers is a writable attribute
Open

    attr_accessor :cookie_jar, :referer_list, :base_headers, :redirect
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A class that publishes a setter for an instance variable invites client classes to become too intimate with its inner workings, and in particular with its representation of state.

The same holds to a lesser extent for getters, but Reek doesn't flag those.

Example

Given:

class Klass
  attr_accessor :dummy
end

Reek would emit the following warning:

reek test.rb

test.rb -- 1 warning:
  [2]:Klass declares the writable attribute dummy (Attribute)

Tweakphoeus::Client#redirect? performs a nil-check
Open

      !redirect_url(response).nil?
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A NilCheck is a type check. Failures of NilCheck violate the "tell, don't ask" principle.

Additionally, type checks often mask bigger problems in your source code like not using OOP and / or polymorphism when you should.

Example

Given

class Klass
  def nil_checker(argument)
    if argument.nil?
      puts "argument isn't nil!"
    end
  end
end

Reek would emit the following warning:

test.rb -- 1 warning:
  [3]:Klass#nil_checker performs a nil-check. (NilCheck)

Tweakphoeus::Client#build_base_headers doesn't depend on instance state (maybe move it to another class?)
Open

    def build_base_headers(ua_systems)
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A Utility Function is any instance method that has no dependency on the state of the instance.

Tweakphoeus::Client#cookie_jar is a writable attribute
Open

    attr_accessor :cookie_jar, :referer_list, :base_headers, :redirect
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A class that publishes a setter for an instance variable invites client classes to become too intimate with its inner workings, and in particular with its representation of state.

The same holds to a lesser extent for getters, but Reek doesn't flag those.

Example

Given:

class Klass
  attr_accessor :dummy
end

Reek would emit the following warning:

reek test.rb

test.rb -- 1 warning:
  [2]:Klass declares the writable attribute dummy (Attribute)

Tweakphoeus::Client#redirect is a writable attribute
Open

    attr_accessor :cookie_jar, :referer_list, :base_headers, :redirect
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A class that publishes a setter for an instance variable invites client classes to become too intimate with its inner workings, and in particular with its representation of state.

The same holds to a lesser extent for getters, but Reek doesn't flag those.

Example

Given:

class Klass
  attr_accessor :dummy
end

Reek would emit the following warning:

reek test.rb

test.rb -- 1 warning:
  [2]:Klass declares the writable attribute dummy (Attribute)

Tweakphoeus::Client takes parameters ['body', 'headers', 'url'] to 4 methods
Open

    def get(url, body: nil, params: nil, headers: nil)
      referer_list.referer_from_headers(headers)
      http_request(url, body: body, params: params, headers: headers, method: :get)
    end

Severity: Minor
Found in lib/tweakphoeus.rb by reek

In general, a Data Clump occurs when the same two or three items frequently appear together in classes and parameter lists, or when a group of instance variable names start or end with similar substrings.

The recurrence of the items often means there is duplicate code spread around to handle them. There may be an abstraction missing from the code, making the system harder to understand.

Example

Given

class Dummy
  def x(y1,y2); end
  def y(y1,y2); end
  def z(y1,y2); end
end

Reek would emit the following warning:

test.rb -- 1 warning:
  [2, 3, 4]:Dummy takes parameters [y1, y2] to 3 methods (DataClump)

A possible way to fix this problem (quoting from Martin Fowler):

The first step is to replace data clumps with objects and use the objects whenever you see them. An immediate benefit is that you'll shrink some parameter lists. The interesting stuff happens as you begin to look for behavior to move into the new objects.

Tweakphoeus::Client#referer_list is a writable attribute
Open

    attr_accessor :cookie_jar, :referer_list, :base_headers, :redirect
Severity: Minor
Found in lib/tweakphoeus.rb by reek

A class that publishes a setter for an instance variable invites client classes to become too intimate with its inner workings, and in particular with its representation of state.

The same holds to a lesser extent for getters, but Reek doesn't flag those.

Example

Given:

class Klass
  attr_accessor :dummy
end

Reek would emit the following warning:

reek test.rb

test.rb -- 1 warning:
  [2]:Klass declares the writable attribute dummy (Attribute)

There are no issues that match your filters.

Category
Status