site_prism 4.0 → 4.0.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/lib/site_prism/addressable_url_matcher.rb +37 -42
- data/lib/site_prism/deprecator.rb +2 -2
- data/lib/site_prism/dsl.rb +7 -5
- data/lib/site_prism/element_checker.rb +9 -3
- data/lib/site_prism/page.rb +4 -2
- data/lib/site_prism/timer.rb +4 -17
- data/lib/site_prism/version.rb +1 -1
- data/lib/site_prism.rb +15 -15
- metadata +10 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de1db2cfa8b40510768bbea0bee96e548ae949149428d669e1a038c83e2b7f8d
|
4
|
+
data.tar.gz: 3862848b777a9fbafb8c1640df914313b6deac6da942a3859ff2dfe6dbafb214
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8deff2edc00b2b4c0fab86c96e10bc184ed2afc8276b7daf9f69b97a9f7ab4b105ece138f6901456d76e57d508f546971f0262e6cec90787e64ea89bac904047
|
7
|
+
data.tar.gz: 505eb15872469490ab314497737e04eda896f14e7b98c631efae658d42eedb09d8a8aefa53fd5d845fa0a11936951aaf5cd9e6bc99563b4f454251eb212126d9
|
@@ -15,7 +15,8 @@ module SitePrism
|
|
15
15
|
@pattern = pattern
|
16
16
|
end
|
17
17
|
|
18
|
-
# @return
|
18
|
+
# @return Hash
|
19
|
+
#
|
19
20
|
# parsing the provided URL according to our pattern,
|
20
21
|
# or nil if the URL doesn't conform to the matcher template.
|
21
22
|
def mappings(url)
|
@@ -30,6 +31,8 @@ module SitePrism
|
|
30
31
|
result
|
31
32
|
end
|
32
33
|
|
34
|
+
# @return Boolean
|
35
|
+
#
|
33
36
|
# Determine whether URL matches our pattern, and
|
34
37
|
# optionally whether the extracted mappings match
|
35
38
|
# a hash of expected values. You can specify values
|
@@ -38,21 +41,24 @@ module SitePrism
|
|
38
41
|
actual_mappings = mappings(url)
|
39
42
|
return false unless actual_mappings
|
40
43
|
|
41
|
-
expected_mappings.empty? ||
|
42
|
-
all_expected_mappings_match?(expected_mappings, actual_mappings)
|
44
|
+
expected_mappings.empty? || all_expected_mappings_match?(expected_mappings, actual_mappings)
|
43
45
|
end
|
44
46
|
|
45
47
|
private
|
46
48
|
|
47
|
-
def
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
49
|
+
def component_matches(component, uri)
|
50
|
+
component_template = component_templates[component]
|
51
|
+
return {} unless component_template
|
52
|
+
|
53
|
+
component_url = uri.public_send(component).to_s
|
54
|
+
mappings = component_template.extract(component_url)
|
55
|
+
return mappings if mappings
|
56
|
+
|
57
|
+
# To support Addressable's expansion of queries - ensure it's parsing the fragment as appropriate (e.g. {?params*})
|
58
|
+
prefix = component_prefixes[component]
|
59
|
+
return nil unless prefix
|
60
|
+
|
61
|
+
component_template.extract(prefix + component_url)
|
56
62
|
end
|
57
63
|
|
58
64
|
def component_templates
|
@@ -73,27 +79,6 @@ module SitePrism
|
|
73
79
|
end
|
74
80
|
end
|
75
81
|
|
76
|
-
# Returns empty hash if the template omits the component or a set of
|
77
|
-
# substitutions if the provided URI component matches the template
|
78
|
-
# component or nil if the match fails.
|
79
|
-
def component_matches(component, uri)
|
80
|
-
component_template = component_templates[component]
|
81
|
-
return {} unless component_template
|
82
|
-
|
83
|
-
component_url = uri.public_send(component).to_s
|
84
|
-
mappings = component_template.extract(component_url)
|
85
|
-
return mappings if mappings
|
86
|
-
|
87
|
-
# to support Addressable's expansion of queries
|
88
|
-
# ensure it's parsing the fragment as appropriate (e.g. {?params*})
|
89
|
-
prefix = component_prefixes[component]
|
90
|
-
return nil unless prefix
|
91
|
-
|
92
|
-
component_template.extract(prefix + component_url)
|
93
|
-
end
|
94
|
-
|
95
|
-
# Convert the pattern into an Addressable URI by substituting
|
96
|
-
# the template slugs with nonsense strings.
|
97
82
|
def to_substituted_uri
|
98
83
|
url = pattern
|
99
84
|
substitutions.each_pair { |slug, value| url = url.sub(slug, value) }
|
@@ -105,13 +90,6 @@ module SitePrism
|
|
105
90
|
end
|
106
91
|
end
|
107
92
|
|
108
|
-
def substitutions
|
109
|
-
@substitutions ||= slugs.each_with_index.reduce({}) do |memo, slug_index|
|
110
|
-
slug, index = slug_index
|
111
|
-
memo.merge(slug => slug_prefix(slug) + substitution_value(index))
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
93
|
def reverse_substitutions
|
116
94
|
@reverse_substitutions ||=
|
117
95
|
slugs.each_with_index.reduce({}) do |memo, slug_index|
|
@@ -127,6 +105,24 @@ module SitePrism
|
|
127
105
|
pattern.scan(/{[^}]+}/)
|
128
106
|
end
|
129
107
|
|
108
|
+
def all_expected_mappings_match?(expected_mappings, actual_mappings)
|
109
|
+
expected_mappings.all? do |key, expected_value|
|
110
|
+
actual_value = actual_mappings[key.to_s]
|
111
|
+
case expected_value
|
112
|
+
when Numeric; then actual_value == expected_value.to_s
|
113
|
+
when Regexp; then actual_value.match(expected_value)
|
114
|
+
else expected_value == actual_value
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def substitutions
|
120
|
+
@substitutions ||= slugs.each_with_index.reduce({}) do |memo, slug_index|
|
121
|
+
slug, index = slug_index
|
122
|
+
memo.merge(slug => slug_prefix(slug) + substitution_value(index))
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
130
126
|
# If a slug begins with non-alpha characters, it may denote the start of
|
131
127
|
# a new component (e.g. query or fragment). We emit this prefix as part of
|
132
128
|
# the substituted slug so that Addressable's URI parser can see it as such.
|
@@ -135,8 +131,7 @@ module SitePrism
|
|
135
131
|
(prefix && prefix[1]) || ''
|
136
132
|
end
|
137
133
|
|
138
|
-
# Generate a repeatable 5 character uniform alphabetical nonsense string
|
139
|
-
# to allow parsing as a URI
|
134
|
+
# Generate a repeatable 5 character uniform alphabetical nonsense string to allow parsing as a URI
|
140
135
|
def substitution_value(index)
|
141
136
|
sha = Digest::SHA1.digest(index.to_s)
|
142
137
|
Base64.urlsafe_encode64(sha).gsub(/[^A-Za-z]/, '')[0..5]
|
@@ -27,9 +27,9 @@ module SitePrism
|
|
27
27
|
# NB: As this is bubbled up at debug level, often users will not see this. So it will
|
28
28
|
# never be a candidate for removal directly
|
29
29
|
def soft_deprecate(old, reason, new = nil)
|
30
|
-
debug("The #{old} method is changing, as is SitePrism, and is now
|
30
|
+
debug("The #{old} method is changing, as is SitePrism, and is now advised to be changed.")
|
31
31
|
debug("REASON: #{reason}.")
|
32
|
-
debug('Moving forwards into SitePrism
|
32
|
+
debug('Moving forwards into SitePrism v5, the default behaviour will change.')
|
33
33
|
debug("We advise you change to using #{new}") if new
|
34
34
|
end
|
35
35
|
|
data/lib/site_prism/dsl.rb
CHANGED
@@ -267,11 +267,13 @@ module SitePrism
|
|
267
267
|
end
|
268
268
|
|
269
269
|
def legacy_mapped_items
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
270
|
+
@legacy_mapped_items ||= begin
|
271
|
+
SitePrism::Deprecator.deprecate(
|
272
|
+
'.mapped_items structure (internally), on a class',
|
273
|
+
'the new .mapped_items structure'
|
274
|
+
)
|
275
|
+
[]
|
276
|
+
end
|
275
277
|
end
|
276
278
|
|
277
279
|
def map_item(type, name)
|
@@ -13,10 +13,16 @@ module SitePrism
|
|
13
13
|
# for how the definition of "every item" is derived.
|
14
14
|
#
|
15
15
|
# Example
|
16
|
-
# @my_page.mapped_items
|
17
|
-
#
|
16
|
+
# @my_page.class.mapped_items
|
17
|
+
# {
|
18
|
+
# element => [:button_one, :button_two],
|
19
|
+
# elements => [:button_collection_one, :button_collection_two],
|
20
|
+
# section => [:filters],
|
21
|
+
# sections => [:search_result],
|
22
|
+
# iframe => []
|
23
|
+
# }
|
18
24
|
# @my_page.all_there?
|
19
|
-
# => true - If the
|
25
|
+
# => true - If the items above are all present
|
20
26
|
#
|
21
27
|
# Note that #elements_to_check will check the hash of mapped_items
|
22
28
|
#
|
data/lib/site_prism/page.rb
CHANGED
@@ -48,8 +48,10 @@ module SitePrism
|
|
48
48
|
#
|
49
49
|
# @return [Capybara::Node::Simple || Capybara::Session]
|
50
50
|
def page
|
51
|
-
|
52
|
-
|
51
|
+
@_page ||= begin
|
52
|
+
SitePrism::Deprecator.deprecate('Calling #page on a SitePrism::Page instance')
|
53
|
+
to_capybara_node
|
54
|
+
end
|
53
55
|
end
|
54
56
|
|
55
57
|
# This scopes our calls inside Page correctly to the `Capybara::Session`
|
data/lib/site_prism/timer.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module SitePrism
|
4
|
-
# [SitePrism::Timer]
|
5
4
|
#
|
6
|
-
#
|
5
|
+
# @api private
|
6
|
+
#
|
7
7
|
class Timer
|
8
8
|
attr_reader :wait_time
|
9
9
|
|
10
|
-
# Count towards a specified time (Supplied)
|
11
|
-
#
|
12
|
-
# @return [Proc]
|
13
10
|
def self.run(wait_time, &block)
|
14
11
|
new(wait_time).run(&block)
|
15
12
|
end
|
@@ -19,16 +16,10 @@ module SitePrism
|
|
19
16
|
@done = false
|
20
17
|
end
|
21
18
|
|
22
|
-
# Whether the timer has completed
|
23
|
-
#
|
24
|
-
# @return [Boolean]
|
25
19
|
def done?
|
26
20
|
@done == true
|
27
21
|
end
|
28
22
|
|
29
|
-
# Start the Timer and re-evaluate the block repeatedly
|
30
|
-
#
|
31
|
-
# @return [Proc]
|
32
23
|
def run
|
33
24
|
start
|
34
25
|
yield self
|
@@ -36,9 +27,8 @@ module SitePrism
|
|
36
27
|
stop
|
37
28
|
end
|
38
29
|
|
39
|
-
|
40
|
-
|
41
|
-
# Return [True]
|
30
|
+
private
|
31
|
+
|
42
32
|
def start
|
43
33
|
stop
|
44
34
|
return if wait_time.zero?
|
@@ -50,9 +40,6 @@ module SitePrism
|
|
50
40
|
end
|
51
41
|
end
|
52
42
|
|
53
|
-
# Forcibly stop the timer, and kill any threads created by it
|
54
|
-
#
|
55
|
-
# Return [True]
|
56
43
|
def stop
|
57
44
|
if @thread
|
58
45
|
@thread.kill
|
data/lib/site_prism/version.rb
CHANGED
data/lib/site_prism.rb
CHANGED
@@ -2,25 +2,25 @@
|
|
2
2
|
|
3
3
|
require 'site_prism/error'
|
4
4
|
require 'site_prism/all_there'
|
5
|
+
|
5
6
|
require 'addressable/template'
|
6
7
|
require 'forwardable'
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
autoload :Section, 'site_prism/section'
|
21
|
-
autoload :Timer, 'site_prism/timer'
|
22
|
-
autoload :Waiter, 'site_prism/waiter'
|
9
|
+
require 'site_prism/addressable_url_matcher'
|
10
|
+
require 'site_prism/dsl'
|
11
|
+
require 'site_prism/dsl_validator'
|
12
|
+
require 'site_prism/deprecator'
|
13
|
+
require 'site_prism/element_checker'
|
14
|
+
require 'site_prism/loadable'
|
15
|
+
require 'site_prism/logger'
|
16
|
+
require 'site_prism/page'
|
17
|
+
require 'site_prism/rspec_matchers'
|
18
|
+
require 'site_prism/section'
|
19
|
+
require 'site_prism/timer'
|
20
|
+
require 'site_prism/waiter'
|
23
21
|
|
22
|
+
# [SitePrism]
|
23
|
+
module SitePrism
|
24
24
|
class << self
|
25
25
|
def configure
|
26
26
|
yield self
|
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.1
|
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: 2023-
|
12
|
+
date: 2023-05-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -107,28 +107,28 @@ dependencies:
|
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 1.
|
110
|
+
version: 1.17.1
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.
|
117
|
+
version: 1.17.1
|
118
118
|
- !ruby/object:Gem::Dependency
|
119
119
|
name: rubocop-rspec
|
120
120
|
requirement: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 2.
|
124
|
+
version: 2.20.0
|
125
125
|
type: :development
|
126
126
|
prerelease: false
|
127
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 2.
|
131
|
+
version: 2.20.0
|
132
132
|
- !ruby/object:Gem::Dependency
|
133
133
|
name: selenium-webdriver
|
134
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -161,22 +161,16 @@ dependencies:
|
|
161
161
|
name: webdrivers
|
162
162
|
requirement: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- - "
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '4.6'
|
167
|
-
- - "<"
|
164
|
+
- - "~>"
|
168
165
|
- !ruby/object:Gem::Version
|
169
|
-
version: '
|
166
|
+
version: '5.0'
|
170
167
|
type: :development
|
171
168
|
prerelease: false
|
172
169
|
version_requirements: !ruby/object:Gem::Requirement
|
173
170
|
requirements:
|
174
|
-
- - "
|
175
|
-
- !ruby/object:Gem::Version
|
176
|
-
version: '4.6'
|
177
|
-
- - "<"
|
171
|
+
- - "~>"
|
178
172
|
- !ruby/object:Gem::Version
|
179
|
-
version: '
|
173
|
+
version: '5.0'
|
180
174
|
description: SitePrism gives you a simple, clean and semantic DSL for describing your
|
181
175
|
site. SitePrism implements the Page Object Model pattern on top of Capybara.
|
182
176
|
email:
|