Given an object, how to find public methods in included modules and the parent module?

Hey :slight_smile:

I'm trying to extend a method for creating a site map for a Ruby on
Rails app. This question, I believe, is pretty much just Ruby though,
that's why I'm asking here.

Basically, what it does ATM is find all classes that end in
'_controller.rb' and require them,

聽聽require 'find'

聽聽# Require all controllers
聽聽Find.find(File.join(RAILS_ROOT, "app/controllers")) { |path|
require_dependency path if path =~ /_controller\.rb$/ }

Okay. So I have two issues, and therefore two questions for this:

a) The "app/controllers" path does not just contain files, it also
contains directories, each of which present a module, like "Manage::"
for the backend, and "Store::" for the frontend. Inside are class
files that share names, e.g. 'Store::Items' and 'Manage::Items'. Only
difference is the module they belong to.

b) In the backend classes, I include a module, 'include Backend::Crud'
which defines some shared methods on the backend classes.

My question for a) is, how can I distinguish between the different
classes, given that they belong to different modules. How can I ask an
object what module it belongs to?

And, b), how can I look up these included methods? Right now, I can
only find public methods that are in the class files themselves, not
those defined in included modules...

I'm a bit confused with all this, it's pretty low-level for me :wink: So I
apologize if I'm asking very stupidly. If you have any ideas of how I
could do this, please let me know.

Thanks in advance,
Daniel

can you start out by telling us __what__ you are trying to accomplish?

-a

路路路

On Thu, 22 Mar 2007 danielbuus@gmail.com wrote:

Hey :slight_smile:

I'm trying to extend a method for creating a site map for a Ruby on
Rails app. This question, I believe, is pretty much just Ruby though,
that's why I'm asking here.

Basically, what it does ATM is find all classes that end in
'_controller.rb' and require them,

require 'find'

# Require all controllers
Find.find(File.join(RAILS_ROOT, "app/controllers")) { |path|
require_dependency path if path =~ /_controller\.rb$/ }

Okay. So I have two issues, and therefore two questions for this:

a) The "app/controllers" path does not just contain files, it also
contains directories, each of which present a module, like "Manage::"
for the backend, and "Store::" for the frontend. Inside are class
files that share names, e.g. 'Store::Items' and 'Manage::Items'. Only
difference is the module they belong to.

b) In the backend classes, I include a module, 'include Backend::Crud'
which defines some shared methods on the backend classes.

My question for a) is, how can I distinguish between the different
classes, given that they belong to different modules. How can I ask an
object what module it belongs to?

And, b), how can I look up these included methods? Right now, I can
only find public methods that are in the class files themselves, not
those defined in included modules...

I'm a bit confused with all this, it's pretty low-level for me :wink: So I
apologize if I'm asking very stupidly. If you have any ideas of how I
could do this, please let me know.

Thanks in advance,
Daniel

--
be kind whenever possible... it is always possible.
- the dalai lama

can you start out by telling us __what__ you are trying to accomplish?

Yes :slight_smile: I'm trying to basically "load in" a bunch of class files and
detect their public methods, including those defined in included
modules. Consider this file structure:

apps/
聽聽controllers/
聽聽聽聽store/
聽聽聽聽聽聽items_controller.rb -> class Store::ItemsController <<
ApplicationController
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def index
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽# blah blah
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end
聽聽聽聽manage/
聽聽聽聽聽聽items_controller.rb -> class Manage::ItemsController <<
ApplicationController
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽include Poly::BackendCrud
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def show
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽# blah blah
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end
lib/
聽聽poly.rb -> module Poly
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽module BackendCrud
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def save
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽# blah blah
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽end
聽聽聽聽聽聽聽聽聽聽聽聽聽end

Okay. Given that file tree, I want to "examine" all controllers in app/
controllers/, so that I can produce something like this:
{ 'store' => {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽'items' => [
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽'index'
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽]
聽聽聽聽聽聽聽聽聽聽聽聽聽},
聽聽'manage' => {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽'items' => [
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽'show',
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽'save'
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽]
聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
}

Do you know what I mean?

Cheers,
Daniel :slight_smile:

路路路

On Mar 21, 5:33 pm, ara.t.how...@noaa.gov wrote:

-a
--
be kind whenever possible... it is always possible.
- the dalai lama