2013-08-08 9 views
10

Sto provando a creare un preprocessore di sprockets per Rails che trova i file .png.rb nella pipeline di asset e li utilizza per generare screenshot di varie pagine nella mia applicazione.Documentazione per la creazione di processori Pignoni personalizzati?

Ho letto un po 'su questo argomento, ma non riesco a trovare alcuna documentazione semplice su come ottenere questo set up. Aiuto per favore?

Ecco quello che ho finora:


/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 
+0

Nota: Ho anche aperto [un problema] (https://github.com/sstephenson/sprockets/issues/462) a proposito di questo su GitHub. – Ajedi32

risposta

7

Va bene, io non sono ancora sicuro dove trovare documentazionesu questo. Ma, leggendo il codice sorgente Pignoni, giocare con il debugger di leva, e leggendo i post del blog da parte di persone che hanno fatto cose simili con Sprockets, sono stato in grado di venire con questo:


/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 

Questo per me funziona bene, ma preferirei davvero vedere una vera documentazione su come funzionano i preprocessori, i postprocessori ei motori. Se qualcuno trova una tale documentazione, si prega di inviare una risposta.