I like what you did here, a LOT. yay!

One thing I'd rather see in a loop than an if/else is to handle each condition as a separate section of code. It would make extracting later easier.

intents:

0. print out attributes of train
0. print out itinerary (and current city) 

So maybe:

```ruby
puts "\nItinerary"
passenger.train[:cities].each do |city|
  print "  * #{city}"
  print " << CURRENT CITY" if city == passenger.train[:current_city]
  puts "\n"
end

puts "\nTrain details"
passenger.train.reject{ |k|  k ==:cities }.each do |key, value|
  puts " -- #{key}: #{value}"
end
```

It's a little longer, but you can (arguably), tell what the intent is.