insite 0.2.0 → 0.2.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/insite/page/defined_page.rb +38 -39
- data/lib/insite/page/undefined_page.rb +1 -1
- data/lib/insite/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5149a50ee698c0eeec91cb7127d89a2eb175f09d50967bc40fefa78137cee823
|
4
|
+
data.tar.gz: 4644600b968f6f8846a1a3f5c1e9fc02c89afd7d88c81f9e0f45bd873e5d7858
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a40f146bd90b92f28939eb81917d33fb7d61ec82a3f943a5c2012a4aba12eb4bc273f0305435a68d3759ce87a5a5cba721a2d5b024a991f8f3ede5e23540988a
|
7
|
+
data.tar.gz: 269097cb25d93d68a441510daf7642660577aab7f63571ee8b1055af4922c4607ffd3c32e7724b84b12fa9ed70994552fceaf19bf1ec47fe101f75af1fa4e819
|
@@ -1,8 +1,9 @@
|
|
1
1
|
# TODO: Title matcher?
|
2
2
|
# TODO: Add page query methods.
|
3
|
+
require 'pry'
|
3
4
|
module Insite
|
4
5
|
class DefinedPage
|
5
|
-
attr_reader :arguments, :browser, :has_fragment, :page_attributes, :page_elements, :page_features, :page_url, :
|
6
|
+
attr_reader :arguments, :browser, :has_fragment, :page_attributes, :page_elements, :page_features, :page_url, :required_arguments, :site, :url_template, :url_matcher, :component_elements
|
6
7
|
|
7
8
|
include Insite::CommonMethods
|
8
9
|
extend Insite::ComponentMethods
|
@@ -12,7 +13,7 @@ module Insite
|
|
12
13
|
alias_method :update_page, :update_object
|
13
14
|
|
14
15
|
class << self
|
15
|
-
attr_reader :has_fragment, :page_attributes, :page_elements, :page_features, :page_url, :url_matcher, :url_hash, :url_template
|
16
|
+
attr_reader :arguments, :has_fragment, :page_attributes, :page_elements, :page_features, :page_url, :required_arguments, :url_matcher, :url_hash, :url_template
|
16
17
|
attr_accessor :component_elements
|
17
18
|
|
18
19
|
# Allows you to set special page attributes that affect page behavior. The two page
|
@@ -68,15 +69,6 @@ module Insite
|
|
68
69
|
@page_attributes.include? :page_template
|
69
70
|
end
|
70
71
|
|
71
|
-
# Returns an array of symbols representing the required arguments for the page's page URL.
|
72
|
-
def required_arguments
|
73
|
-
@arguments ||= @url_template.keys.map { |k| k.to_sym }
|
74
|
-
end
|
75
|
-
|
76
|
-
def query_arguments
|
77
|
-
required_arguments.find { |x| @url_template.pattern =~ /\?.*#{x}=*/ }
|
78
|
-
end
|
79
|
-
|
80
72
|
# Used to define the full or relative URL to the page. Typically, you will *almost* *always* want to use
|
81
73
|
# this method when defining a page object (but see notes below.) The URL can be defined in a number
|
82
74
|
# of different ways. Here are some examples using Google News:
|
@@ -190,6 +182,13 @@ module Insite
|
|
190
182
|
end
|
191
183
|
|
192
184
|
@has_fragment = @url_template.pattern =~ /#/
|
185
|
+
|
186
|
+
@arguments ||= @url_template.keys.map(&:to_sym)
|
187
|
+
|
188
|
+
@required_arguments ||= @url_template.pattern
|
189
|
+
.scan(/\{(#{self.arguments.join('|')})/)
|
190
|
+
.flatten
|
191
|
+
.map(&:to_sym)
|
193
192
|
end
|
194
193
|
|
195
194
|
# Optional. Allows you to specify a fallback mechanism for checking to see if the correct page is
|
@@ -251,10 +250,10 @@ module Insite
|
|
251
250
|
@page_elements = self.class.page_elements
|
252
251
|
# TODO: Clean this up
|
253
252
|
@page_features = self.class.instance_variable_get(:@page_features)
|
253
|
+
@all_arguments = self.class.arguments
|
254
254
|
@required_arguments = self.class.required_arguments
|
255
255
|
@url_matcher = self.class.url_matcher
|
256
256
|
@url_template = self.class.url_template
|
257
|
-
@query_arguments = self.class.query_arguments
|
258
257
|
@has_fragment = self.class.has_fragment
|
259
258
|
|
260
259
|
# Try to expand the URL template if the URL has parameters. Stores the
|
@@ -266,7 +265,7 @@ module Insite
|
|
266
265
|
match = @url_template.match(@browser.url)
|
267
266
|
|
268
267
|
# Raise if args are provided and the page doesn't take any args.
|
269
|
-
if (@
|
268
|
+
if (@all_arguments - [:scheme]).empty? && args
|
270
269
|
raise(
|
271
270
|
Insite::Errors::PageInitError,
|
272
271
|
"#{args.class} was provided as a #{self.class.name} initialization argument, " \
|
@@ -274,28 +273,30 @@ module Insite
|
|
274
273
|
)
|
275
274
|
end
|
276
275
|
|
277
|
-
if @
|
278
|
-
@
|
276
|
+
if @all_arguments.present? && !args
|
277
|
+
@all_arguments.each do |arg|
|
279
278
|
if match && match.keys.include?(arg.to_s)
|
280
279
|
@arguments[arg] = match[arg.to_s]
|
281
280
|
elsif @site.arguments[arg]
|
282
281
|
@arguments[arg] = @site.arguments[arg]
|
283
282
|
elsif @site.respond_to?(arg) && @site.public_send(arg)
|
284
283
|
@arguments[arg] = @site.public_send(arg)
|
284
|
+
elsif !@required_arguments.include?(arg)
|
285
|
+
@arguments[arg] = nil
|
285
286
|
else
|
286
287
|
raise(
|
287
288
|
Insite::Errors::PageInitError,
|
288
|
-
"
|
289
|
-
"
|
290
|
-
"
|
289
|
+
"An error occurred when attempting to build a URL for the #{self.class} page.\n" \
|
290
|
+
"URL template:\t#{@url_template.pattern}\n" \
|
291
|
+
"URL arguments:\t#{@arguments}\n" \
|
292
|
+
"Required args:\t#{@required_arguments.join(', :')}.\n" \
|
293
|
+
"Generated URL:\t#{@url_template.expand(@arguments)}\n"
|
291
294
|
)
|
292
295
|
end
|
293
296
|
end
|
294
|
-
elsif @
|
295
|
-
@
|
297
|
+
elsif @all_arguments.present?
|
298
|
+
@all_arguments.each do |arg| # Try to extract each URL argument from the hash or object provided, OR from the site object.
|
296
299
|
if args.is_a?(Hash) && args.present?
|
297
|
-
# args = args.with_indifferent_access
|
298
|
-
|
299
300
|
if @arguments[arg] #The hash has the required argument.
|
300
301
|
@arguments[arg]= args[arg]
|
301
302
|
elsif match && match.keys.include?(arg.to_s)
|
@@ -304,41 +305,41 @@ module Insite
|
|
304
305
|
@arguments[arg] = site.public_send(arg)
|
305
306
|
elsif @site.arguments[arg]
|
306
307
|
@arguments[arg] = @site.arguments[arg]
|
308
|
+
elsif !@required_arguments.include?(arg)
|
309
|
+
@arguments[arg] = nil
|
307
310
|
else
|
308
311
|
raise(
|
309
312
|
Insite::Errors::PageInitError,
|
310
|
-
"
|
311
|
-
"
|
312
|
-
"
|
313
|
+
"An error occurred when attempting to build a URL for the #{self.class} page.\n" \
|
314
|
+
"URL template:\t#{@url_template.pattern}\n" \
|
315
|
+
"URL arguments:\t#{@arguments}\n" \
|
316
|
+
"Required args:\t#{@required_arguments.join(', :')}.\n" \
|
317
|
+
"Generated URL:\t#{@url_template.expand(@arguments)}\n"
|
313
318
|
)
|
314
319
|
end
|
315
320
|
elsif args # Some non-hash object was provided.
|
316
321
|
if args.respond_to?(arg) #The hash has the required argument.
|
317
|
-
# @arguments[arg]= args.public_send(arg)
|
318
322
|
@arguments[arg]= args.public_send(arg)
|
319
323
|
elsif @site.respond_to?(arg)
|
320
324
|
@arguments[arg]= site.public_send(arg)
|
321
325
|
elsif @site.arguments[arg]
|
322
326
|
@arguments[arg] = @site.arguments[arg]
|
327
|
+
elsif !@required_arguments.include?(arg)
|
328
|
+
@arguments[arg] = nil
|
323
329
|
else
|
324
330
|
raise(
|
325
331
|
Insite::Errors::PageInitError,
|
326
|
-
"
|
327
|
-
"
|
328
|
-
"
|
332
|
+
"An error occurred when attempting to build a URL for the #{self.class} page.\n" \
|
333
|
+
"URL template:\t#{@url_template.pattern}\n" \
|
334
|
+
"URL arguments:\t#{@arguments}\n" \
|
335
|
+
"Required args:\t#{@required_arguments.join(', :')}.\n" \
|
336
|
+
"Generated URL:\t#{@url_template.expand(@arguments)}\n"
|
329
337
|
)
|
330
338
|
end
|
331
339
|
else
|
332
340
|
# Do nothing here yet.
|
333
341
|
end
|
334
342
|
end
|
335
|
-
# If there are no required arguments then nothing should be provided.
|
336
|
-
# elsif (@required_arguments - [:scheme]).empty? && args
|
337
|
-
# raise(
|
338
|
-
# Insite::Errors::PageInitError,
|
339
|
-
# "#{args.class} was provided as a #{self.class.name} initialization argument, " \
|
340
|
-
# "but the page URL doesn't require any arguments.\n\n#{caller.join("\n")}"
|
341
|
-
# )
|
342
343
|
else
|
343
344
|
# Do nothing here yet.
|
344
345
|
end
|
@@ -390,9 +391,7 @@ module Insite
|
|
390
391
|
@page_attributes.include? :navigation_disabled
|
391
392
|
end
|
392
393
|
|
393
|
-
def on_page?
|
394
|
-
url = @browser.url
|
395
|
-
|
394
|
+
def on_page?(url = @browser.url)
|
396
395
|
if @url_matcher
|
397
396
|
if @url_matcher =~ url
|
398
397
|
return true
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Insite
|
2
2
|
class UndefinedPage
|
3
|
-
attr_reader :arguments, :browser, :has_fragment, :page_attributes, :page_elements, :page_features, :page_url, :
|
3
|
+
attr_reader :arguments, :browser, :has_fragment, :page_attributes, :page_elements, :page_features, :page_url, :required_arguments, :site, :url_template, :url_matcher
|
4
4
|
|
5
5
|
include Insite::CommonMethods
|
6
6
|
extend Insite::ComponentMethods
|
data/lib/insite/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: insite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.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: 2018-10-
|
11
|
+
date: 2018-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|