haya_select_helpers 0.0.22 → 0.0.23

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: 1859828251316a80407d354d1c30f56f865ea46c1358ca638c1f6da563164613
4
- data.tar.gz: 2aa84183163ef3a14b9ea5ef6963a6ad157c19585f4a795be4cb342885e4a7de
3
+ metadata.gz: 96f76d49276820fa73aa7b62dc77f39ce6f1b92ced049fc7ba96bb99be275a34
4
+ data.tar.gz: fa5bdbe4b24df0e7bf0ec7c17b358af38991822881826c96a218f3a1bf688f80
5
5
  SHA512:
6
- metadata.gz: 95227a959dff150c9555ef3b295b9f6c0af6cc8bd82edf6f289cfeec22a8942c6239b24aa0b758be7c7a48c9be8484076f069cbb608bf3b8ec52da56026e4a30
7
- data.tar.gz: 58ddc7034b2a459763d1d2483cdcf4db878e8b25faf3af3a46cfa7ae33a3fb85338be1f7d5fe7abf4aef89654c00c24e71375d68d4d9d3d5a1e40e5b4d9a2da2
6
+ metadata.gz: eaa631f02a3f44ed87a3070e341f5fd08d0cd85e518f9e6e2e217d4c7167f6491b75f6e282e681b0da5d672e78eee79ffb81a26eff637041d5b06c8a0ba7117f
7
+ data.tar.gz: 9b09bc8269f204a345e18331a2dd49f1080cb0be89a52677f9aa306fde5c2a8ec19d9d389ea7cea8383580b1c27c4c6cf73ce0762f941325d13a8871f4ad5fd0
data/lib/haya_select.rb CHANGED
@@ -108,18 +108,27 @@ class HayaSelect
108
108
  end
109
109
 
110
110
  def guard_already_selected(label, value, allow_if_selected)
111
- current_value = value_no_wait
111
+ return if allow_if_selected
112
112
 
113
- if !value.nil? && current_value == value
114
- return if allow_if_selected
113
+ raise_if_value_already_selected(label, value)
114
+ raise_if_label_already_selected(label, value)
115
+ end
115
116
 
116
- raise "The '#{label || value}'-option is already selected"
117
- end
117
+ def selected_label_for_value(value)
118
+ return nil if value.nil? || value == ""
118
119
 
119
- if value.nil? && !label.nil? && label_no_wait == label
120
- return if allow_if_selected
120
+ was_open = scope.page.has_selector?(options_selector, visible: :all, wait: 0)
121
+ self.open(allow_if_open: true)
121
122
 
122
- raise "The '#{label}'-option is already selected"
123
+ begin
124
+ option = scope.page.first(
125
+ "#{options_selector} [data-class='select-option'][data-value='#{value}']",
126
+ minimum: 0,
127
+ wait: 0
128
+ )
129
+ option&.[]("data-text") || option&.text
130
+ ensure
131
+ close_if_open unless was_open
123
132
  end
124
133
  end
125
134
 
@@ -243,6 +252,17 @@ class HayaSelect
243
252
  self
244
253
  end
245
254
 
255
+ def selected?(label, value)
256
+ return false unless label || value
257
+
258
+ return true if label_matches?(label)
259
+ return true if value_matches?(value)
260
+
261
+ label_matches_selected_value?(label)
262
+ rescue Selenium::WebDriver::Error::StaleElementReferenceError
263
+ retry
264
+ end
265
+
246
266
  def wait_for_value(expected_value)
247
267
  wait_for_selector(
248
268
  "#{base_selector} [data-class='current-selected'] input[type='hidden'][value='#{expected_value}']",
@@ -253,6 +273,43 @@ class HayaSelect
253
273
 
254
274
  private
255
275
 
276
+ def raise_if_value_already_selected(label, value)
277
+ return if value.nil?
278
+
279
+ current_value = value_no_wait
280
+ return unless current_value == value
281
+
282
+ raise "The '#{label || value}'-option is already selected"
283
+ end
284
+
285
+ def raise_if_label_already_selected(label, value)
286
+ return if label.nil? || !value.nil?
287
+ return if label_no_wait == label
288
+
289
+ current_value = value_no_wait
290
+ return if current_value.nil? || current_value == ""
291
+
292
+ selected_label = selected_label_for_value(current_value)
293
+ return unless selected_label == label
294
+
295
+ raise "The '#{label}'-option is already selected"
296
+ end
297
+
298
+ def value_matches?(value)
299
+ return false unless value
300
+
301
+ scope.page.has_selector?(current_value_selector(value), visible: false)
302
+ end
303
+
304
+ def label_matches_selected_value?(label)
305
+ return false unless label
306
+
307
+ current_value = value_no_wait
308
+ return false if current_value.nil? || current_value == ""
309
+
310
+ selected_label_for_value(current_value) == label
311
+ end
312
+
256
313
  def select_option_selector(label:, value:)
257
314
  if value
258
315
  "#{select_option_container_selector}[data-value='#{value}']"
@@ -307,17 +364,6 @@ private
307
364
  end
308
365
  end
309
366
 
310
- def selected?(label, value)
311
- return false unless label || value
312
-
313
- label_matches = label && label_matches?(label)
314
- value_matches = value && scope.page.has_selector?(current_value_selector(value), visible: false)
315
-
316
- label_matches || value_matches
317
- rescue Selenium::WebDriver::Error::StaleElementReferenceError
318
- retry
319
- end
320
-
321
367
  def search_for_option(label)
322
368
  return unless scope.page.has_selector?(search_input_selector)
323
369
 
@@ -470,6 +516,8 @@ private
470
516
  end
471
517
 
472
518
  def label_matches?(label)
519
+ return false unless label
520
+
473
521
  current_option_label_selectors.any? do |selector|
474
522
  scope.page.has_selector?(selector, exact_text: label)
475
523
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HayaSelectHelpers
4
- VERSION = "0.0.22"
4
+ VERSION = "0.0.23"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haya_select_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaspernj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-02-13 00:00:00.000000000 Z
11
+ date: 2026-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails