[Nitro] "magic" mapping of controllers possible?

George Moschovitis george.moschovitis at gmail.com
Fri Jun 23 13:53:08 EDT 2006


Dimitri and Michael thanks for the provided code.

-g.

On 6/23/06, Michael Fellinger <manveru at weez-int.com> wrote:
> On Friday 23 June 2006 05:47, Dimitri Aivaliotis wrote:
> > Here's my version, modified (correcting a couple of small errors, including
> > it within the main Nitro namespace, and fitting it to the way I like to lay
> > out my sources) from what manveru wrote:
>
> Thanks, that looks much better (saner :) maybe i should have added that i
> didn't actually try the code i suggested...
>
> >
> > module Nitro
> >   class Server
> >
> >     class << self
> >
> >       def try( &block )
> >         yield
> >       rescue Object
> >         false
> >       end
> >
> >       def fetch_mount( point )
> >         if point == '/'
> >           return Nitro::Controller # because I like to craft my index page
> > by hand
> >         else
> >           base = point.gsub('/', '')
> >           # now, this assumes the sources for the controllers are in
> >           # files named "app/<name>_c.rb
> >           file, controller = "app/#{base}_c.rb", "#{base.capitalize
> > }Controller"
> >         end
> >         # check if file is in $:
> >         Logger.debug "missing #{file} for #{controller}" unless try{require
> > file}
> >
> >         if ! Nitro.const_defined?( controller )
>
> one thing still disturbing me is
> if ! Nitro.const_defined?( controller )
> could we make it into a pretty
> unless Nitro.const_defined? controller
> it just seems !good to me to use ! unless it's needed
> (task for today: discover the wordplay in the last sentence)
>
> >           Nitro.const_get(controller)
> >         else
> >           raise NameError, "missing controller #{controller} for #{point}"
> >         end
> >       end
> >
> >     end
> >
> >     def self.auto_map=( *arr )
> >       arr.flatten!
> >       Nitro::Server.map = Hash[*arr.map{|m| [m, fetch_mount(m)] }.flatten]
> >     end
>
> and also, auto_map= implies that one can retrieve the map later by calling
> Nitro::Server.auto_map, which is not the case, but should be easy to provide
> an alias to Nitro::Server.map - right? :)
>
> >
> >   end
> > end
> >
> > Then, your Nitro::Server.auto_map= goodness is ready to go!
> >
> > - Dimitri
>
> I think we should decide on a (very simple) default nitro-dir-structure and
> integrate that piece of code to make life easier...
> Maybe adding some Global variables for the default-locations?
>
> also, how about this snippet, since we are just at improving run.rb...
>
> module Kernel
>   def aquire *dirs
>     dirs.each do |dir|
>       Dir["#{dir}/*.rb"].each do |file|
>         require file
>       end
>     end
>   end
> end
>
> aquire :helpers, :controllers, :models
> _______________________________________________
> Nitro-general mailing list
> Nitro-general at rubyforge.org
> http://rubyforge.org/mailman/listinfo/nitro-general
>


-- 
http://www.gmosx.com
http://www.nitroproject.org


More information about the Nitro-general mailing list