Sha256: e21c47d91e54e463a85fea7173bfb5189c8dcaecbbed19ce1f042231049382a6

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

require 'json'

module PageSpeed
  class Parser
    class << self

      # parse the response and print it real pretty
      def parse(result)
        result = JSON.parse(result)
        code   = result['responseCode']
        total_score = result['score']
        strategy = result['request']['strategy']

        fail(code, result['title']) unless code == 200

        result['formattedResults']['ruleResults'].each do |name, rule|
          score = rule['ruleScore']
          colorize(score)
          puts " #{pad_score(score)} - #{rule['localizedRuleName']}"
        end

        colorize(total_score)
        puts " \nTotal Score: #{total_score}/100 (#{strategy})"
        decolorize
      end

      private

      # fail with the appropriate code/message
      def fail(code, title)
        puts "\033[31m#{title}\033[0m"
        exit
      end

      # pad the score to make it extra readable
      def pad_score(score)
        score = score.to_s

        case score.length
        when 3
          score
        when 2
          ' ' + score
        when 1
          '  ' + score
        end
      end

      # colorize the good the bad and the ugly
      def colorize(score)
        case score.to_i
        when 90..100
          print "\033[32m"
        when 70..89
          print "\033[33m"
        else
          print "\033[31m"
        end
      end

      # reset colors
      def decolorize
        print "\033[0m"
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pagespeed-0.1.0 lib/pagespeed/parser.rb