Как мне использовать Haml в виде в моем новом плагине? - PullRequest
0 голосов
/ 07 июня 2010

Я создаю новый плагин для приложения jruby on rails, который в конечном итоге превратится в драгоценный камень. Внутри моего плагина у меня есть контроллеры, помощники и представления. Для моих взглядов я хотел бы использовать Haml. Проблема в том, что я не могу понять, что они являются шаблонами haml. Возможно ли это сделать? Есть ли способ для плагина иметь Haml в качестве зависимости для своего представления? Под этим я подразумеваю, что для создаваемого плагина я намерен создать представление, созданное этим плагином, которое может быть использовано разработчиком приложения.

например:

vendor/   
  plugins/    
    my_plugin/  
      lib/  
        app/  
          views/  
            my_plugin_demo/  
              index.haml.html
           controllers/  
             my_plugin_demo_controller.rb
           helpers/

В init.rb моего плагина я попытался:

require 'my_plugin'  
require 'haml'  #doesn't seem to make a difference :(

но это, казалось, не имело никакого значения. Кто-нибудь имел опыт с этим? Я не могу найти какую-либо документацию о том, как сделать эту работу. Виды плагинов ограничены шаблонами .erb?

Обновление: @Jens Fahnenbruck

Я все еще немного сбит с толку ... Вы рекомендуете, чтобы я поместил следующее в файл init.rb my_plugin?

# Load Haml and Sass.  
# Haml may be undefined if we're running gems:install.  
Haml.init_rails(binding) if defined?(Haml)  

require 'my_plugin'  

Я пытался сделать это, но это не сработало. это все еще дает мне следующую ошибку страницы:

Missing template my_plugin_demo/index.erb in view path app/views  

Не уверен, что я понимаю, что вы рекомендовали ...

1 Ответ

1 голос
/ 07 июня 2010

это мой vendor/plugins/haml/init.rb файл, созданный haml --rails /path/to/app (см. http://wiki.rubyonrails.org/howtos/templates/haml)

begin
  require File.join(File.dirname(__FILE__), 'lib', 'haml') # From here
rescue LoadError
  begin
    require 'haml' # From gem
  rescue LoadError => e
    # gems:install may be run to install Haml with the skeleton plugin
    # but not the gem itself installed.
    # Don't die if this is the case.
    raise e unless defined?(Rake) &&
      (Rake.application.top_level_tasks.include?('gems') ||
        Rake.application.top_level_tasks.include?('gems:install'))
  end
end

# Load Haml and Sass.
# Haml may be undefined if we're running gems:install.
Haml.init_rails(binding) if defined?(Haml)

Я считаю, что последняя строка - это то, что вам нужно для работы плагина

ОБНОВЛЕНИЕ

Ваш файл init.rb должен выглядеть следующим образом:

require 'haml'
Haml.init_rails(binding)
require 'my_plugin'

Обновление 2

Попробуйте другую структуру папок:

vendor/   
  plugins/    
    my_plugin/  
      lib/  
      app/  <-- one level up
        views/  
          my_plugin_demo/  
            index.haml.html
         controllers/  
           my_plugin_demo_controller.rb
         helpers/
...