percy-capybara 5.0.1.pre.2 → 5.0.1.pre.3

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
  SHA256:
3
- metadata.gz: 6958cc3537971e6eab60cb6025b1e3a9efd55fb5ca28440444590470bb88eea8
4
- data.tar.gz: c010a8c95a4633f85546b2bfd748a4523bfd38a2e20ffe3e6782ff582ce8f10e
3
+ metadata.gz: 55183f20f35bdf96129984ea3eafb21f484bf7d8abd648a07a5da0f9cbed8b20
4
+ data.tar.gz: 9f2338e88239dcb83767bfa8c0edac9a8e0cbe311c341fa2a43f0540dee295d7
5
5
  SHA512:
6
- metadata.gz: 305fb4b9322e2bbf30d1abd0814edf3be79b0fae8e55acd9d3822c2cd79e52f6f255ccc2cb4c3eed3e6cd15da591bd1c1b20c481cc32f575b2f9f1d5eb384495
7
- data.tar.gz: 1dc9d2230d122d6c92b8bb1417fdd2c8c9a62d85167938088cbf6f52575328343925b748f11e6c8abf111f480bfcd74ef417b08826a2f462d40ad3fee177363f
6
+ metadata.gz: 5638fbbfc7505c07fa32a638a415f8ff0dc46ffcdb4d74695800158e8ee85ec011eea3cee429495baf24f34aba256b370e2cc73f0c7c6369a72a143ee638780f
7
+ data.tar.gz: 51aa201e617f53d1e75592cb64f4920f7c1717966e5f990b12c977b819fca7a37a7a812e7e100c727f1d96fd61da63800ea3666f99d21e1e17bb1920a8b60581
@@ -1,3 +1,4 @@
1
+ require 'json'
1
2
  require 'net/http'
2
3
  require 'uri'
3
4
  require 'capybara/dsl'
@@ -38,8 +39,14 @@ module PercyCapybara
38
39
  # older CLIs that lack waitForReady.
39
40
  readiness_diagnostics = wait_for_ready(page, options)
40
41
 
42
+ # Merge .percy.yml config options with snapshot options (snapshot options take priority).
43
+ # Deep merge with consistent string keys at all levels: nested Hashes merge
44
+ # recursively, per-call wins at leaves, arrays/scalars replace.
45
+ config_options = @cli_config&.dig('snapshot') || {}
46
+ merged_options = deep_merge_options(config_options, deep_stringify(options))
47
+
41
48
  dom_snapshot = page
42
- .evaluate_script("(function() { return PercyDOM.serialize(#{options.to_json}) })()")
49
+ .evaluate_script("(function() { return PercyDOM.serialize(#{merged_options.to_json}) })()")
43
50
 
44
51
  if readiness_diagnostics && dom_snapshot.is_a?(Hash)
45
52
  dom_snapshot['readiness_diagnostics'] = readiness_diagnostics
@@ -224,6 +231,8 @@ module PercyCapybara
224
231
  return false
225
232
  end
226
233
 
234
+ body = response.body.to_s.empty? ? {} : JSON.parse(response.body)
235
+ @cli_config = body['config'] || {}
227
236
  @percy_enabled = true
228
237
  true
229
238
  rescue StandardError => e
@@ -276,6 +285,24 @@ module PercyCapybara
276
285
  end
277
286
  end
278
287
 
288
+ # Recursively stringify all Hash keys so per-call options match the
289
+ # string-keyed config parsed from .percy.yml JSON at every nesting level.
290
+ private def deep_stringify(obj)
291
+ case obj
292
+ when Hash then obj.each_with_object({}) { |(k, v), h| h[k.to_s] = deep_stringify(v) }
293
+ when Array then obj.map { |e| deep_stringify(e) }
294
+ else obj
295
+ end
296
+ end
297
+
298
+ # Deep-merge two string-keyed Hashes: nested Hashes merge recursively,
299
+ # per-call (override) wins at the leaves, arrays/scalars replace.
300
+ private def deep_merge_options(base, override)
301
+ base.merge(override) do |_key, old_val, new_val|
302
+ old_val.is_a?(Hash) && new_val.is_a?(Hash) ? deep_merge_options(old_val, new_val) : new_val
303
+ end
304
+ end
305
+
279
306
  private def log(msg)
280
307
  puts "#{PERCY_LABEL} #{msg}"
281
308
  end
data/lib/percy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PercyCapybara
2
- VERSION = '5.0.1.pre.2'.freeze
2
+ VERSION = '5.0.1.pre.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1.pre.2
4
+ version: 5.0.1.pre.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-19 00:00:00.000000000 Z
11
+ date: 2026-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara