isomorfeus-puppetmaster 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -6
- data/lib/isomorfeus/puppetmaster/document.rb +21 -2
- data/lib/isomorfeus/puppetmaster/driver/jsdom.rb +2 -1
- data/lib/isomorfeus/puppetmaster/driver_registration.rb +8 -0
- data/lib/isomorfeus/puppetmaster/node.rb +15 -2
- data/lib/isomorfeus/puppetmaster/server_registration.rb +30 -0
- data/lib/isomorfeus/puppetmaster/version.rb +1 -1
- metadata +32 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f93b2a8c272d241cdc8b2acbe45d8e9b894f2fd667699490474cd9489b00ff9
|
4
|
+
data.tar.gz: 02a64a1ccc84b206526ec90c855aea65191469287b6866d7b6058292dd821486
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb93ec516a523403299a96b6cf961dafcca7e33153348fe5bde2a593f9a66f8a4a717520bd4cb701cbf4744aed16b2ec4e3e9785d5332b467115a9ef0b4c69ac
|
7
|
+
data.tar.gz: 54ce3d4966f83112ff5999c39c827210b072656bdaf3f9cf2bda8197f257316854a64263fc6d6314eddc3b3ed1028989d0e07f6da4a9aaf6728180211fc54cd2
|
data/README.md
CHANGED
@@ -19,10 +19,10 @@ In Gemfile:
|
|
19
19
|
|
20
20
|
Also requires the following npm modules with recommended versions:
|
21
21
|
|
22
|
-
- puppeteer 1.
|
23
|
-
- puppeteer-firefox 0.5.0 - for the firefox driver
|
24
|
-
- jsdom 14.0.0 - for the jsdom driver
|
25
|
-
- canvas 2.4.1 - for the jsdom driver
|
22
|
+
- [puppeteer 1.16.0](https://github.com/GoogleChrome/puppeteer#readme) - for the chromium driver
|
23
|
+
- [puppeteer-firefox 0.5.0](https://www.npmjs.com/package/puppeteer-firefox) - for the firefox driver
|
24
|
+
- [jsdom 14.0.0](https://github.com/jsdom/jsdom#readme) - for the jsdom driver
|
25
|
+
- [canvas 2.4.1](https://github.com/Automattic/node-canvas) - for the jsdom driver (optional)
|
26
26
|
|
27
27
|
Simply install them in your projects root. Puppetmaster also depends on isomorfeus-speednode, which will be installed automatically.
|
28
28
|
Speednode will pickup the node modules then from the projects root node_modules directory.
|
@@ -31,18 +31,29 @@ Speednode will pickup the node modules then from the projects root node_modules
|
|
31
31
|
|
32
32
|
Puppetmaster provides these drivers:
|
33
33
|
- chromium - a real browser, headless, fast
|
34
|
+
- chromium_wsl - as above but with options so it can execute within the Windows Linux WSL
|
34
35
|
- chromium_debug - opens a chromium browser window with devtools enabled, useful for debugging tests
|
35
36
|
- firefox - real firefox, running headless, not so fast
|
36
37
|
- firefox_debug - opens a firefox browser window with devtools enabled, useful for debugging tests
|
37
38
|
- jsdom - provides a dom implementation in javascript, can execute javascript in the document, super fast, headless, has certain limitations,
|
38
39
|
especially because its not rendering anything (no element bounding box, etc.)
|
40
|
+
- jsdom_canvas - jsdom driver with additional support for 'canvas', requires certain libraries to be installed, see: [canvas at github](https://github.com/Automattic/node-canvas)
|
39
41
|
|
40
|
-
Selecting
|
42
|
+
Chromium is the default driver. Selecting another driver, for example jsdom:
|
41
43
|
```ruby
|
42
44
|
Isomorfeus::Puppetmaster.driver = :jsdom
|
43
45
|
```
|
44
|
-
(chromium is the default driver)
|
45
46
|
|
47
|
+
Puppetmaster provides support for these rack servers:
|
48
|
+
- [agoo](https://github.com/ohler55/agoo)
|
49
|
+
- [falcon](https://github.com/socketry/falcon)
|
50
|
+
- [iodine](https://github.com/boazsegev/iodine)
|
51
|
+
- [puma](https://github.com/puma/puma)
|
52
|
+
|
53
|
+
Puma is the default rack server. To assign another rack server:
|
54
|
+
```ruby
|
55
|
+
Isomorfeus::Puppetmaster.server = :agoo
|
56
|
+
```
|
46
57
|
|
47
58
|
Getting the app ready and running:
|
48
59
|
1. Assign a rack app
|
@@ -76,7 +76,21 @@ module Isomorfeus
|
|
76
76
|
start_of_code = compiled_ruby.index('*/') + 3
|
77
77
|
compiled_ruby = compiled_ruby[start_of_code..-1]
|
78
78
|
end
|
79
|
-
|
79
|
+
evaluate_script <<~JAVASCRIPT
|
80
|
+
(function(){
|
81
|
+
return #{compiled_ruby}
|
82
|
+
})()
|
83
|
+
JAVASCRIPT
|
84
|
+
end
|
85
|
+
|
86
|
+
def evaluate_with_opal(ruby_source = '', &block)
|
87
|
+
ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
|
88
|
+
compiled_ruby = compile_ruby_source(ruby_source)
|
89
|
+
if compiled_ruby.start_with?('/*')
|
90
|
+
start_of_code = compiled_ruby.index('*/') + 3
|
91
|
+
compiled_ruby = compiled_ruby[start_of_code..-1]
|
92
|
+
end
|
93
|
+
evaluate_script <<~JAVASCRIPT
|
80
94
|
(function(){
|
81
95
|
if (typeof Opal === "undefined") {
|
82
96
|
#{Isomorfeus::Puppetmaster.opal_prelude}
|
@@ -84,7 +98,6 @@ module Isomorfeus
|
|
84
98
|
return #{compiled_ruby}
|
85
99
|
})()
|
86
100
|
JAVASCRIPT
|
87
|
-
evaluate_script(javascript)
|
88
101
|
end
|
89
102
|
|
90
103
|
def go_back
|
@@ -129,6 +142,12 @@ module Isomorfeus
|
|
129
142
|
evaluate_ruby(ruby_source)
|
130
143
|
end
|
131
144
|
|
145
|
+
def isomorphic_with_opal(ruby_source = '', &block)
|
146
|
+
ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
|
147
|
+
Isomorfeus::Puppetmaster.served_app.on_server(ruby_source)
|
148
|
+
evaluate_with_opal(ruby_source)
|
149
|
+
end
|
150
|
+
|
132
151
|
def method_missing(name, *args)
|
133
152
|
method_name = name.to_s
|
134
153
|
if method_name.start_with?('find_by_')
|
@@ -37,6 +37,7 @@ module Isomorfeus
|
|
37
37
|
def initialize(options = {})
|
38
38
|
@app = options.delete(:app)
|
39
39
|
@options = options.dup
|
40
|
+
@canvas = @options.delete(:canvas) { false }
|
40
41
|
@ignore_https_errors = !!@options.delete(:ignore_https_errors)
|
41
42
|
@max_width = @options.delete(:max_width) { VIEWPORT_MAX_WIDTH }
|
42
43
|
@max_height = @options.delete(:max_height) { VIEWPORT_MAX_HEIGHT }
|
@@ -248,7 +249,7 @@ module Isomorfeus
|
|
248
249
|
|
249
250
|
def jsdom_launch
|
250
251
|
<<~JAVASCRIPT
|
251
|
-
const canvas = require('canvas')
|
252
|
+
#{"const canvas = require('canvas');" if @canvas}
|
252
253
|
const jsdom = require('jsdom');
|
253
254
|
const Cookie = jsdom.toughCookie.Cookie;
|
254
255
|
const MemoryCookieStore = jsdom.toughCookie.MemoryCookieStore;
|
@@ -2,6 +2,10 @@ Isomorfeus::Puppetmaster.register_driver(:chromium) do |app|
|
|
2
2
|
Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: true, app: app)
|
3
3
|
end
|
4
4
|
|
5
|
+
Isomorfeus::Puppetmaster.register_driver(:chromium_wsl) do |app|
|
6
|
+
Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: true, app: app, args: ['--no-sandbox'])
|
7
|
+
end
|
8
|
+
|
5
9
|
Isomorfeus::Puppetmaster.register_driver(:chromium_debug) do |app|
|
6
10
|
Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: false, devtools: true, app: app)
|
7
11
|
end
|
@@ -17,3 +21,7 @@ end
|
|
17
21
|
Isomorfeus::Puppetmaster.register_driver(:jsdom) do |app|
|
18
22
|
Isomorfeus::Puppetmaster::Driver::Jsdom.new(app: app)
|
19
23
|
end
|
24
|
+
|
25
|
+
Isomorfeus::Puppetmaster.register_driver(:jsdom_canvas) do |app|
|
26
|
+
Isomorfeus::Puppetmaster::Driver::Jsdom.new(app: app, canvas: true)
|
27
|
+
end
|
@@ -145,7 +145,21 @@ module Isomorfeus
|
|
145
145
|
start_of_code = compiled_ruby.index('*/') + 3
|
146
146
|
compiled_ruby = compiled_ruby[start_of_code..-1]
|
147
147
|
end
|
148
|
-
|
148
|
+
evaluate_script <<~JAVASCRIPT
|
149
|
+
(function(){
|
150
|
+
return #{compiled_ruby}
|
151
|
+
})()
|
152
|
+
JAVASCRIPT
|
153
|
+
end
|
154
|
+
|
155
|
+
def evaluate_with_opal(ruby_source = '', &block)
|
156
|
+
ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
|
157
|
+
compiled_ruby = compile_ruby_source(ruby_source)
|
158
|
+
if compiled_ruby.start_with?('/*')
|
159
|
+
start_of_code = compiled_ruby.index('*/') + 3
|
160
|
+
compiled_ruby = compiled_ruby[start_of_code..-1]
|
161
|
+
end
|
162
|
+
evaluate_script <<~JAVASCRIPT
|
149
163
|
(function(){
|
150
164
|
if (typeof Opal === "undefined") {
|
151
165
|
#{Isomorfeus::Puppetmaster.opal_prelude}
|
@@ -153,7 +167,6 @@ module Isomorfeus
|
|
153
167
|
return #{compiled_ruby}
|
154
168
|
})()
|
155
169
|
JAVASCRIPT
|
156
|
-
evaluate_script(javascript)
|
157
170
|
end
|
158
171
|
|
159
172
|
def get_attribute(attribute)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
Isomorfeus::Puppetmaster.register_server :agoo do |app, port, _host, **options|
|
2
2
|
begin
|
3
|
+
require 'agoo/version'
|
3
4
|
require 'rack/handler/agoo'
|
4
5
|
rescue LoadError
|
5
6
|
raise LoadError, "Unable to load 'agoo' as server."
|
@@ -11,8 +12,37 @@ Isomorfeus::Puppetmaster.register_server :agoo do |app, port, _host, **options|
|
|
11
12
|
Rack::Handler::Agoo.run(app, { port: port }.merge(options)).join
|
12
13
|
end
|
13
14
|
|
15
|
+
Isomorfeus::Puppetmaster.register_server :falcon do |app, port, host, **options|
|
16
|
+
begin
|
17
|
+
require 'falcon/version'
|
18
|
+
require 'rack/handler/falcon'
|
19
|
+
rescue LoadError
|
20
|
+
raise LoadError, "Unable to load 'falcon' as server."
|
21
|
+
end
|
22
|
+
|
23
|
+
events.log 'Puppetmaster starting Falcon...'
|
24
|
+
events.log "* Version #{Falcon::VERSION}"
|
25
|
+
|
26
|
+
Rack::Handler::Falcon.run(app, { Host: host, Port: port }.merge(options)).join
|
27
|
+
end
|
28
|
+
|
29
|
+
Isomorfeus::Puppetmaster.register_server :iodine do |app, port, _host, **options|
|
30
|
+
begin
|
31
|
+
require 'iodine/version'
|
32
|
+
require 'rack/handler/iodine'
|
33
|
+
rescue LoadError
|
34
|
+
raise LoadError, "Unable to load 'iodine' as server."
|
35
|
+
end
|
36
|
+
|
37
|
+
events.log 'Puppetmaster starting Iodine...'
|
38
|
+
events.log "* Version #{Iodine::VERSION}"
|
39
|
+
|
40
|
+
Rack::Handler::Iodine.run(app, { Host: host, Port: port }.merge(options)).join
|
41
|
+
end
|
42
|
+
|
14
43
|
Isomorfeus::Puppetmaster.register_server :puma do |app, port, host, **options|
|
15
44
|
begin
|
45
|
+
require 'puma/const'
|
16
46
|
require 'rack/handler/puma'
|
17
47
|
rescue LoadError
|
18
48
|
raise LoadError, "Unable to load 'puma' as server."
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isomorfeus-puppetmaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: falcon
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.30.0
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.30.0
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: fastimage
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +164,20 @@ dependencies:
|
|
150
164
|
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: iodine
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.7.31
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.7.31
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
182
|
name: irb
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -224,14 +252,14 @@ dependencies:
|
|
224
252
|
name: puma
|
225
253
|
requirement: !ruby/object:Gem::Requirement
|
226
254
|
requirements:
|
227
|
-
- -
|
255
|
+
- - "~>"
|
228
256
|
- !ruby/object:Gem::Version
|
229
257
|
version: 3.12.0
|
230
258
|
type: :development
|
231
259
|
prerelease: false
|
232
260
|
version_requirements: !ruby/object:Gem::Requirement
|
233
261
|
requirements:
|
234
|
-
- -
|
262
|
+
- - "~>"
|
235
263
|
- !ruby/object:Gem::Version
|
236
264
|
version: 3.12.0
|
237
265
|
- !ruby/object:Gem::Dependency
|