Синатра помощник во внешнем файле - PullRequest
15 голосов
/ 02 августа 2011

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

из . / Preject_name.rb

   helpers do
     ...#bunch of helpers
   end

для примера . / Помощники / что-то.rb

спасибо

Ответы [ 4 ]

28 голосов
/ 31 марта 2013

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

module ApplicationHelper

# methods

end

class Main < Sinatra::Base

  helpers ApplicationHelper

end
14 голосов
/ 04 октября 2011

Увы, если, как и я, вы создаете модульное приложение 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

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

8 голосов
/ 02 августа 2011

Так же, как вы сами сказали:

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

#helpers.rb
helpers do
...
end

#project_name.rb
require 'path/to/helpers.rb'
2 голосов
/ 05 февраля 2014

Кажется, ответ @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...

Кроме того, если кто-то предпочитает «классический стиль», такой как я, то для вас будет предложено следующее:1007 * 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...