Ruby  can be and often is a very straightforward language to learn. But in order to become a great ruby ninja we must increase our personal Ruby toolbox. Some of the most indispensable tools that I have gather are refered to as innate methods. This methods are methods that every object created in ruby automatically inherit. You could see a list of these methods by calling the methods method on the object.
·      Object.new.methods
Some of these methods are very useful and have become part of my programming language. These methods are:
·      object_id
·      respond_to?
·      send   or  __send__

Object ID
Usually to compare objects we tend to use ruby equality operator == .
The equality operator is good at comparing objects such as strings at face value but not by its assigned id that ruby uses to reference objects and keep track of them.
·      a = “horse”
·      b = “horse”
If we use the equality operator on the example above we get a return of true
·       a == b
This accurse because ruby is comparing both variable at same value. Internally they are not.
·      a.object_id == b.object_id
This above code returns false since it checks to see if they are equal true as well as the example below.
·      a = “apple”
·      c = a

respond_to?
This method checks to see if an object response to a message being send.
This method exists in all objects. This method becomes very useful when checking the validity of a message being send. In conclusion it makes for shorter cleaner code. Consider the following:
x = Object.new
o   if x == (user_input)
§  do this …
o   elsif x== (user_input)
§   do this …
o   elsif x == (user_input)
§   do this ..
 VS
x = Object.new
if  x.respond_to?(user_input)
     x.user_input
else
    puts “Invalid call”
end
In the previous examples the respond_to? method predetermines if the user input will be valid to object being passed to.

send / __send__ / public_send
sendis used to send a direct call to an object. Since send is a very common word that could be used very often when writing methods ruby provides us with two alternatives, __send__ and public_send  . The big difference between these methods is that __send__ is able to access private methods that at times we might want to avoid. Unlike, public_send only have access to public methods.
if x.respond_to?(user_input)
  x.public_send(user_input)
else
 puts “Invalid call”

end