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

11

我正在尝试为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)

/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

注意:我也在 GitHub 上开了一个问题(https://github.com/sstephenson/sprockets/issues/462)关于这个问题。 - Ajedi32
1个回答

7

好的,我仍然不确定在哪里可以找到有关此问题的文档。但是,通过阅读Sprockets的源代码,使用pry调试器进行实验和阅读已经使用Sprockets完成类似事情的人们的博客文章,我能够得出以下结论:


/initializers/sprockets.rb:

require 'screenshot_generator'

Rails.application.assets.register_engine('.screenshot', ScreenshotGenerator)

/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

这对我来说现在很好,但我真的希望看到有关 Sprockets 预处理器、后处理器和引擎的实际文档。如果有人找到这样的文档,请发布一个答案。

2
我知道这是一个老问题/答案,但由于我目前正在开发Sprockets后处理器,所以我使用了扩展Sprockets指南作为起点。 - Michael Trojanek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接