Sha256: 01bb1a30f8e2433e0799a77b4b51f3c8c1e0deed1c801865fcfeb66632e131ee

Contents?: true

Size: 1.67 KB

Versions: 7

Compression:

Stored size: 1.67 KB

Contents

require 'forwardable'

module Reek
  #
  # Reports a warning that a smell has been found.
  #
  class SmellWarning
    include Comparable
    extend Forwardable
    attr_accessor :smell_detector, :context, :lines, :message, :parameters
    def_delegators :smell_detector, :smell_category, :smell_type, :source

    def initialize(smell_detector, options = {})
      self.smell_detector = smell_detector
      self.context        = options.fetch(:context, '').to_s
      self.lines          = options.fetch(:lines)
      self.message        = options.fetch(:message)
      self.parameters     = options.fetch(:parameters, {})
    end

    def smell_classes
      [smell_detector.smell_category, smell_detector.smell_type]
    end

    def hash
      sort_key.hash
    end

    def <=>(other)
      sort_key <=> other.sort_key
    end

    def eql?(other)
      (self <=> other) == 0
    end

    def matches?(klass, patterns)
      smell_classes.include?(klass.to_s) && contains_all?(patterns)
    end

    def report_on(listener)
      listener.found_smell(self)
    end

    def encode_with(coder)
      coder.tag = nil
      coder['smell_category']  = smell_detector.smell_category
      coder['smell_type']      = smell_detector.smell_type
      coder['source']          = smell_detector.source
      coder['context']         = context
      coder['lines']           = lines
      coder['message']         = message
      parameters.each do |key, value|
        coder[key.to_s] = value
      end
    end

    protected

    def contains_all?(patterns)
      rpt = sort_key.to_s
      patterns.all? { |pattern| pattern =~ rpt }
    end

    def sort_key
      [context, message, smell_category]
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
reek-1.6.6 lib/reek/smell_warning.rb
reek-1.6.5 lib/reek/smell_warning.rb
reek-1.6.4 lib/reek/smell_warning.rb
reek-1.6.3 lib/reek/smell_warning.rb
reek-1.6.2 lib/reek/smell_warning.rb
reek-1.6.1 lib/reek/smell_warning.rb
reek-1.6.0 lib/reek/smell_warning.rb