Документация по созданию пользовательских процессоров 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

person Ajedi32    schedule 08.08.2013    source источник
comment
Примечание. Я также открыл проблему по этому поводу на GitHub.   -  person Ajedi32    schedule 26.02.2014


Ответы (1)


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

person Ajedi32    schedule 09.08.2013
comment
Я знаю, что это старый вопрос/ответ, но поскольку в настоящее время я работаю над постпроцессором Sprockets, я использовал файл руководство по расширению Sprockets в качестве отправной точки. - person Michael Trojanek; 30.11.2020