site_prism 3.2 → 3.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 +2 -3
- data/lib/site_prism.rb +2 -0
- data/lib/site_prism/deprecator.rb +34 -0
- data/lib/site_prism/dsl.rb +26 -3
- data/lib/site_prism/element_checker.rb +18 -21
- data/lib/site_prism/recursion_checker.rb +76 -0
- data/lib/site_prism/version.rb +1 -1
- metadata +17 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21261a1fb826c5500f7bc30e44729cb733b2f75b1ea7d3d5243400d9d29e8b2c
|
4
|
+
data.tar.gz: e50ab9e1b7d6c0e651d15aa6888828b789f38b7aed80511caa96d50dc767dcda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 423f9ffb5d2b26f9619f81414074ab1006b72d7ac8516a355f6d4ffc3959aadb56bacda3a25f06c4bff8e4898609d6c5540e9e9856b3f53d613c5ec9e819125e
|
7
|
+
data.tar.gz: 1541d15de381f59d4b75c46ae322e26e3e89ccc80549f7b11d55fa05cd32ccd314ca41f67724d310d56ce48d87c6aec3cfe4a1275a1295279ec6de6ef1cb48b2
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Make sure to add your project/company to https://github.com/natritmeyer/site_pri
|
|
15
15
|
|
16
16
|
We love it when people want to get involved with our Open Source Project.
|
17
17
|
|
18
|
-
We have a brief set of setup docs [HERE](https://github.com/
|
18
|
+
We have a brief set of setup docs [HERE](https://github.com/site-prism/site_prism/blob/master/development_setup.md)
|
19
19
|
|
20
20
|
## Supported Rubies / Browsers
|
21
21
|
|
@@ -26,7 +26,7 @@ such as 2.5 or 2.6, if for any other reason, to get a noticeable speed boost!
|
|
26
26
|
SitePrism should run on all major browsers. The gem's integration tests are ran on Chrome and Firefox.
|
27
27
|
|
28
28
|
If you find you cannot integrate nicely with SitePrism, please open an
|
29
|
-
[issue request](https://github.com/
|
29
|
+
[issue request](https://github.com/site-prism/site_prism/issues/new)
|
30
30
|
|
31
31
|
## Synopsis
|
32
32
|
|
@@ -594,7 +594,6 @@ Or even run some tests ...
|
|
594
594
|
```ruby
|
595
595
|
expect(@friends_page.names.map { |name| name.text }).to eq(['Alice', 'Bob', 'Fred'])
|
596
596
|
expect(@friends_page.names.size).to eq(3)
|
597
|
-
expect(@friends_page).to have(3).names
|
598
597
|
```
|
599
598
|
|
600
599
|
#### Testing for the existence of the element collection
|
data/lib/site_prism.rb
CHANGED
@@ -5,8 +5,10 @@ require 'addressable/template'
|
|
5
5
|
|
6
6
|
module SitePrism
|
7
7
|
autoload :AddressableUrlMatcher, 'site_prism/addressable_url_matcher'
|
8
|
+
autoload :Deprecator, 'site_prism/deprecator'
|
8
9
|
autoload :DSL, 'site_prism/dsl'
|
9
10
|
autoload :ElementChecker, 'site_prism/element_checker'
|
11
|
+
autoload :RecursionChecker, 'site_prism/recursion_checker'
|
10
12
|
autoload :Logger, 'site_prism/logger'
|
11
13
|
autoload :Page, 'site_prism/page'
|
12
14
|
autoload :Section, 'site_prism/section'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SitePrism
|
4
|
+
class Deprecator
|
5
|
+
class << self
|
6
|
+
def deprecate(old, new = nil)
|
7
|
+
if new
|
8
|
+
warn("#{old} is being deprecated and should no longer be used. Use #{new} instead.")
|
9
|
+
else
|
10
|
+
warn("#{old} is being deprecated and should no longer be used.")
|
11
|
+
end
|
12
|
+
|
13
|
+
warn("#{old} will be removed in SitePrism v4. You have been warned!")
|
14
|
+
end
|
15
|
+
|
16
|
+
def soft_deprecate(old, reason, new = nil)
|
17
|
+
debug("The #{old} method is changing, as is SitePrism, and is now configurable.")
|
18
|
+
debug("REASON: #{reason}.")
|
19
|
+
debug('Moving forwards into SitePrism v4, the default behaviour will change.')
|
20
|
+
debug("We advise you change to using #{new}") if new
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def warn(msg)
|
26
|
+
SitePrism.logger.warn(msg)
|
27
|
+
end
|
28
|
+
|
29
|
+
def debug(msg)
|
30
|
+
SitePrism.logger.debug(msg)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/site_prism/dsl.rb
CHANGED
@@ -131,12 +131,34 @@ module SitePrism
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
def mapped_items
|
135
|
-
|
134
|
+
def mapped_items(legacy: true)
|
135
|
+
if legacy
|
136
|
+
old_mapped_items
|
137
|
+
else
|
138
|
+
new_mapped_items
|
139
|
+
end
|
136
140
|
end
|
137
141
|
|
138
142
|
private
|
139
143
|
|
144
|
+
def old_mapped_items
|
145
|
+
SitePrism.logger.debug("Calling .mapped_items on a class is changing!
|
146
|
+
The structure will soon be changing format. This will allow #all_there? to
|
147
|
+
recurse through section / sections going forwards. The old format will remain
|
148
|
+
until a v5 has been released (And will be deprecated in v4 of site_prism")
|
149
|
+
@old_mapped_items ||= []
|
150
|
+
end
|
151
|
+
|
152
|
+
def new_mapped_items
|
153
|
+
@new_mapped_items ||= {
|
154
|
+
element: [],
|
155
|
+
elements: [],
|
156
|
+
section: [],
|
157
|
+
sections: [],
|
158
|
+
iframe: [],
|
159
|
+
}
|
160
|
+
end
|
161
|
+
|
140
162
|
def build(type, name, *find_args)
|
141
163
|
if find_args.empty?
|
142
164
|
create_error_method(name)
|
@@ -148,7 +170,8 @@ module SitePrism
|
|
148
170
|
end
|
149
171
|
|
150
172
|
def map_item(type, name)
|
151
|
-
|
173
|
+
old_mapped_items << { type => name }
|
174
|
+
new_mapped_items[type] << name.to_sym
|
152
175
|
end
|
153
176
|
|
154
177
|
def add_helper_methods(name, *find_args)
|
@@ -13,54 +13,51 @@ module SitePrism
|
|
13
13
|
# @my_page.all_there?
|
14
14
|
# => true - If the three items above are all present
|
15
15
|
#
|
16
|
-
# Note that #elements_to_check will
|
16
|
+
# Note that #elements_to_check will check the hash of mapped_items
|
17
17
|
#
|
18
|
-
# When using the recursion parameter, one of
|
18
|
+
# When using the recursion parameter, one of two values is valid.
|
19
19
|
#
|
20
20
|
# Default: 'none' => Perform no recursion when calling #all_there?
|
21
|
-
# Override: 'one' => Perform one recursive dive into all section
|
22
|
-
# items and call #all_there? on those items too.
|
23
|
-
def all_there?(recursion:
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
# Override: 'one' => Perform one recursive dive into all section/sections
|
22
|
+
# items and call #all_there? on all of those items too.
|
23
|
+
def all_there?(recursion: :none)
|
24
|
+
if recursion == :none
|
25
|
+
elements_to_check.all? { |name| there?(name) }
|
26
|
+
elsif recursion == :one
|
27
|
+
RecursionChecker.new(self).all_there?
|
28
28
|
else
|
29
|
-
SitePrism.logger.
|
29
|
+
SitePrism.logger.debug("Input value '#{recursion}'. Valid values are :none or :one.")
|
30
|
+
SitePrism.logger.error('Invalid recursion setting, Will not run #all_there?.')
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
33
34
|
def elements_present
|
34
|
-
_mapped_items.select { |
|
35
|
+
_mapped_items.select { |name| there?(name) }
|
35
36
|
end
|
36
37
|
|
37
38
|
private
|
38
39
|
|
39
|
-
# If the page or section has expected_items set, return expected_items
|
40
|
-
#
|
40
|
+
# If the page or section has expected_items set, return expected_items that are mapped
|
41
|
+
# otherwise just return the list of all mapped_items
|
41
42
|
def elements_to_check
|
42
43
|
if _expected_items
|
43
44
|
SitePrism.logger.debug('Expected Items has been set.')
|
44
|
-
_mapped_items.select { |
|
45
|
+
_mapped_items.select { |name| _expected_items.include?(name) }
|
45
46
|
else
|
46
47
|
_mapped_items
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
50
51
|
def _mapped_items
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
def mapped_items_list
|
55
|
-
self.class.mapped_items.uniq
|
52
|
+
self.class.mapped_items(legacy: false).values.flatten.uniq
|
56
53
|
end
|
57
54
|
|
58
55
|
def _expected_items
|
59
56
|
self.class.expected_items
|
60
57
|
end
|
61
58
|
|
62
|
-
def there?(
|
63
|
-
send("has_#{
|
59
|
+
def there?(name)
|
60
|
+
send("has_#{name}?")
|
64
61
|
end
|
65
62
|
end
|
66
63
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SitePrism
|
4
|
+
class RecursionChecker
|
5
|
+
attr_reader :instance
|
6
|
+
private :instance
|
7
|
+
|
8
|
+
def initialize(instance)
|
9
|
+
@instance = instance
|
10
|
+
end
|
11
|
+
|
12
|
+
def all_there?
|
13
|
+
regular_items_all_there = expected_item_map.flatten.all? { |name| there?(name) }
|
14
|
+
return false unless regular_items_all_there
|
15
|
+
|
16
|
+
section_all_there =
|
17
|
+
section_classes_to_check.all?(&:all_there?)
|
18
|
+
return false unless section_all_there
|
19
|
+
|
20
|
+
# Returning this final check here is fine, as the previous two checks must
|
21
|
+
# have returned +true+ in order to hit this part of the method-call
|
22
|
+
sections_classes_to_check.all?(&:all_there?)
|
23
|
+
end
|
24
|
+
|
25
|
+
def expected_item_map
|
26
|
+
[
|
27
|
+
expected(mapped_items, :element),
|
28
|
+
expected(mapped_items, :elements),
|
29
|
+
expected(mapped_items, :section),
|
30
|
+
expected(mapped_items, :sections),
|
31
|
+
expected(mapped_items, :iframe),
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
def expected(_map, type)
|
36
|
+
mapped_items[type].select { |name| elements_to_check.include?(name) }
|
37
|
+
end
|
38
|
+
|
39
|
+
def section_classes_to_check
|
40
|
+
expected_item_map[2].map { |name| instance.send(name) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def sections_classes_to_check
|
44
|
+
expected_item_map[3].map { |name| instance.send(name) }.flatten
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# If the page or section has expected_items set, return expected_items that are mapped
|
50
|
+
# otherwise just return the list of all mapped_items
|
51
|
+
def elements_to_check
|
52
|
+
if _expected_items
|
53
|
+
SitePrism.logger.debug('Expected Items has been set.')
|
54
|
+
_mapped_items.select { |name| _expected_items.include?(name) }
|
55
|
+
else
|
56
|
+
_mapped_items
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def _mapped_items
|
61
|
+
mapped_items.values.flatten.uniq
|
62
|
+
end
|
63
|
+
|
64
|
+
def _expected_items
|
65
|
+
instance.class.expected_items
|
66
|
+
end
|
67
|
+
|
68
|
+
def there?(name)
|
69
|
+
instance.send("has_#{name}?")
|
70
|
+
end
|
71
|
+
|
72
|
+
def mapped_items
|
73
|
+
@mapped_items ||= instance.class.mapped_items(legacy: false)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/site_prism/version.rb
CHANGED
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: '3.
|
4
|
+
version: '3.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nat Ritmeyer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-07-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -31,42 +31,42 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '3.
|
34
|
+
version: '3.3'
|
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.3'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: site_prism-all_there
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
49
|
-
type: :
|
48
|
+
version: 0.1.0
|
49
|
+
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 0.1.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: cucumber
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '3.1'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '3.1'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,12 +180,14 @@ files:
|
|
180
180
|
- README.md
|
181
181
|
- lib/site_prism.rb
|
182
182
|
- lib/site_prism/addressable_url_matcher.rb
|
183
|
+
- lib/site_prism/deprecator.rb
|
183
184
|
- lib/site_prism/dsl.rb
|
184
185
|
- lib/site_prism/element_checker.rb
|
185
186
|
- lib/site_prism/error.rb
|
186
187
|
- lib/site_prism/loadable.rb
|
187
188
|
- lib/site_prism/logger.rb
|
188
189
|
- lib/site_prism/page.rb
|
190
|
+
- lib/site_prism/recursion_checker.rb
|
189
191
|
- lib/site_prism/section.rb
|
190
192
|
- lib/site_prism/version.rb
|
191
193
|
- lib/site_prism/waiter.rb
|
@@ -196,7 +198,10 @@ metadata:
|
|
196
198
|
bug_tracker_uri: https://github.com/natritmeyer/site_prism/issues
|
197
199
|
changelog_uri: https://github.com/natritmeyer/site_prism/blob/master/CHANGELOG.md
|
198
200
|
source_code_uri: https://github.com/natritmeyer/site_prism
|
199
|
-
post_install_message:
|
201
|
+
post_install_message: |-
|
202
|
+
site_prism has now moved to a new organisation to facilitate better
|
203
|
+
management of the codebase. The new organisation link is available at www.github.com/site-prism
|
204
|
+
and will house the site_prism gem plus new associated co-dependent gems.
|
200
205
|
rdoc_options: []
|
201
206
|
require_paths:
|
202
207
|
- lib
|