Class: ActiveSupport::ArrayInquirer

Inherits:
Array show all
Defined in:
activesupport/lib/active_support/array_inquirer.rb

Overview

Wrapping an array in an ArrayInquirer gives a friendlier way to check its string-like contents:

variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet])

variants.phone?    # => true
variants.tablet?   # => true
variants.desktop?  # => false

Instance Method Summary collapse

Methods inherited from Array

#as_json, #compact_blank!, #deep_dup, #excluding, #extract!, #extract_options!, #fifth, #forty_two, #fourth, #from, #in_groups, #in_groups_of, #including, #inquiry, #second, #second_to_last, #split, #sum, #third, #third_to_last, #to, #to_formatted_s, #to_param, #to_query, #to_sentence, #to_xml, #without, wrap

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object (private)


40
41
42
43
44
45
46
# File 'activesupport/lib/active_support/array_inquirer.rb', line 40

def method_missing(name, *args)
  if name[-1] == "?"
    any?(name[0..-2])
  else
    super
  end
end

Instance Method Details

#any?(*candidates) ⇒ Boolean

Passes each element of candidates collection to ArrayInquirer collection. The method returns true if any element from the ArrayInquirer collection is equal to the stringified or symbolized form of any element in the candidates collection.

If candidates collection is not given, method returns true.

variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet])

variants.any?                      # => true
variants.any?(:phone, :tablet)     # => true
variants.any?('phone', 'desktop')  # => true
variants.any?(:desktop, :watch)    # => false

25
26
27
28
29
30
31
32
33
# File 'activesupport/lib/active_support/array_inquirer.rb', line 25

def any?(*candidates)
  if candidates.none?
    super
  else
    candidates.any? do |candidate|
      include?(candidate.to_sym) || include?(candidate.to_s)
    end
  end
end