site_prism 3.7.3 → 4.0
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/LICENSE.md +1 -1
- data/README.md +78 -110
- data/lib/site_prism/addressable_url_matcher.rb +1 -1
- data/lib/site_prism/deprecator.rb +3 -3
- data/lib/site_prism/dsl.rb +57 -81
- data/lib/site_prism/dsl_validator.rb +75 -0
- data/lib/site_prism/element_checker.rb +3 -19
- data/lib/site_prism/error.rb +6 -10
- data/lib/site_prism/loadable.rb +4 -5
- data/lib/site_prism/page.rb +39 -1
- data/lib/site_prism/rspec_matchers.rb +9 -3
- data/lib/site_prism/section.rb +12 -11
- data/lib/site_prism/timer.rb +10 -10
- data/lib/site_prism/version.rb +1 -1
- data/lib/site_prism/waiter.rb +4 -4
- data/lib/site_prism.rb +4 -12
- metadata +39 -59
- data/lib/site_prism/recursion_checker.rb +0 -77
data/lib/site_prism/version.rb
CHANGED
data/lib/site_prism/waiter.rb
CHANGED
@@ -3,17 +3,17 @@
|
|
3
3
|
module SitePrism
|
4
4
|
# [SitePrism::Waiter]
|
5
5
|
class Waiter
|
6
|
-
# @return Boolean
|
7
|
-
#
|
8
6
|
# A looper that will wait until the passed in block evaluates to true
|
9
7
|
# Alternatively it will time out once the wait_time is exceeded
|
10
|
-
|
8
|
+
#
|
9
|
+
# @return [Boolean]
|
10
|
+
def self.wait_until_true(wait_time = Capybara.default_max_wait_time, sleep_duration = 0.05)
|
11
11
|
Timer.run(wait_time) do |timer|
|
12
12
|
loop do
|
13
13
|
return true if yield
|
14
14
|
break if timer.done?
|
15
15
|
|
16
|
-
sleep(
|
16
|
+
sleep(sleep_duration)
|
17
17
|
end
|
18
18
|
raise SitePrism::TimeoutError, "Timed out after #{wait_time}s."
|
19
19
|
end
|
data/lib/site_prism.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'site_prism/error'
|
4
|
+
require 'site_prism/all_there'
|
4
5
|
require 'addressable/template'
|
6
|
+
require 'forwardable'
|
5
7
|
|
6
8
|
# [SitePrism] namespace
|
7
9
|
# We autoload our files underneath here to provide a slightly more optimal load solution
|
8
10
|
module SitePrism
|
9
11
|
autoload :AddressableUrlMatcher, 'site_prism/addressable_url_matcher'
|
10
12
|
autoload :DSL, 'site_prism/dsl'
|
13
|
+
autoload :DSLValidator, 'site_prism/dsl_validator'
|
11
14
|
autoload :Deprecator, 'site_prism/deprecator'
|
12
15
|
autoload :ElementChecker, 'site_prism/element_checker'
|
13
16
|
autoload :Loadable, 'site_prism/loadable'
|
14
17
|
autoload :Logger, 'site_prism/logger'
|
15
18
|
autoload :Page, 'site_prism/page'
|
16
|
-
autoload :
|
17
|
-
autoload :RspecMatchers, 'site_prism/rspec_matchers'
|
19
|
+
autoload :RSpecMatchers, 'site_prism/rspec_matchers'
|
18
20
|
autoload :Section, 'site_prism/section'
|
19
21
|
autoload :Timer, 'site_prism/timer'
|
20
22
|
autoload :Waiter, 'site_prism/waiter'
|
21
23
|
|
22
24
|
class << self
|
23
|
-
attr_reader :use_all_there_gem
|
24
|
-
|
25
25
|
def configure
|
26
26
|
yield self
|
27
27
|
end
|
@@ -72,13 +72,5 @@ module SitePrism
|
|
72
72
|
def log_level
|
73
73
|
%i[DEBUG INFO WARN ERROR FATAL UNKNOWN][logger.level]
|
74
74
|
end
|
75
|
-
|
76
|
-
# Whether you wish to use the new experimental all_there dependent gem
|
77
|
-
# This will be enforced from site_prism v4 onwards as this is where
|
78
|
-
# the development of this functionality will be focused
|
79
|
-
def use_all_there_gem=(value)
|
80
|
-
logger.debug("Setting use_all_there_gem to #{value}")
|
81
|
-
@use_all_there_gem = value
|
82
|
-
end
|
83
75
|
end
|
84
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: site_prism
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '4.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Hill
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-04-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -17,186 +17,166 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '2.
|
20
|
+
version: '2.8'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '2.
|
27
|
+
version: '2.8'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: capybara
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '3.
|
34
|
+
version: '3.27'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '3.
|
41
|
+
version: '3.27'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: site_prism-all_there
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 0.3.1
|
49
|
-
- - "<"
|
46
|
+
- - "~>"
|
50
47
|
- !ruby/object:Gem::Version
|
51
|
-
version: '
|
48
|
+
version: '2.0'
|
52
49
|
type: :runtime
|
53
50
|
prerelease: false
|
54
51
|
version_requirements: !ruby/object:Gem::Requirement
|
55
52
|
requirements:
|
56
|
-
- - "
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
version: 0.3.1
|
59
|
-
- - "<"
|
53
|
+
- - "~>"
|
60
54
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
55
|
+
version: '2.0'
|
62
56
|
- !ruby/object:Gem::Dependency
|
63
57
|
name: cucumber
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
65
59
|
requirements:
|
66
60
|
- - ">"
|
67
61
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
62
|
+
version: '6'
|
69
63
|
- - "<"
|
70
64
|
- !ruby/object:Gem::Version
|
71
|
-
version: '
|
65
|
+
version: '9'
|
72
66
|
type: :development
|
73
67
|
prerelease: false
|
74
68
|
version_requirements: !ruby/object:Gem::Requirement
|
75
69
|
requirements:
|
76
70
|
- - ">"
|
77
71
|
- !ruby/object:Gem::Version
|
78
|
-
version: '
|
72
|
+
version: '6'
|
79
73
|
- - "<"
|
80
74
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: pry-byebug
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - ">="
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0'
|
89
|
-
type: :development
|
90
|
-
prerelease: false
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - ">="
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '0'
|
75
|
+
version: '9'
|
96
76
|
- !ruby/object:Gem::Dependency
|
97
77
|
name: rspec
|
98
78
|
requirement: !ruby/object:Gem::Requirement
|
99
79
|
requirements:
|
100
80
|
- - "~>"
|
101
81
|
- !ruby/object:Gem::Version
|
102
|
-
version: '3.
|
82
|
+
version: '3.12'
|
103
83
|
type: :development
|
104
84
|
prerelease: false
|
105
85
|
version_requirements: !ruby/object:Gem::Requirement
|
106
86
|
requirements:
|
107
87
|
- - "~>"
|
108
88
|
- !ruby/object:Gem::Version
|
109
|
-
version: '3.
|
89
|
+
version: '3.12'
|
110
90
|
- !ruby/object:Gem::Dependency
|
111
91
|
name: rubocop
|
112
92
|
requirement: !ruby/object:Gem::Requirement
|
113
93
|
requirements:
|
114
94
|
- - "~>"
|
115
95
|
- !ruby/object:Gem::Version
|
116
|
-
version: 1.
|
96
|
+
version: 1.49.0
|
117
97
|
type: :development
|
118
98
|
prerelease: false
|
119
99
|
version_requirements: !ruby/object:Gem::Requirement
|
120
100
|
requirements:
|
121
101
|
- - "~>"
|
122
102
|
- !ruby/object:Gem::Version
|
123
|
-
version: 1.
|
103
|
+
version: 1.49.0
|
124
104
|
- !ruby/object:Gem::Dependency
|
125
105
|
name: rubocop-performance
|
126
106
|
requirement: !ruby/object:Gem::Requirement
|
127
107
|
requirements:
|
128
108
|
- - "~>"
|
129
109
|
- !ruby/object:Gem::Version
|
130
|
-
version: 1.
|
110
|
+
version: 1.16.0
|
131
111
|
type: :development
|
132
112
|
prerelease: false
|
133
113
|
version_requirements: !ruby/object:Gem::Requirement
|
134
114
|
requirements:
|
135
115
|
- - "~>"
|
136
116
|
- !ruby/object:Gem::Version
|
137
|
-
version: 1.
|
117
|
+
version: 1.16.0
|
138
118
|
- !ruby/object:Gem::Dependency
|
139
119
|
name: rubocop-rspec
|
140
120
|
requirement: !ruby/object:Gem::Requirement
|
141
121
|
requirements:
|
142
122
|
- - "~>"
|
143
123
|
- !ruby/object:Gem::Version
|
144
|
-
version: 2.
|
124
|
+
version: 2.19.0
|
145
125
|
type: :development
|
146
126
|
prerelease: false
|
147
127
|
version_requirements: !ruby/object:Gem::Requirement
|
148
128
|
requirements:
|
149
129
|
- - "~>"
|
150
130
|
- !ruby/object:Gem::Version
|
151
|
-
version: 2.
|
131
|
+
version: 2.19.0
|
152
132
|
- !ruby/object:Gem::Dependency
|
153
133
|
name: selenium-webdriver
|
154
134
|
requirement: !ruby/object:Gem::Requirement
|
155
135
|
requirements:
|
156
|
-
- - "
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '3.13'
|
159
|
-
- - "<"
|
136
|
+
- - "~>"
|
160
137
|
- !ruby/object:Gem::Version
|
161
|
-
version: '4.
|
138
|
+
version: '4.0'
|
162
139
|
type: :development
|
163
140
|
prerelease: false
|
164
141
|
version_requirements: !ruby/object:Gem::Requirement
|
165
142
|
requirements:
|
166
|
-
- - "
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: '3.13'
|
169
|
-
- - "<"
|
143
|
+
- - "~>"
|
170
144
|
- !ruby/object:Gem::Version
|
171
|
-
version: '4.
|
145
|
+
version: '4.0'
|
172
146
|
- !ruby/object:Gem::Dependency
|
173
147
|
name: simplecov
|
174
148
|
requirement: !ruby/object:Gem::Requirement
|
175
149
|
requirements:
|
176
150
|
- - "~>"
|
177
151
|
- !ruby/object:Gem::Version
|
178
|
-
version: '0.
|
152
|
+
version: '0.21'
|
179
153
|
type: :development
|
180
154
|
prerelease: false
|
181
155
|
version_requirements: !ruby/object:Gem::Requirement
|
182
156
|
requirements:
|
183
157
|
- - "~>"
|
184
158
|
- !ruby/object:Gem::Version
|
185
|
-
version: '0.
|
159
|
+
version: '0.21'
|
186
160
|
- !ruby/object:Gem::Dependency
|
187
161
|
name: webdrivers
|
188
162
|
requirement: !ruby/object:Gem::Requirement
|
189
163
|
requirements:
|
190
|
-
- - "
|
164
|
+
- - ">"
|
191
165
|
- !ruby/object:Gem::Version
|
192
166
|
version: '4.6'
|
167
|
+
- - "<"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '6'
|
193
170
|
type: :development
|
194
171
|
prerelease: false
|
195
172
|
version_requirements: !ruby/object:Gem::Requirement
|
196
173
|
requirements:
|
197
|
-
- - "
|
174
|
+
- - ">"
|
198
175
|
- !ruby/object:Gem::Version
|
199
176
|
version: '4.6'
|
177
|
+
- - "<"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '6'
|
200
180
|
description: SitePrism gives you a simple, clean and semantic DSL for describing your
|
201
181
|
site. SitePrism implements the Page Object Model pattern on top of Capybara.
|
202
182
|
email:
|
@@ -212,12 +192,12 @@ files:
|
|
212
192
|
- lib/site_prism/addressable_url_matcher.rb
|
213
193
|
- lib/site_prism/deprecator.rb
|
214
194
|
- lib/site_prism/dsl.rb
|
195
|
+
- lib/site_prism/dsl_validator.rb
|
215
196
|
- lib/site_prism/element_checker.rb
|
216
197
|
- lib/site_prism/error.rb
|
217
198
|
- lib/site_prism/loadable.rb
|
218
199
|
- lib/site_prism/logger.rb
|
219
200
|
- lib/site_prism/page.rb
|
220
|
-
- lib/site_prism/recursion_checker.rb
|
221
201
|
- lib/site_prism/rspec_matchers.rb
|
222
202
|
- lib/site_prism/section.rb
|
223
203
|
- lib/site_prism/timer.rb
|
@@ -238,14 +218,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
238
218
|
requirements:
|
239
219
|
- - ">="
|
240
220
|
- !ruby/object:Gem::Version
|
241
|
-
version: '2.
|
221
|
+
version: '2.6'
|
242
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
243
223
|
requirements:
|
244
224
|
- - ">="
|
245
225
|
- !ruby/object:Gem::Version
|
246
226
|
version: '0'
|
247
227
|
requirements: []
|
248
|
-
rubygems_version: 3.0.
|
228
|
+
rubygems_version: 3.0.3.1
|
249
229
|
signing_key:
|
250
230
|
specification_version: 4
|
251
231
|
summary: A Page Object Model DSL for Capybara
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module SitePrism
|
4
|
-
class RecursionChecker
|
5
|
-
attr_reader :instance
|
6
|
-
|
7
|
-
private :instance
|
8
|
-
|
9
|
-
def initialize(instance)
|
10
|
-
@instance = instance
|
11
|
-
end
|
12
|
-
|
13
|
-
def all_there?
|
14
|
-
regular_items_all_there = expected_item_map.flatten.all? { |name| there?(name) }
|
15
|
-
return false unless regular_items_all_there
|
16
|
-
|
17
|
-
section_all_there =
|
18
|
-
section_classes_to_check.all?(&:all_there?)
|
19
|
-
return false unless section_all_there
|
20
|
-
|
21
|
-
# Returning this final check here is fine, as the previous two checks must
|
22
|
-
# have returned +true+ in order to hit this part of the method-call
|
23
|
-
sections_classes_to_check.all?(&:all_there?)
|
24
|
-
end
|
25
|
-
|
26
|
-
def expected_item_map
|
27
|
-
[
|
28
|
-
expected(mapped_items, :element),
|
29
|
-
expected(mapped_items, :elements),
|
30
|
-
expected(mapped_items, :section),
|
31
|
-
expected(mapped_items, :sections),
|
32
|
-
expected(mapped_items, :iframe)
|
33
|
-
]
|
34
|
-
end
|
35
|
-
|
36
|
-
def expected(_map, type)
|
37
|
-
mapped_items[type].select { |name| elements_to_check.include?(name) }
|
38
|
-
end
|
39
|
-
|
40
|
-
def section_classes_to_check
|
41
|
-
expected_item_map[2].map { |name| instance.send(name) }
|
42
|
-
end
|
43
|
-
|
44
|
-
def sections_classes_to_check
|
45
|
-
expected_item_map[3].map { |name| instance.send(name) }.flatten
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
# If the page or section has expected_items set, return expected_items that are mapped
|
51
|
-
# otherwise just return the list of all mapped_items
|
52
|
-
def elements_to_check
|
53
|
-
if _expected_items
|
54
|
-
SitePrism.logger.debug('Expected Items has been set.')
|
55
|
-
_mapped_items.select { |name| _expected_items.include?(name) }
|
56
|
-
else
|
57
|
-
_mapped_items
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def _mapped_items
|
62
|
-
mapped_items.values.flatten.uniq
|
63
|
-
end
|
64
|
-
|
65
|
-
def _expected_items
|
66
|
-
instance.class.expected_items
|
67
|
-
end
|
68
|
-
|
69
|
-
def there?(name)
|
70
|
-
instance.send("has_#{name}?")
|
71
|
-
end
|
72
|
-
|
73
|
-
def mapped_items
|
74
|
-
@mapped_items ||= instance.class.mapped_items(legacy: false)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|