ruby - How to map routes to modules without the use of multiple Sinatra apps? -
i have structure:
module analytics def self.registered(app) module departmentlevel departmentparticipation = lambda end departmentstatistics = lambda end app.get '/participation', &departmentparticipation end module courselevel courseparticipation = lambda end end end
and @ end of module analytics route each piece of request specific submodule. if requested
'analytics/department'
it should redirect module departmentlevel has own routes as
app.get 'participation', &departmentparticipation
i first thought on using map. how use without having run new or inherit sinatra::base object?
not sure if need, here's how build modular sinatra apps: using use
first, have applicationcontroller
. it's base class other controllers. lives in controllers/application_controller.rb
class applicationcontroller < sinatra::base # settings valid controllers set :views, file.expand_path('../../views', __file__) set :public_folder, file.expand_path('../../public', __file__) enable :sessions # helpers helpers bootstraphelpers helpers applicationhelpers helpers databasehelpers configure :production enable :logging end end
now, other controllers/modules inherit applicationcontroller
. example controllers/website_controller.rb
:
require 'controllers/application_controller'
class websitecontroller < applicationcontroller helpers websitehelpers get('/') { slim :home } get('/updates') { slim :website_updates } get('/test') { binding.pry; 'foo' } if settings.development? end
at last, in app.rb
comes together:
# require stuff require 'yaml' require 'bundler' bundler.require require 'logger' # require own stuff app_root = file.expand_path('..', __file__) $load_path.unshift app_root require 'lib/core_ext/string' require 'controllers/application_controller.rb' # run-time configuration... applicationcontroller.configure # db connections, logging , stuff end # require models, controllers , helpers dir.glob("#{app_root}/{helpers,models,controllers}/*.rb").each { |file| require file } # here glue class myapp < sinatra::base use websitecontroller use othercontroller use thingcontroller not_found slim :'404' end end
with setup, need in config.ru
is
require './app.rb' run myapp
hope helps!
Comments
Post a Comment