sanger/sequencescape

View on GitHub
lib/sequencing_qc_batch.rb

Summary

Maintainability
A
0 mins
Test Coverage
C
74%

Complex method SequencingQcBatch::adjacent_state_helper (34.8)
Open

  def self.adjacent_state_helper(direction, offset, delimiter) # rubocop:todo Metrics/AbcSize
    define_method(:"qc_#{direction}_state") do
      unless qc_states.include?(qc_state.to_s)
        raise StandardError, "Current QC state appears to be invalid: '#{qc_state}'"
      end
Severity: Minor
Found in lib/sequencing_qc_batch.rb by flog

Flog calculates the ABC score for methods. The ABC score is based on assignments, branches (method calls), and conditions.

You can read more about ABC metrics or the flog tool

SequencingQcBatch#self.adjacent_state_helper calls 'qc_state.to_s' 3 times
Open

      unless qc_states.include?(qc_state.to_s)
        raise StandardError, "Current QC state appears to be invalid: '#{qc_state}'"
      end
      return nil if qc_state.to_s == qc_states.send(delimiter)

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

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.

SequencingQcBatch#self.state_transition_helper performs a nil-check
Open

      update_attribute(:qc_state, qc_next_state) unless qc_next_state.nil? # rubocop:disable Rails/SkipsModelValidations
Severity: Minor
Found in lib/sequencing_qc_batch.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)

TODO found
Open

      # TODO[xxx]: Isn't qc_state supposed to be initialised to 'qc_pending' rather than blank?
Severity: Minor
Found in lib/sequencing_qc_batch.rb by fixme

TODO found
Open

    # TODO[xxx]: Really we should restrict the state transitions
Severity: Minor
Found in lib/sequencing_qc_batch.rb by fixme

There are no issues that match your filters.

Category
Status