I’m new to ruby and I’m playing around with the IRB.
I found that I can list methods of an object using the ‘.methods’ method, and that self.methods sort of give me what I want (similar to Python’s dir(builtins)?), but how can I find the methods of a library/module I’ve loaded via include and require?
irb(main):036:0* self.methods => ['irb_pop_binding', 'inspect', 'taguri', 'irb_chws', 'clone', 'irb_pushws', 'public_methods', 'taguri=', 'irb_pwws', 'public', 'display', 'irb_require', 'irb_exit', 'instance_variable_defined?', 'irb_cb', 'equal?', 'freeze', 'irb_context ', 'irb_pop_workspace', 'irb_cwb', 'irb_jobs', 'irb_bindings', 'methods', 'irb_current_working_workspace', 'respond_to?' , 'irb_popb', 'irb_cws', 'fg', 'pushws', 'conf', 'dup', 'cwws', 'instance_variables', 'source', 'cb', 'kill', 'help', '_ _id__', 'method', 'eql?', 'irb_pwb', 'id', 'bindings', 'send', 'singleton_methods', 'popb', 'irb_kill', 'chws', 'taint', 'irb_push_binding', 'instance_variable_get', 'frozen?', 'irb_source', 'pwws', 'private', 'instance_of?', '__send__', 'i rb_workspaces', 'to_a', 'irb_quit', 'to_yaml_style', 'irb_popws', 'irb_change_workspace', 'jobs', 'type', 'install_alias _method', 'irb_push_workspace', 'require_gem', 'object_id', 'instance_eval', 'protected_methods', 'irb_print_working_wor kspace', 'irb_load', 'require', '==', 'cws', '===', 'irb_pushb', 'instance_variable_set', 'irb_current_working_binding', 'extend', 'kind_of?', 'context', 'gem', 'to_yaml_properties', 'quit', 'popws', 'irb', 'to_s', 'to_yaml', 'irb_fg', 'cla ss', 'hash', 'private_methods', '=~', 'tainted?', 'include', 'irb_cwws', 'irb_change_binding', 'irb_help', 'untaint', 'n il?', 'pushb', 'exit', 'irb_print_working_binding', 'is_a?', 'workspaces'] irb(main):037:0>
I’m used to python, where I use the dir() function to accomplish the same thing:
>>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] >>>
ObjectSpace.each_object could be what you are looking for.
To get a list of included modules you could use Module.included_modules.
You can also check if an object responds to a method on a case-by-case basis using object.respond_to?.