Class: Shutterbug::Handlers::ConvertHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/shutterbug/handlers/convert_handler.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.configObject



7
8
9
# File 'lib/shutterbug/handlers/convert_handler.rb', line 7

def self.config
  Configuration.instance
end

.regexObject



11
12
13
# File 'lib/shutterbug/handlers/convert_handler.rb', line 11

def self.regex
  /#{self.config.path_prefix}\/make_snapshot/
end

Instance Method Details

#convert(req) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/shutterbug/handlers/convert_handler.rb', line 37

def convert(req)
  html     = req.POST()['content'] || ""
  width    = req.POST()['width']   || 1000
  height   = req.POST()['height']  || 700
  css      = req.POST()['css']     || ""
  format   = req.POST()['format']  || "png"
  quality  = req.POST()['quality'] || 1
  quality  = convert_quality(quality, format)
  config   = self.class.config
  job = PhantomJob.new(config.base_url(req), html, css, width, height, format, quality)
  unless (cache_entry = config.cache_manager.find(job.cache_key))
    job.rasterize
    html_entry = Shutterbug::CacheManager::CacheEntry.new(job.html_file)
    image_entry = Shutterbug::CacheManager::CacheEntry.new(job.image_file)
    html_entry.preview_url = image_entry.preview_url
    config.cache_manager.add_entry(html_entry)
    cache_entry = config.cache_manager.add_entry(image_entry)
  end
  # return the image tag
  return cache_entry
end

#convert_quality(val, format) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/shutterbug/handlers/convert_handler.rb', line 20

def convert_quality(val, format)
  # Client sends quality between 0 and 1 (similar to .toDataURL() second argument).
  # This conversion tries to ensure that the size of the final image is similar to
  # .toDataURL() output with given quality settings.
  val = val.to_f
  case format
  when "png"
    val *= 10
  when "jpeg"
    val *= 100
  else
    val *= 100
  end
  # PhantomJS expects integer.
  val.to_i
end

#handle(helper, req, env) ⇒ Object



15
16
17
18
# File 'lib/shutterbug/handlers/convert_handler.rb', line 15

def handle(helper, req, env)
  response_text = convert(req).image_tag
  helper.response(response_text, 'text/plain')
end