Module: LibyearRb::Sorter

Defined in:
lib/libyear_rb/sorter.rb

Constant Summary collapse

DEFAULT_SPEC =
"libyear,name"
COLUMNS =
{
  "name" => SortColumn.new(field: :name, direction: :asc),
  "latest-date" => SortColumn.new(field: :latest_version_release_date, direction: :desc),
  "versions" => SortColumn.new(field: :version_distance, direction: :desc),
  "libyear" => SortColumn.new(field: :libyear_in_days, direction: :desc)
}.freeze
InvalidSpec =
Class.new(ArgumentError)

Class Method Summary collapse

Class Method Details

.parse(spec) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/libyear_rb/sorter.rb', line 28

def parse(spec)
  spec.to_s.split(",").map do |part|
    column = part.strip
    unless COLUMNS.key?(column)
      raise InvalidSpec, "Unknown sort column: #{column.inspect}. Available columns: #{COLUMNS.keys.join(", ")}."
    end
    COLUMNS.fetch(column)
  end
end

.sort(results, sorters) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/libyear_rb/sorter.rb', line 38

def sort(results, sorters)
  results.sort do |a, b|
    cmp = 0
    sorters.each do |sorter|
      cmp = sorter.compare(a, b)
      break unless cmp.zero?
    end
    cmp
  end
end