Sha256: ee4ba6707590bb82371b5e058656231fbdc2b277fa32b7f24f13290c41b2167e

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 KB

Contents

module Inch
  module Evaluation
    class File
      attr_accessor :filename, :objects

      def initialize(filename, objects)
        self.filename = filename
        self.objects = objects.select do |o|
          o.filename == filename
        end
      end

      # @note added to be compatible with code objects
      def fullname
        filename
      end

      #
      # grade, priority, and score are not meant to be displayed in the CLI
      # they are just for internal evaluation purposes
      #

      def grade
        median(grades.sort_by(&:to_sym))
      end

      def priority
        median(priorities.sort)
      end

      def score
        objects.select(&:undocumented?).size
      end

      private

      def grades
        objects.map(&:grade)
      end

      def priorities
        objects.map(&:priority)
      end

      def median(sorted_list)
        index = (sorted_list.size / 2).round
        sorted_list[index]
      end

      class << self
        def for(filename, objects)
          @cache ||= {}
          if (file = @cache[filename])
            file
          else
            @cache[filename] = new(filename, objects)
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
inch-0.4.10 lib/inch/evaluation/file.rb
inch-0.4.9 lib/inch/evaluation/file.rb
inch-0.4.8 lib/inch/evaluation/file.rb