Sinatra: Utilizarea rutelor din alte fișiere

În prezent construiesc o aplicație ruby folosind Rack și Sinatra, dar nu reușesc să utilizez rute, implementate în altul decât fișierul principal de aplicație. Prima mea încercare a fost următoarea:

În fișierul principal:

require 'sinatra'
require 'lib/web'

module NoCI
  class Main < Sinatra::Base
    include NoCI::Web
    load 'lib/web.rb'
  end
end

și în lib/web.rb:     necesită "sinatra"

module NoCI
  module Web
    get '/' do
      "Hello World"
    end
  end
end

Dar nu a funcționat. Apoi am citit despre punerea rutelor într-o sub-clasă a clasei mele principale. Nici un succes. Orice sugestii, ce lipsesc?

Update: I tried with 'require', 'include' and 'load', mixing all possible combinations, nothing worked for me.

0
Văd răspunsul dat ca o soluție (oricât de bună). Cred că adevăratul răspuns este găsit ca răspuns pentru stackoverflow.com/questions/4681199/… . De ce voi semna această întrebare ca duplicat acum.
adăugat autor Felix, sursa

1 răspunsuri

Puteți utiliza cârligul included pentru a implementa ceea ce doriți.

require 'sinatra'
require 'lib/web'

module NoCI
  class Main < Sinatra::Base
    include NoCI::Web
  end
end

lib/web.rb

module NoCI
  module Web
    def self.included(base)
      base.get '/' do
        'Hello World!'
      end
    end
  end
end

Codul din included va fi executat când includeți acest modul, cu NoCI :: Base ca base .

0
adăugat
Funcționează ca farmec, mulțumesc mult!
adăugat autor braindump, sursa