Sha256: ad5c397372a677546f6b2e297dd11c475b01b6e64004811c095f5958e5e64e56

Contents?: true

Size: 1.59 KB

Versions: 23

Compression:

Stored size: 1.59 KB

Contents

require 'faye/websocket'
require 'eventmachine'
require 'rest-client'
require 'json'

module Perus::Pinger
    class ChromeCommand < Command
        option :timeout_seconds, default: 2
        option :host, default: 'localhost'
        option :port, default: 9222
        abstract!

        def send_command(command)
            @ws.send(command)
        end

        def execute(commands, &message_callback)
            # discover the first page shown in chrome
            pages = JSON.parse(RestClient.get("http://#{options.host}:#{options.port}/json"))
            pages.reject! {|page| page['url'].include?('chrome-extension')}
            @page = pages.first

            EM.run do
                @ws = Faye::WebSocket::Client.new(@page['webSocketDebuggerUrl'])

                @ws.on :error do |event|
                    puts "Chrome error: #{event}"
                    EM.stop_event_loop
                end

                @ws.on :close do |event|
                    EM.stop_event_loop
                end

                @ws.on :message do |event|
                    if block_given?
                        json = JSON.parse(event.data)
                        message_callback.call(json)
                    end
                end

                # send each command, responses will appear
                commands.each do |command|
                    send_command(command)
                end

                # cutoff console message loading after N seconds
                EM.add_timer(options.timeout_seconds) do
                    @ws.close
                end
            end
        end
    end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
perus-0.1.22 lib/perus/pinger/chrome_command.rb
perus-0.1.21 lib/perus/pinger/chrome_command.rb
perus-0.1.20 lib/perus/pinger/chrome_command.rb
perus-0.1.19 lib/perus/pinger/chrome_command.rb
perus-0.1.18 lib/perus/pinger/chrome_command.rb
perus-0.1.17 lib/perus/pinger/chrome_command.rb
perus-0.1.16 lib/perus/pinger/chrome_command.rb
perus-0.1.15 lib/perus/pinger/chrome_command.rb
perus-0.1.14 lib/perus/pinger/chrome_command.rb
perus-0.1.13 lib/perus/pinger/chrome_command.rb
perus-0.1.12 lib/perus/pinger/chrome_command.rb
perus-0.1.11 lib/perus/pinger/chrome_command.rb
perus-0.1.10 lib/perus/pinger/chrome_command.rb
perus-0.1.9 lib/perus/pinger/chrome_command.rb
perus-0.1.8 lib/perus/pinger/chrome_command.rb
perus-0.1.7 lib/perus/pinger/chrome_command.rb
perus-0.1.6 lib/perus/pinger/chrome_command.rb
perus-0.1.5 lib/perus/pinger/chrome_command.rb
perus-0.1.4 lib/perus/pinger/chrome_command.rb
perus-0.1.3 lib/perus/pinger/chrome_command.rb