"What kind of creation are you building that you are expecting to not know which methods are available while running your program?"
You normally wouldn't use method_missing in this way. As an example, for better or worse, look at RSpec. I can write code like this:
require 'rspec'
class Person
def initialize
@happy = true
end
def happy?
@happy
end
end
describe Person do
describe '.new' do
it 'is happy by default' do
expect(Person.new).to be_happy
end
end
end
RSpec doesn't know about the Person#happy? method, obviously, so how the heck is there a be_happy method? It's using method_missing to intercept the call to the otherwise-undefined be_happy method, pull out the "happy" part, translate it to "happy?", and then construct the appropriate expectation by delegating the "happy?" message to the underlying Person object and analyzing the response.
It also enables RSpec to generate much more useful testing messages. Instead of saying "Expected person.happy? to be true, but got false" it can say "Expected person to be happy, but happy? returned false."
This intercept-and-delegate or intercept-and-translate mechanism is probably the most common use of method_missing. It makes writing DSLs much easier. See, e.g., Nokogiri::XML::Builder for generating XML documents (http://nokogiri.org/Nokogiri/XML/Builder.html).