Class: HighLine::ColorScheme

Inherits:
Object
  • Object
show all
Defined in:
lib/highline/color_scheme.rb

Overview

ColorScheme objects encapsulate a named set of colors to be used in the #color method call. For example, by applying a ColorScheme that has a :warning color then the following could be used:

color("This is a warning", :warning)

A ColorScheme contains named sets of HighLine color constants.

Examples:

Instantiating a color scheme, applying it to HighLine,

and using it:
ft = HighLine::ColorScheme.new do |cs|
       cs[:headline]        = [ :bold, :yellow, :on_black ]
       cs[:horizontal_line] = [ :bold, :white ]
       cs[:even_row]        = [ :green ]
       cs[:odd_row]         = [ :magenta ]
     end

HighLine.color_scheme = ft
say("<%= color('Headline', :headline) %>")
say("<%= color('-'*20, :horizontal_line) %>")
i = true
("A".."D").each do |row|
   if i then
     say("<%= color('#{row}', :even_row ) %>")
   else
     say("<%= color('#{row}', :odd_row) %>")
   end
   i = !i
end

Direct Known Subclasses

SampleColorScheme

Instance Method Summary collapse

Constructor Details

#initialize(h = nil) {|_self| ... } ⇒ ColorScheme

Create an instance of HighLine::ColorScheme. The customization can happen as a passed in Hash or via the yielded block. Keys are converted to :symbols and values are converted to HighLine constants.

Parameters:

  • h (Hash) (defaults to: nil)

Yields:

  • (_self)

Yield Parameters:



52
53
54
55
56
# File 'lib/highline/color_scheme.rb', line 52

def initialize(h = nil)
  @scheme = {}
  load_from_hash(h) if h
  yield self if block_given?
end

Instance Method Details

#[](color_tag) ⇒ Style

Allow the scheme to be accessed like a Hash.

Parameters:

  • color_tag (#to_sym)

Returns:



76
77
78
# File 'lib/highline/color_scheme.rb', line 76

def [](color_tag)
  @scheme[to_symbol(color_tag)]
end

#[]=(color_tag, constants) ⇒ Object

Allow the scheme to be set like a Hash.

Parameters:

  • color_tag (#to_sym)
  • constants (Array<Symbol>)

    Array of Style symbols



96
97
98
99
100
101
# File 'lib/highline/color_scheme.rb', line 96

def []=(color_tag, constants)
  @scheme[to_symbol(color_tag)] =
    HighLine::Style.new(name: color_tag.to_s.downcase.to_sym,
                        list: constants,
                        no_index: true)
end

#definition(color_tag) ⇒ Object

Retrieve the original form of the scheme

Parameters:

  • color_tag (#to_sym)


82
83
84
85
# File 'lib/highline/color_scheme.rb', line 82

def definition(color_tag)
  style = @scheme[to_symbol(color_tag)]
  style && style.list
end

#include?(color_tag) ⇒ Boolean

Does this color scheme include the given tag name?

Parameters:

  • color_tag (#to_sym)

Returns:

  • (Boolean)


69
70
71
# File 'lib/highline/color_scheme.rb', line 69

def include?(color_tag)
  @scheme.keys.include?(to_symbol(color_tag))
end

#keysArray

Retrieve the keys in the scheme

Returns:

  • (Array)

    of keys



89
90
91
# File 'lib/highline/color_scheme.rb', line 89

def keys
  @scheme.keys
end

#load_from_hash(h) ⇒ Object

Load multiple colors from key/value pairs.

Parameters:

  • h (Hash)


60
61
62
63
64
# File 'lib/highline/color_scheme.rb', line 60

def load_from_hash(h)
  h.each_pair do |color_tag, constants|
    self[color_tag] = constants
  end
end

#to_hashHash

Retrieve the color scheme hash (in original definition format)

Returns:

  • (Hash)

    scheme as Hash. It may be reused in a new ColorScheme.



105
106
107
108
109
110
# File 'lib/highline/color_scheme.rb', line 105

def to_hash
  @scheme.each_with_object({}) do |pair, hsh|
    key, value = pair
    hsh[key] = value.list
  end
end