I''m building an a client/web application that will rely on custom, simple plugins that will be written as models with single table inheritance to a Widget class. Ideally somebody would just need to create a simple model which extends the parent, placed in the correct directory and it work "just work". I''m avoiding the rails plugin architecture because it should be stupid simple for people to build and install. Unfortunately I''m not sure how to: * Configure Rails to load models from a directory other than /app/ models/ (is this a ''require'' in the environment.rb?) * Get a list of all model objects which inherit from the parent class. They will not have database records at first so I cannot rely on a DB query. Here''s a high level look at how the model plugin would look: class HelloWorld < Widget # Create a serialized hash of default options def install end # Will be called by the system automatically to execute this plugin def run say "Hello World" end end Ideally it would live in RAILS_ROOT/widgets/ directory. The application will need to know of all the Widget sub-classes in order to automatically call their ''install'' and ''run'' functions. I''m also considering doing this in Merb, but I have the most experience in Rails and it''s for a 24 hour hackfest (at Yahoo!), so I need to build this quickly. Thanks, Jeremy --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Sep-11 20:20 UTC
Re: Getting a list of models, AND custom model directory
On Sep 11, 8:00 pm, Mozmonkey <JeremyMail...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I''m building an a client/web application that will rely on custom, > simple plugins that will be written as models with single table > inheritance to a Widget class. Ideally somebody would just need to > create a simple model which extends the parent, placed in the correct > directory and it work "just work". I''m avoiding the rails plugin > architecture because it should be stupid simple for people to build > and install. Unfortunately I''m not sure how to: > > * Configure Rails to load models from a directory other than /app/ > models/ (is this a ''require'' in the environment.rb?)add the folder(s) to config.load_paths (have a look in environment.rb. There should be a commented out example of this> * Get a list of all model objects which inherit from the parent > class. They will not have database records at first so I cannot rely > on a DB query. >easiest way to do this is probably to just grab a list of everything in that magic folder (you might as well just require them). ActiveSupport adds a subclasses method to Class, but obviously that will only return classes that have actually been loaded. Fred> Here''s a high level look at how the model plugin would look: > > class HelloWorld < Widget > > # Create a serialized hash of default options > def install > end > > # Will be called by the system automatically to execute this plugin > def run > say "Hello World" > end > > end > > Ideally it would live in RAILS_ROOT/widgets/ directory. > > The application will need to know of all the Widget sub-classes in > order to automatically call their ''install'' and ''run'' functions. I''m > also considering doing this in Merb, but I have the most experience in > Rails and it''s for a 24 hour hackfest (at Yahoo!), so I need to build > this quickly. > > Thanks, > Jeremy--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
For some reason that is not working. Here''s the load_paths line in the environment file: config.load_paths += %W( #{RAILS_ROOT}/widgets ) And the main widget model (widget.rb): class Widget < ActiveRecord::Base set_table_name :widget # # Get a list of widgets # def self.get_widgets logger.debug(HelloWorld) end end And the actual widget which lives in widgets/HelloWorld.rb class HelloWorld < Widget # Create a serialized hash of default options def install end # Will be called by the system automatically to execute this plugin def run say "Hello World" end end Any ideas? Thanks. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Woops, the file was named wrong. Instead of HelloWorld.rb it needed to be hello_world.rb. Now Class.subclass only shows classes that have been instantiated, so I can''t quite get a list of subclasses without creating a new instance of all of them. So how would I loop through the files in the widgets directory and get the class name from each of them? Furthermore, how would I execute that class later dynamically since the class name will be held in a variable? Thanks, Jeremy --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Sep-13 13:17 UTC
Re: Getting a list of models, AND custom model directory
On 13 Sep 2008, at 11:25, Mozmonkey <JeremyMailing-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > For some reason that is not working. Here''s the load_paths line in > the environment file: > > config.load_paths += %W( #{RAILS_ROOT}/widgets ) >What''s happening? Fred> And the main widget model (widget.rb): > > class Widget < ActiveRecord::Base > set_table_name :widget > > # > # Get a list of widgets > # > def self.get_widgets > logger.debug(HelloWorld) > end > > end > > And the actual widget which lives in widgets/HelloWorld.rb > > class HelloWorld < Widget > > # Create a serialized hash of default options > def install > end > > # Will be called by the system automatically to execute this plugin > def run > say "Hello World" > end > > end > > Any ideas? Thanks. > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Woops, the file was named wrong. Instead of HelloWorld.rb it needed to be hello_world.rb. Class.subclass only seems to show classes that have been instantiated, so I can''t quite get a list of subclasses without creating a new instance of all of them. So how would I loop through the files in the widgets directory and get the class name from each of them? Furthermore, how would I execute that class later dynamically since the class name will be held in a variable? Thanks, Jeremy --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Sep-13 16:55 UTC
Re: Getting a list of models, AND custom model directory
On 13 Sep 2008, at 17:48, Mozmonkey wrote:> > Woops, the file was named wrong. Instead of HelloWorld.rb it needed > to be hello_world.rb. > > Class.subclass only seems to show classes that have > been instantiated, so I can''t quite get a list of subclasses without > creating a new instance of all of them. >They don''t need to be instantiated, just loaded. If you Dir.glob your widgets folder and require everything inside it you should be ok. Fred> So how would I loop through the files in the widgets directory and get > the class name from each of them? Furthermore, how would I execute > that class later dynamically since the class name will be held in a > variable?--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---