When you call a method, like some_array.size, Ruby looks for the size method in its method
tables for the class in question, and if Ruby finds the method, it executes the code that??™s associated
with it. If not, Ruby searches all the superclasses of that object until it finds one that has
a method of that name. If it can??™t find such a method, Ruby calls a special method called
method_missing and passes in the name it was trying to find and the arguments it was given.
Here??™s an example where we??™ve added method_missing to the String class, which will print
out a message to the user instead of raising an error:
class String
def method_missing method_name, *args
CHAPTER 5 ?– BONUS FEATURES 112
puts "You tried to call #{name} and I don't know what that means!"
end
end
"Hello".foo_method
# prints "You tried to call foo_method and I don't know what that means!"
We can use the behavior of method_missing to our advantage, because we can make an
object that will use the method names passed to it through method_missing and build our SQL,
for example:
module RQuery
class Conditions
def initialize(&blk)
@columns = []
blk.
Pages:
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273