site-object 0.4.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29b5d367c47596bba00efad173e605df63f4135e
4
- data.tar.gz: 70b1d65e5519d8d0d9eda901157d462d3cb28cce
3
+ metadata.gz: 6ffad1526098cde8900f8949d589b74808119b9f
4
+ data.tar.gz: 270bc988459c67d8e2aa4b557f3ad147569f0620
5
5
  SHA512:
6
- metadata.gz: 04f664abd579838d75b3dd451899508e3493684fc4112afb3adb20ca1344a67089d12f94008daf6ce4ac075140ca8800d32e928569e21a93a9811f2b987b2d62
7
- data.tar.gz: 0ce857445dbb62b554b26909a72672e2bde06e268d24012e1b58420da06c8971efffe6814c28244fc18356e860e39672747b4440fea4bf3270496d82744245fc
6
+ metadata.gz: 7f223fe2372d5ee95767ded972117c6873efd2e3f8c74b9e153fa94d9b09bd552b72d2413297139eb467332a07f42704e66ab8d12a22e94c13687f0b481b8af6
7
+ data.tar.gz: ae1d1cae273f5c1ff2b69ab3661bde87cda118221e27995db3b27dac89fa2ed470b70e37628fff7236b7fdf3996be016e84dc17c0221749f9b0d9fe547e48c4f
@@ -1,4 +1,4 @@
1
- module SiteObjectExceptions
1
+ module SiteObject
2
2
  class BrowserLibraryNotSupportedError < RuntimeError
3
3
  end
4
4
 
@@ -81,7 +81,7 @@ module PageObject
81
81
  # If the visit method is called on the page a SiteObject::PageNavigationNotAllowedError
82
82
  # will be raised.
83
83
  def disable_automatic_navigation
84
- puts "DEPRECATED. Will be removed in a future release. Use the set_attributes method in place of this one. See documentation for more details."
84
+ puts "The disable_automatic_navigation method is deprecated and will be removed in a future release. Use the set_attributes method in place of this one in the class definition. See documentation for more details."
85
85
  @page_attributes ||= []
86
86
  @page_attributes << :navigation_disabled
87
87
  @navigation_disabled = true
@@ -264,17 +264,11 @@ module PageObject
264
264
  end
265
265
 
266
266
  def set_url_template(base_url)
267
- begin
268
- case @page_url.to_s
269
- when '' # There's no page URL so just assume the base URL
270
- @url_template = Addressable::Template.new(base_url)
271
- when /(http:\/\/|https:\/\/)/i
272
- @url_template = Addressable::Template.new(@page_url)
273
- else
274
- @url_template = Addressable::Template.new(Addressable::URI.parse("#{base_url}#{@page_url}"))
275
- end
276
- rescue Addressable::URI::InvalidURIError => e
277
- raise SiteObject::PageInitError, "Unable to initialize #{self.class} because there's no base_url defined for the site and the page object URL that was defined was a URL fragment (#{@page_url})\n\n#{caller.join("\n")}"
267
+ case @page_url
268
+ when /(http:\/\/|https:\/\/)/i
269
+ @url_template = Addressable::Template.new(@page_url)
270
+ else
271
+ @url_template = Addressable::Template.new(Addressable::URI.parse("#{base_url}#{@page_url}"))
278
272
  end
279
273
  end
280
274
 
@@ -324,7 +318,7 @@ module PageObject
324
318
  # There's no need to ever call this directly. Initializes a page object within the context of a
325
319
  # site object. Takes a site object and a hash of configuration arguments. The site object will
326
320
  # handle all of this for you.
327
- def initialize(site, args={})
321
+ def initialize(site, args=nil)
328
322
  @browser = site.browser
329
323
  @page_attributes = self.class.page_attributes
330
324
  @page_url = self.class.page_url
@@ -337,13 +331,21 @@ module PageObject
337
331
 
338
332
  # Try to expand the URL template if the URL has parameters.
339
333
  @arguments = {}.with_indifferent_access # Stores the param list that will expand the url_template after examining the arguments used to initialize the page.
340
- if @required_arguments.length > 0 && !args
341
- raise SiteObject::PageInitError, "No object was provided when attempting to initialize #{self.class.name}. This page object requires the following arguments for initialization: :#{@required_arguments.join(', :')}.\n\n#{caller.join("\n")}"
342
- elsif @required_arguments.length > 0
334
+ if @required_arguments.present? && !args
335
+ @required_arguments.each do |arg|
336
+ if @site.respond_to?(arg)
337
+ @arguments[arg]= site.send(arg)
338
+ else
339
+ raise SiteObject::PageInitError, "No arguments provided when attempting to initialize #{self.class.name}. This page object requires the following arguments for initialization: :#{@required_arguments.join(', :')}.\n\n#{caller.join("\n")}"
340
+ end
341
+ end
342
+ elsif @required_arguments.present?
343
343
  @required_arguments.each do |arg| # Try to extract each URL argument from the hash or object provided, OR from the site object.
344
- if args.is_a?(Hash) && !args.empty?
345
- if args.with_indifferent_access[arg] #The hash has the required argument.
346
- @arguments[arg]= args.with_indifferent_access[arg]
344
+ if args.is_a?(Hash) && args.present?
345
+ args = args.with_indifferent_access
346
+
347
+ if args[arg] #The hash has the required argument.
348
+ @arguments[arg]= args[arg]
347
349
  elsif @site.respond_to?(arg)
348
350
  @arguments[arg]= site.send(arg)
349
351
  else
@@ -358,16 +360,15 @@ module PageObject
358
360
  raise SiteObject::PageInitError, "#{args.class} was provided, but this object did not respond to :#{arg}, which is necessary to build an URL for the #{self.class.name} page.\n\n#{caller.join("\n")}"
359
361
  end
360
362
  else
361
- # Do nothing here.
363
+ # No need to do anything here.
362
364
  end
363
365
  end
364
- elsif @required_arguments.length == 0 && args # If there are no required arguments.
365
- unless args.is_a?(Hash) && args.empty? # Do this unless args is an empty hash.
366
- 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")}"
367
- end
366
+ elsif @required_arguments.empty? && args # If there are no required arguments then nothing should be provided.
367
+ 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")}"
368
368
  else
369
369
  # Do nothing here.
370
370
  end
371
+
371
372
  @url = @url_template.expand(@arguments).to_s
372
373
  @page_features ||= []
373
374
  @page_features.each do |arg|
@@ -388,11 +389,7 @@ module PageObject
388
389
  @site.most_recent_page = self
389
390
  unless on_page?
390
391
  if navigation_disabled?
391
- if page = @site.page
392
- raise SiteObject::PageNavigationNotAllowedError, "The #{self.class.name} page could not be accessed. Navigation is intentionally disabled for this page and the browser was displaying the #{@site.page.class.name} page when you tried to access it.\n\nPAGE URL:\n------------\n#{@site.browser.url}\n\n#{caller.join("\n")}"
393
- else
394
- raise SiteObject::PageNavigationNotAllowedError, "The #{self.class.name} page could not be accessed. Navigation is intentionally disabled for this page and the page that the browser was displaying could not be recognized.\n\nPAGE URL:\n------------\n#{@site.browser.url}\n\nPAGE TEXT:\n------------\n#{@site.browser.text}\n\n#{caller.join("\n")}"
395
- end
392
+ raise SiteObject::PageNavigationNotAllowedError, "Navigation is intentionally disabled for the #{self.class.name} page. You can only call the accessor method for this page when it's already being displayed in the browser.\n\nCurrent URL:\n------------\n#{@site.browser.url}\n\n#{caller.join("\n")}"
396
393
  end
397
394
  visit
398
395
  end
@@ -427,9 +424,21 @@ module PageObject
427
424
  # you can use the alternate method to specify how to match the page.
428
425
  def on_page?
429
426
  if @url_template.pattern =~ /#/ # It has a URL fragment. Don't mess with the browser URL.
430
- url = @browser.url
427
+ if @browser.is_a? Watir::Browser
428
+ url = @browser.url
429
+ elsif @browser.is_a? Selenium::WebDriver::Driver
430
+ url = @browser.current_url
431
+ else
432
+ raise SiteObject::BrowserLibraryNotSupportedError, "Unsupported browser library: #{@browser.class}"
433
+ end
431
434
  else # There's no fragment in the URL template, strip the fragment out of the URL so that template matching works better.
432
- url = @browser.url.split('#')[0]
435
+ if @browser.is_a? Watir::Browser
436
+ url = @browser.url.split('#')[0]
437
+ elsif @browser.is_a? Selenium::WebDriver::Driver
438
+ url = @browser.current_url.split('#')[0]
439
+ else
440
+ raise SiteObject::BrowserLibraryNotSupportedError, "Unsupported browser library: #{@browser.class}"
441
+ end
433
442
  end
434
443
 
435
444
  if @url_matcher && @url_matcher =~ url
@@ -7,8 +7,6 @@ module SiteObject
7
7
  attr_reader :base_url, :unique_methods
8
8
  attr_accessor :pages, :browser, :arguments, :most_recent_page
9
9
 
10
- include SiteObjectExceptions
11
-
12
10
  # Sets up a Page class when the SiteObject module is included in the class you're using to model
13
11
  # your site.
14
12
  def self.included(base)
@@ -91,7 +89,7 @@ module SiteObject
91
89
  end
92
90
 
93
91
  self.class.class_eval do
94
- define_method(current_page.to_s.underscore) do |args={}, block=nil|
92
+ define_method(current_page.to_s.underscore) do |args=nil, block=nil|
95
93
  current_page.new(self, args)
96
94
  end
97
95
 
@@ -164,7 +162,13 @@ module SiteObject
164
162
  # site.on_page? AccountSummaryPage
165
163
  # =>true
166
164
  def on_page?(page_arg)
167
- url = @browser.url
165
+ if @browser.is_a? Watir::Browser
166
+ url = @browser.url
167
+ elsif @browser.is_a? Selenium::WebDriver::Driver
168
+ url = @browser.current_url
169
+ else
170
+ raise SiteObject::BrowserLibraryNotSupportedError, "Unsupported browser library: #{@browser.class}"
171
+ end
168
172
 
169
173
  if page_arg.url_matcher && page_arg.url_matcher =~ url
170
174
  return true
@@ -197,13 +201,19 @@ module SiteObject
197
201
  def page
198
202
  return @most_recent_page if @most_recent_page && @most_recent_page.on_page?
199
203
 
200
- url = @browser.url
201
- found_page = nil
204
+ if @browser.is_a? Watir::Browser
205
+ url = @browser.url
206
+ elsif @browser.is_a? Selenium::WebDriver::Driver
207
+ url = @browser.current_url
208
+ else
209
+ raise SiteObject::BrowserLibraryNotSupportedError, "Unsupported browser library: #{@browser.class}"
210
+ end
202
211
 
212
+ found_page = nil
203
213
  @pages.each do |p|
204
- if p.url_template.match url
214
+ if p.url_matcher && p.url_matcher =~ url
205
215
  found_page = p
206
- elsif p.url_matcher && p.url_matcher =~ url
216
+ elsif p.url_template.match url
207
217
  found_page = p
208
218
  end
209
219
 
@@ -1,3 +1,3 @@
1
1
  module SiteObject
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
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.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Fitisoff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-26 00:00:00.000000000 Z
11
+ date: 2015-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport