watir_pump 0.3.0 → 0.3.1

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
  SHA1:
3
- metadata.gz: 7ffaf36b627fe9a96a2e049a78722425468ab4c0
4
- data.tar.gz: 22d9a1bab82fb13eb3b5b7e7a469c9fb10798da7
3
+ metadata.gz: 02e401686e107b87efd108c2ddf4325f02e982d0
4
+ data.tar.gz: e2f460ee7306706cfac9cd43fac92722e8eb76f7
5
5
  SHA512:
6
- metadata.gz: f0ba097dc075aeb94799110920f644fc890fc712c101997eb53e209b647fa74ea4a95e93277d3ae6156553e270b8c157f8baa4e4e1d7729c5d9b897d1fca5461
7
- data.tar.gz: e80ed1f00a227ef55b67137788e2782a25192f24b3c85915d7897dcff5ba063b2befac8c69160ac59c82870acec82c8a0d0b68b20cb7a832b8cb29cbb4ac68ee
6
+ metadata.gz: fc80d939a394010276058897d615605cc999030350d70a0b92edb5a5c8fd45226e3ea53e3fb87d87defec5d2682f5749e9f8c991ce590ccc7d6e3a496b46d1bf
7
+ data.tar.gz: 429bea681e781b515948e6b7e8a21801bc9f4a47da693eb5f8140698ec9861e92f1a18744e266bfdab63055ed7ef6305fe5e5b37b4703160ac24a465ac573571
@@ -32,16 +32,34 @@ module WatirPump
32
32
  end
33
33
  end
34
34
 
35
+ def form_field_readers
36
+ @form_field_readers ||= Set.new
37
+ end
38
+
39
+ def form_field_writers
40
+ @form_field_writers ||= Set.new
41
+ end
42
+
35
43
  include Components::RadioGroup
36
44
  include Components::CheckboxGroup
37
45
  include Components::DropdownList
38
46
 
47
+ def custom_reader(name, code = nil)
48
+ form_field_readers << name
49
+ query(name, code) if code
50
+ end
51
+
52
+ def custom_writer(name, code = nil)
53
+ form_field_writers << name
54
+ query("#{name}=", code) if code
55
+ end
56
+
39
57
  def self.define_reader(watir_method)
40
58
  define_method "#{watir_method}_reader" do |name, *args|
41
- send(watir_method, "#{name}_element", *args)
59
+ send(watir_method, "#{name}_reader_element", *args)
60
+ form_field_readers << name
42
61
  define_method(name) do
43
- @form_fields << name
44
- el = send("#{name}_element")
62
+ el = send("#{name}_reader_element")
45
63
  %w[input textarea].include?(el.tag_name) ? el.value : el.text
46
64
  end
47
65
  end
@@ -49,27 +67,27 @@ module WatirPump
49
67
 
50
68
  def self.define_writer(watir_method)
51
69
  define_method "#{watir_method}_writer" do |name, *args|
52
- send(watir_method, "#{name}_element", *args)
70
+ send(watir_method, "#{name}_writer_element", *args)
71
+ form_field_writers << name
53
72
  define_method("#{name}=") do |value|
54
- @form_fields << name
55
- send("#{name}_element").set value
73
+ send("#{name}_writer_element").set value
56
74
  end
57
75
  end
58
76
  end
59
77
 
60
- def self.define_accessor(watir_method)
78
+ def self.define_accessor(watir_method) # rubocop:disable Metrics/AbcSize
61
79
  define_method "#{watir_method}_accessor" do |name, *args|
62
- send(watir_method, "#{name}_element", *args)
80
+ send(watir_method, "#{name}_accessor_element", *args)
63
81
  # reader, TODO: DRY it up
82
+ form_field_readers << name
64
83
  define_method(name) do
65
- @form_fields << name
66
- el = send("#{name}_element")
84
+ el = send("#{name}_accessor_element")
67
85
  %w[input textarea].include?(el.tag_name) ? el.value : el.text
68
86
  end
69
87
  # writer, TODO: DRY it up
88
+ form_field_writers << name
70
89
  define_method("#{name}=") do |value|
71
- @form_fields << name
72
- send("#{name}_element").set value
90
+ send("#{name}_accessor_element").set value
73
91
  end
74
92
  end
75
93
  end
@@ -95,9 +113,9 @@ module WatirPump
95
113
  # Methods for element clickers
96
114
  Constants::CLICKABLES.each do |watir_method|
97
115
  define_method "#{watir_method}_clicker" do |name, *args|
98
- send(watir_method, "#{name}_element", *args)
116
+ send(watir_method, "#{name}_clicker_element", *args)
99
117
  define_method(name) do
100
- send("#{name}_element").click
118
+ send("#{name}_clicker_element").click
101
119
  end
102
120
  end
103
121
  end
@@ -144,13 +162,21 @@ module WatirPump
144
162
  end
145
163
  end
146
164
  end
165
+
166
+ def decorate2(method, code)
167
+ original_name = "#{method}_before_decorate2".to_sym
168
+ alias_method original_name, method
169
+ define_method method do |*args|
170
+ v = send(original_name, *args)
171
+ instance_exec(v, &code)
172
+ end
173
+ end
147
174
  end
148
175
 
149
176
  def initialize(browser, parent = nil, root_node = nil)
150
177
  @browser = browser
151
178
  @parent = parent
152
179
  @root_node = root_node
153
- @form_fields = Set.new
154
180
  end
155
181
 
156
182
  def root
@@ -162,6 +188,10 @@ module WatirPump
162
188
  alias node root
163
189
 
164
190
  def fill_form(data)
191
+ missing = data.to_h.keys - self.class.form_field_writers.to_a
192
+ unless missing.empty?
193
+ raise "#{self.class.name} does not contain writer(s) for #{missing}"
194
+ end
165
195
  data.to_h.each_pair do |k, v|
166
196
  send("#{k}=", v)
167
197
  end
@@ -169,7 +199,9 @@ module WatirPump
169
199
 
170
200
  def form_data
171
201
  {}.tap do |h|
172
- @form_fields.map { |field| h[field] = send(field) }
202
+ self.class.form_field_readers.map do |field|
203
+ h[field] = send(field)
204
+ end
173
205
  end
174
206
  end
175
207
 
@@ -4,8 +4,8 @@ module WatirPump
4
4
  module Components
5
5
  module CheckboxGroup
6
6
  def checkbox_writer(name, *args) # rubocop:disable Metrics/AbcSize
7
+ form_field_writers << name
7
8
  define_method "#{name}=" do |values|
8
- @form_fields << name
9
9
  values = Array(values)
10
10
  # <label>value<input /></label>
11
11
  list = find_element(:checkboxes, args)
@@ -21,8 +21,8 @@ module WatirPump
21
21
  end
22
22
 
23
23
  def checkbox_reader(name, *args) # rubocop:disable Metrics/AbcSize
24
+ form_field_readers << name
24
25
  define_method name do
25
- @form_fields << name
26
26
  selected = find_element(:checkboxes, args).select(&:set?)
27
27
  return [] unless selected
28
28
  if selected.first&.parent&.tag_name == 'label'
@@ -4,8 +4,8 @@ module WatirPump
4
4
  module Components
5
5
  module DropdownList
6
6
  def select_reader(name, *args)
7
+ form_field_readers << name
7
8
  define_method(name) do
8
- @form_fields << name
9
9
  select = find_element(:select, args)
10
10
  selected = select.selected_options
11
11
  return select.multiple? ? selected.map(&:text) : selected.first.text
@@ -13,8 +13,8 @@ module WatirPump
13
13
  end
14
14
 
15
15
  def select_writer(name, *args)
16
+ form_field_writers << name
16
17
  define_method("#{name}=") do |values|
17
- @form_fields << name
18
18
  select = find_element(:select, args)
19
19
  return select.select(*values)
20
20
  end
@@ -4,8 +4,8 @@ module WatirPump
4
4
  module Components
5
5
  module RadioGroup
6
6
  def radio_reader(name, *args)
7
+ form_field_readers << name
7
8
  define_method name do |*loc_args|
8
- @form_fields << name
9
9
  list = find_element(:radios, args, loc_args)
10
10
  selected = list.find(&:set?)
11
11
  if selected
@@ -16,8 +16,8 @@ module WatirPump
16
16
  end
17
17
 
18
18
  def radio_writer(name, *args) # rubocop:disable Metrics/AbcSize
19
+ form_field_writers << name
19
20
  define_method "#{name}=" do |value|
20
- @form_fields << name
21
21
  list = find_element(:radios, args)
22
22
  # <label>value<input /></label>
23
23
  if list.first.parent.tag_name == 'label'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watir_pump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartek Wilczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-03 00:00:00.000000000 Z
11
+ date: 2018-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport