sinatra helper in external file

后端 未结 5 1490
半阙折子戏
半阙折子戏 2021-02-07 06:48

I have lot of helpers in my main Sinatra project_name.rb and I want to remove them to the external file, what is the best practice to do that ?

from ./preject_na

相关标签:
5条回答
  • 2021-02-07 06:55

    Just as you said it yourself:

    Move the helpers block into another file and require it where you need.

    #helpers.rb
    helpers do
    ...
    end
    
    #project_name.rb
    require 'path/to/helpers.rb'
    
    0 讨论(0)
  • 2021-02-07 07:01

    It seems the answer @DaveSag offered miss something. Should add a line at the beginning of 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...
    

    In addition, if someone prefers a "classical style" like me, the following is for you :)

    In app.rb

    $:.unshift File.expand_path('../lib', __FILE__)
    
    require 'sinatra'
    require 'sinatra/some_helpers'
    
    get '/' do
      hello_world
    end
    

    In lib/sinatra/some_helpers.rb

    module Sinatra
      module SomeHelper
        def hello_world
          "Hello World from Helper!!"
        end
      end
    
      helpers SomeHelper
    end
    
    0 讨论(0)
  • 2021-02-07 07:06

    Alas, if, like me, you are building a modular Sinatra app, it's a little more complex than simply moving the helpers out into another file.

    The only way I got this to work is as follows.

    first up in your app (I'll call this my_modular_app.rb)

    require 'sinatra/base'
    require 'sinatra/some_helpers'
    
    class MyModularApp < Sinatra::Base
      helpers Sinatra::SomeHelpers
    
      ...
    
    end
    

    and then create the folder structure ./lib/sinatra/ and create some_helpers.rb as follows:

    require 'sinatra/base'
    
    module Sinatra
      module SomeHelpers
    
        def help_me_world
          logger.debug "hello from a helper"
        end
    
      end
    
      helpers SomeHelpers
    
    end
    

    doing this you can simply split all your helpers up into multiple files, affording more clarity in larger projects.

    0 讨论(0)
  • 2021-02-07 07:08

    The simple and recommended way:

    module ApplicationHelper
    
    # methods
    
    end
    
    class Main < Sinatra::Base
    
      helpers ApplicationHelper
    
    end
    
    0 讨论(0)
  • 2021-02-07 07:14

    I just added require_relative './lib/sinatra/helpers' to my config.ru and that's all.

    So it looks like this:

    require_relative './config/environment'
    require_relative './lib/sinatra/helpers'
    use ProjectsController
    run ApplicationController
    

    and my ./lib/sinatra/helpers.rb file is not even a module and I don't use any requires or includes in it. I can just define methods straight in this file and use them all over the app.

    The answer of @kgpdeveloper didn't work for me.

    0 讨论(0)
提交回复
热议问题