chop 0.36.2 → 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: ad472bedd321d089aa70093dc87f830278f89649ec4ffeae49c5731a3ca76ebb
4
- data.tar.gz: a9dcddb04da9f226c5daf92bb1db506c9c18e7292a90262a03b1bd4060cad0ce
3
+ metadata.gz: 19a97995362b42188ac79605c570ed798eed9f4ba01c56a6b4387e7c5db867a0
4
+ data.tar.gz: ece8d02c45238cba9ded650e2bd73c4af589c5e876aa1de13c582bb38d31002c
5
5
  SHA512:
6
- metadata.gz: 7e42d362abf4332b9c50d6c7fa0f25ec2ab3af647db2c85be35c2ebfe3c960a02e8dbf0ed8bd2d7ab6e8aea6df992331eedeb7203bfefc7b124eb3e40710f68b
7
- data.tar.gz: c4ddb213915221aa40b2b37fd22671858d4a7baabfb7804dda973e37520006acb9ed473bd82664708424e1456f5ae4c7cb4bb57e7f386109fd779a9d0bacea1a
6
+ metadata.gz: d74cb08a00ba8856d556f5073cb5d0223b94ab09de5e91fabf28c3c73b77fbf770399973f7b111f7ef854e5070ff85be31ad21c3be884cc81d79b590389bbe3f
7
+ data.tar.gz: 58b17b7b79f662750bad471fcb46ee9aa7f8675f53e5e5eafafce409cfd6a09152f77b831b56048a9f0b8fdf54d8c873c61ae575c7a28331ca6fba5b53e18e38
data/lib/chop/diff.rb CHANGED
@@ -8,7 +8,7 @@ module Chop
8
8
  class Diff < Struct.new(:selector, :table, :session, :timeout, :block)
9
9
  def self.diff! selector, table, session: Capybara.current_session, timeout: Capybara.default_max_wait_time, errors: [], **kwargs, &block
10
10
  errors += session.driver.invalid_element_errors
11
- errors += [Cucumber::MultilineArgument::DataTable::Different]
11
+ errors += [Capybara::ElementNotFound, Cucumber::MultilineArgument::DataTable::Different]
12
12
  session.document.synchronize timeout, errors: errors do
13
13
  new(selector, table, session, timeout, block).diff! **kwargs
14
14
  end
data/lib/chop/dsl.rb CHANGED
@@ -9,16 +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
+ sync_timeout = timeout || Capybara.default_max_wait_time
12
13
  class_name = if as
13
14
  as.to_s
14
15
  elsif selector.respond_to?(:tag_name)
15
16
  selector.tag_name
16
17
  else
17
- session.find(selector).tag_name
18
+ session.document.synchronize sync_timeout, errors: session.driver.invalid_element_errors do
19
+ session.find(selector).tag_name
20
+ end
18
21
  end.camelize
19
22
  klass = const_get("Chop::#{class_name}")
20
23
  kwargs[:session] = session
21
- kwargs[:timeout] = timeout if timeout.present?
24
+ kwargs[:timeout] = timeout if timeout
22
25
  klass.diff! selector, table, **kwargs, &block
23
26
  end
24
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.2"
2
+ VERSION = "0.36.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.36.2
4
+ version: 0.36.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-12-31 00:00:00.000000000 Z
11
+ date: 2026-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord