我正在尝试为 Rails 创建一个链轮预处理器,它会发现.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
好吧,我仍然不确定在哪里可以找到这方面的文档。但是,通过阅读 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 预处理器、后处理器和引擎如何工作的真实文档。如果有人找到任何此类文档,请发布答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)