chop 0.20.0 → 0.20.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 +4 -4
- data/lib/chop/diff.rb +6 -1
- data/lib/chop/form.rb +41 -5
- data/lib/chop/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee08121005f0c0e0dc0c87490bd7e3dc5437aa25
|
4
|
+
data.tar.gz: 88f4109163927c7f3ded4aed309e2129ef8fbd35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c090fba6c2c4f5c5033690955dbffb5cc391c7ba1ab0c1f1af10089178ed40d9da7b5af6e8fbb54d2edc3f518b96fa080d0180bff4834e5bd0cd216f5812b50
|
7
|
+
data.tar.gz: 2139c72e05d46285b0c1279951c62831f1fae90395a9d0a1d68d08c05699cd7e597b67ecb021a896a9cd5f6a62933a17af73d68bafc6b63a32e2f3c878a20ce1
|
data/lib/chop/diff.rb
CHANGED
@@ -70,7 +70,12 @@ module Chop
|
|
70
70
|
def hash_transformation &block
|
71
71
|
transformation do |rows|
|
72
72
|
header = rows[0]
|
73
|
-
keys = header.to_a.map
|
73
|
+
keys = header.to_a.map.with_index do |cell, index|
|
74
|
+
key = cell.text.parameterize.underscore
|
75
|
+
next key if key.present?
|
76
|
+
next cell.text if cell.text.present?
|
77
|
+
index + 1
|
78
|
+
end
|
74
79
|
body = rows[1..-1]
|
75
80
|
hashes = body.map { |row| HashWithIndifferentAccess[keys.zip(row)] }
|
76
81
|
yield hashes
|
data/lib/chop/form.rb
CHANGED
@@ -8,12 +8,27 @@ module Chop
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.diff! selector, table, session: Capybara.current_session, &block
|
11
|
-
|
12
|
-
|
11
|
+
all_fields = session.find("form").all("input, textarea, select")
|
12
|
+
deduplicated_fields = all_fields.inject([]) do |fields, field|
|
13
|
+
next fields if fields.map { |field| field[:name] }.include?(field[:name])
|
14
|
+
fields + [field]
|
15
|
+
end
|
16
|
+
actual = deduplicated_fields.inject([]) do |fields, field|
|
17
|
+
next fields unless label = find_label_for(field)
|
18
|
+
field = Field.from(session, field)
|
19
|
+
fields + [[label.text, field.get_value]]
|
13
20
|
end
|
14
21
|
table.diff! actual, surplus_row: false
|
15
22
|
end
|
16
23
|
|
24
|
+
def self.find_label_for field, session: Capybara.current_session
|
25
|
+
if field[:id]
|
26
|
+
session.first("label[for='#{field[:id]}']")
|
27
|
+
else
|
28
|
+
raise "cannot find label without id... yet"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
17
32
|
def fill_in!
|
18
33
|
table.rows_hash.each do |label, value|
|
19
34
|
Field.for(session, label, value, path).fill_in!
|
@@ -23,13 +38,26 @@ module Chop
|
|
23
38
|
class Field < Struct.new(:session, :label, :value, :path, :field)
|
24
39
|
def self.for session, label, value, path
|
25
40
|
field = session.find_field(label)
|
26
|
-
candidates = descendants.sort_by do |a|
|
27
|
-
a == Chop::Form::Default ? 1 : -1 # ensure Default comes last
|
28
|
-
end
|
29
41
|
candidates.map do |klass|
|
30
42
|
klass.new(session, label, value, path, field)
|
31
43
|
end.find(&:matches?)
|
32
44
|
end
|
45
|
+
|
46
|
+
def self.from session, field
|
47
|
+
candidates.map do |klass|
|
48
|
+
klass.new(session, nil, nil, nil, field)
|
49
|
+
end.find(&:matches?)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.candidates
|
53
|
+
descendants.sort_by do |a|
|
54
|
+
a == Chop::Form::Default ? 1 : -1 # ensure Default comes last
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_value
|
59
|
+
field.value
|
60
|
+
end
|
33
61
|
end
|
34
62
|
|
35
63
|
class MultipleSelect < Field
|
@@ -89,6 +117,10 @@ module Chop
|
|
89
117
|
def fill_in!
|
90
118
|
field.set value.present?
|
91
119
|
end
|
120
|
+
|
121
|
+
def get_value
|
122
|
+
field.checked? ? "✓" : ""
|
123
|
+
end
|
92
124
|
end
|
93
125
|
|
94
126
|
class Radio < Field
|
@@ -104,6 +136,10 @@ module Chop
|
|
104
136
|
end
|
105
137
|
end
|
106
138
|
|
139
|
+
def get_value
|
140
|
+
session.all("[name='#{field[:name]}']").find(&:checked?).try(:value)
|
141
|
+
end
|
142
|
+
|
107
143
|
private
|
108
144
|
|
109
145
|
def nonstandard_labelling?
|
data/lib/chop/version.rb
CHANGED
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.20.
|
4
|
+
version: 0.20.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|