evil_systems 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/MIT-LICENSE +20 -0
- data/README.md +179 -0
- data/Rakefile +13 -0
- data/lib/evil_systems.rb +21 -0
- data/lib/evil_systems/cuprite_helpers.rb +22 -0
- data/lib/evil_systems/engine.rb +8 -0
- data/lib/evil_systems/helpers.rb +44 -0
- data/lib/evil_systems/precompile_assets.rb +26 -0
- data/lib/evil_systems/register_cuprite.rb +30 -0
- data/lib/evil_systems/remote_chrome.rb +42 -0
- data/lib/evil_systems/session_helpers.rb +14 -0
- data/lib/evil_systems/settings.rb +55 -0
- data/lib/evil_systems/version.rb +3 -0
- metadata +102 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6c39ae0b47c7d330afb6daa3ef1c8137d190f861905a4a3cdc45305740927ec1
|
4
|
+
data.tar.gz: e3c40f2764522b1796d11053aecd530267704d87f0ce6732b7d58374a2c030e9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fed0a5eebfba465c8d2d36228e7b05e6da431a464ee540b34f867c34e64d6263e7cc52d7e9612b679c198514f81ae1fbaff833dc8430600a561e89617ad8a407
|
7
|
+
data.tar.gz: 992f7b9646ecf70c5c07c032f40af6422e52785897ef7cc29c56cc45b08f875e684fec1a5a9b90c81687a1a67b660159fb3bde20490f7f8e9d2226aea59101f5
|
data/CHANGELOG.md
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2021 ParamagicDev
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
# EvilSystemTests
|
2
|
+
|
3
|
+
Why does this exist?
|
4
|
+
|
5
|
+
I wanted a quick, easy, reusable way to use the settings put forth in
|
6
|
+
[EvilMartians System of a Test blog post] (https://evilmartians.com/chronicles/system-of-a-test-setting-up-end-to-end-rails-testing)
|
7
|
+
for Minitest. System of a test is currently written for RSpec.
|
8
|
+
|
9
|
+
Full API documentation can be found here:
|
10
|
+
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'evil_system_tests'
|
18
|
+
```
|
19
|
+
|
20
|
+
And then execute:
|
21
|
+
|
22
|
+
```bash
|
23
|
+
bundle
|
24
|
+
```
|
25
|
+
|
26
|
+
## Setup
|
27
|
+
|
28
|
+
### Minitest
|
29
|
+
|
30
|
+
Navigate to `test/application_system_test_case.rb` in your Rails app.
|
31
|
+
|
32
|
+
Setup your file like so:
|
33
|
+
|
34
|
+
```rb
|
35
|
+
# test/application_system_test_case.rb
|
36
|
+
|
37
|
+
require 'test_helper'
|
38
|
+
|
39
|
+
+ # 'capybara' and 'capybara/cuprite' need to be defined for EvilSystems to
|
40
|
+
work properly.
|
41
|
+
+ require 'capybara'
|
42
|
+
+ require 'capybara/cuprite'
|
43
|
+
|
44
|
+
+ require 'evil_systems'
|
45
|
+
|
46
|
+
+ EvilSystems.initial_setup
|
47
|
+
|
48
|
+
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
|
49
|
+
- driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
|
50
|
+
+ driven_by :cuprite
|
51
|
+
|
52
|
+
+ include EvilSystems::Helpers
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
### RSpec
|
57
|
+
|
58
|
+
*Maybe in the future?*
|
59
|
+
|
60
|
+
## Whats included?
|
61
|
+
|
62
|
+
## Usage
|
63
|
+
|
64
|
+
`EvilSystems.initial_setup` takes two keyword arguments, `:task`, and
|
65
|
+
`silent`.
|
66
|
+
|
67
|
+
Both arguments have to do with precompiling assets.
|
68
|
+
`:silent` by default is set to `true` and will only tell you when assets
|
69
|
+
are compiling, and how long it took.
|
70
|
+
`:task` defaults to `assets:precompile`, System of a test uses
|
71
|
+
`webpacker:compile`.
|
72
|
+
|
73
|
+
### Settings
|
74
|
+
|
75
|
+
[x] - Automatically registers a `:cuprite` driver if `Capybara::Cuprite`
|
76
|
+
is defined.
|
77
|
+
[x] - Automatically sets Capybara's default and javascript driver to
|
78
|
+
`:cuprite`
|
79
|
+
[x] - Automatically sets `Capybara.app_host`
|
80
|
+
|
81
|
+
<details>
|
82
|
+
<summary>How `app_host` is set</summary>
|
83
|
+
|
84
|
+
`app_host` will first use `ENV["APP_HOST"]` then falls back to the systems
|
85
|
+
`hostname` if the `APP_HOST` ENV var is not defined.
|
86
|
+
If neither are defined, it will then default to `"0.0.0.0"`
|
87
|
+
|
88
|
+
</details>
|
89
|
+
|
90
|
+
[x] - `Capybara.server_host = "0.0.0.0"`
|
91
|
+
[x] - `Capybara.default_max_wait_time = 2`
|
92
|
+
[x] - `Capybara.default_normalize_ws = true` normalizes whitespace in
|
93
|
+
`has_text?` and similar matchers.
|
94
|
+
[x] - Sets the `Capybara.save_path` Uses `ENV["CAPYBARA_ARTIFACTS"]` and
|
95
|
+
falls back to `"./tmp/capybara"`
|
96
|
+
[x] - Sets a `REMOTE_CHROME` instance if a `ENV["CHROME_URL"]` is found
|
97
|
+
[x] - Prepends a `last_used_session` attribute accessor to Capybara.
|
98
|
+
|
99
|
+
### Helpers
|
100
|
+
|
101
|
+
`EvilSystems::Helpers`
|
102
|
+
|
103
|
+
Automatically includes `ActionView::RecordIdentifier` if Rails is
|
104
|
+
defined.
|
105
|
+
|
106
|
+
Also includes:
|
107
|
+
|
108
|
+
```rb
|
109
|
+
EvilSystems::CupriteHelpers
|
110
|
+
EvilSystems::SessionHelpers
|
111
|
+
```
|
112
|
+
|
113
|
+
#### Regular Helpers
|
114
|
+
|
115
|
+
```rb
|
116
|
+
# The full path to be prepended to a screen shot
|
117
|
+
absolute_image_path
|
118
|
+
|
119
|
+
# The relative path to be prepended to a screenshot message to make it clickable
|
120
|
+
image_path
|
121
|
+
|
122
|
+
# Make failure screenshots compatible with multi-session setup
|
123
|
+
take_screenshot
|
124
|
+
|
125
|
+
# Prepends a '#' to the +dom_id+ method provided by Rails
|
126
|
+
dom_id(*args)
|
127
|
+
```
|
128
|
+
|
129
|
+
#### SessionHelpers
|
130
|
+
|
131
|
+
```rb
|
132
|
+
# Small wrapper around Capybara.using_session thats easy to call from an
|
133
|
+
instance
|
134
|
+
within_session(name_or_session, &block)
|
135
|
+
|
136
|
+
# Remove all cookie banners
|
137
|
+
mark_all_banners_as_read!
|
138
|
+
```
|
139
|
+
|
140
|
+
#### Cuprite Helpers
|
141
|
+
|
142
|
+
```rb
|
143
|
+
# pauses the page
|
144
|
+
pause
|
145
|
+
|
146
|
+
# Opens a Pry or IRB repl. Will use Pry if Pry is defined, fallsback
|
147
|
+
to debugging with IRB
|
148
|
+
debug
|
149
|
+
```
|
150
|
+
|
151
|
+
### Env Variables
|
152
|
+
|
153
|
+
```rb
|
154
|
+
ENV["APP_HOST"] # used for Capybara.app_host
|
155
|
+
ENV["CAPYBARA_ARTIFACTS"] # used for Capybara.save_path
|
156
|
+
ENV["CHROME_URL"] # used for setting a remote chrome instance for
|
157
|
+
Cuprite
|
158
|
+
```
|
159
|
+
|
160
|
+
ENV variables used by this gem.
|
161
|
+
|
162
|
+
## I don't want to use Cuprite.
|
163
|
+
|
164
|
+
Thats fine! I totally get it. Selenium is battle tested. Simply remove
|
165
|
+
the `require "capybara/cuprite"` line and `EvilSystems` will detect that
|
166
|
+
Cuprite is not defined and not setup a driver for you and not include
|
167
|
+
Cuprite helpers.
|
168
|
+
|
169
|
+
## Omissions and differences
|
170
|
+
|
171
|
+
- Will use `assets:precompile` instead of `webpacker:compile` before
|
172
|
+
systems tests (configurable)
|
173
|
+
|
174
|
+
- Does not set the `Rails.application.default_url_options[:host]` due to
|
175
|
+
parallelization issues found while testing the dummy app.
|
176
|
+
|
177
|
+
## License
|
178
|
+
|
179
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/lib/evil_systems.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "zeitwerk"
|
2
|
+
loader = Zeitwerk::Loader.for_gem
|
3
|
+
loader.setup
|
4
|
+
|
5
|
+
# EvilMartians like setup for Minitest
|
6
|
+
module EvilSystems
|
7
|
+
# To be called before module +ApplicationSystemTest+
|
8
|
+
# @param task [String, nil] ("assets:precompile") - the precompile task to run
|
9
|
+
# @param silent [Boolean] (true) - silence build output and only show asset compilation and time spent compiling.
|
10
|
+
# @return void
|
11
|
+
# @see Settings#initial_setup
|
12
|
+
# @see RegisterCuprite#initial_setup
|
13
|
+
# @see PrecompileAssets#initial_setup
|
14
|
+
def self.initial_setup(task: "assets:precompile", silent: true)
|
15
|
+
Settings.initial_setup
|
16
|
+
RegisterCuprite.initial_setup
|
17
|
+
PrecompileAssets.initial_setup(task: task, silent: silent)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
require "evil_systems/engine" if defined?(Rails)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Add shortcuts for cuprite-specific debugging helpers
|
2
|
+
module EvilSystems
|
3
|
+
module CupriteHelpers
|
4
|
+
# Pauses the current driver
|
5
|
+
# @return [nil]
|
6
|
+
def pause
|
7
|
+
page.driver.pause
|
8
|
+
end
|
9
|
+
|
10
|
+
# Opens a debug session via Pry if defined, else uses Irb.
|
11
|
+
def debug(binding = nil)
|
12
|
+
$stdout.puts "🔎 Open Chrome inspector at http://localhost:3333"
|
13
|
+
if binding
|
14
|
+
return binding.pry if defined?(Pry)
|
15
|
+
|
16
|
+
return binding.irb
|
17
|
+
end
|
18
|
+
|
19
|
+
page.driver.pause
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilSystems
|
4
|
+
# Helpers to make life easier
|
5
|
+
module Helpers
|
6
|
+
include ActionView::RecordIdentifier if defined? ::Rails
|
7
|
+
include CupriteHelpers if defined? ::Capybara::Cuprite
|
8
|
+
include SessionHelpers
|
9
|
+
|
10
|
+
# Use our `Capybara.save_path` to store screenshots with other capybara artifacts
|
11
|
+
# (Rails screenshots path is not configurable https://github.com/rails/rails/blob/49baf092439fc74fc3377b12e3334c3dd9d0752f/actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb#L79)
|
12
|
+
# @return [String]
|
13
|
+
def absolute_image_path
|
14
|
+
return ::Rails.root.join("#{::Capybara.save_path}/screenshots/#{image_name}.png") if defined? ::Rails
|
15
|
+
|
16
|
+
File.join("#{::Capybara.save_path}/screenshots/#{image_name}.png")
|
17
|
+
end
|
18
|
+
|
19
|
+
# Use relative path in screenshot message to make it clickable in VS Code when running in Docker
|
20
|
+
# @return [String]
|
21
|
+
def image_path
|
22
|
+
return absolute_image_path.relative_path_from(::Rails.root).to_s if defined? ::Rails
|
23
|
+
|
24
|
+
absolute_image_path.relative_path_from(Dir.pwd)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Make failure screenshots compatible with multi-session setup
|
28
|
+
# @return void
|
29
|
+
def take_screenshot
|
30
|
+
return super unless ::Capybara.last_used_session
|
31
|
+
|
32
|
+
::Capybara.using_session(::Capybara.last_used_session) { super }
|
33
|
+
end
|
34
|
+
|
35
|
+
# Convert dom_id to a selector.
|
36
|
+
# @example
|
37
|
+
# dom_id(Facility.first)
|
38
|
+
# # => "#facility-1"
|
39
|
+
# @return [String]
|
40
|
+
def dom_id(*args)
|
41
|
+
"##{super}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilSystems
|
4
|
+
module PrecompileAssets
|
5
|
+
# Precompile assets before running tests to avoid timeouts.
|
6
|
+
# Do not precompile if webpack-dev-server is running (NOTE: MUST be launched with RAILS_ENV=test)
|
7
|
+
# @param task [String, nil] ("assets:precompile") - the precompile task to run
|
8
|
+
# @param silent [Boolean] (true) - silence build output and only show asset compilation and time spent compiling.
|
9
|
+
def self.initial_setup(task: "assets:precompile", silent: true)
|
10
|
+
$stdout.puts "\n🐢 Precompiling assets.\n"
|
11
|
+
original_stdout = $stdout.clone
|
12
|
+
start = Time.current
|
13
|
+
begin
|
14
|
+
# Silence output
|
15
|
+
$stdout.reopen(File.new("/dev/null", "w")) if silent == true
|
16
|
+
# next 3 lines to compile assets before running our test suite
|
17
|
+
require "rake"
|
18
|
+
Rails.application.load_tasks
|
19
|
+
Rake::Task[task].invoke if task
|
20
|
+
ensure
|
21
|
+
$stdout.reopen(original_stdout) if silent == true
|
22
|
+
$stdout.puts "Finished in #{(Time.current - start).round(2)} seconds"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilSystems
|
4
|
+
# Cuprite is a modern Capybara driver which uses Chrome CDP API
|
5
|
+
# instead of Selenium & co.
|
6
|
+
# See https://github.com/rubycdp/cuprite
|
7
|
+
module RegisterCuprite
|
8
|
+
# Registers the Cuprite driver. Can be used via:
|
9
|
+
# driven_by :cuprite, using: :chrome, screen_size: [1400, 1400]
|
10
|
+
# The initial setup prior to the class ApplicationSystemTestCase, runs before the entire test suite.
|
11
|
+
# @return [void]
|
12
|
+
def self.initial_setup
|
13
|
+
return unless defined? Capybara::Cuprite
|
14
|
+
|
15
|
+
remote_options = RemoteChrome.options
|
16
|
+
::Capybara.register_driver(:cuprite) do |app|
|
17
|
+
::Capybara::Cuprite::Driver.new(
|
18
|
+
app,
|
19
|
+
**{
|
20
|
+
window_size: [1200, 800],
|
21
|
+
browser_options: {"no-sandbox" => nil},
|
22
|
+
inspector: true
|
23
|
+
}.merge(remote_options)
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Capybara.default_driver = Capybara.javascript_driver = :cuprite
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module EvilSystems
|
2
|
+
module RemoteChrome
|
3
|
+
# @return [String, nil]
|
4
|
+
def self.url
|
5
|
+
ENV["CHROME_URL"]
|
6
|
+
end
|
7
|
+
|
8
|
+
# Current port
|
9
|
+
# @return Integer
|
10
|
+
def self.port
|
11
|
+
URI.parse(url).yield_self { |uri| uri.port }
|
12
|
+
end
|
13
|
+
|
14
|
+
# Current host
|
15
|
+
# @return [String, nil]
|
16
|
+
def self.host
|
17
|
+
URI.parse(url).yield_self { |uri| uri.host } if url
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns a hash with a :url key / value if a remote chrome url is found.
|
21
|
+
# @return [Hash{:url => String, nil}]
|
22
|
+
#
|
23
|
+
def self.options
|
24
|
+
# Check whether the remote chrome is running and configure the Capybara
|
25
|
+
# driver for it.
|
26
|
+
remote_chrome ? {url: url} : {}
|
27
|
+
end
|
28
|
+
|
29
|
+
# Whether or not the socket could be connected
|
30
|
+
# @return [Boolean]
|
31
|
+
def self.remote_chrome
|
32
|
+
if url.nil?
|
33
|
+
false
|
34
|
+
else
|
35
|
+
Socket.tcp(host, port, connect_timeout: 1).close
|
36
|
+
true
|
37
|
+
end
|
38
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, SocketError
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module EvilSystems
|
2
|
+
# Capybara Sessions are limited, lets add some extra helpers.
|
3
|
+
module SessionHelpers
|
4
|
+
# Convencience method for session names.
|
5
|
+
def within_session(name_or_session, &block)
|
6
|
+
::Capybara.using_session(name_or_session, &block)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Remove all banners
|
10
|
+
def mark_all_banners_as_read!
|
11
|
+
page.driver.set_cookie "show_banners", "N"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EvilSystems
|
4
|
+
# Capybara settings (not covered by Rails system tests)
|
5
|
+
module Settings
|
6
|
+
# Finds the current app host via ENV["APP_HOST"], `hostname`, or defaults to "0.0.0.0"
|
7
|
+
# @return [String]
|
8
|
+
def self.app_host
|
9
|
+
"http://#{ENV.fetch("APP_HOST", `hostname`&.strip&.downcase || "0.0.0.0")}"
|
10
|
+
end
|
11
|
+
|
12
|
+
# Finds the current cookie domain
|
13
|
+
# @return [String]
|
14
|
+
def self.cookie_domain
|
15
|
+
URI.parse(app_host).host.then do |host|
|
16
|
+
# If host is a top-level domain
|
17
|
+
next host unless host.include?(".")
|
18
|
+
|
19
|
+
".#{host}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# The setup to be run prior to the test suite
|
24
|
+
def self.initial_setup
|
25
|
+
prepend_session_to_capybara
|
26
|
+
|
27
|
+
::Capybara.app_host = app_host
|
28
|
+
|
29
|
+
# Make server listening on all hosts
|
30
|
+
::Capybara.server_host = "0.0.0.0"
|
31
|
+
|
32
|
+
# Don't wait too long in `have_xyz` matchers
|
33
|
+
::Capybara.default_max_wait_time = 2
|
34
|
+
|
35
|
+
# Normalizes whitespaces when using `has_text?` and similar matchers
|
36
|
+
::Capybara.default_normalize_ws = true
|
37
|
+
|
38
|
+
# Where to store artifacts (e.g. screenshots, downloaded files, etc.)
|
39
|
+
::Capybara.save_path = ENV.fetch("CAPYBARA_ARTIFACTS", "./tmp/capybara")
|
40
|
+
end
|
41
|
+
|
42
|
+
private_class_method def self.prepend_session_to_capybara
|
43
|
+
::Capybara.singleton_class.prepend(Module.new do
|
44
|
+
attr_accessor :last_used_session
|
45
|
+
|
46
|
+
def using_session(name, &block)
|
47
|
+
self.last_used_session = name
|
48
|
+
super
|
49
|
+
ensure
|
50
|
+
self.last_used_session = nil
|
51
|
+
end
|
52
|
+
end)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: evil_systems
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ParamagicDev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: zeitwerk
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: capybara
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: standardrb
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.0.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0
|
55
|
+
description:
|
56
|
+
email:
|
57
|
+
- konnor5456@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- CHANGELOG.md
|
63
|
+
- MIT-LICENSE
|
64
|
+
- README.md
|
65
|
+
- Rakefile
|
66
|
+
- lib/evil_systems.rb
|
67
|
+
- lib/evil_systems/cuprite_helpers.rb
|
68
|
+
- lib/evil_systems/engine.rb
|
69
|
+
- lib/evil_systems/helpers.rb
|
70
|
+
- lib/evil_systems/precompile_assets.rb
|
71
|
+
- lib/evil_systems/register_cuprite.rb
|
72
|
+
- lib/evil_systems/remote_chrome.rb
|
73
|
+
- lib/evil_systems/session_helpers.rb
|
74
|
+
- lib/evil_systems/settings.rb
|
75
|
+
- lib/evil_systems/version.rb
|
76
|
+
homepage: https://github.com/paramagicdev/evil_systems
|
77
|
+
licenses:
|
78
|
+
- MIT
|
79
|
+
metadata:
|
80
|
+
homepage_uri: https://github.com/paramagicdev/evil_systems
|
81
|
+
source_code_uri: https://github.com/paramagicdev/evil_systems
|
82
|
+
changelog_uri: https://github.com/paramagicdev/evil_systems/CHANGELOG.md
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubygems_version: 3.1.4
|
99
|
+
signing_key:
|
100
|
+
specification_version: 4
|
101
|
+
summary: Fully integrated setup based on EvilMartians system of a test
|
102
|
+
test_files: []
|