Module: ColorContrastCalc::Sorter

Defined in:
lib/color_contrast_calc/sorter.rb

Overview

Provide two methods sort() and compile_compare_function()

The other methods defined in this module should not be considered as stable interfaces.

Defined Under Namespace

Modules: KeyTypes

Class Method Summary collapse

Class Method Details

.compile_compare_function(color_order, key_type, key_mapper = nil, &key_mapper_block) ⇒ Proc

Return a Proc object to be passed to Array#sort().

Parameters:

  • color_order (String)

    String such as “HSL”, “RGB” or “lsH”

  • key_type (Symbol)

    :color, :components or :hex

  • key_mapper (Proc, nil) (defaults to: nil)

    Proc object to be used to retrive key values from items to be sorted.

  • key_mapper_block (Proc)

    Block that is used instead of key_mapper when the latter is not given

Returns:

  • (Proc)

    Proc object to be passed to Array#sort()



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/color_contrast_calc/sorter.rb', line 113

def self.compile_compare_function(color_order, key_type,
                                  key_mapper = nil, &key_mapper_block)
  key_mapper = key_mapper_block if !key_mapper && key_mapper_block

  case key_type
  when KeyTypes::COLOR
    compare = compile_color_compare_function(color_order)
  when KeyTypes::COMPONENTS
    compare = compile_components_compare_function(color_order)
  when KeyTypes::HEX
    compare = compile_hex_compare_function(color_order)
  end

  compose_function(compare, key_mapper)
end

.sort(colors, color_order = 'hSL', key_mapper = nil, &key_mapper_block) ⇒ Array<Color>, Array<String>

Sort colors in the order specified by color_order.

Sort colors given as an array of Color instances or hex color codes.

You can specify sorting order by giving a color_order string, such as “HSL” or “RGB”. A component of color_order on the left side has a higher sorting precedence, and an uppercase letter means descending order.

Parameters:

  • colors (Array<Color>, Array<String>)

    Array of Color instances or items from which color hex codes can be retrieved.

  • color_order (String) (defaults to: 'hSL')

    String such as “HSL”, “RGB” or “lsH”

  • key_mapper (Proc, nil) (defaults to: nil)

    Proc object used to retrive key values from items to be sorted

  • key_mapper_block (Proc)

    Block that is used instead of key_mapper when the latter is not given

Returns:

  • (Array<Color>, Array<String>)

    Array of sorted colors



93
94
95
96
97
98
99
100
# File 'lib/color_contrast_calc/sorter.rb', line 93

def self.sort(colors, color_order = 'hSL',
              key_mapper = nil, &key_mapper_block)
  key_mapper = key_mapper_block if !key_mapper && key_mapper_block
  key_type = KeyTypes.guess(colors[0], key_mapper)
  compare = compile_compare_function(color_order, key_type, key_mapper)

  colors.sort(&compare)
end