Документация для создания собственных процессоров Sprockets?

Я пытаюсь создать препроцессор sprockets для 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

Ответ 1

Хорошо, я все еще не уверен, где найти документацию по этому вопросу. Но, читая исходный код Sprockets, играя с отрывистым отладчиком и читая сообщения в блогах от людей, которые делали подобные вещи со 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 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. Если кто-либо найдет такую ​​документацию, отправьте ответ.