The include? and member? methods do the same thing: test whether a given item is in the enumerable collection. For the rest of this article, we'll use the include? method to avoid confusion, but member? works just as well.
@numbers = [1, 0, 3, 2, 5, 4, 7, 6, 9, 8] # does list include the number five? @numbers.include?(5) #=> true # does list include the number 100? @numbers.include?(100) #=> false
Unlike a lot of other Enumerable methods, include? doesn't accept a block. It accepts a single object, and checks for that object in the collection.
# does inventory include dogs? dog = @inventory.first @inventory.include?(dog) #=> true # does inventory include zebras? zebra = Pet.new('zebra', 4, 0) @inventory.include?(zebra) #=> false # does a different object with the same attributes count? similar_dog = Pet.new('dog', 4, 100) @inventory.include?(similar_dog) #=> false
One thing of note in this example is that two objects of the same class, that contain all the same info, are not considered the same item. Even though the pet inventory contains a "dog" category with 4 legs and 100 in stock, our similar_dog item doesn't count as being included in the inventory.
One notable exception is very simple objects, like numbers or arrays. A good rule of thumb is this: if you have to call new to create the object, it's not going to be "the same enough" for the include? method.
# is cactus on the list of pokey things? @pokey_things.seek(0) @pokey_things.map(&:chomp).include?('cactus') #=> true # are pillows on the list of pokey things? @pokey_things.seek(0) @pokey_things.map(&:chomp).include?('pillow') #=> false
If you're using Enumerable methods on a filehandle, remember two things. First, you have to reset the file position before each call to an Enumerable method. Second, every item in the collection is a line in the file, complete with newline character(s) at the end. Chances are, you'll want to chomp them as in the examples above.
Heroku Log File
# any heroku requests result in error? @requests.map(&:message_type).include?('error') #=> true # any missing page errors? @requests.map(&:status).include?(404) #=> false