I have a Sinatra app setup where most of the logic is performed inside of various classes, and the post
/get
routes instantiate those classes and call their methods.
I'm thinking about whether putting the post
/get
route handlers inside of the classes themselves would be a better structure.
In any case, I'd like to know if it is possible. So for instance:
class Example
def say_hello
"Hello"
end
get '/hello' do
@message = say_hello
end
end
Without modification to the above, Sinatra will say there is no method say_hello
on the SinatraApplication
object.
You just need to inherit from Sinatra::Base
:
require "sinatra/base"
class Example < Sinatra::Base
def say_hello
"Hello"
end
get "/hello" do
say_hello
end
end
You can run your app with Example.run!
.
If you need more separation between parts of your application, just make another Sinatra app. Put shared functionality in model classes and helpers, and run all your apps together with Rack.
module HelloHelpers
def say_hello
"Hello"
end
end
class Hello < Sinatra::Base
helpers HelloHelpers
get "/?" do
@message = say_hello
haml :index
end
end
class HelloAdmin < Sinatra::Base
helpers HelloHelpers
get "/?" do
@message = say_hello
haml :"admin/index"
end
end
config.ru:
map "/" do
run Hello
end
map "/admin" do
run HelloAdmin
end
Install Thin, and run your app with thin start
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With