class Chop::Form
Public Class Methods
diff!(selector, table, session: Capybara.current_session, &block)
click to toggle source
# File lib/chop/form.rb, line 10 def self.diff! selector, table, session: Capybara.current_session, &block root = begin if selector.is_a?(Capybara::Node::Element) selector else session.find(selector) end rescue Capybara::ElementNotFound raise unless @allow_not_found Node("") end all_fields = root.all("input, textarea, select") relevant_fields = all_fields.inject([]) do |fields, field| next fields if field[:name].blank? next fields if field[:type] == "submit" next fields if field[:type] == "hidden" fields + [field] end deduplicated_fields = relevant_fields.inject([]) do |fields, field| next fields if fields.map { |field| field[:name] }.include?(field[:name]) fields + [field] end actual = deduplicated_fields.inject([]) do |fields, field| next fields unless label = find_label_for(field) field = Field.from(session, field) fields + [[label.text(:all), field.get_value.to_s]] end table.diff! actual, surplus_row: false, misplaced_col: false end
fill_in!(table, session: Capybara.current_session, path: "features/support/fixtures")
click to toggle source
# File lib/chop/form.rb, line 6 def self.fill_in! table, session: Capybara.current_session, path: "features/support/fixtures" new(table, session, path).fill_in! end
find_label_for(field, session: Capybara.current_session)
click to toggle source
# File lib/chop/form.rb, line 41 def self.find_label_for field, session: Capybara.current_session if field[:id].present? session.first("label[for='#{field[:id]}']", visible: :all) else raise "cannot find label without id... yet" end end
Public Instance Methods
fill_in!()
click to toggle source
# File lib/chop/form.rb, line 49 def fill_in! table.rows_hash.each do |label, value| Field.for(session, label, value, path).fill_in! end end