site-object 0.4.8 → 0.4.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/site-object/page.rb +63 -18
- data/lib/site-object/version.rb +1 -1
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a4df6ed4be703a9c8cd7412e4aaced525646eaf
|
4
|
+
data.tar.gz: 3bc242ec4569efa77de95d11a2fe5487898932a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fc776cefa54ab25f230f57937d2b3f7c5f947d8b8d73df846176541d8780e8190dbad35cec9dad298ff080ae6a4d502a9809ad011de7b864bec0858c84914f7
|
7
|
+
data.tar.gz: fcac3de77151044e37b6b79fd72488140d97ebe1fa78bc91fc26ff88534a55d5cf7c73737ec364d7f81cbbb7447e94fce3d44874b48e29e9a6a75eb4ccfdd67c
|
data/lib/site-object/page.rb
CHANGED
@@ -74,7 +74,7 @@ module PageObject
|
|
74
74
|
Module.cattr_accessor :page_features
|
75
75
|
end
|
76
76
|
|
77
|
-
attr_reader
|
77
|
+
attr_reader :page_attributes, :page_elements, :page_url, :url_template, :url_matcher, :has_fragment, :template_arguments, :required_arguments, :query_arguments
|
78
78
|
|
79
79
|
# DEPRECATED. Use the set_attributes method instead.
|
80
80
|
# This method can be used to disable page navigation when defining a page class (it sets an
|
@@ -175,14 +175,27 @@ module PageObject
|
|
175
175
|
@page_attributes.include? :page_template
|
176
176
|
end
|
177
177
|
|
178
|
+
# def template_arguments
|
179
|
+
# all = @url_template.keys.map { |k| k.to_sym }
|
180
|
+
# optional = all.find_all { |x| @url_template.pattern =~ /(\?#{x}|\/#{x})/ }
|
181
|
+
# required = all - optional
|
182
|
+
# query = all.find_all { |x| @url_template.pattern =~ /\?#{x}/ }
|
183
|
+
# @template_arguments = {
|
184
|
+
# all: all,
|
185
|
+
# optional: optional,
|
186
|
+
# required: required,
|
187
|
+
# query: query
|
188
|
+
# }
|
189
|
+
# end
|
190
|
+
|
178
191
|
# Returns an array of symbols representing the required arguments for the page's page URL.
|
179
|
-
def required_arguments
|
180
|
-
@arguments ||= @url_template.keys.map { |k| k.to_sym }
|
181
|
-
end
|
192
|
+
# def required_arguments
|
193
|
+
# @arguments ||= @url_template.keys.map { |k| k.to_sym }
|
194
|
+
# end
|
182
195
|
|
183
|
-
def query_arguments
|
184
|
-
required_arguments.
|
185
|
-
end
|
196
|
+
# def query_arguments
|
197
|
+
# required_arguments.find_all { |x| @url_template.pattern =~ /\?.*#{x}=*/ }
|
198
|
+
# end
|
186
199
|
|
187
200
|
# Used to define the full or relative URL to the page. Typically, you will *almost* *always* want to use
|
188
201
|
# this method when defining a page object (but see notes below.) The URL can be defined in a number
|
@@ -285,7 +298,20 @@ module PageObject
|
|
285
298
|
else
|
286
299
|
@url_template = Addressable::Template.new(Addressable::URI.parse("#{base_url}#{@page_url}"))
|
287
300
|
end
|
288
|
-
|
301
|
+
|
302
|
+
all = @url_template.keys.map { |k| k.to_sym }
|
303
|
+
optional = all.find_all { |x| @url_template.pattern =~ /(\?#{x}|\/#{x})/ }
|
304
|
+
required = all - optional
|
305
|
+
query = all.find_all { |x| @url_template.pattern =~ /\?#{x}/ }
|
306
|
+
@template_arguments = {
|
307
|
+
all: all,
|
308
|
+
optional: optional,
|
309
|
+
required: required,
|
310
|
+
query: query
|
311
|
+
}
|
312
|
+
@required_arguments = @template_arguments[:required]
|
313
|
+
@query_arguments = @template_arguments[:query]
|
314
|
+
@has_fragment = @url_template.pattern =~ /#/
|
289
315
|
end
|
290
316
|
|
291
317
|
# Optional. Allows you to specify a fallback mechanism for checking to see if the correct page is
|
@@ -340,7 +366,8 @@ module PageObject
|
|
340
366
|
@page_url = self.class.page_url
|
341
367
|
@page_elements = self.class.page_elements
|
342
368
|
@page_features = self.class.page_features
|
343
|
-
@
|
369
|
+
@template_arguments = self.class.template_arguments
|
370
|
+
@required_arguments = @template_arguments[:required]
|
344
371
|
@site = site
|
345
372
|
@url_matcher = self.class.url_matcher
|
346
373
|
@url_template = self.class.url_template
|
@@ -382,12 +409,36 @@ module PageObject
|
|
382
409
|
# Do nothing here yet.
|
383
410
|
end
|
384
411
|
end
|
385
|
-
elsif @
|
412
|
+
elsif @template_arguments[:all].empty? && args # If there are no required/optional arguments then nothing should be provided.
|
386
413
|
raise SiteObject::PageInitError, "#{args.class} was provided as a #{self.class.name} initialization argument, but the page URL doesn't require any arguments.\n\n#{caller.join("\n")}"
|
387
414
|
else
|
388
415
|
# Do nothing here yet.
|
389
416
|
end
|
390
417
|
|
418
|
+
if @template_arguments[:optional].present? && args
|
419
|
+
@template_arguments[:optional].each do |arg|
|
420
|
+
if args.is_a?(Hash) && args.present?
|
421
|
+
args = args.with_indifferent_access
|
422
|
+
|
423
|
+
if args[arg] #The hash has the required argument.
|
424
|
+
@arguments[arg]= args[arg]
|
425
|
+
elsif @site.respond_to?(arg)
|
426
|
+
@arguments[arg]= site.send(arg)
|
427
|
+
else
|
428
|
+
# Do nothing.
|
429
|
+
end
|
430
|
+
elsif args # Some non-hash object was provided.
|
431
|
+
if args.respond_to?(arg) #The hash has the required argument.
|
432
|
+
@arguments[arg]= args.send(arg)
|
433
|
+
elsif @site.respond_to?(arg)
|
434
|
+
@arguments[arg]= site.send(arg)
|
435
|
+
else
|
436
|
+
# Do nothing.
|
437
|
+
end
|
438
|
+
end
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
391
442
|
@url = @url_template.expand(@arguments).to_s
|
392
443
|
@page_features ||= []
|
393
444
|
@page_features.each do |arg|
|
@@ -428,17 +479,11 @@ module PageObject
|
|
428
479
|
raise SiteObject::BrowserLibraryNotSupportedError, "Unsupported browser library: #{@browser.class}"
|
429
480
|
end
|
430
481
|
|
431
|
-
if query_arguments
|
432
|
-
if @has_fragment
|
433
|
-
url = url.split(/#/)[0]
|
434
|
-
end
|
435
|
-
else
|
436
|
-
url = url.split(/\?/)[0]
|
437
|
-
end
|
438
|
-
|
439
482
|
if @url_matcher
|
440
483
|
if @url_matcher =~ url
|
441
484
|
return true
|
485
|
+
elsif @url_matcher =~ url.split(/(#|\?)/)[0]
|
486
|
+
return true
|
442
487
|
else
|
443
488
|
return false
|
444
489
|
end
|
data/lib/site-object/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: site-object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Fitisoff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -81,4 +81,3 @@ summary: Wraps page objects up into a site object, which provides some introspec
|
|
81
81
|
and navigation capabilities that page objects don't provide. Works with Watir and
|
82
82
|
Selenium.
|
83
83
|
test_files: []
|
84
|
-
has_rdoc:
|