module Colored2

Constants

COLORS
EFFECTS
VERSION

Public Class Methods

background_next!() click to toggle source
# File lib/colored2/ascii_decorator.rb, line 11
def self.background_next!
  Colored2::AsciiDecorator.background_next!
end
background_next?() click to toggle source
# File lib/colored2/ascii_decorator.rb, line 17
def self.background_next?
  Colored2::AsciiDecorator.background_next?
end
decorate(a_class) click to toggle source
# File lib/colored2.rb, line 5
def self.decorate(a_class)
  a_class.send(:include, Colored2)
end
disable!() click to toggle source
# File lib/colored2/ascii_decorator.rb, line 8
def self.disable!
  Colored2::AsciiDecorator.disable!
end
enable!() click to toggle source
# File lib/colored2/ascii_decorator.rb, line 5
def self.enable!
  Colored2::AsciiDecorator.enable!
end
foreground_next!() click to toggle source
# File lib/colored2/ascii_decorator.rb, line 14
def self.foreground_next!
  Colored2::AsciiDecorator.foreground_next!
end
included(from_class) click to toggle source
# File lib/colored2.rb, line 9
def self.included(from_class)
  from_class.class_eval do

    def surround_with_color(color: nil, effect: nil, color_self: nil, string: nil, &block)
      color_type = if Colored2.background_next? && effect.nil?
                     Colored2.foreground_next!
                     :background
                   else
                     :foreground
                   end

     opts = {}
     opts.merge!(color_type => color) if color
     opts.merge!(effect: effect) if effect

      if color_self then
        opts.merge!( beginning: :on, end: :off)
        colored = Colored2::AsciiDecorator.new(self).decorate(opts)
        if string || block
          arg = "#{string}#{block.call if block}"
          colored << Colored2::AsciiDecorator.new(arg).decorate(opts) if arg.length > 0
        end
      else
        opts.merge!( end: :on )
        colored = Colored2::AsciiDecorator.new(self).decorate(opts)
        if string || block
          arg = "#{string}#{block.call if block}"
          colored << Colored2::AsciiDecorator.new(arg).decorate(opts.merge(end: :off)) if arg.length > 0
        end
      end
      colored
    end

    def on
      Colored2.background_next!
      self
    end
  end

  from_class.instance_eval do
    COLORS.keys.each do |color|
      define_method(color) do |string = nil, &block|
        surround_with_color(color: color, color_self: true, string: string, &block)
      end

      define_method("#{color}!".to_sym) do |string = nil, &block|
        surround_with_color(color: color, color_self: false, string: string, &block)
      end
    end

    EFFECTS.keys.each do |effect|
      next if effect == 'no_color'
      define_method(effect) do |string = nil, &block|
        surround_with_color(effect: effect, color_self: true, string: string, &block)
      end

      define_method("#{effect}!".to_sym) do |string = nil, &block|
        surround_with_color(effect: effect, color_self: false, string: string, &block)
      end
    end

    define_method(:to_eol) do
      tmp = sub(/^(\e\[[\[\e0-9;m]+m)/, "\\1\e[2K")
      if tmp == self
        return "\e[2K" << self
      end
      tmp
    end

    define_method(:to_bol) do
      "#{self}\033[#{length}D\033[0D"
    end
  end
end
integer_class() click to toggle source
# File lib/colored2/numbers.rb, line 4
def self.integer_class
  major, minor = RUBY_VERSION.split(/\./).map(&:to_i)
  major >= 2 && minor >= 4 ? Integer : Kernel.const_get(:Fixnum)
end

Public Instance Methods

on() click to toggle source
# File lib/colored2.rb, line 42
def on
  Colored2.background_next!
  self
end
surround_with_color(color: nil, effect: nil, color_self: nil, string: nil, &block) click to toggle source
# File lib/colored2.rb, line 12
def surround_with_color(color: nil, effect: nil, color_self: nil, string: nil, &block)
  color_type = if Colored2.background_next? && effect.nil?
                 Colored2.foreground_next!
                 :background
               else
                 :foreground
               end

 opts = {}
 opts.merge!(color_type => color) if color
 opts.merge!(effect: effect) if effect

  if color_self then
    opts.merge!( beginning: :on, end: :off)
    colored = Colored2::AsciiDecorator.new(self).decorate(opts)
    if string || block
      arg = "#{string}#{block.call if block}"
      colored << Colored2::AsciiDecorator.new(arg).decorate(opts) if arg.length > 0
    end
  else
    opts.merge!( end: :on )
    colored = Colored2::AsciiDecorator.new(self).decorate(opts)
    if string || block
      arg = "#{string}#{block.call if block}"
      colored << Colored2::AsciiDecorator.new(arg).decorate(opts.merge(end: :off)) if arg.length > 0
    end
  end
  colored
end