Forum: Ruby on Rails Plugin refresh time

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.
Anthony R. (Guest)
on 2006-05-06 03:04
(Received via mailing list)
Hi there,

I'm currently developing a plugin to do authentication and
authorisation.  In the init.rb file of the plugin I have this code:-
	$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
	require 'open_advantage/authorisation'
	ActionController::Base.send :include, OpenAdvantage::Authorisation

and this is the skeleton of my plugin directory structure:-
	vendor/plugins/open_advantage/init.rb
	vendor/plugins/lib/open_advantage/authorisation.rb

the 'vendor/plugins/lib/open_advantage/authorisation.rb' file contains
	module OpenAdvantage
		module Authorisation
		end
	end
currently with only a few methods in the Authorisation module.
However, when I change one of the functions in this module the
function is not mirrored in the output of the web browser.  For
example if I deliberately make a mistake in the code it carrys on as
before when it should presumably raise a 'Come on, FFS this is
nonsensical rubbish' error.  It continues to do this until the web
server (either lighttpd or webrick, I've tried both) are restarted.

Is there someway I can make the changes I've made in my plugin
immediately available to the application?  I've tried putting various
require and include statements into the app/controllers/
application.rb file, but to no avail.  The only way I can find for it
to pick up the changes every time is to pop the classes in the app/
controllers/application.rb file, and I'd really rather not develop
like that.

Any help would be gratefully received.

Thanks,

Anthony
Ben R. (Guest)
on 2006-05-06 03:25
(Received via mailing list)
Hello Anthony ~

For changes in a plugin to be picked up the app needs to be restarted.
 Imagine if the app had to reload every plugin on every request in
development mode? It would be quite a long wait for apps with many
plugins...

Don't know if you saw this, but Geoffrey Grosenbach just released this:

http://nubyonrails.com/articles/2006/05/04/the-com...

It might have some tips.

~ Ben

On 5/5/06, Anthony R. <removed_email_address@domain.invalid> wrote:
>         vendor/plugins/lib/open_advantage/authorisation.rb
> before when it should presumably raise a 'Come on, FFS this is
>
> Any help would be gratefully received.
>
> Thanks,
>
> Anthony
> _______________________________________________
> Rails mailing list
> removed_email_address@domain.invalid
> http://lists.rubyonrails.org/mailman/listinfo/rails
>


--
Ben R.
303-947-0446
http://www.benr75.com
Trevor S. (Guest)
on 2006-05-06 06:09
(Received via mailing list)
Hi Anthony,

while you are developing your plugin (and want reloading capability)
you could move the 'require' and 'include' lines from init.rb into
your ApplicationController (app/controllers/application.rb).
Assuming all other controllers inherit from this controller the
results ought to be the same.

You'll need to change the 'require' to 'require_dependency' but apart
from that it should be fine.

Regards,
Trevor
--
Trevor S.
http://somethinglearned.com
Trevor S. (Guest)
on 2006-05-06 06:15
(Received via mailing list)
Hi again Anthony,

OOPS! I wasn't very clear, I'll give an example:

in app/controllers/application.rb

class ApplicationController < ActionController::Base
require_dependency 'open_advantage/authorization'
include OpenAdvantage::Authorization
end

Oh, and by the way, the correct directory structure is:

vendor/plugins/open_advantage/init.rb
vendor/plugins/open_advantage/lib/open_advantage/authorization.rb

That way, you can get rid of the $:.unshift code.

Begin forwarded message:
This topic is locked and can not be replied to.