有关创建自定义Sprockets处理器的文档?

Aje*_*i32 10 ruby-on-rails tilt ruby-on-rails-3 sprockets

我正在尝试为Rails创建一个sprockets预处理器,它.png.rb在资源管道中查找文件,并使用它们在我的应用程序中生成各种页面的png屏幕截图.

我已经阅读了很多这个主题,但我似乎无法找到关于如何设置这个问题的任何直接文档.请帮忙?

这是我到目前为止所拥有的:


/initializers/sprockets.rb:

require 'screenshot_preprocessor'

Rails.application.assets.register_mime_type('screenshot/png', '.png.rb')
Rails.application.assets.register_preprocessor('screenshot/png', ScreenshotPreprocessor)
Run Code Online (Sandbox Code Playgroud)

/lib/screenshot_preprocessor.rb:

class ScreenshotPreprocessor
  # What API do I need to provide here?
  #   - What methods do I need to provide?
  #   - What parameters does Sprockets pass me?
  #   - What do I need to return to Sprockets?
end
Run Code Online (Sandbox Code Playgroud)

Aje*_*i32 7

好的,我还不确定在哪里找到这方面的文件.但是,通过阅读Sprockets的源代码,使用pry调试器,以及阅读使用Sprockets做过类似事情的人的博客文章,我能够想出这个:


/initializers/sprockets.rb:

require 'screenshot_generator'

Rails.application.assets.register_engine('.screenshot', ScreenshotGenerator)
Run Code Online (Sandbox Code Playgroud)

/lib/screenshot_generator.rb:

require_relative 'capybara_screenshot' # Don't worry about this, it's not
                                       # relevant to this question.

class ScreenshotGenerator < Sprockets::Processor
  def evaluate(context, locals)
    generator_class = ScreenshotGenerator.get_generator_class(context.pathname)

    return generator_class.new.generate
  end

  private

  def self.get_generator_class(generator_file)
    # This evaluates the Ruby code in the given file and returns a class that
    # can generate a binary string containing an image file.
    # (Code omitted for brevity)
  end
end
Run Code Online (Sandbox Code Playgroud)

这对我来说现在很好用,但我真的更喜欢看一些关于Sprockets预处理器,后处理器和引擎如何工作的真实文档.如果有人发现任何此类文件,请发回答.

  • 我知道这是一个老问题/答案,但由于我目前正在研究 Sprockets 后处理器,因此我使用了[扩展 Sprockets 指南](https://github.com/rails/sprockets/blob/master/guides/ extend_sprockets.md)作为起点。 (2认同)