chop 0.36.3 → 0.36.4

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: 1c9309eaa197ef082657cdc752f144e8cee2b37a94a97683e23fb2d92c96a5d2
4
- data.tar.gz: 99e850713c1f56868b99a3278f9aca1b72f40d21a234f2c41edf62ea0b20d1fe
3
+ metadata.gz: 19a97995362b42188ac79605c570ed798eed9f4ba01c56a6b4387e7c5db867a0
4
+ data.tar.gz: ece8d02c45238cba9ded650e2bd73c4af589c5e876aa1de13c582bb38d31002c
5
5
  SHA512:
6
- metadata.gz: dbea44a9d7a0abda97759806cf01d270e4fa2ce09cdc0e0ed7ba05bd8d76004f2c5363bcb186c38f2d43833eaeb48b1f6f9e41b564a8d6379a5ba23e9f59198c
7
- data.tar.gz: 79726b3042667c3a3cacdf61ed3f47a374285a26b8a15a68a3865abf9f5222dd57e06fbf321fed3ad45f8aabc677b131b1e22c5618b2d5d5fdb0df63c0ce4c41
6
+ metadata.gz: d74cb08a00ba8856d556f5073cb5d0223b94ab09de5e91fabf28c3c73b77fbf770399973f7b111f7ef854e5070ff85be31ad21c3be884cc81d79b590389bbe3f
7
+ data.tar.gz: 58b17b7b79f662750bad471fcb46ee9aa7f8675f53e5e5eafafce409cfd6a09152f77b831b56048a9f0b8fdf54d8c873c61ae575c7a28331ca6fba5b53e18e38
data/lib/chop/dsl.rb CHANGED
@@ -9,19 +9,19 @@ module Chop
9
9
  end
10
10
 
11
11
  def diff! selector, table, session: Capybara.current_session, as: nil, timeout: nil, **kwargs, &block
12
- timeout ||= Capybara.default_max_wait_time
12
+ sync_timeout = timeout || Capybara.default_max_wait_time
13
13
  class_name = if as
14
14
  as.to_s
15
15
  elsif selector.respond_to?(:tag_name)
16
16
  selector.tag_name
17
17
  else
18
- session.document.synchronize timeout, errors: session.driver.invalid_element_errors do
18
+ session.document.synchronize sync_timeout, errors: session.driver.invalid_element_errors do
19
19
  session.find(selector).tag_name
20
20
  end
21
21
  end.camelize
22
22
  klass = const_get("Chop::#{class_name}")
23
23
  kwargs[:session] = session
24
- kwargs[:timeout] = timeout if timeout.present?
24
+ kwargs[:timeout] = timeout if timeout
25
25
  klass.diff! selector, table, **kwargs, &block
26
26
  end
27
27
 
data/lib/chop/form.rb CHANGED
@@ -7,26 +7,34 @@ module Chop
7
7
  new(table, session, path).fill_in!
8
8
  end
9
9
 
10
- def self.diff! selector, table, session: Capybara.current_session, &block
11
- root = begin
12
- if selector.is_a?(Capybara::Node::Element)
13
- selector
14
- else
15
- session.find(selector)
10
+ def self.diff! selector, table, session: Capybara.current_session, timeout: Capybara.default_max_wait_time, &block
11
+ errors = session.driver.invalid_element_errors + [Capybara::ElementNotFound, Cucumber::MultilineArgument::DataTable::Different]
12
+ session.document.synchronize timeout, errors: errors do
13
+ root = begin
14
+ if selector.is_a?(Capybara::Node::Element)
15
+ selector
16
+ else
17
+ session.find(selector, wait: timeout)
18
+ end
19
+ rescue Capybara::ElementNotFound
20
+ raise unless @allow_not_found
21
+ Node("")
16
22
  end
17
- rescue Capybara::ElementNotFound
18
- raise unless @allow_not_found
19
- Node("")
20
- end
21
23
 
22
- actual = root.all(Field.combined_css_selector, allow_reload: true)
23
- .filter_map { |field_element| Field.from(session, field_element) }
24
- .select(&:should_include_in_diff?)
25
- .uniq { |field| field.field[:name] }
26
- .filter_map(&:to_diff_row)
24
+ actual = root.all(Field.combined_css_selector, allow_reload: true)
25
+ .filter_map { |field_element| Field.from(session, field_element) }
26
+ .select(&:should_include_in_diff?)
27
+ .uniq { |field| field.field[:name] }
28
+ .filter_map(&:to_diff_row)
27
29
 
28
- block.call(actual, root) if block_given?
29
- table.diff! actual, surplus_row: false, misplaced_col: false
30
+ # Retry if form fields haven't loaded yet (e.g., turbo-frame still loading)
31
+ if actual.empty? && !table.raw.flatten.empty?
32
+ raise Capybara::ElementNotFound, "No form fields found in #{selector.inspect}"
33
+ end
34
+
35
+ block.call(actual, root) if block_given?
36
+ table.diff! actual, surplus_row: false, misplaced_col: false
37
+ end
30
38
  end
31
39
 
32
40
 
data/lib/chop/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Chop
2
- VERSION = "0.36.3"
2
+ VERSION = "0.36.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.36.3
4
+ version: 0.36.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel