Class: Browsed::Client

Inherits:
Object
  • Object
show all
Includes:
Chrome, Firefox, Poltergeist, Capybara::DSL
Defined in:
lib/browsed/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration: ::Browsed.configuration, driver: :poltergeist, browser: :phantomjs, device: :desktop, proxy: nil, user_agent: nil, resolution: nil, environment: :production, driver_options: {}, maximum_processes: nil) ⇒ Client

Returns a new instance of Client.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/browsed/client.rb', line 13

def initialize(configuration:     ::Browsed.configuration,
               driver:            :poltergeist,
               browser:           :phantomjs,
               device:            :desktop,
               proxy:             nil,
               user_agent:        nil,
               resolution:        nil,
               environment:       :production,
               driver_options:    {},
               maximum_processes: nil)
  
  self.configuration                =   configuration
  
  self.driver                       =   driver            || self.configuration.driver
  self.browser                      =   browser           || self.configuration.browser
  self.environment                  =   environment       || self.configuration.environment
  
  self.device                       =   device
  self.proxy                        =   proxy
  
  self.manager                      =   Browsed::Manager.new(browser: self.browser)
  self.maximum_processes            =   maximum_processes || self.configuration.maximum_processes
  
  set_user_agent(user_agent)
  set_resolution(resolution)
  
  setup_capybara(driver_options: driver_options)
end

Instance Attribute Details

#browserObject

Returns the value of attribute browser.



5
6
7
# File 'lib/browsed/client.rb', line 5

def browser
  @browser
end

#configurationObject

Returns the value of attribute configuration.



3
4
5
# File 'lib/browsed/client.rb', line 3

def configuration
  @configuration
end

#deviceObject

Returns the value of attribute device.



7
8
9
# File 'lib/browsed/client.rb', line 7

def device
  @device
end

#driverObject

Returns the value of attribute driver.



5
6
7
# File 'lib/browsed/client.rb', line 5

def driver
  @driver
end

#environmentObject

Returns the value of attribute environment.



5
6
7
# File 'lib/browsed/client.rb', line 5

def environment
  @environment
end

#managerObject

Returns the value of attribute manager.



4
5
6
# File 'lib/browsed/client.rb', line 4

def manager
  @manager
end

#maximum_processesObject

Returns the value of attribute maximum_processes.



4
5
6
# File 'lib/browsed/client.rb', line 4

def maximum_processes
  @maximum_processes
end

#proxyObject

Returns the value of attribute proxy.



7
8
9
# File 'lib/browsed/client.rb', line 7

def proxy
  @proxy
end

#resolutionObject

Returns the value of attribute resolution.



9
10
11
# File 'lib/browsed/client.rb', line 9

def resolution
  @resolution
end

#sessionObject

Returns the value of attribute session.



6
7
8
# File 'lib/browsed/client.rb', line 6

def session
  @session
end

#user_agentObject

Returns the value of attribute user_agent.



8
9
10
# File 'lib/browsed/client.rb', line 8

def user_agent
  @user_agent
end

Instance Method Details

#can_start_new_process?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/browsed/client.rb', line 61

def can_start_new_process?
  self.maximum_processes.nil? || self.manager.can_start_more_processes?(max_count: self.maximum_processes)
end

#display_screenshot!(path) ⇒ Object



65
66
67
# File 'lib/browsed/client.rb', line 65

def display_screenshot!(path)
  Launchy.open path if development?
end

#reset_session!Object



78
79
80
# File 'lib/browsed/client.rb', line 78

def reset_session!
  self.session.reset_session!
end

#resize!(res = nil) ⇒ Object

Resize the window separately and not based on initialization



70
71
72
73
74
75
76
# File 'lib/browsed/client.rb', line 70

def resize!(res = nil)
  res ||= self.resolution
  
  if res && res.size.eql?(2) && !self.driver.eql?(:poltergeist) # Resolution for Poltergeist is set in the driver
    self.session.current_window.resize_to(res.first, res.last) # [width, height]
  end
end

#setup_capybara(driver_options: {}, retries: 3) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/browsed/client.rb', line 46

def setup_capybara(driver_options: {}, retries: 3)
  if can_start_new_process?
    register_driver!(driver_options)
  
    Capybara.default_driver         =   self.driver
    Capybara.javascript_driver      =   self.driver
  
    Capybara.default_max_wait_time  =   driver_options.fetch(:wait_time, 30) #seconds
  
    self.session                    =   Capybara::Session.new(self.driver)
  else
    raise Browsed::TooManyProcessesError, "Too many PhantomJS processes running, reached maximum allowed number of #{self.maximum_processes}"
  end
end

#terminate_session!Object



82
83
84
85
86
# File 'lib/browsed/client.rb', line 82

def terminate_session!
  self.session.reset_session!
  self.session.driver.quit
  self.session            =   nil
end