Class: Diffux::Snapshotter
- Inherits:
-
Object
- Object
- Diffux::Snapshotter
- Defined in:
- lib/diffux_core/snapshotter.rb
Overview
Snapshotter is responsible for delegating to PhantomJS to take the snapshot for a given URL and viewoprt, and then saving that snapshot to a file and storing any metadata on the Snapshot object.
Constant Summary collapse
- SCRIPT_PATH =
File.join(File.dirname(__FILE__), 'script/take-snapshot.js').to_s
Instance Method Summary collapse
-
#initialize(url: raise, viewport_width: raise, outfile: raise, user_agent: nil, crop_selector: nil) ⇒ Snapshotter
constructor
A new instance of Snapshotter.
-
#take_snapshot! ⇒ Hash
Takes a snapshot of the URL and saves it in the outfile as a PNG image.
Constructor Details
#initialize(url: raise, viewport_width: raise, outfile: raise, user_agent: nil, crop_selector: nil) ⇒ Snapshotter
Returns a new instance of Snapshotter.
25 26 27 28 29 30 31 32 33 |
# File 'lib/diffux_core/snapshotter.rb', line 25 def initialize(url: raise, viewport_width: raise, outfile: raise, user_agent: nil, crop_selector: nil) @viewport_width = @crop_selector = crop_selector @user_agent = user_agent @outfile = outfile @url = url end |
Instance Method Details
#take_snapshot! ⇒ Hash
Takes a snapshot of the URL and saves it in the outfile as a PNG image.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/diffux_core/snapshotter.rb', line 40 def take_snapshot! result = {} opts = { address: @url, outfile: @outfile, cropSelector: @crop_selector, viewportSize: { width: @viewport_width, height: @viewport_width, }, } opts[:userAgent] = @user_agent if @user_agent run_phantomjs(opts) do |line| begin result = JSON.parse line, symbolize_names: true rescue JSON::ParserError # We only expect a single line of JSON to be output by our snapshot # script. If something else is happening, it is likely a JavaScript # error on the page and we should just forget about it and move on # with our lives. end end result end |