class Middleman::SocialImage::Converter

Public Class Methods

new(app, window_size, selector, always_generate, base_url) click to toggle source
# File lib/middleman-social_image/converter.rb, line 3
def initialize(app, window_size, selector, always_generate, base_url)
  @app = app
  @window_size = window_size
  @selector = selector
  @always_generate = always_generate
  @base_url = base_url
end

Public Instance Methods

convert(resource) click to toggle source
# File lib/middleman-social_image/converter.rb, line 15
def convert(resource)
  image_path = image_path(resource)
  if File.exist?(image_path) && !@always_generate
    @app.logger.debug "== social_image: skipping #{resource.path} as already in cache"
  else
    @app.logger.debug "== social_image: converting #{resource.path}"
    session.visit(File.join(@base_url, resource.url))
    raise "#{resource.url} did not contain '#{@selector}'." unless session.has_selector?(@selector)
    FileUtils.mkdir_p(File.dirname(image_path))
    session.save_screenshot(image_path)
  end
end
image_path(resource) click to toggle source
# File lib/middleman-social_image/converter.rb, line 11
def image_path(resource)
  File.join(@app.root, "tmp/middleman-social_image", resource.path.sub(".html", ".png"))
end

Private Instance Methods

session() click to toggle source
# File lib/middleman-social_image/converter.rb, line 30
def session
  @session ||= begin
    if @app.server?
      rack_app = ::Middleman::Rack.new(@app).to_app
      session = Capybara::Session.new(:selenium_chrome_headless, rack_app)
    else
      session = Capybara::Session.new(:selenium_chrome_headless)
    end
    session.current_window.resize_to(*@window_size.split(","))
    session
  end
end