Question: I have this line of code:

```
if self.include?("van " || "de " || "von ")

```

why doesn't the block included after this line execute when the third alternative of the or-operator is true?

When my string is `"von wartburg"` the block doesn't execute, but when my string contains `"van"` or `"de"` then it does.

Answer: 
```
self.include?("van " || "de " || "von ")

```

Will ***ALWAYS*** evaluate to

```
self.include?("van ")

```

Why? Because of how `||` works.

```
"van " || "de " || "von "
# ↑↑↑↑↑↑ evaluates to "van " and does not give a slightest shoe about the rest

```

See [String#`include`](https://ruby-doc.org/core-2.4.0/String.html#method-i-include-3F) - it accepts a substring and offset as arguments.

What you need is the following:

```
["van ", "de ", "von "].any? { |substring| self.include?(substring) }

```
I think what you want is

```
if self.include?("van ") || self.include?("de ") || self.include?("von ")

```

Having the `||` inside the call to `include?` makes it only evaluate the first string. You want to test `include?` for each case.