screengem 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -3
- data/CHANGELOG.md +18 -0
- data/lib/screengem/automatic_visit.rb +42 -0
- data/lib/screengem/cli.rb +3 -0
- data/lib/screengem/screen_element.rb +15 -0
- data/lib/screengem/screen_elements.rb +35 -9
- data/lib/screengem/version.rb +1 -1
- data/lib/screengem.rb +1 -0
- data/screengem.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0f99a511e85ed2b6f1232ca2ffa53e296ab97be13bdaecadce83657b33e6915
|
4
|
+
data.tar.gz: 16e8d91f9c89f33a82a1d2e1b6c8917e016c132df1f101c6953d50c4ab1f7f89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 072bf89ce61351a3fcab0bc150cfe7319e10d60c67bffd8a056637f0a62c884cb5eae84a324dcfbabdc65755bc881c20fc192f2567364fab858cde0ae33d5c88
|
7
|
+
data.tar.gz: a34105be1cb51ef91a904f650befc987d49cdf3150e170264811b0106f3355f2f79749ba461d5d7a6c76d2d7cf88c1c17505e447ab2f25b5e1b7b9ec1300a1a5
|
data/.rubocop.yml
CHANGED
@@ -39,18 +39,21 @@ Style/Documentation:
|
|
39
39
|
Style/EmptyMethod:
|
40
40
|
Enabled: false
|
41
41
|
|
42
|
-
Style/
|
42
|
+
Style/ExpandPathArguments:
|
43
43
|
Enabled: false
|
44
44
|
|
45
|
-
Style/
|
45
|
+
Style/FrozenStringLiteralComment:
|
46
46
|
Enabled: false
|
47
47
|
|
48
|
-
Style/
|
48
|
+
Style/MutableConstant:
|
49
49
|
Enabled: false
|
50
50
|
|
51
51
|
Style/StringLiterals:
|
52
52
|
EnforcedStyle: double_quotes
|
53
53
|
|
54
|
+
Style/SymbolArray:
|
55
|
+
Enabled: false
|
56
|
+
|
54
57
|
Style/RescueModifier:
|
55
58
|
Enabled: false
|
56
59
|
|
data/CHANGELOG.md
CHANGED
@@ -2,12 +2,30 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 0.7.1 (2019-04-20)
|
6
|
+
|
7
|
+
### Bug fixes
|
8
|
+
|
9
|
+
* Fixed failure to generate screen element methods unless no arg constructor.
|
10
|
+
|
11
|
+
## 0.7.0 (2019-04-18)
|
12
|
+
|
13
|
+
### New Features
|
14
|
+
|
15
|
+
* Introduce the `visit_path` method for subclasses of ScreenElement (no need to call `visit`).
|
16
|
+
|
17
|
+
### Bug fixes
|
18
|
+
|
19
|
+
* Load the Rails environment to run the `screengem` command that creates dampening configurations
|
20
|
+
|
5
21
|
## 0.6.0 (2019-04-11)
|
6
22
|
|
7
23
|
### New Features
|
8
24
|
|
9
25
|
* Whenever an actor recalls a value perform a `reload` on the value. Avoid the `reload` by passing `false` to the `reload:` argument.
|
10
26
|
|
27
|
+
## 0.5.0 (2019-03-28)
|
28
|
+
|
11
29
|
### New Features
|
12
30
|
|
13
31
|
* [RSpec Expectations](https://github.com/rspec/rspec-expectations) are available in all primitives: actions, questions, and tasks.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Screengem
|
2
|
+
#
|
3
|
+
# Knows how to decorate public screen element methods with a visit invocation around any public method.
|
4
|
+
#
|
5
|
+
# This behaviour is turned on for any screen element instance that overrides the visit_path method.
|
6
|
+
#
|
7
|
+
class AutomaticVisit
|
8
|
+
attr_reader :screen_element
|
9
|
+
|
10
|
+
def initialize(screen_element)
|
11
|
+
@screen_element = screen_element
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(method, *args)
|
15
|
+
if screen_element.respond_to?(method)
|
16
|
+
forward_with_auto_visit(method, args)
|
17
|
+
else
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def respond_to_missing?(method, *)
|
23
|
+
screen_element.respond_to?(method)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def forward_with_auto_visit(method, args)
|
29
|
+
screen_element.visit if auto_visit?(method)
|
30
|
+
|
31
|
+
screen_element.send(method, *args)
|
32
|
+
end
|
33
|
+
|
34
|
+
def auto_visit?(method)
|
35
|
+
methods_to_decorate.include?(method)
|
36
|
+
end
|
37
|
+
|
38
|
+
def methods_to_decorate
|
39
|
+
@methods_to_decorate ||= screen_element.public_methods(false) - [:visit, :visit_path]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/screengem/cli.rb
CHANGED
@@ -8,6 +8,9 @@ module Screengem
|
|
8
8
|
option :quiet, default: false, desc: "Suppress command output"
|
9
9
|
desc "generate", "Create the sample dampening configuration"
|
10
10
|
def generate
|
11
|
+
# Require Rails to be loaded so that we can successfully require questions and tasks.
|
12
|
+
require "./config/environment"
|
13
|
+
|
11
14
|
root = options[:root]
|
12
15
|
|
13
16
|
# Require all questions and tasks for inclusion in the sample configuration.
|
@@ -2,7 +2,22 @@ module Screengem
|
|
2
2
|
#
|
3
3
|
# Base class for all screen elements.
|
4
4
|
#
|
5
|
+
# Calling visit does nothing when currently navigated to the target.
|
6
|
+
#
|
5
7
|
class ScreenElement
|
6
8
|
include Capybara::DSL
|
9
|
+
|
10
|
+
def visit(visit_uri = visit_path)
|
11
|
+
return if visit_uri == page.current_path
|
12
|
+
|
13
|
+
page.visit(visit_uri)
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# Subclasses override the visit_path method to participate in auto visit.
|
18
|
+
# See Screengem::AutomaticVisit.
|
19
|
+
#
|
20
|
+
def visit_path
|
21
|
+
end
|
7
22
|
end
|
8
23
|
end
|
@@ -2,10 +2,17 @@ module Screengem
|
|
2
2
|
#
|
3
3
|
# Singleton that gives the ability to get references to screen elements.
|
4
4
|
#
|
5
|
-
# On initialization generate a factory method for each screen element
|
5
|
+
# On initialization generate a factory method for each screen element. If the screen element
|
6
|
+
# defines a visit_path method then we wrap the screen element to support auto visit.
|
7
|
+
#
|
8
|
+
# Examples:
|
6
9
|
#
|
7
10
|
# def login_page
|
8
|
-
#
|
11
|
+
# ScreenElements::LoginPage.new
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# def login_page
|
15
|
+
# Screengem::AutomaticVisit.new(ScreenElements::LoginPage.new)
|
9
16
|
# end
|
10
17
|
#
|
11
18
|
class ScreenElements
|
@@ -14,22 +21,41 @@ module Screengem
|
|
14
21
|
def initialize
|
15
22
|
generated_method_names = []
|
16
23
|
|
17
|
-
Screengem::ScreenElement.descendants.each do |
|
18
|
-
class_name =
|
24
|
+
Screengem::ScreenElement.descendants.each do |screen_element_class|
|
25
|
+
class_name = screen_element_class.name
|
26
|
+
|
27
|
+
# Skip any anonymous classes. We can't do anything with them. Probably they're from testing.
|
28
|
+
next if class_name.blank?
|
29
|
+
|
19
30
|
method_name = class_name.demodulize.underscore
|
20
31
|
|
32
|
+
# Create some safety by detecting and failing fast for duplicate creation method names
|
21
33
|
if generated_method_names.include?(method_name)
|
22
34
|
raise "Name collision: two screen elements resolve to '#{method_name}'."
|
23
35
|
end
|
24
36
|
|
25
37
|
generated_method_names << method_name
|
26
38
|
|
27
|
-
|
28
|
-
|
29
|
-
#{
|
30
|
-
|
31
|
-
|
39
|
+
if auto_visit?(screen_element_class)
|
40
|
+
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
41
|
+
def #{method_name}(*args)
|
42
|
+
Screengem::AutomaticVisit.new(#{class_name}.new(*args))
|
43
|
+
end
|
44
|
+
RUBY
|
45
|
+
else
|
46
|
+
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
47
|
+
def #{method_name}(*args)
|
48
|
+
#{class_name}.new(*args)
|
49
|
+
end
|
50
|
+
RUBY
|
51
|
+
end
|
32
52
|
end
|
33
53
|
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def auto_visit?(screen_element)
|
58
|
+
screen_element.instance_methods(false).include?(:visit_path)
|
59
|
+
end
|
34
60
|
end
|
35
61
|
end
|
data/lib/screengem/version.rb
CHANGED
data/lib/screengem.rb
CHANGED
data/screengem.gemspec
CHANGED
@@ -38,4 +38,5 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.add_development_dependency "rspec", "~> 3.8"
|
39
39
|
spec.add_development_dependency "rubocop", "~> 0.65"
|
40
40
|
spec.add_development_dependency "rubocop-rspec", "~> 1.32"
|
41
|
+
spec.add_development_dependency "simplecov", "~> 0.16"
|
41
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: screengem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alistair McKinnell
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -148,6 +148,20 @@ dependencies:
|
|
148
148
|
- - "~>"
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '1.32'
|
151
|
+
- !ruby/object:Gem::Dependency
|
152
|
+
name: simplecov
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - "~>"
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.16'
|
158
|
+
type: :development
|
159
|
+
prerelease: false
|
160
|
+
version_requirements: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - "~>"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0.16'
|
151
165
|
description:
|
152
166
|
email:
|
153
167
|
- alistairm@nulogy.com
|
@@ -175,6 +189,7 @@ files:
|
|
175
189
|
- lib/screengem.rb
|
176
190
|
- lib/screengem/action.rb
|
177
191
|
- lib/screengem/actor.rb
|
192
|
+
- lib/screengem/automatic_visit.rb
|
178
193
|
- lib/screengem/browser_action.rb
|
179
194
|
- lib/screengem/cli.rb
|
180
195
|
- lib/screengem/concerns/actionable.rb
|