Module: WatirPump::Components::CheckboxGroup

Included in:
WatirPump::Component
Defined in:
lib/watir_pump/components/checkbox_group.rb

Instance Method Summary collapse

Instance Method Details

#checkbox_accessor(name, *args) ⇒ Object Also known as: checkbox_group



35
36
37
38
# File 'lib/watir_pump/components/checkbox_group.rb', line 35

def checkbox_accessor(name, *args)
  checkbox_reader(name, *args)
  checkbox_writer(name, *args)
end

#checkbox_reader(name, *args) ⇒ Object

rubocop:disable Metrics/AbcSize



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/watir_pump/components/checkbox_group.rb', line 23

def checkbox_reader(name, *args) # rubocop:disable Metrics/AbcSize
  form_field_readers << name
  define_method name do
    selected = find_element(:checkboxes, args).select(&:set?)
    return [] unless selected
    if selected.first&.parent&.tag_name == 'label'
      return selected.map { |el| el.parent.text }
    end
    selected.map { |el| root.label(for: el.id).text }
  end
end

#checkbox_writer(name, *args) ⇒ Object

rubocop:disable Metrics/AbcSize



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/watir_pump/components/checkbox_group.rb', line 6

def checkbox_writer(name, *args) # rubocop:disable Metrics/AbcSize
  form_field_writers << name
  define_method "#{name}=" do |values|
    values = Array(values)
    # <label>value<input /></label>
    list = find_element(:checkboxes, args)
    values.each do |value|
      if list.first.parent.tag_name == 'label'
        list.find { |el| el.parent.text == value }.set
      else
        # <label for='a'>value</label><input id='a' />
        list.find { |el| el.id == root.label(text: value).for }.set
      end
    end
  end
end