Sha256: 0a116ee370ba1069d79633773d985eee0b675254315335e262dfd72c3b12c871

Contents?: true

Size: 1.67 KB

Versions: 4

Compression:

Stored size: 1.67 KB

Contents

module MetricFu::FlogReporter
  
  THRESHOLD = (ENV['FLOG_THRESHOLD'] || 120)
  SCORE_FORMAT = "%0.2f"
  
  class InvalidFlog < RuntimeError
  end
  
  class Base
    MODULE_NAME = "([A-Z][a-z]+)+"
    METHOD_NAME = "#([a-z]+_?)+"
    SCORE = "\\d+\\.\\d+"

    METHOD_NAME_RE = Regexp.new("#{MODULE_NAME}#{METHOD_NAME}")
    SCORE_RE = Regexp.new(SCORE)
  
    METHOD_LINE_RE = Regexp.new("#{MODULE_NAME}#{METHOD_NAME}:\\s\\(#{SCORE}\\)")
    OPERATOR_LINE_RE = Regexp.new("\\s+(#{SCORE}):\\s(.*)$")

    class << self
      def cycle(first_value, second_value, iteration)
        return first_value if iteration % 2 == 0
        return second_value
      end

      def load_css(css_file = nil)
        filepath = css_file || File.join(File.dirname(__FILE__), 'flog_reporter.css')
        css = ""
        file = File.open(filepath, "r")
        file.each_line { |line| css << line }
        file.close
        css
      end

      def parse(text)
        score = text[/score = (\d+\.\d+)/, 1]
        return nil unless score
        page = Page.new(score)

        text.each_line do |method_line|
          if METHOD_LINE_RE =~ method_line and
             method_name = method_line[METHOD_NAME_RE] and
             score = method_line[SCORE_RE]
             page.scanned_methods << ScannedMethod.new(method_name, score)
          end

          if OPERATOR_LINE_RE =~ method_line and
             operator = method_line[OPERATOR_LINE_RE, 2] and
             score = method_line[SCORE_RE]
             raise InvalidFlog if page.scanned_methods.empty?
             page.scanned_methods.last.operators << Operator.new(score, operator)
          end
        end
      
        page
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jscruggs-metric_fu-0.7.0 lib/metric_fu/flog_reporter/base.rb
jscruggs-metric_fu-0.7.1 lib/metric_fu/flog_reporter/base.rb
jscruggs-metric_fu-0.7.5 lib/metric_fu/flog_reporter/base.rb
jscruggs-metric_fu-0.7.6 lib/metric_fu/flog_reporter/base.rb