Помощник sinatra во внешнем файле

У меня много помощников в моей главной Sinatra project_name.rb, и я хочу удалить их во внешний файл, что лучше всего подходит для этого?

из ./preject_name.rb

   helpers do
     ...#bunch of helpers
   end

для exapmple ./helpers/something.rb

Благодарю вас

Ответы

Ответ 1

Как вы сами это сказали:

Переместите блок helpers в другой файл и require, где вам нужно.

#helpers.rb
helpers do
...
end

#project_name.rb
require 'path/to/helpers.rb'

Ответ 2

Простой и рекомендуемый способ:

module ApplicationHelper

# methods

end

class Main < Sinatra::Base

  helpers ApplicationHelper

end

Ответ 3

Увы, если, как и я, вы создаете модульное приложение Sinatra, это немного сложнее, чем просто переместить helpers в другой файл.

Единственный способ, которым я получил это, состоит в следующем.

сначала в вашем приложении (я назову это my_modular_app.rb)

require 'sinatra/base'
require 'sinatra/some_helpers'

class MyModularApp < Sinatra::Base
  helpers Sinatra::SomeHelpers

  ...

end

а затем создайте структуру папок ./lib/sinatra/ и создайте some_helpers.rb следующим образом:

require 'sinatra/base'

module Sinatra
  module SomeHelpers

    def help_me_world
      logger.debug "hello from a helper"
    end

  end

  helpers SomeHelpers

end

делая это, вы можете просто разделить все ваши помощники на несколько файлов, предоставляя большую ясность в больших проектах.

Ответ 4

Кажется, ответ @DaveSag предложил что-то упустить. Следует добавить строку в начале my_modular_app.rb:

$:.unshift File.expand_path('../lib', __FILE__)  # add ./lib to $LOAD_PATH

require 'sinatra/base'
require 'sinatra/some_helpers' # this line breaks unless line 1 is added.

# more code below...

Кроме того, если кто-то предпочитает "классический стиль", как я, для вас следующее:)

В app.rb

$:.unshift File.expand_path('../lib', __FILE__)

require 'sinatra'
require 'sinatra/some_helpers'

get '/' do
  hello_world
end

В lib/sinatra/some_helpers.rb

module Sinatra
  module SomeHelper
    def hello_world
      "Hello World from Helper!!"
    end
  end

  helpers SomeHelper
end