eyes_core 6.7.0 → 6.7.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
  SHA256:
3
- metadata.gz: 60c616955a64bf213ff0fbf3d6c07619cb13f0fc8241e055ecffc878d807128b
4
- data.tar.gz: fa4a7ab2281ffe2bf45457c76dc27f5821aba32613e1f5ab3f15279f7c1f6368
3
+ metadata.gz: 9e8270b52cdd58ec5d01252e085200ba62f8c9b9c056cfb6a5f217f58003f2a5
4
+ data.tar.gz: 8f01ec47b288f64c84aad4d7684d691a52376fc635014e059ecab49b3dec76ce
5
5
  SHA512:
6
- metadata.gz: 41bdd647a2ff4eb9a088b6403e6694e23b47c385f9b3dad346cc9edfbc0919f075981b74cd717ab3dadf903250af6476828a9cfb6b25ded7275dd38d73d1fcca
7
- data.tar.gz: 2ba9a72502d87457c01e8aef427e0547ae5e17f41bb2b95634c53f05089e5245d13d8ddb793e2a7d8b9505ef3b6194b317973588bfd8d88cdbc239bc6364a187
6
+ metadata.gz: d78fa4f0fc03842d096f0af4fb7cca76b4416176fd0cdb84b30d34ef90d9bef40c839a8093197a0f111ac1e8ae1a6764df697b09850350824b5e40cd819e7f55
7
+ data.tar.gz: 9cd38ffa78203fdfb4615259a3d426f30bf8178f112e5c56d6f992d23be14cad0bdc6d5d9fca7ff840e5ef54fcad8e05e249161f2a619bf6e7b57e126b61c3f2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [6.7.1](https://github.com/Applitools-Dev/sdk/compare/ruby/eyes_core@6.7.0...ruby/eyes_core@6.7.1) (2025-05-22)
4
+
5
+
6
+ ### Dependencies
7
+
8
+ * eyes_universal bumped to 4.38.0
9
+ #### Features
10
+
11
+ * adding the mac-arm64 binary ([#2975](https://github.com/Applitools-Dev/sdk/issues/2975)) ([95d647f](https://github.com/Applitools-Dev/sdk/commit/95d647ff4a451309d985a786f7cec544d926f0e5))
12
+
3
13
  ## [6.7.0](https://github.com/Applitools-Dev/sdk/compare/ruby/eyes_core@6.6.1...ruby/eyes_core@6.7.0) (2025-04-17)
4
14
 
5
15
 
data/eyes_core.gemspec CHANGED
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency 'colorize'
39
39
  spec.add_dependency 'websocket'
40
40
  spec.add_dependency 'sorted_set'
41
- spec.add_dependency 'eyes_universal', "= 4.37.0"
41
+ spec.add_dependency 'eyes_universal', "= 4.38.0"
42
42
 
43
43
  spec.add_development_dependency 'bundler'
44
44
  spec.add_development_dependency 'rake'
@@ -3,6 +3,70 @@
3
3
  require 'yaml'
4
4
 
5
5
  module Applitools
6
+ # First, extend OpenStruct with a custom method for case-insensitive hash access
7
+ class FlexibleOpenStruct < OpenStruct
8
+ def [](key)
9
+ # Convert the key to string in case it's a symbol or number
10
+ key_str = key.to_s
11
+
12
+ # Direct access first (most efficient)
13
+ return super(key) if respond_to?(key)
14
+
15
+ # If the key contains uppercase letters, try snake_case version
16
+ if key_str =~ /[A-Z]/
17
+ snake_case_key = key_str.gsub(/([A-Z])/, '_\1').downcase.gsub(/^_/, '')
18
+ return send(snake_case_key) if respond_to?(snake_case_key)
19
+ else
20
+ # If the key is snake_case, try camelCase version
21
+ camel_case_key = key_str.gsub(/_([a-z])/) { $1.upcase }
22
+ return send(camel_case_key) if respond_to?(camel_case_key)
23
+ end
24
+
25
+ # Fall back to nil if no matching attribute is found
26
+ nil
27
+ end
28
+
29
+ # Also handle nested hashes by recursively converting them to FlexibleOpenStruct
30
+ def method_missing(name, *args)
31
+ value = super
32
+
33
+ if value.is_a?(Hash)
34
+ send("#{name}=", hash_to_flexible_open_struct(value))
35
+ value = send(name)
36
+ elsif value.is_a?(Array)
37
+ send("#{name}=", array_to_flexible_open_struct(value))
38
+ value = send(name)
39
+ end
40
+
41
+ value
42
+ end
43
+
44
+ private
45
+
46
+ def hash_to_flexible_open_struct(hash)
47
+ result = FlexibleOpenStruct.new
48
+ hash.each do |k, v|
49
+ result[k] = process_value(v)
50
+ end
51
+ result
52
+ end
53
+
54
+ def array_to_flexible_open_struct(array)
55
+ array.map { |item| process_value(item) }
56
+ end
57
+
58
+ def process_value(value)
59
+ case value
60
+ when Hash
61
+ hash_to_flexible_open_struct(value)
62
+ when Array
63
+ array_to_flexible_open_struct(value)
64
+ else
65
+ value
66
+ end
67
+ end
68
+ end
69
+
6
70
  class TestResults
7
71
  class AccessibilityStatus
8
72
  attr_accessor :status, :level, :version
@@ -19,11 +83,16 @@ module Applitools
19
83
  attr_accessor :is_new, :url, :screenshot
20
84
  attr_reader :status, :steps, :matches, :mismatches, :missing, :original_results, :browser_info, :renderer
21
85
 
86
+ attr_reader :results
87
+
22
88
  def initialize(init_results = {})
23
89
  environment = init_results[:environment] || {}
24
90
  @renderer = Applitools::Utils.deep_stringify_keys(Applitools::Utils.underscore_hash_keys(environment[:requested]))
25
- @browser_info = JSON.parse(@renderer.to_json, object_class: OpenStruct)
26
- results = Applitools::Utils.deep_stringify_keys(init_results[:result] ? init_results[:result] : init_results)
91
+
92
+ # Use allow querying as both with camel and snake cases
93
+ @browser_info = JSON.parse(@renderer.to_json, object_class: FlexibleOpenStruct)
94
+
95
+ @results = Applitools::Utils.deep_stringify_keys(init_results[:result] ? init_results[:result] : init_results)
27
96
  @original_results = results
28
97
  @steps = results.fetch('steps', 0)
29
98
  @matches = results.fetch('matches', 0)
@@ -34,6 +103,10 @@ module Applitools
34
103
  @url = results.fetch('url', nil)
35
104
  end
36
105
 
106
+ def [](index)
107
+ @results[index]
108
+ end
109
+
37
110
  def test_results
38
111
  self
39
112
  end
@@ -87,7 +87,10 @@ module Applitools
87
87
 
88
88
  self.app_name = options[:app_name] if options[:app_name]
89
89
  self.test_name = options[:test_name] if options[:test_name]
90
- if (config.viewport_size.nil? || config.viewport_size&.empty?) && options[:viewport_size]
90
+
91
+ if (config.respond_to?(:viewport_size, true) &&
92
+ (config.send(:viewport_size).nil? || config.send(:viewport_size)&.empty?)) &&
93
+ options[:viewport_size]
91
94
  self.viewport_size = Applitools::RectangleSize.from_any_argument options[:viewport_size]
92
95
  end
93
96
  self.session_type = options[:session_type] if options[:session_type]
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Applitools
4
4
  module EyesCore
5
- VERSION = '6.7.0'.freeze
5
+ VERSION = '6.7.1'.freeze
6
6
  end
7
7
 
8
8
  VERSION = Applitools::EyesCore::VERSION
@@ -186,7 +186,23 @@ module Applitools
186
186
 
187
187
  def from_original_sdk(original_eyes)
188
188
  from_eyes = original_eyes.class.name != 'Applitools::Images::Eyes' ? FROM_ORIGINAL_EYES : from_eyes_images
189
- from_eyes.each {|m| copy_from(m, original_eyes) }
189
+
190
+ # Use a filtered list to avoid accessing private viewport_size method
191
+ # We will handle viewport_size specially
192
+ filtered_eyes = from_eyes.reject { |m| m == :viewport_size }
193
+
194
+ # Copy all properties except viewport_size
195
+ filtered_eyes.each { |m| copy_from(m, original_eyes) }
196
+
197
+ # Handle viewport_size specially to avoid private method access warning
198
+ # Access the config's viewport_size directly if available
199
+ if original_eyes.respond_to?(:config) && original_eyes.config.respond_to?(:viewport_size)
200
+ self.viewport_size = original_eyes.config.viewport_size
201
+ elsif original_eyes.respond_to?(:viewport_size)
202
+ # Fallback to original_eyes.viewport_size if necessary
203
+ self.viewport_size = original_eyes.viewport_size
204
+ end
205
+
190
206
  self.agent_id = original_eyes.base_agent_id if original_eyes.respond_to?(:base_agent_id)
191
207
  self.agent_id = original_eyes.full_agent_id if original_eyes.respond_to?(:full_agent_id)
192
208
  # self.display_name = original_eyes.app_name
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eyes_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.7.0
4
+ version: 6.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-17 00:00:00.000000000 Z
11
+ date: 2025-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 4.37.0
117
+ version: 4.38.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 4.37.0
124
+ version: 4.38.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bundler
127
127
  requirement: !ruby/object:Gem::Requirement