Using method_missing judiciously
In general, you should only use method_missing in cases where it is required. Overuse of method_missing in cases where it isn't necessary often leads to code that is difficult to understand and refactor. If you have a use case where literally any method can be called and should work, that is a good case for method_missing.
Let's say you want a method where you can just type random words in, and it will return a list of symbols:
words{this is a list of words}
# => [:this, :is, :a, :list, :of, :words]
This is a case where method_missing makes sense because any method could be called. Implementing this particular example is interesting. You want words to be a valid method you can call anywhere, but you want words inside the block to call method_missing. You can implement this by having instance_eval the block in the context of a BasicObject instance. It would be great to use define_singleton_method or singleton_class.define_method...