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 Classes: CachingCompiler, CompareFunctionCompiler

Constant Summary collapse

COMPARE_FUNCTION_COMPILERS =
{
  KeyTypes::COLOR => CompareFunctionCompiler.new(color_to_components),
  KeyTypes::COMPONENTS => CompareFunctionCompiler.new,
  KeyTypes::HEX => CachingCompiler.new(hex_to_components),
  KeyTypes::FUNCTION => CachingCompiler.new(function_to_components)
}.freeze

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()



260
261
262
263
264
265
266
267
# File 'lib/color_contrast_calc/sorter.rb', line 260

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

  compare = COMPARE_FUNCTION_COMPILERS[key_type].compile(color_order)

  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



240
241
242
243
244
245
246
247
# File 'lib/color_contrast_calc/sorter.rb', line 240

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