Class: Isomorfeus::Puppetmaster::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/isomorfeus/puppetmaster/session.rb

Constant Summary collapse

TIMEOUT =

milliseconds

30000

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app:, args: nil, channel: nil, default_viewport: nil, devtools: nil, dumpio: nil, env: nil, executable_path: nil, handle_SIGINT: nil, handle_SIGTERM: nil, handle_SIGHUP: nil, headless: nil, ignore_default_args: nil, ignore_https_errors: nil, pipe: nil, product: :chrome, slow_mo: nil, timeout: nil, user_data_dir: nil) ⇒ Session

Returns a new instance of Session.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/isomorfeus/puppetmaster/session.rb', line 9

def initialize(app:, args: nil, channel: nil, default_viewport: nil, devtools: nil, dumpio: nil,
               env: nil, executable_path: nil, handle_SIGINT: nil, handle_SIGTERM: nil, handle_SIGHUP: nil,
               headless: nil, ignore_default_args: nil, ignore_https_errors: nil, pipe: nil,
               product: :chrome, slow_mo: nil, timeout: nil, user_data_dir: nil)
  @parameters = binding.local_variables.map { |v| [v, binding.local_variable_get(v)] }.to_h
  @parameters[:channel] = @parameters[:channel].to_s if channel
  @parameters[:timeout] = TIMEOUT unless timeout
  @app = @parameters.delete(:app)
  @headless = headless
  @headless = true if @headless.nil?
  @devtools = devtools
  @devtools = false if @devtools.nil?
  @channel = channel.to_s
  default_viewport
  product = product.to_s
  @parameters[:product] = %w[chrome firefox].include?(product) ? product : 'chrome'
  @product = @parameters[:product]
  launch_browser
  ObjectSpace.define_finalizer(self, self.class.close_browser(self))
end

Instance Attribute Details

#appObject

Returns the value of attribute app.



6
7
8
# File 'lib/isomorfeus/puppetmaster/session.rb', line 6

def app
  @app
end

#browserObject

Returns the value of attribute browser.



6
7
8
# File 'lib/isomorfeus/puppetmaster/session.rb', line 6

def browser
  @browser
end

#default_pageObject

Returns the value of attribute default_page.



6
7
8
# File 'lib/isomorfeus/puppetmaster/session.rb', line 6

def default_page
  @default_page
end

#devtoolsObject (readonly)

Returns the value of attribute devtools.



7
8
9
# File 'lib/isomorfeus/puppetmaster/session.rb', line 7

def devtools
  @devtools
end

#headlessObject (readonly)

Returns the value of attribute headless.



7
8
9
# File 'lib/isomorfeus/puppetmaster/session.rb', line 7

def headless
  @headless
end

#productObject

Returns the value of attribute product.



6
7
8
# File 'lib/isomorfeus/puppetmaster/session.rb', line 6

def product
  @product
end

#responseObject

Returns the value of attribute response.



6
7
8
# File 'lib/isomorfeus/puppetmaster/session.rb', line 6

def response
  @response
end

Instance Method Details

#closeObject



30
31
32
# File 'lib/isomorfeus/puppetmaster/session.rb', line 30

def close
  @browser.close
end

#device_namesObject



38
39
40
# File 'lib/isomorfeus/puppetmaster/session.rb', line 38

def device_names
  devices.keys
end

#devicesObject



34
35
36
# File 'lib/isomorfeus/puppetmaster/session.rb', line 34

def devices
  ::Puppeteer::DEVICES
end

#eval(j, *args) ⇒ Object



99
100
101
102
103
# File 'lib/isomorfeus/puppetmaster/session.rb', line 99

def eval(j, *args)
  r = @default_page.evaluate_handle("function() { return #{j} }", *args)
  return r if r.is_a?(Puppeteer::ElementHandle)
  r&.json_value
end

#eval_ruby(ruby_source = '', file = nil, line = nil, &block) ⇒ Object



105
106
107
# File 'lib/isomorfeus/puppetmaster/session.rb', line 105

def eval_ruby(ruby_source = '', file = nil, line = nil, &block)
  @default_page.eval_ruby(ruby_source, file, line, &block)
end

#eval_with_opal(ruby_source = '', file = nil, line = nil, &block) ⇒ Object



109
110
111
# File 'lib/isomorfeus/puppetmaster/session.rb', line 109

def eval_with_opal(ruby_source = '', file = nil, line = nil, &block)
  @default_page.eval_with_opal(ruby_source, file, line, &block)
end

#evaluate(script, *args) ⇒ Object



94
95
96
97
# File 'lib/isomorfeus/puppetmaster/session.rb', line 94

def evaluate(script, *args)
  script = script.strip
  @default_page.evaluate_handle(script, *args)
end

#isomorphic(ruby_source = '', file = nil, line = nil, &block) ⇒ Object



113
114
115
116
117
# File 'lib/isomorfeus/puppetmaster/session.rb', line 113

def isomorphic(ruby_source = '', file = nil, line = nil, &block)
  ruby_source, file, line = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
  Isomorfeus::Puppetmaster.served_app.on_server(ruby_source, file, line)
  eval_ruby(ruby_source, file, line)
end

#isomorphic_with_opal(ruby_source = '', file = nil, line = nil, &block) ⇒ Object



119
120
121
122
123
# File 'lib/isomorfeus/puppetmaster/session.rb', line 119

def isomorphic_with_opal(ruby_source = '', file = nil, line = nil, &block)
  ruby_source, file, line = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
  Isomorfeus::Puppetmaster.served_app.on_server(ruby_source, file, line)
  eval_with_opal(ruby_source, file, line)
end

#network_conditionsObject



61
62
63
# File 'lib/isomorfeus/puppetmaster/session.rb', line 61

def network_conditions
  ::Puppeteer::NETWORK_CONDITIONS
end

#network_conition_namesObject



65
66
67
# File 'lib/isomorfeus/puppetmaster/session.rb', line 65

def network_conition_names
  network_conditions.map { |n| n[:name] }
end

#new_page(uri = nil, referer: nil, timeout: nil, wait_until: nil) ⇒ Object



69
70
71
72
73
74
75
76
# File 'lib/isomorfeus/puppetmaster/session.rb', line 69

def new_page(uri = nil, referer: nil, timeout: nil, wait_until: nil)
  new_page = @browser.new_page
  if uri
    parsed_uri = parse_uri(uri)
    new_page.goto(parsed_uri.to_s, referer: referer, timeout: timeout, wait_until: wait_until)
  end
  new_page
end

#pagesObject



42
43
44
# File 'lib/isomorfeus/puppetmaster/session.rb', line 42

def pages
  @browser.pages
end

#parse_uri(uri) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/isomorfeus/puppetmaster/session.rb', line 78

def parse_uri(uri)
  return nil if uri.nil?
  return uri if uri == 'about:blank'
  parsed_uri = URI.parse(uri)
  if parsed_uri.host.nil? && parsed_uri.port.nil? && parsed_uri.scheme.nil?
    parsed_uri.host = self.app.host
    parsed_uri.port = self.app.port
    parsed_uri.scheme = self.app.scheme
  end
  parsed_uri
end

#user_agentObject



90
91
92
# File 'lib/isomorfeus/puppetmaster/session.rb', line 90

def user_agent
  @browser.user_agent
end

#visit(uri, referer: nil, timeout: nil, wait_until: 'networkidle0', headless: nil, devtools: nil) ⇒ Object Also known as: goto



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/isomorfeus/puppetmaster/session.rb', line 46

def visit(uri, referer: nil, timeout: nil, wait_until: 'networkidle0', headless: nil, devtools: nil)
  headless = @headless if headless.nil?
  devtools = @devtools if devtools.nil?
  if @headless != headless || @devtools != devtools
    @browser.close
    @headless = headless
    @devtools = devtools
    launch_browser
  end
  parsed_uri = parse_uri(uri)
  @response = @default_page.goto(parsed_uri.to_s, referer: referer, timeout: timeout, wait_until: wait_until)
  @default_page
end