class Shoot::Browser

Constants

BROWSERS_PATH
EMULATORS_UNAVAILABLE_ON_THE_API

Attributes

active[R]
browser[R]
browser_version[R]
device[R]
emulator[R]
id[R]
os[R]
os_version[R]

Public Class Methods

activate(ids) click to toggle source
# File lib/shoot/browser.rb, line 29
def self.activate(ids)
  update(select_by_ids(ids), :activate)
end
active() click to toggle source
# File lib/shoot/browser.rb, line 41
def self.active
  all.select(&:active)
end
all() click to toggle source
# File lib/shoot/browser.rb, line 25
def self.all
  @@all ||= fetch_json.map { |browser| Browser.new(browser.symbolize_keys) }
end
deactivate(ids) click to toggle source
# File lib/shoot/browser.rb, line 33
def self.deactivate(ids)
  update(select_by_ids(ids), :deactivate)
end
deactivate_all() click to toggle source
# File lib/shoot/browser.rb, line 37
def self.deactivate_all
  update(active, :deactivate)
end
filter(filter) click to toggle source
# File lib/shoot/browser.rb, line 49
def self.filter(filter)
  all.select { |browser| browser.inspect =~ /#{filter}/i }
end
new(id:, os:, browser:, device:, os_version: nil, browser_version: nil, active: false, emulator: false) click to toggle source
# File lib/shoot/browser.rb, line 63
def initialize(id:, os:, browser:, device:, os_version: nil, browser_version: nil, active: false, emulator: false)
  @id = id
  @os = os
  @os_version = os_version
  @browser = browser
  @device = device
  @browser_version = browser_version
  @active = active
  @emulator = emulator
end
save() click to toggle source
# File lib/shoot/browser.rb, line 58
def self.save
  File.write(BROWSERS_PATH, JSON.pretty_generate(all.map(&:to_h)))
end
select_by_ids(ids) click to toggle source
# File lib/shoot/browser.rb, line 53
def self.select_by_ids(ids)
  ids = ids.map(&:to_i)
  all.select { |browser| ids.include?(browser.id) }
end
update_json() click to toggle source
# File lib/shoot/browser.rb, line 45
def self.update_json
  File.write(BROWSERS_PATH, JSON.dump(fetch_and_prepare))
end

Private Class Methods

fetch_and_prepare() click to toggle source
# File lib/shoot/browser.rb, line 108
def self.fetch_and_prepare
  require 'rest_client'
  json = JSON.parse(RestClient.get("https://#{ENV['BROWSERSTACK_USER']}:#{ENV['BROWSERSTACK_KEY']}@www.browserstack.com/automate/browsers.json"))
  json += EMULATORS_UNAVAILABLE_ON_THE_API
  json.each_with_index do |browser, index|
    browser['id'] = index
  end
  json
end
fetch_json() click to toggle source
# File lib/shoot/browser.rb, line 103
def self.fetch_json
  update_json unless File.exist?(BROWSERS_PATH)
  JSON.parse(File.read(BROWSERS_PATH))
end
update(browsers, action) click to toggle source
# File lib/shoot/browser.rb, line 97
def self.update(browsers, action)
  browsers.map(&action)
  save
  browsers
end

Public Instance Methods

activate() click to toggle source
# File lib/shoot/browser.rb, line 74
def activate
  @active = true
end
deactivate() click to toggle source
# File lib/shoot/browser.rb, line 78
def deactivate
  @active = false
end
to_h() click to toggle source
# File lib/shoot/browser.rb, line 82
def to_h
  {
    id: id,
    os: os,
    os_version: os_version,
    browser: browser,
    device: device,
    browser_version: browser_version,
    active: active,
    emulator: emulator
  }
end