1

ここでの質問は、Rails ビュー ヘルパー関数を gem に抽出する方法を尋ねており、受け入れられる回答はかなり良いものです。

私は疑問に思っています - シナトラに対して同じことをする方法は? モジュールで定義された一連のヘルパー関数を持つ gem を作成しています。これらの関数を Sinatra ビューで使用できるようにしたいと考えています。しかし、何をしようとしても、関数にアクセスできないようで、undefined local variable or methodエラーが発生するだけです。

これまでのところ、私の gem 構造は次のようになっています (gemspec のような他のものは省略されています)。

cool_gem/
  lib/
    cool_gem/
      helper_functions.rb
      sinatra.rb 
  cool_gem.rb

cool_gem.rb、私は持っています:

if defined?(Sinatra) and Sinatra.respond_to? :register
  require 'cool_gem/sinatra'
end

helper_functions.rb、私は持っています:

module CoolGem
  module HelperFunctions

    def heading_tag(text)
      "<h1>#{text}</h1>"
    end

    # + many more functions
  end
end

sinatra.rb、私は持っています:

require 'cool_gem/helper_functions'

module CoolGem
  module Sinatra

    module MyHelpers
      include CoolGem::HelperFunctions
    end

    def self.registered(app)
      app.helpers MyHelpers
    end

  end
end

これはうまくいきません。どこが間違っていますか?

(ご参考までに、別のファイルにヘルパー関数が必要です。Gem も Rails と互換性を持つようにする予定なので、可能であれば関数を分離/分離したままにします)。

4

1 に答える 1