Module: Comparability::Comparators::FactoryMethods

Included in:
Comparability::Comparator
Defined in:
lib/comparability/comparators/factory_methods.rb

Instance Method Summary collapse

Instance Method Details

#chain(*comparisons) ⇒ Object Also known as: []

Parameters:

  • comparisons (Array)

    each comparison should be either Comparison instance or argument(s) accepted by #create



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/comparability/comparators/factory_methods.rb', line 26

def chain(*comparisons)
  comparators = comparisons.map do |comparison_or_comparator|
    case comparison_or_comparator
    when Comparator
      comparison_or_comparator
    else
      create(*comparison_or_comparator)
    end
  end
  ComparatorChain.new(comparators)
end

#create(comparison = nil, options = {}, &block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/comparability/comparators/factory_methods.rb', line 8

def create(comparison = nil, options = {}, &block)
  comparison ||= block
  comparator =
    case comparison
    when Symbol
      create_from_symbol(comparison)
    when Proc
      create_from_proc(comparison)
    when ->(_) { _.respond_to?(:to_proc) }
      create_from_proc(comparison.to_proc)
    else
      raise ArgumentError, 'invalid comparison'
    end
  apply_options(comparator, options)
end

#natural_order(options = {}) ⇒ Object

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :reverse (true)


45
46
47
48
49
50
51
52
# File 'lib/comparability/comparators/factory_methods.rb', line 45

def natural_order(options = {})
  @_natural_order ||= Comparator.new
  if options[:reverse]
    @_reverse_natural_order ||= reverse(@_natural_order)
  else
    @_natural_order
  end
end

#prioritize_nil(priority) ⇒ Object

Parameters:

  • priority (Symbol)

    :first or :last



40
41
42
# File 'lib/comparability/comparators/factory_methods.rb', line 40

def prioritize_nil(priority)
  NilComparator.with_nil_priority(priority)
end

#reverse(comparator) ⇒ Object

Parameters:



55
56
57
# File 'lib/comparability/comparators/factory_methods.rb', line 55

def reverse(comparator)
  ReverseWrapperComparator.wrap(comparator)
end