lib/cw/print.rb

Summary

Maintainability
A
3 hrs
Test Coverage
# encoding: utf-8

require 'paint'
require 'io/console'

module CW
  class Print

    class ProgressPrint
      def colour
        :yellow
      end

      def print x
        STDOUT.print Paint[x, colour]
      end
      def puts x
        STDOUT.puts  Paint[x, colour]
      end

      def flush
        STDOUT.flush
      end

      def tty?
        true
      end
    end

    def initialize
      update_console_size
      reset
    end

    def console_size
      IO.console.winsize
    rescue LoadError
      [Integer(`tput li`), Integer(`tput co`)]
    end

    def update_console_size
      @rows, @cols = console_size
      #    printf "%d rows by %d columns\n", @rows, @cols
    end

    def reset
      @print_count = 0
    end

    def newline
      reset
      update_console_size
      puts "\r"
    end

    def force_newline_maybe
      if @print_count >= (@cols - 1)
        newline
        true
      end
    end

    def newline_maybe word
      @print_count += word.size unless force_newline_maybe
      return if((word.size == 1) && (word != ' '))
      if @print_count > (@cols - 10)
        newline
        true
      end
    end

    def results popped, type = :pass_and_fail
      if popped
        value = popped[:value]
        success = popped[:success]

        newline_maybe value

        print Paint["#{value} ", success_colour] if success
        print Paint["#{value} ", fail_colour ] unless (success || type == :pass_only)
        return true
      end
    end

    def paint(value, colour)
      Paint[value, colour]
    end

    def paint_success_failure(popped)
      print paint(popped[:value], success_colour) if popped[:success]
      print paint(popped[:value], fail_colour ) unless popped[:success]
    end

    def char_result popped
      unless newline_maybe popped[:value]
        popped[:value] = '_' if((popped[:value] == ' ') && (popped[:success] != true))
        paint_success_failure(popped)
        return true
      end
    end

    def heading
      "Current Sentence is     duration:    secs".length.times do
        print paint('*', list_colour)
        puts
      end
    end

    def fail word
      print paint("#{word}", fail_colour)
    end

    def speculative word
      print paint("#{word}", fail_colour)
    end
    def stable word
      print paint("#{word}", :yellow)
    end
    def optimum word
      print paint("#{word}", success_colour)
    end

    def list word
      print paint("#{word}", list_colour)
    end

    def tx word
      print paint("#{word}", tx_colour)
    end

    def rx word
      print paint("#{word}", rx_colour)
    end

    def menu word
      print paint("#{word}", menu_colour)
    end

    def success word
      newline_maybe word
      return if(@print_count == 0 && word == ' ')
      print paint("#{word}", success_colour)
    end

    def success_colour
      Cfg.config["success_colour"].to_sym || :blue
    end

    def fail_colour
      Cfg.config["fail_colour"].to_sym || :red
    end

    def list_colour
      Cfg.config["list_colour"].to_sym || :default
    end

    def tx_colour
      Cfg.config["tx_colour"].to_sym || :red
    end

    def rx_colour
      Cfg.config["rx_colour"].to_sym || :blue
    end

    def menu_colour
      Cfg.config["menu_colour"].to_sym || :yellow
    end

    def print_advice name
      puts "#{name}: Press Q 4 times to Exit"
    end
  end
end