koraktor/gallerist

View on GitHub
lib/gallerist/app/utilities.rb

Summary

Maintainability
A
2 hrs
Test Coverage

Assignment Branch Condition size for setup_library is too high. [48.35/15]
Open

  def setup_library
    library = Gallerist::Library.new settings.library_path
    settings.set :library, library

    logger.info "Loading library from \"#{library.path}\""
Severity: Minor
Found in lib/gallerist/app/utilities.rb by rubocop

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

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

  def setup_library
    library = Gallerist::Library.new settings.library_path
    settings.set :library, library

    logger.info "Loading library from \"#{library.path}\""
Severity: Minor
Found in lib/gallerist/app/utilities.rb by rubocop

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. [24/10]
Open

  def navbar_for(obj)
    @navbar = []
    navbar_item library.name, '/'

    case obj
Severity: Minor
Found in lib/gallerist/app/utilities.rb by rubocop

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.

Cyclomatic complexity for navbar_for is too high. [10/6]
Open

  def navbar_for(obj)
    @navbar = []
    navbar_item library.name, '/'

    case obj
Severity: Minor
Found in lib/gallerist/app/utilities.rb by rubocop

This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

Assignment Branch Condition size for navbar_for is too high. [17.52/15]
Open

  def navbar_for(obj)
    @navbar = []
    navbar_item library.name, '/'

    case obj
Severity: Minor
Found in lib/gallerist/app/utilities.rb by rubocop

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Method setup_library has 34 lines of code (exceeds 25 allowed). Consider refactoring.
Open

  def setup_library
    library = Gallerist::Library.new settings.library_path
    settings.set :library, library

    logger.info "Loading library from \"#{library.path}\""
Severity: Minor
Found in lib/gallerist/app/utilities.rb - About 1 hr to fix

    Method setup_library has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
    Open

      def setup_library
        library = Gallerist::Library.new settings.library_path
        settings.set :library, library
    
        logger.info "Loading library from \"#{library.path}\""
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb - About 55 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

    Gallerist::App::Utilities#navbar_for has approx 11 statements
    Open

      def navbar_for(obj)
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.)

    Gallerist::App::Utilities#send_library_file has approx 6 statements
    Open

      def send_library_file(file, options = {})
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.)

    Gallerist::App::Utilities#setup_library has approx 24 statements
    Open

      def setup_library
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.)

    Gallerist::App::Utilities#render_object has approx 7 statements
    Open

      def render_object(type)
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.)

    Gallerist::App::Utilities#setup_library calls 'logger.debug ' Completed.'' 2 times
    Open

          logger.debug '  Completed.'
        end
    
        Gallerist::BaseModel.use_library library
    
    
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.

    Gallerist::App::Utilities#setup_library calls 'settings.copy_dbs' 2 times
    Open

        if settings.copy_dbs
          logger.debug 'Creating temporary copy of the main library database...'
          library.copy_base_db
          logger.debug '  Completed.'
        end
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.

    Gallerist::App::Utilities#setup_library calls 'library.type' 3 times
    Open

        logger.info "  Found library with type '#{library.type}'."
        logger.debug "    Library’s App ID is '#{library.app_id}'."
    
        logger.debug 'Setting up models for library type…'
        Gallerist.load_models library.type
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.

    Gallerist::App::Utilities#setup_library calls 'settings.library_path' 2 times
    Open

        library = Gallerist::Library.new settings.library_path
        settings.set :library, library
    
        logger.info "Loading library from \"#{library.path}\""
    
    
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.

    Gallerist::App::Utilities#navbar_for calls 'navbar_item 'Persons', '/persons'' 2 times
    Open

          navbar_item 'Persons', '/persons'
        when :tags
          navbar_item 'Tags', '/tags'
        when Gallerist::Album
          navbar_item 'Albums', '/albums'
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.

    Gallerist::App::Utilities#navbar_for calls 'navbar_item 'Tags', '/tags'' 2 times
    Open

          navbar_item 'Tags', '/tags'
        when Gallerist::Album
          navbar_item 'Albums', '/albums'
        when Gallerist::Person
          navbar_item 'Persons', '/persons'
    Severity: Minor
    Found in lib/gallerist/app/utilities.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.

    Prefer $ERROR_INFO from the stdlib 'English' module (don't forget to require it) over $!.
    Open

        if $!.cause.is_a? SQLite3::BusyException
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Do not use space inside array brackets.
    Open

        @navbar << [ url, name ]
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Checks that brackets used for array literals have or don't have surrounding space depending on configuration.

    Example: EnforcedStyle: space

    # The `space` style enforces that array literals have
    # surrounding space.
    
    # bad
    array = [a, b, c, d]
    
    # good
    array = [ a, b, c, d ]

    Example: EnforcedStyle: no_space

    # The `no_space` style enforces that array literals have
    # no surrounding space.
    
    # bad
    array = [ a, b, c, d ]
    
    # good
    array = [a, b, c, d]

    Example: EnforcedStyle: compact

    # The `compact` style normally requires a space inside
    # array brackets, with the exception that successive left
    # or right brackets are collapsed together in nested arrays.
    
    # bad
    array = [ a, [ b, c ] ]
    
    # good
    array = [ a, [ b, c ]]

    Redundant else-clause.
    Open

        else #ignore
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Checks for empty else-clauses, possibly including comments and/or an explicit nil depending on the EnforcedStyle.

    Example: EnforcedStyle: empty

    # warn only on empty else
    
    # bad
    if condition
      statement
    else
    end
    
    # good
    if condition
      statement
    else
      nil
    end
    
    # good
    if condition
      statement
    else
      statement
    end
    
    # good
    if condition
      statement
    end

    Example: EnforcedStyle: nil

    # warn on else with nil in it
    
    # bad
    if condition
      statement
    else
      nil
    end
    
    # good
    if condition
      statement
    else
    end
    
    # good
    if condition
      statement
    else
      statement
    end
    
    # good
    if condition
      statement
    end

    Example: EnforcedStyle: both (default)

    # warn on empty else and else with nil in it
    
    # bad
    if condition
      statement
    else
      nil
    end
    
    # bad
    if condition
      statement
    else
    end
    
    # good
    if condition
      statement
    else
      statement
    end
    
    # good
    if condition
      statement
    end

    Extra empty line detected at module body end.
    Open

    
    end
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    This cops checks if empty lines around the bodies of modules match the configuration.

    Example: EnforcedStyle: empty_lines

    # good
    
    module Foo
    
      def bar
        # ...
      end
    
    end

    Example: EnforcedStyle: emptylinesexcept_namespace

    # good
    
    module Foo
      module Bar
    
        # ...
    
      end
    end

    Example: EnforcedStyle: emptylinesspecial

    # good
    module Foo
    
      def bar; end
    
    end

    Example: EnforcedStyle: noemptylines (default)

    # good
    
    module Foo
      def bar
        # ...
      end
    end

    Use a guard clause instead of wrapping the code inside a conditional expression.
    Open

        unless obj.is_a? Symbol
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Use a guard clause instead of wrapping the code inside a conditional expression

    Example:

    # bad
    def test
      if something
        work
      end
    end
    
    # good
    def test
      return unless something
      work
    end
    
    # also good
    def test
      work if something
    end
    
    # bad
    if something
      raise 'exception'
    else
      ok
    end
    
    # good
    raise 'exception' if something
    ok

    Favor modifier unless usage when having a single-line body. Another good alternative is the usage of control flow &&/||.
    Open

        unless obj.is_a? Symbol
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Checks for if and unless statements that would fit on one line if written as a modifier if/unless. The maximum line length is configured in the Metrics/LineLength cop.

    Example:

    # bad
    if condition
      do_stuff(bar)
    end
    
    unless qux.empty?
      Foo.do_something
    end
    
    # good
    do_stuff(bar) if condition
    Foo.do_something unless qux.empty?

    Prefer single-quoted strings when you don't need string interpolation or special symbols.
    Open

          logger.warn "  Legacy library versions are not fully supported and may cause problems."
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Checks if uses of quotes match the configured preference.

    Example: EnforcedStyle: single_quotes (default)

    # bad
    "No special symbols"
    "No string interpolation"
    "Just text"
    
    # good
    'No special symbols'
    'No string interpolation'
    'Just text'
    "Wait! What's #{this}!"

    Example: EnforcedStyle: double_quotes

    # bad
    'Just some text'
    'No special chars or interpolation'
    
    # good
    "Just some text"
    "No special chars or interpolation"
    "Every string in #{project} uses double_quotes"

    Missing space after #.
    Open

        else #ignore
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    This cop checks whether comments have a leading space after the # denoting the start of the comment. The leading space is not required for some RDoc special syntax, like #++, #--, #:nodoc, =begin- and =end comments, "shebang" directives, or rackup options.

    Example:

    # bad
    #Some comment
    
    # good
    # Some comment

    Line is too long. [93/80]
    Open

          logger.warn "  Legacy library versions are not fully supported and may cause problems."
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Missing top-level module documentation comment.
    Open

    module Gallerist::App::Utilities
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    This cop checks for missing top-level documentation of classes and modules. Classes with no body are exempt from the check and so are namespace modules - modules that have nothing in their bodies except classes, other modules, or constant definitions.

    The documentation requirement is annulled if the class or module has a "#:nodoc:" comment next to it. Likewise, "#:nodoc: all" does the same for all its children.

    Example:

    # bad
    class Person
      # ...
    end
    
    # good
    # Description/Explanation of Person class
    class Person
      # ...
    end

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

    module Gallerist::App::Utilities
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    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.

    Extra empty line detected at module body beginning.
    Open

    
      def send_library_file(file, options = {})
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    This cops checks if empty lines around the bodies of modules match the configuration.

    Example: EnforcedStyle: empty_lines

    # good
    
    module Foo
    
      def bar
        # ...
      end
    
    end

    Example: EnforcedStyle: emptylinesexcept_namespace

    # good
    
    module Foo
      module Bar
    
        # ...
    
      end
    end

    Example: EnforcedStyle: emptylinesspecial

    # good
    module Foo
    
      def bar; end
    
    end

    Example: EnforcedStyle: noemptylines (default)

    # good
    
    module Foo
      def bar
        # ...
      end
    end

    Do not use space inside array brackets.
    Open

        @navbar << [ url, name ]
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Checks that brackets used for array literals have or don't have surrounding space depending on configuration.

    Example: EnforcedStyle: space

    # The `space` style enforces that array literals have
    # surrounding space.
    
    # bad
    array = [a, b, c, d]
    
    # good
    array = [ a, b, c, d ]

    Example: EnforcedStyle: no_space

    # The `no_space` style enforces that array literals have
    # no surrounding space.
    
    # bad
    array = [ a, b, c, d ]
    
    # good
    array = [a, b, c, d]

    Example: EnforcedStyle: compact

    # The `compact` style normally requires a space inside
    # array brackets, with the exception that successive left
    # or right brackets are collapsed together in nested arrays.
    
    # bad
    array = [ a, [ b, c ] ]
    
    # good
    array = [ a, [ b, c ]]

    Line is too long. [83/80]
    Open

          logger.error "File '#{file}' could not be served, because it does not exist."
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    Line is too long. [81/80]
    Open

          logger.debug 'Creating temporary copies of additional library databases...'
    Severity: Minor
    Found in lib/gallerist/app/utilities.rb by rubocop

    There are no issues that match your filters.

    Category
    Status