percy-capybara 2.4.0 → 2.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 +4 -4
- data/.rubocop.yml +42 -0
- data/.rubocop_todo.yml +98 -0
- data/.travis.yml +4 -1
- data/Gemfile +6 -1
- data/Rakefile +0 -1
- data/lib/percy/capybara.rb +2 -2
- data/lib/percy/capybara/client.rb +20 -22
- data/lib/percy/capybara/client/builds.rb +13 -13
- data/lib/percy/capybara/client/snapshots.rb +9 -10
- data/lib/percy/capybara/httpfetcher.rb +7 -7
- data/lib/percy/capybara/loaders/base_loader.rb +17 -16
- data/lib/percy/capybara/loaders/filesystem_loader.rb +10 -11
- data/lib/percy/capybara/loaders/native_loader.rb +14 -13
- data/lib/percy/capybara/loaders/sprockets_loader.rb +6 -6
- data/lib/percy/capybara/version.rb +1 -1
- data/percy-capybara.gemspec +1 -1
- data/spec/lib/percy/capybara/client/builds_spec.rb +10 -8
- data/spec/lib/percy/capybara/client/snapshots_spec.rb +12 -10
- data/spec/lib/percy/capybara/client_spec.rb +5 -4
- data/spec/lib/percy/capybara/{httpfetcher_spec.rb → http_fetcher_spec.rb} +2 -2
- data/spec/lib/percy/capybara/loaders/base_loader_spec.rb +3 -5
- data/spec/lib/percy/capybara/loaders/filesystem_loader_spec.rb +9 -5
- data/spec/lib/percy/capybara/loaders/native_loader_spec.rb +41 -41
- data/spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb +14 -13
- data/spec/lib/percy/capybara_spec.rb +8 -8
- data/spec/spec_helper.rb +1 -1
- data/spec/support/test_helpers.rb +3 -3
- metadata +12 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ffda7d1edb1b8af63b836b222198c91f5b4123b
|
4
|
+
data.tar.gz: 0a4530980562b8eee91a122ccb605c10376d8d9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b80f67fc99db1389d5c3dbc9b3e743d4ccc3ba87cde1db6e6397e056457a3d85a20233ecdff8d291108a66f0e00848f56642e899f85c2d96259e48b4e3a0442
|
7
|
+
data.tar.gz: 84c9e112198d7d43f46519d639ae9dc9ee620fac769331a5e43eccdaeb253f507bc51c2dc91bf3c826dae0f08034d0dd954b950986fc03621936a97a145c3558
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
inherit_from: .rubocop_todo.yml
|
3
|
+
AllCops:
|
4
|
+
Include:
|
5
|
+
- Rakefile
|
6
|
+
- lib/**/*.rake
|
7
|
+
|
8
|
+
Metrics/LineLength:
|
9
|
+
Max: 100
|
10
|
+
|
11
|
+
Style/Documentation:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Style/DoubleNegation:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/IndentArray:
|
18
|
+
EnforcedStyle: consistent
|
19
|
+
|
20
|
+
Style/MultilineMethodCallIndentation:
|
21
|
+
EnforcedStyle: indented
|
22
|
+
|
23
|
+
Style/MultilineOperationIndentation:
|
24
|
+
EnforcedStyle: indented
|
25
|
+
|
26
|
+
Style/RedundantBegin:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
Style/SpaceInsideHashLiteralBraces:
|
30
|
+
EnforcedStyle: no_space
|
31
|
+
|
32
|
+
Style/TrailingCommaInLiteral:
|
33
|
+
EnforcedStyleForMultiline: comma
|
34
|
+
|
35
|
+
RSpec/MessageSpies:
|
36
|
+
EnforcedStyle: receive
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
# Will be able to do this in >= v1.11
|
41
|
+
# RSpec/DescribedClass:
|
42
|
+
# EnforcedStyle: explicit
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-02-08 20:09:02 -0800 using RuboCop version 0.47.1.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 8
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 54
|
12
|
+
|
13
|
+
# Offense count: 27
|
14
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
15
|
+
Metrics/BlockLength:
|
16
|
+
Max: 227
|
17
|
+
|
18
|
+
# Offense count: 1
|
19
|
+
# Configuration parameters: CountComments.
|
20
|
+
Metrics/ClassLength:
|
21
|
+
Max: 164
|
22
|
+
|
23
|
+
# Offense count: 5
|
24
|
+
Metrics/CyclomaticComplexity:
|
25
|
+
Max: 11
|
26
|
+
|
27
|
+
# Offense count: 11
|
28
|
+
# Configuration parameters: CountComments.
|
29
|
+
Metrics/MethodLength:
|
30
|
+
Max: 57
|
31
|
+
|
32
|
+
# Offense count: 2
|
33
|
+
Metrics/PerceivedComplexity:
|
34
|
+
Max: 12
|
35
|
+
|
36
|
+
# Offense count: 43
|
37
|
+
# Configuration parameters: SkipBlocks.
|
38
|
+
RSpec/DescribedClass:
|
39
|
+
Exclude:
|
40
|
+
- 'spec/lib/percy/capybara/client_spec.rb'
|
41
|
+
- 'spec/lib/percy/capybara/http_fetcher_spec.rb'
|
42
|
+
- 'spec/lib/percy/capybara_spec.rb'
|
43
|
+
|
44
|
+
# Offense count: 29
|
45
|
+
# Configuration parameters: Max.
|
46
|
+
RSpec/ExampleLength:
|
47
|
+
Exclude:
|
48
|
+
- 'spec/lib/percy/capybara/client/builds_spec.rb'
|
49
|
+
- 'spec/lib/percy/capybara/client/snapshots_spec.rb'
|
50
|
+
- 'spec/lib/percy/capybara/client_spec.rb'
|
51
|
+
- 'spec/lib/percy/capybara/loaders/base_loader_spec.rb'
|
52
|
+
- 'spec/lib/percy/capybara/loaders/filesystem_loader_spec.rb'
|
53
|
+
- 'spec/lib/percy/capybara/loaders/native_loader_spec.rb'
|
54
|
+
- 'spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb'
|
55
|
+
- 'spec/lib/percy/capybara_spec.rb'
|
56
|
+
|
57
|
+
# Offense count: 1
|
58
|
+
# Configuration parameters: AssignmentOnly.
|
59
|
+
RSpec/InstanceVariable:
|
60
|
+
Exclude:
|
61
|
+
- 'spec/lib/percy/capybara_spec.rb'
|
62
|
+
|
63
|
+
# Offense count: 42
|
64
|
+
RSpec/MultipleExpectations:
|
65
|
+
Max: 29
|
66
|
+
|
67
|
+
# Offense count: 1
|
68
|
+
# Configuration parameters: Max.
|
69
|
+
RSpec/NestedGroups:
|
70
|
+
Exclude:
|
71
|
+
- 'spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb'
|
72
|
+
|
73
|
+
# Offense count: 10
|
74
|
+
# Configuration parameters: IgnoreSymbolicNames.
|
75
|
+
RSpec/VerifiedDoubles:
|
76
|
+
Exclude:
|
77
|
+
- 'spec/lib/percy/capybara/client/builds_spec.rb'
|
78
|
+
- 'spec/lib/percy/capybara/client_spec.rb'
|
79
|
+
- 'spec/lib/percy/capybara/loaders/base_loader_spec.rb'
|
80
|
+
- 'spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb'
|
81
|
+
- 'spec/lib/percy/capybara_spec.rb'
|
82
|
+
- 'spec/support/test_helpers.rb'
|
83
|
+
|
84
|
+
# Offense count: 4
|
85
|
+
# Cop supports --auto-correct.
|
86
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
87
|
+
# SupportedStyles: slashes, percent_r, mixed
|
88
|
+
Style/RegexpLiteral:
|
89
|
+
Exclude:
|
90
|
+
- 'lib/percy/capybara/loaders/native_loader.rb'
|
91
|
+
- 'spec/lib/percy/capybara/loaders/native_loader_spec.rb'
|
92
|
+
- 'spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb'
|
93
|
+
- 'spec/support/test_helpers.rb'
|
94
|
+
|
95
|
+
# Offense count: 1
|
96
|
+
Style/StructInheritance:
|
97
|
+
Exclude:
|
98
|
+
- 'lib/percy/capybara/httpfetcher.rb'
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/lib/percy/capybara.rb
CHANGED
@@ -36,7 +36,7 @@ module Percy
|
|
36
36
|
#
|
37
37
|
# @see Percy::Capybara::Client::Builds#finalize_current_build
|
38
38
|
def self.finalize_build
|
39
|
-
return
|
39
|
+
return unless capybara_client.build_initialized?
|
40
40
|
capybara_client.finalize_current_build
|
41
41
|
end
|
42
42
|
|
@@ -45,7 +45,7 @@ module Percy
|
|
45
45
|
@capybara_client = nil
|
46
46
|
end
|
47
47
|
# The 'reset' method is deprecated and will be removed: use the reset! method instead.
|
48
|
-
class << self;
|
48
|
+
class << self; alias reset reset!; end
|
49
49
|
|
50
50
|
# Manually disable Percy for the current capybara client. This can also be done with the
|
51
51
|
# PERCY_ENABLE=0 environment variable.
|
@@ -10,7 +10,7 @@ module Percy
|
|
10
10
|
include Percy::Capybara::Client::Builds
|
11
11
|
include Percy::Capybara::Client::Snapshots
|
12
12
|
|
13
|
-
class Error <
|
13
|
+
class Error < RuntimeError; end
|
14
14
|
class BuildNotInitializedError < Error; end
|
15
15
|
class WebMockBlockingConnectionsError < Error; end
|
16
16
|
|
@@ -29,26 +29,24 @@ module Percy
|
|
29
29
|
|
30
30
|
@loader_options = options[:loader_options] || {}
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
return unless defined?(Rails)
|
33
|
+
|
34
|
+
@sprockets_environment = options[:sprockets_environment] || Rails.application.assets
|
35
|
+
@sprockets_options = options[:sprockets_options] || Rails.application.config.assets
|
36
36
|
end
|
37
37
|
|
38
38
|
# Check that environment variables required for Percy::Client are set
|
39
39
|
def required_environment_variables_set?
|
40
40
|
if !ENV['PERCY_TOKEN'].nil? && ENV['PERCY_PROJECT'].nil?
|
41
|
-
raise
|
42
|
-
'
|
43
|
-
'but you are missing the PERCY_PROJECT environment variable!'
|
44
|
-
)
|
41
|
+
raise '[percy] It looks like you were trying to enable Percy because PERCY_TOKEN ' \
|
42
|
+
'is set, but you are missing the PERCY_PROJECT environment variable!'
|
45
43
|
end
|
46
44
|
|
47
45
|
!(ENV['PERCY_PROJECT'].nil? || ENV['PERCY_TOKEN'].nil?)
|
48
46
|
end
|
49
47
|
|
50
48
|
def enabled?
|
51
|
-
return @enabled
|
49
|
+
return @enabled unless @enabled.nil?
|
52
50
|
|
53
51
|
# Disable if PERCY_ENABLE is set to 0
|
54
52
|
return @enabled = false if ENV['PERCY_ENABLE'] == '0'
|
@@ -57,21 +55,21 @@ module Percy
|
|
57
55
|
return @enabled = true if required_environment_variables_set?
|
58
56
|
|
59
57
|
# Disable otherwise
|
60
|
-
|
58
|
+
@enabled = false
|
61
59
|
end
|
62
60
|
|
63
61
|
def disable!
|
64
62
|
@enabled = false
|
65
63
|
end
|
66
64
|
|
67
|
-
def rescue_connection_failures
|
68
|
-
raise ArgumentError
|
65
|
+
def rescue_connection_failures
|
66
|
+
raise ArgumentError, 'block is required' unless block_given?
|
69
67
|
begin
|
70
|
-
|
71
|
-
rescue Percy::Client::ServerError,
|
72
|
-
|
73
|
-
|
74
|
-
|
68
|
+
yield
|
69
|
+
rescue Percy::Client::ServerError, # Rescue server errors.
|
70
|
+
Percy::Client::PaymentRequiredError, # Rescue quota exceeded errors.
|
71
|
+
Percy::Client::ConnectionFailed, # Rescue some networking errors.
|
72
|
+
Percy::Client::TimeoutError => e
|
75
73
|
Percy.logger.error(e)
|
76
74
|
@enabled = false
|
77
75
|
@failed = true
|
@@ -80,7 +78,7 @@ module Percy
|
|
80
78
|
end
|
81
79
|
|
82
80
|
def failed?
|
83
|
-
|
81
|
+
!!@failed
|
84
82
|
end
|
85
83
|
|
86
84
|
def initialize_loader(options = {})
|
@@ -105,9 +103,9 @@ module Percy
|
|
105
103
|
else
|
106
104
|
unless @warned_about_native_loader
|
107
105
|
Percy.logger.warn \
|
108
|
-
'[DEPRECATED] The native_loader is deprecated and will be opt-in in a future
|
109
|
-
'You should move to the faster, more reliable filesystem_loader. See the
|
110
|
-
'Non-Rails frameworks: https://percy.io/docs/clients/ruby/capybara '
|
106
|
+
'[DEPRECATED] The native_loader is deprecated and will be opt-in in a future ' \
|
107
|
+
'release. You should move to the faster, more reliable filesystem_loader. See the ' \
|
108
|
+
'docs for Non-Rails frameworks: https://percy.io/docs/clients/ruby/capybara '
|
111
109
|
@warned_about_native_loader = true
|
112
110
|
end
|
113
111
|
Percy.logger.debug { 'Using native_loader to discover assets (slower).' }
|
@@ -3,13 +3,13 @@ module Percy
|
|
3
3
|
class Client
|
4
4
|
module Builds
|
5
5
|
def initialize_build(options = {})
|
6
|
-
return
|
6
|
+
return unless enabled? # Silently skip if the client is disabled.
|
7
7
|
return @current_build if build_initialized?
|
8
8
|
|
9
9
|
# Gather build resources to upload with build.
|
10
10
|
start = Time.now
|
11
11
|
build_resources = options[:build_resources] || initialize_loader.build_resources
|
12
|
-
options[:resources] = build_resources
|
12
|
+
options[:resources] = build_resources unless build_resources.empty?
|
13
13
|
|
14
14
|
# Extra debug info.
|
15
15
|
build_resources.each { |br| Percy.logger.debug { "Build resource: #{br.resource_url}" } }
|
@@ -17,17 +17,17 @@ module Percy
|
|
17
17
|
|
18
18
|
rescue_connection_failures do
|
19
19
|
@current_build = client.create_build(client.config.repo, options)
|
20
|
-
_upload_missing_build_resources(build_resources)
|
20
|
+
_upload_missing_build_resources(build_resources) unless build_resources.empty?
|
21
21
|
end
|
22
22
|
if failed?
|
23
|
-
Percy.logger.error {
|
23
|
+
Percy.logger.error { 'Percy build failed! Check log above for errors.' }
|
24
24
|
return
|
25
25
|
end
|
26
26
|
@current_build
|
27
27
|
end
|
28
28
|
|
29
29
|
def current_build
|
30
|
-
return
|
30
|
+
return unless enabled? # Silently skip if the client is disabled.
|
31
31
|
@current_build
|
32
32
|
end
|
33
33
|
|
@@ -37,16 +37,16 @@ module Percy
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def finalize_current_build
|
40
|
-
return
|
41
|
-
|
42
|
-
raise Percy::Capybara::Client::BuildNotInitializedError
|
43
|
-
|
40
|
+
return unless enabled? # Silently skip if the client is disabled.
|
41
|
+
unless build_initialized?
|
42
|
+
raise Percy::Capybara::Client::BuildNotInitializedError,
|
43
|
+
'Failed to finalize build because no build has been initialized.'
|
44
44
|
end
|
45
45
|
result = rescue_connection_failures do
|
46
46
|
client.finalize_build(current_build['data']['id'])
|
47
47
|
end
|
48
48
|
if failed?
|
49
|
-
Percy.logger.error {
|
49
|
+
Percy.logger.error { 'Percy build failed! Check log above for errors.' }
|
50
50
|
return
|
51
51
|
end
|
52
52
|
result
|
@@ -59,15 +59,15 @@ module Percy
|
|
59
59
|
current_build['data']['relationships'] &&
|
60
60
|
current_build['data']['relationships']['missing-resources'] &&
|
61
61
|
current_build['data']['relationships']['missing-resources']['data']
|
62
|
-
return 0
|
62
|
+
return 0 unless new_build_resources
|
63
63
|
|
64
64
|
new_build_resources.each_with_index do |missing_resource, i|
|
65
65
|
sha = missing_resource['id']
|
66
66
|
resource = build_resources.find { |r| r.sha == sha }
|
67
67
|
content = resource.content || File.read(resource.path)
|
68
68
|
client.upload_resource(current_build['data']['id'], content)
|
69
|
-
if i % 10
|
70
|
-
puts "[percy] Uploading #{i+1} of #{new_build_resources.length} new resources..."
|
69
|
+
if (i % 10).zero?
|
70
|
+
puts "[percy] Uploading #{i + 1} of #{new_build_resources.length} new resources..."
|
71
71
|
end
|
72
72
|
end
|
73
73
|
new_build_resources.length
|
@@ -8,18 +8,16 @@ module Percy
|
|
8
8
|
#
|
9
9
|
# @param [Capybara::Session] page The Capybara page to snapshot.
|
10
10
|
# @param [Hash] options
|
11
|
-
# @option options [String] :name A unique name for the current page that identifies
|
12
|
-
# builds. By default this is the URL of the page, but can be customized if the
|
13
|
-
# entirely identify the current state.
|
11
|
+
# @option options [String] :name A unique name for the current page that identifies
|
12
|
+
# it across builds. By default this is the URL of the page, but can be customized if the
|
13
|
+
# URL does not entirely identify the current state.
|
14
14
|
def snapshot(page, options = {})
|
15
|
-
return
|
15
|
+
return unless enabled? # Silently skip if the client is disabled.
|
16
16
|
|
17
17
|
if current_build.nil?
|
18
|
-
raise
|
19
|
-
'
|
20
|
-
'Did you forget to setup Percy in your spec_helper.rb? ' +
|
18
|
+
raise 'Whoops! Percy is enabled, but Percy::Capybara.initialize_build was never ' \
|
19
|
+
'called. Did you forget to setup Percy in your spec_helper.rb? ' \
|
21
20
|
'See: https://percy.io/docs/clients/ruby/capybara'
|
22
|
-
)
|
23
21
|
end
|
24
22
|
|
25
23
|
loader = initialize_loader(page: page)
|
@@ -46,7 +44,8 @@ module Percy
|
|
46
44
|
return
|
47
45
|
end
|
48
46
|
|
49
|
-
snapshot['data']['relationships']['missing-resources']['data']
|
47
|
+
missing_resource_data = snapshot['data']['relationships']['missing-resources']['data']
|
48
|
+
missing_resource_data.each do |missing_resource|
|
50
49
|
sha = missing_resource['id']
|
51
50
|
client.upload_resource(current_build_id, resource_map[sha].content)
|
52
51
|
end
|
@@ -56,7 +55,7 @@ module Percy
|
|
56
55
|
client.finalize_snapshot(snapshot['data']['id'])
|
57
56
|
end
|
58
57
|
if failed?
|
59
|
-
Percy.logger.error {
|
58
|
+
Percy.logger.error { 'Percy build failed! Check log above for errors.' }
|
60
59
|
return
|
61
60
|
end
|
62
61
|
true
|
@@ -23,13 +23,13 @@ module Percy
|
|
23
23
|
content_type = output.match(/< Content-Type:(.*)/i)
|
24
24
|
content_type = content_type[1].strip if content_type
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
return unless File.exist?(temppath)
|
27
|
+
|
28
|
+
response = Percy::Capybara::HttpFetcher::Response.new(File.read(temppath), content_type)
|
29
|
+
# We've broken the tempfile so it won't get deleted when garbage collected. Delete!
|
30
|
+
File.delete(temppath)
|
31
|
+
return if response.body == ''
|
32
|
+
response
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -5,29 +5,29 @@ module Percy
|
|
5
5
|
# Modified version of Diego Perini's URL regex. https://gist.github.com/dperini/729294
|
6
6
|
URL_REGEX = Regexp.new(
|
7
7
|
# protocol identifier
|
8
|
-
|
9
|
-
|
8
|
+
'((?:https?:)?//)' \
|
9
|
+
'(' +
|
10
10
|
# IP address exclusion
|
11
11
|
# private & local networks
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
'(?!(?:10|127)(?:\\.\\d{1,3}){3})' \
|
13
|
+
'(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})' \
|
14
|
+
'(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})' +
|
15
15
|
# IP address dotted notation octets
|
16
16
|
# excludes loopback network 0.0.0.0
|
17
17
|
# excludes reserved space >= 224.0.0.0
|
18
18
|
# excludes network & broacast addresses
|
19
19
|
# (first & last IP address of each class)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
'(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' \
|
21
|
+
'(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' \
|
22
|
+
'(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' \
|
23
|
+
'|' +
|
24
24
|
# host name
|
25
|
-
|
25
|
+
'(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)' +
|
26
26
|
# domain name
|
27
|
-
|
28
|
-
|
27
|
+
'(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*' \
|
28
|
+
')' +
|
29
29
|
# port number
|
30
|
-
|
30
|
+
'(:\\d{2,5})?' +
|
31
31
|
# resource path
|
32
32
|
"(/[^\\s\"']*)?"
|
33
33
|
)
|
@@ -40,17 +40,18 @@ module Percy
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def build_resources
|
43
|
-
raise NotImplementedError
|
43
|
+
raise NotImplementedError, 'subclass must implement abstract method'
|
44
44
|
end
|
45
45
|
|
46
46
|
def snapshot_resources
|
47
|
-
raise NotImplementedError
|
47
|
+
raise NotImplementedError, 'subclass must implement abstract method'
|
48
48
|
end
|
49
49
|
|
50
50
|
# @private
|
51
51
|
def root_html_resource
|
52
52
|
Percy::Client::Resource.new(
|
53
|
-
current_path, is_root: true, mimetype: 'text/html', content: page.html
|
53
|
+
current_path, is_root: true, mimetype: 'text/html', content: page.html
|
54
|
+
)
|
54
55
|
end
|
55
56
|
|
56
57
|
# Transformed version of the current URL to be a relative path.
|