Module: Comparability::Comparators::FactoryMethods
- Included in:
- Comparability::Comparator
- Defined in:
- lib/comparability/comparators/factory_methods.rb
Instance Method Summary collapse
- #chain(*comparisons) ⇒ Object (also: #[])
- #create(comparison = nil, options = {}, &block) ⇒ Object
- #natural_order(options = {}) ⇒ Object
- #prioritize_nil(priority) ⇒ Object
- #reverse(comparator) ⇒ Object
Instance Method Details
#chain(*comparisons) ⇒ Object Also known as: []
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, = {}, &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 (comparator, ) end |
#natural_order(options = {}) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'lib/comparability/comparators/factory_methods.rb', line 45 def natural_order( = {}) @_natural_order ||= Comparator.new if [:reverse] @_reverse_natural_order ||= reverse(@_natural_order) else @_natural_order end end |
#prioritize_nil(priority) ⇒ Object
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
55 56 57 |
# File 'lib/comparability/comparators/factory_methods.rb', line 55 def reverse(comparator) ReverseWrapperComparator.wrap(comparator) end |