app/controllers/setup/autocomplete_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
C
76%

Method has too many lines. [26/10]
Open

  def data_elements_with_cocs
    if params[:id]
      if !params[:id].include?(".")
        expires_in 3.minutes
        results = find_results(params[:id], "data_elements")

This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Method has too many lines. [12/10]
Open

  def organisation_unit_group_by_term_on_sol
    pyr = Pyramid.from(current_project)

    org_unit_groups = pyr.org_unit_groups.map do |oug|
      ou_total = pyr.org_units_in_group(oug.id).size

This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Method has too many lines. [11/10]
Open

  def data_elements
    if params[:id]
      expires_in 3.minutes
      results = find_results(params[:id], "data_elements")
      render_sol_items(results, params[:id])

This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Method data_elements_with_cocs has 26 lines of code (exceeds 25 allowed). Consider refactoring.
Open

  def data_elements_with_cocs
    if params[:id]
      if !params[:id].include?(".")
        expires_in 3.minutes
        results = find_results(params[:id], "data_elements")
Severity: Minor
Found in app/controllers/setup/autocomplete_controller.rb - About 1 hr to fix

    Method data_elements_with_cocs has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
    Open

      def data_elements_with_cocs
        if params[:id]
          if !params[:id].include?(".")
            expires_in 3.minutes
            results = find_results(params[:id], "data_elements")
    Severity: Minor
    Found in app/controllers/setup/autocomplete_controller.rb - About 25 mins to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Align the elements of a hash literal if they span more than one line.
    Open

            type:  "option",

    Check that the keys, separators, and values of a multi-line hash literal are aligned according to configuration. The configuration options are:

    - key (left align keys, one space before hash rockets and values)
    - separator (align hash rockets and colons, right align keys)
    - table (left align keys, hash rockets, and values)

    The treatment of hashes passed as the last argument to a method call can also be configured. The options are:

    - always_inspect
    - always_ignore
    - ignore_implicit (without curly braces)

    Alternatively you can specify multiple allowed styles. That's done by passing a list of styles to EnforcedStyles.

    Example: EnforcedHashRocketStyle: key (default)

    # bad
    {
      :foo => bar,
       :ba => baz
    }
    {
      :foo => bar,
      :ba  => baz
    }
    
    # good
    {
      :foo => bar,
      :ba => baz
    }

    Example: EnforcedHashRocketStyle: separator

    # bad
    {
      :foo => bar,
      :ba => baz
    }
    {
      :foo => bar,
      :ba  => baz
    }
    
    # good
    {
      :foo => bar,
       :ba => baz
    }

    Example: EnforcedHashRocketStyle: table

    # bad
    {
      :foo => bar,
       :ba => baz
    }
    
    # good
    {
      :foo => bar,
      :ba  => baz
    }

    Example: EnforcedColonStyle: key (default)

    # bad
    {
      foo: bar,
       ba: baz
    }
    {
      foo: bar,
      ba:  baz
    }
    
    # good
    {
      foo: bar,
      ba: baz
    }

    Example: EnforcedColonStyle: separator

    # bad
    {
      foo: bar,
      ba: baz
    }
    
    # good
    {
      foo: bar,
       ba: baz
    }

    Example: EnforcedColonStyle: table

    # bad
    {
      foo: bar,
      ba: baz
    }
    
    # good
    {
      foo: bar,
      ba:  baz
    }

    Example: EnforcedLastArgumentHashStyle: always_inspect (default)

    # Inspect both implicit and explicit hashes.
    
    # bad
    do_something(foo: 1,
      bar: 2)
    
    # bad
    do_something({foo: 1,
      bar: 2})
    
    # good
    do_something(foo: 1,
                 bar: 2)
    
    # good
    do_something(
      foo: 1,
      bar: 2
    )
    
    # good
    do_something({foo: 1,
                  bar: 2})
    
    # good
    do_something({
      foo: 1,
      bar: 2
    })

    Example: EnforcedLastArgumentHashStyle: always_ignore

    # Ignore both implicit and explicit hashes.
    
    # good
    do_something(foo: 1,
      bar: 2)
    
    # good
    do_something({foo: 1,
      bar: 2})

    Example: EnforcedLastArgumentHashStyle: ignore_implicit

    # Ignore only implicit hashes.
    
    # bad
    do_something({foo: 1,
      bar: 2})
    
    # good
    do_something(foo: 1,
      bar: 2)

    Example: EnforcedLastArgumentHashStyle: ignore_explicit

    # Ignore only explicit hashes.
    
    # bad
    do_something(foo: 1,
      bar: 2)
    
    # good
    do_something({foo: 1,
      bar: 2})

    Line is too long. [103/100]
    Open

            data_elements = autocompleter.find(datalement_id, kind: "data_elements", fields: DE_COC_FIELDS)

    Use nested module/class definitions instead of compact style.
    Open

    class Setup::AutocompleteController < PrivateController

    This cop checks the style of children definitions at classes and modules. Basically there are two different styles:

    Example: EnforcedStyle: nested (default)

    # good
    # have each child on its own line
    class Foo
      class Bar
      end
    end

    Example: EnforcedStyle: compact

    # good
    # combine definitions as much as possible
    class Foo::Bar
    end

    The compact style is only forced for classes/modules with one child.

    Align the elements of a hash literal if they span more than one line.
    Open

            id:    item.id,

    Check that the keys, separators, and values of a multi-line hash literal are aligned according to configuration. The configuration options are:

    - key (left align keys, one space before hash rockets and values)
    - separator (align hash rockets and colons, right align keys)
    - table (left align keys, hash rockets, and values)

    The treatment of hashes passed as the last argument to a method call can also be configured. The options are:

    - always_inspect
    - always_ignore
    - ignore_implicit (without curly braces)

    Alternatively you can specify multiple allowed styles. That's done by passing a list of styles to EnforcedStyles.

    Example: EnforcedHashRocketStyle: key (default)

    # bad
    {
      :foo => bar,
       :ba => baz
    }
    {
      :foo => bar,
      :ba  => baz
    }
    
    # good
    {
      :foo => bar,
      :ba => baz
    }

    Example: EnforcedHashRocketStyle: separator

    # bad
    {
      :foo => bar,
      :ba => baz
    }
    {
      :foo => bar,
      :ba  => baz
    }
    
    # good
    {
      :foo => bar,
       :ba => baz
    }

    Example: EnforcedHashRocketStyle: table

    # bad
    {
      :foo => bar,
       :ba => baz
    }
    
    # good
    {
      :foo => bar,
      :ba  => baz
    }

    Example: EnforcedColonStyle: key (default)

    # bad
    {
      foo: bar,
       ba: baz
    }
    {
      foo: bar,
      ba:  baz
    }
    
    # good
    {
      foo: bar,
      ba: baz
    }

    Example: EnforcedColonStyle: separator

    # bad
    {
      foo: bar,
      ba: baz
    }
    
    # good
    {
      foo: bar,
       ba: baz
    }

    Example: EnforcedColonStyle: table

    # bad
    {
      foo: bar,
      ba: baz
    }
    
    # good
    {
      foo: bar,
      ba:  baz
    }

    Example: EnforcedLastArgumentHashStyle: always_inspect (default)

    # Inspect both implicit and explicit hashes.
    
    # bad
    do_something(foo: 1,
      bar: 2)
    
    # bad
    do_something({foo: 1,
      bar: 2})
    
    # good
    do_something(foo: 1,
                 bar: 2)
    
    # good
    do_something(
      foo: 1,
      bar: 2
    )
    
    # good
    do_something({foo: 1,
                  bar: 2})
    
    # good
    do_something({
      foo: 1,
      bar: 2
    })

    Example: EnforcedLastArgumentHashStyle: always_ignore

    # Ignore both implicit and explicit hashes.
    
    # good
    do_something(foo: 1,
      bar: 2)
    
    # good
    do_something({foo: 1,
      bar: 2})

    Example: EnforcedLastArgumentHashStyle: ignore_implicit

    # Ignore only implicit hashes.
    
    # bad
    do_something({foo: 1,
      bar: 2})
    
    # good
    do_something(foo: 1,
      bar: 2)

    Example: EnforcedLastArgumentHashStyle: ignore_explicit

    # Ignore only explicit hashes.
    
    # bad
    do_something(foo: 1,
      bar: 2)
    
    # good
    do_something({foo: 1,
      bar: 2})

    Line is too long. [103/100]
    Open

            label: "#{oug.display_name} (#{ou_total}/#{pyr.org_units.size}) : #{sample_ous.join(', ')},..."

    Line is too long. [107/100]
    Open

        sql_views = current_project.dhis2_connection.get("sqlViews")["sql_views"].map { |s| OpenStruct.new(s) }

    Move render_sol_items(results, params[:id]) out of the conditional.
    Open

            render_sol_items(results, params[:id])

    This cop checks for identical lines at the beginning or end of each branch of a conditional statement.

    Example:

    # bad
    if condition
      do_x
      do_z
    else
      do_y
      do_z
    end
    
    # good
    if condition
      do_x
    else
      do_y
    end
    do_z
    
    # bad
    if condition
      do_z
      do_x
    else
      do_z
      do_y
    end
    
    # good
    do_z
    if condition
      do_x
    else
      do_y
    end
    
    # bad
    case foo
    when 1
      do_x
    when 2
      do_x
    else
      do_x
    end
    
    # good
    case foo
    when 1
      do_x
      do_y
    when 2
      # nothing
    else
      do_x
      do_z
    end

    Align the elements of a hash literal if they span more than one line.
    Open

            type:  "option",

    Check that the keys, separators, and values of a multi-line hash literal are aligned according to configuration. The configuration options are:

    - key (left align keys, one space before hash rockets and values)
    - separator (align hash rockets and colons, right align keys)
    - table (left align keys, hash rockets, and values)

    The treatment of hashes passed as the last argument to a method call can also be configured. The options are:

    - always_inspect
    - always_ignore
    - ignore_implicit (without curly braces)

    Alternatively you can specify multiple allowed styles. That's done by passing a list of styles to EnforcedStyles.

    Example: EnforcedHashRocketStyle: key (default)

    # bad
    {
      :foo => bar,
       :ba => baz
    }
    {
      :foo => bar,
      :ba  => baz
    }
    
    # good
    {
      :foo => bar,
      :ba => baz
    }

    Example: EnforcedHashRocketStyle: separator

    # bad
    {
      :foo => bar,
      :ba => baz
    }
    {
      :foo => bar,
      :ba  => baz
    }
    
    # good
    {
      :foo => bar,
       :ba => baz
    }

    Example: EnforcedHashRocketStyle: table

    # bad
    {
      :foo => bar,
       :ba => baz
    }
    
    # good
    {
      :foo => bar,
      :ba  => baz
    }

    Example: EnforcedColonStyle: key (default)

    # bad
    {
      foo: bar,
       ba: baz
    }
    {
      foo: bar,
      ba:  baz
    }
    
    # good
    {
      foo: bar,
      ba: baz
    }

    Example: EnforcedColonStyle: separator

    # bad
    {
      foo: bar,
      ba: baz
    }
    
    # good
    {
      foo: bar,
       ba: baz
    }

    Example: EnforcedColonStyle: table

    # bad
    {
      foo: bar,
      ba: baz
    }
    
    # good
    {
      foo: bar,
      ba:  baz
    }

    Example: EnforcedLastArgumentHashStyle: always_inspect (default)

    # Inspect both implicit and explicit hashes.
    
    # bad
    do_something(foo: 1,
      bar: 2)
    
    # bad
    do_something({foo: 1,
      bar: 2})
    
    # good
    do_something(foo: 1,
                 bar: 2)
    
    # good
    do_something(
      foo: 1,
      bar: 2
    )
    
    # good
    do_something({foo: 1,
                  bar: 2})
    
    # good
    do_something({
      foo: 1,
      bar: 2
    })

    Example: EnforcedLastArgumentHashStyle: always_ignore

    # Ignore both implicit and explicit hashes.
    
    # good
    do_something(foo: 1,
      bar: 2)
    
    # good
    do_something({foo: 1,
      bar: 2})

    Example: EnforcedLastArgumentHashStyle: ignore_implicit

    # Ignore only implicit hashes.
    
    # bad
    do_something({foo: 1,
      bar: 2})
    
    # good
    do_something(foo: 1,
      bar: 2)

    Example: EnforcedLastArgumentHashStyle: ignore_explicit

    # Ignore only explicit hashes.
    
    # bad
    do_something(foo: 1,
      bar: 2)
    
    # good
    do_something({foo: 1,
      bar: 2})

    Line is too long. [111/100]
    Open

            results = autocompleter.data_elements_with_category_combos(data_elements, limit_to_coc_with_id: coc_id)

    Move render_sol_items(results, params[:id]) out of the conditional.
    Open

            render_sol_items(results, params[:id])

    This cop checks for identical lines at the beginning or end of each branch of a conditional statement.

    Example:

    # bad
    if condition
      do_x
      do_z
    else
      do_y
      do_z
    end
    
    # good
    if condition
      do_x
    else
      do_y
    end
    do_z
    
    # bad
    if condition
      do_z
      do_x
    else
      do_z
      do_y
    end
    
    # good
    do_z
    if condition
      do_x
    else
      do_y
    end
    
    # bad
    case foo
    when 1
      do_x
    when 2
      do_x
    else
      do_x
    end
    
    # good
    case foo
    when 1
      do_x
      do_y
    when 2
      # nothing
    else
      do_x
      do_z
    end

    Line is too long. [125/100]
    Open

        render_sol_items(current_project.dhis2_connection.programs.list(filter: "registration:eq:false"), params[:term].presence)

    There are no issues that match your filters.

    Category
    Status