sanger/sequencescape

View on GitHub
app/models/api/messages/flowcell_io.rb

Summary

Maintainability
A
3 hrs
Test Coverage
A
94%

Method included has 48 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    def self.included(base) # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
      base.class_eval do
        def mx_library
          asset.external_identifier
        end
Severity: Minor
Found in app/models/api/messages/flowcell_io.rb - About 1 hr to fix

    Method included has 38 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

        def self.included(base) # rubocop:todo Metrics/MethodLength
          base.class_eval do
            def mx_library
              asset.external_identifier || 'UNKNOWN'
            end
    Severity: Minor
    Found in app/models/api/messages/flowcell_io.rb - About 1 hr to fix

      Api::Messages::FlowcellIO::ControlLaneExtensions#self.included has approx 13 statements
      Open

          def self.included(base) # rubocop:todo Metrics/MethodLength
      Severity: Minor
      Found in app/models/api/messages/flowcell_io.rb by reek

      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.)

      Api::Messages::FlowcellIO::LaneExtensions#self.included has approx 15 statements
      Open

          def self.included(base) # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
      Severity: Minor
      Found in app/models/api/messages/flowcell_io.rb by reek

      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.)

      Api::Messages::FlowcellIO::Extensions::ClassMethods has no descriptive comment
      Open

          module ClassMethods
      Severity: Minor
      Found in app/models/api/messages/flowcell_io.rb by reek

      Classes and modules are the units of reuse and release. It is therefore considered good practice to annotate every class and module with a brief comment outlining its responsibilities.

      Example

      Given

      class Dummy
        # Do things...
      end

      Reek would emit the following warning:

      test.rb -- 1 warning:
        [1]:Dummy has no descriptive comment (IrresponsibleModule)

      Fixing this is simple - just an explaining comment:

      # The Dummy class is responsible for ...
      class Dummy
        # Do things...
      end

      Api::Messages::FlowcellIO::Extensions#self.included calls 'requests.first' 2 times
      Open

                requests.first&.flowcell_barcode
              end
      
              def read_length
                requests.first&.request_metadata&.read_length
      Severity: Minor
      Found in app/models/api/messages/flowcell_io.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.

      Api::Messages::FlowcellIO::LaneExtensions#self.included#detect_float_descriptor performs a nil-check
      Open

                return nil if value.nil?
      Severity: Minor
      Found in app/models/api/messages/flowcell_io.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)

      Api::Messages::FlowcellIO::LaneExtensions#self.included performs a nil-check
      Open

                return nil if value.nil?
      Severity: Minor
      Found in app/models/api/messages/flowcell_io.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)

      There are no issues that match your filters.

      Category
      Status