2013-08-08 31 views
10

Tôi đang cố gắng tạo một bộ tiền xử lý sprockets cho Rails tìm thấy các tệp .png.rb trong đường dẫn nội dung và sử dụng chúng để tạo ảnh chụp màn hình png của các trang khác nhau trong ứng dụng của tôi.Tài liệu để tạo bộ xử lý Sprockets tùy chỉnh?

Tôi đã đọc về chủ đề này một chút nhưng tôi dường như không thể tìm thấy bất kỳ tài liệu hướng dẫn đơn giản nào về cách thiết lập cài đặt này. Xin giúp đỡ?

Dưới đây là những gì tôi có cho đến nay:


/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

Lưu ý: Tôi cũng đã mở [vấn đề] (https://github.com/sstephenson/sprockets/issues/462) về vấn đề này trên GitHub. – Ajedi32

Trả lời

7

Được rồi, tôi vẫn không chắc chắn nơi để tìm tài liệu về điều này. Nhưng, bằng cách đọc mã nguồn Bánh răng, chơi đùa với các debugger nâng lên, và đọc bài đăng trên blog từ những người đã thực hiện điều tương tự với Bánh răng, tôi đã có thể đưa ra với điều này:


/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 

Điều này làm việc tốt cho tôi bây giờ, nhưng tôi thực sự muốn thấy một số tài liệu thực sự về cách tiền xử lý Sprockets, postprocessors, và động cơ làm việc. Nếu bất kỳ ai tìm thấy bất kỳ tài liệu nào như vậy, vui lòng đăng câu trả lời.

Các vấn đề liên quan