Forum: Rails Engines development Application-wide layouts?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Rob M. (Guest)
on 2007-05-09 21:53
(Received via mailing list)
Hey all.  I'm making use of Engines-based plugins in several of my
sites.  I have a wiki, a login engine, a CRM tool...  Right now, I
install the plugin(s), then have to create a mask controller containing
a layout "standard-layout" call, and that's it.  This would seem to be a
common problem for any engine-type plugin that aims to integrate with
(rather than live separately from) the main app.

Is there a better solution that I'm not seeing with existing code?

Assuming there isn't (I've looked), what would people think about
patching in support to the layout system of Rails to support an
application-wide default layout?  The Rails docs mention using
"application.rhtml" as a way to achieve this, but it doesn't work, and
there's no code in place to support it in the latest stable release that
I can find.

Thoughts?
Aaron C. (Guest)
on 2007-05-09 22:03
(Received via mailing list)
Simply creating an application.rhtml file inside of your base
application's app/views/layouts directory should certainly do the
trick.  When doing that you don't need to specify a 'layout' directive
in your controllers since that's the default.  I'm doing this
currently in my application and it too uses engine plugins.  No
problems.

Cheers,
Aaron

On 5/9/07, Rob M. <removed_email_address@domain.invalid> wrote:
>  Assuming there isn't (I've looked), what would people think about patching
> http://lists.rails-engines.org/listinfo.cgi/engine...
>
>


--
Aaron Campos
removed_email_address@domain.invalid
skype & AOL IM: aaroncampos
Rob M. (Guest)
on 2007-05-09 22:14
(Received via mailing list)
Aaron, what version of Rails are you running?  I'm using 1.2.3 and
adding an application.rhtml doesn't have any effect.  I looked through
the render() and layout code in the codebase, looking for an
application.* default, and couldn't find it.  Is it possible you're
running an older version of Rails, and that the current rev has dropped
that feature, for some reason?

-Rob
Aaron C. (Guest)
on 2007-05-17 20:04
(Received via mailing list)
On 5/9/07, Rob M. <removed_email_address@domain.invalid> wrote:
>
>  Aaron, what version of Rails are you running?  I'm using 1.2.3 and adding
> an application.rhtml doesn't have any effect.  I looked through the render()
> and layout code in the codebase, looking for an application.* default, and
> couldn't find it.  Is it possible you're running an older version of Rails,
> and that the current rev has dropped that feature, for some reason?

Hi Rob,

Sorry for the delayed response.  Nope, I'm using Rails 1.2.3.  Perhaps
reading through the layout section in the API doc will help:

http://api.rubyonrails.org/classes/ActionControlle...

HTH,
Aaron

--
Aaron Campos
removed_email_address@domain.invalid
skype & AOL IM: aaroncampos

-- Find me at RailsConf --
Rob M. (Guest)
on 2007-07-27 05:40
(Received via mailing list)
Hey smart people.  I'm trying to solve a problem I am sure has been
solved by someone out there already, and am hoping one of them is on
this list.

Here goes, as simply as I can make it:

I am building a set of engine-ized plugins for core services I want to
reuse (like C++ libraries).  So, for example, I have a calendar plugin,
a user management plugin, a file management plugin...

I want to have relationships between these plugins, for example, have a
User optionally has_one() a Calendar.  This should *only* happen if the
calendar plugin is installed.

So, first question:

    How do I figure out, safely and consistently, that a given plugin
has been installed?  I seem to recall some sort of list being maintained
by Rails, but couldn't find where I read about it.  Is there such a
list?  When does it get initialized?

Second question:

    I'm planning on creating the relationships using polymorphic
associations.  Is there a smarter/better way to do this?  Has anyone
tried cross-plugin associations?

Thanks for any thoughts/advice on this.  I'm *really* enjoying the
functionality the engines plugin provides.  (Thanks, James!)

-Rob M.
James A. (Guest)
on 2007-07-28 17:13
(Received via mailing list)
On 7/27/07, Rob M. <removed_email_address@domain.invalid> wrote:
>     How do I figure out, safely and consistently, that a given plugin
> has been installed?  I seem to recall some sort of list being maintained
> by Rails, but couldn't find where I read about it.  Is there such a
> list?  When does it get initialized?

The engines plugin, for Rails 1.2, created an array of all the loaded
plugins, accessible via "Rails.plugins". This is a list of every
plugin that was loaded (and reflects the order they were loaded too).
This list is set up as soon as the engines plugin loads, and is then
built by the Rails::Initializer extensions that the engines plugin
provides.

Rails.plugins is actually a PluginList, which means that you can do

  Rails.plugins.first
  Rails.plugins[0]
  Rails.plugins[:plugin_name]
  Rails.plugins["plugin_name"]

... and they all will return the plugin at the given index, or with
the given name.

> Second question:
>
>     I'm planning on creating the relationships using polymorphic
> associations.  Is there a smarter/better way to do this?  Has anyone
> tried cross-plugin associations?

You should be able to do this, as long as Plugin A doesn't need to
actually load or instantiate any of the models from Plugins B before
Plugin B has loaded. Any kind of inter-plugin-dependency will need
careful management to ensure that code isn't eagerly loaded while the
plugins are loading.

HTH,

James
This topic is locked and can not be replied to.