chop 0.9.0 → 0.10.0
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.rb +1 -0
- data/lib/chop/base.rb +95 -0
- data/lib/chop/definition_list.rb +10 -62
- data/lib/chop/dsl.rb +8 -0
- data/lib/chop/form.rb +18 -0
- data/lib/chop/table.rb +10 -90
- data/lib/chop/unordered_list.rb +11 -52
- data/lib/chop/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dae29be1ed5e8747e2a7ccee7504b65968d7b0a
|
4
|
+
data.tar.gz: f0647eff2fd3aae0039af3079ccc977224d7d53f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89883bd7d309b914d545c591ba51119061d66cfb01b9227e39b0fa5ddd333108647f3aad4c396e5b7f173bc9b51ac521bc0dbf3533c9e2e612ce3dd1bbe5de5c
|
7
|
+
data.tar.gz: 89691d599ef482ae8563bf730200b16168fa8f14a3d4ce15c84c45bc22dc4933d210bde4fa7fc94f9bac0ba837827aa764b5076acf226535bc04593104df6a4a
|
data/lib/chop.rb
CHANGED
data/lib/chop/base.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
require "active_support/core_ext/object/blank"
|
2
|
+
|
3
|
+
module Chop
|
4
|
+
class Base < Struct.new(:selector, :table, :session, :block)
|
5
|
+
def self.diff! selector, table, session: Capybara.current_session, &block
|
6
|
+
new(selector, table, session, block).diff!
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :rows_finder
|
10
|
+
attr_accessor :cells_finder
|
11
|
+
attr_accessor :transformations
|
12
|
+
|
13
|
+
def initialize selector = nil, table = nil, session = Capybara.current_session, block = nil, &other_block
|
14
|
+
super
|
15
|
+
self.selector ||= default_selector
|
16
|
+
self.rows_finder = default_rows_finder
|
17
|
+
self.cells_finder = default_cells_finder
|
18
|
+
self.transformations = []
|
19
|
+
instance_eval &block if block.respond_to?(:call)
|
20
|
+
instance_eval &other_block if block_given?
|
21
|
+
end
|
22
|
+
|
23
|
+
def transformation &block
|
24
|
+
transformations << block
|
25
|
+
end
|
26
|
+
|
27
|
+
def normalize
|
28
|
+
transformation do |raw|
|
29
|
+
max = raw.map(&:count).max
|
30
|
+
raw.map! do |row|
|
31
|
+
row << "" while row.length < max
|
32
|
+
row
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def rows &block
|
38
|
+
self.rows_finder = block
|
39
|
+
end
|
40
|
+
|
41
|
+
def cells &block
|
42
|
+
self.cells_finder = block
|
43
|
+
end
|
44
|
+
|
45
|
+
def allow_not_found
|
46
|
+
@allow_not_found = true
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_a
|
50
|
+
results = rows_finder.call(root).map do |row|
|
51
|
+
row_to_text(row)
|
52
|
+
end
|
53
|
+
normalize
|
54
|
+
transformations.each { |transformation| transformation.call(results) }
|
55
|
+
results
|
56
|
+
end
|
57
|
+
|
58
|
+
def diff! cucumber_table = table
|
59
|
+
cucumber_table.diff! to_a
|
60
|
+
end
|
61
|
+
|
62
|
+
def hashes
|
63
|
+
rows = to_a.dup
|
64
|
+
header = rows.shift
|
65
|
+
rows.map do |row|
|
66
|
+
Hash[header.zip(row)]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def root
|
73
|
+
@root ||= begin
|
74
|
+
session.find(selector)
|
75
|
+
rescue Capybara::ElementNotFound
|
76
|
+
raise unless @allow_not_found
|
77
|
+
Capybara::Node::Simple.new("")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def row_to_text row
|
82
|
+
cells_finder.call(row).map do |cell|
|
83
|
+
cell_to_text(cell)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def cell_to_text cell
|
88
|
+
text = cell.text
|
89
|
+
if text.blank? and image = cell.all("img").first
|
90
|
+
text = image["alt"]
|
91
|
+
end
|
92
|
+
text
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/chop/definition_list.rb
CHANGED
@@ -1,49 +1,7 @@
|
|
1
|
-
require "
|
1
|
+
require "chop/base"
|
2
2
|
|
3
3
|
module Chop
|
4
|
-
class DefinitionList <
|
5
|
-
def self.diff! selector, table, session: Capybara.current_session, &block
|
6
|
-
new(selector, table, session, block).diff!
|
7
|
-
end
|
8
|
-
|
9
|
-
attr_accessor :transformations
|
10
|
-
|
11
|
-
def initialize selector = "dl", table = nil, session = Capybara.current_session, block = nil, &other_block
|
12
|
-
super
|
13
|
-
self.transformations = []
|
14
|
-
instance_eval &block if block.respond_to?(:call)
|
15
|
-
instance_eval &other_block if block_given?
|
16
|
-
end
|
17
|
-
|
18
|
-
def base_to_a
|
19
|
-
rows.collect do |row|
|
20
|
-
row_to_text(row)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def normalized_to_a
|
25
|
-
raw = base_to_a
|
26
|
-
max = raw.map(&:count).max
|
27
|
-
raw.map do |row|
|
28
|
-
row << "" while row.length < max
|
29
|
-
row
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def to_a
|
34
|
-
results = normalized_to_a
|
35
|
-
transformations.each { |transformation| transformation.call(results) }
|
36
|
-
results
|
37
|
-
end
|
38
|
-
|
39
|
-
def transformation &block
|
40
|
-
transformations << block
|
41
|
-
end
|
42
|
-
|
43
|
-
def diff! cucumber_table = table
|
44
|
-
cucumber_table.diff! to_a
|
45
|
-
end
|
46
|
-
|
4
|
+
class DefinitionList < Base
|
47
5
|
def column index, &block
|
48
6
|
transformation do |raw|
|
49
7
|
raw.map!.with_index do |row, row_index|
|
@@ -66,30 +24,20 @@ module Chop
|
|
66
24
|
|
67
25
|
private
|
68
26
|
|
69
|
-
def
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
def node
|
74
|
-
@node ||= session.find(selector)
|
27
|
+
def default_selector
|
28
|
+
"dl"
|
75
29
|
end
|
76
30
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
31
|
+
def default_rows_finder
|
32
|
+
Proc.new do |root|
|
33
|
+
root.all("dfn")
|
80
34
|
end
|
81
35
|
end
|
82
36
|
|
83
|
-
def
|
84
|
-
row
|
85
|
-
|
86
|
-
|
87
|
-
def cell_to_text cell
|
88
|
-
text = cell.text
|
89
|
-
if text.blank? and image = cell.all("img").first
|
90
|
-
text = image["alt"]
|
37
|
+
def default_cells_finder
|
38
|
+
Proc.new do |row|
|
39
|
+
row.all("dt,dd")
|
91
40
|
end
|
92
|
-
text
|
93
41
|
end
|
94
42
|
end
|
95
43
|
|
data/lib/chop/dsl.rb
CHANGED
@@ -9,6 +9,10 @@ module Chop
|
|
9
9
|
klass = const_get("Chop::#{class_name}")
|
10
10
|
klass.diff! selector, table, session: session, &block
|
11
11
|
end
|
12
|
+
|
13
|
+
def fill_in! table
|
14
|
+
Form.fill_in! table
|
15
|
+
end
|
12
16
|
end
|
13
17
|
end
|
14
18
|
|
@@ -25,6 +29,10 @@ if defined?(Cucumber::MultilineArgument::DataTable)
|
|
25
29
|
super
|
26
30
|
end
|
27
31
|
end
|
32
|
+
|
33
|
+
def fill_in!
|
34
|
+
Chop.fill_in! self
|
35
|
+
end
|
28
36
|
}
|
29
37
|
end
|
30
38
|
|
data/lib/chop/form.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module Chop
|
2
|
+
class Form < Struct.new(:table, :session)
|
3
|
+
def self.fill_in! table, session: Capybara.current_session
|
4
|
+
new(table, session).fill_in!
|
5
|
+
end
|
6
|
+
|
7
|
+
def fill_in!
|
8
|
+
table.rows_hash.each do |label, value|
|
9
|
+
field = session.find_field(label)
|
10
|
+
if field[:type] == "file"
|
11
|
+
session.attach_file label, "features/support/fixtures/#{value}"
|
12
|
+
else
|
13
|
+
session.fill_in label, with: value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/chop/table.rb
CHANGED
@@ -1,103 +1,23 @@
|
|
1
|
-
require "
|
1
|
+
require "chop/base"
|
2
2
|
|
3
3
|
module Chop
|
4
|
-
class Table <
|
5
|
-
def self.diff! selector, table, session: Capybara.current_session, &block
|
6
|
-
new(selector, table, session, block).diff!
|
7
|
-
end
|
8
|
-
|
9
|
-
attr_accessor :transformations
|
10
|
-
|
11
|
-
def initialize(selector = "table", table = nil, session = Capybara.current_session, block = nil, &other_block)
|
12
|
-
super
|
13
|
-
self.transformations = []
|
14
|
-
instance_eval &block if block.respond_to?(:call)
|
15
|
-
instance_eval &other_block if block_given?
|
16
|
-
end
|
17
|
-
|
18
|
-
def header_elements
|
19
|
-
rows("thead")
|
20
|
-
end
|
21
|
-
|
22
|
-
def header
|
23
|
-
header_elements.map do |row|
|
24
|
-
row.all(:xpath, "./*").map(&:text)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def body_elements
|
29
|
-
rows("tbody")
|
30
|
-
end
|
31
|
-
|
32
|
-
def body
|
33
|
-
body_elements.map do |row|
|
34
|
-
row_to_text(row)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def base_to_a
|
39
|
-
header + body
|
40
|
-
end
|
41
|
-
|
42
|
-
def normalized_to_a
|
43
|
-
raw = base_to_a
|
44
|
-
max = raw.map(&:count).max
|
45
|
-
raw.select { |row| row.count == max }
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_a
|
49
|
-
results = normalized_to_a
|
50
|
-
transformations.each { |transformation| transformation.call(results) }
|
51
|
-
results
|
52
|
-
end
|
53
|
-
|
54
|
-
def transformation &block
|
55
|
-
transformations << block
|
56
|
-
end
|
57
|
-
|
58
|
-
def diff! cucumber_table = table
|
59
|
-
cucumber_table.diff! to_a
|
60
|
-
end
|
61
|
-
|
62
|
-
def hashes
|
63
|
-
rows = to_a.dup
|
64
|
-
header = rows.shift
|
65
|
-
rows.map do |row|
|
66
|
-
Hash[header.zip(row)]
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def allow_not_found
|
71
|
-
@allow_not_found = true
|
72
|
-
end
|
73
|
-
|
4
|
+
class Table < Base
|
74
5
|
private
|
75
6
|
|
76
|
-
def
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
def node
|
81
|
-
@node ||= begin
|
82
|
-
session.find(selector)
|
83
|
-
rescue Capybara::ElementNotFound
|
84
|
-
raise unless @allow_not_found
|
85
|
-
Capybara::Node::Simple.new("")
|
86
|
-
end
|
7
|
+
def default_selector
|
8
|
+
"table"
|
87
9
|
end
|
88
10
|
|
89
|
-
def
|
90
|
-
|
91
|
-
|
11
|
+
def default_rows_finder
|
12
|
+
Proc.new do |root|
|
13
|
+
root.all("tr")
|
92
14
|
end
|
93
15
|
end
|
94
16
|
|
95
|
-
def
|
96
|
-
|
97
|
-
|
98
|
-
text = image["alt"]
|
17
|
+
def default_cells_finder
|
18
|
+
Proc.new do |row|
|
19
|
+
row.all("td,th")
|
99
20
|
end
|
100
|
-
text
|
101
21
|
end
|
102
22
|
end
|
103
23
|
end
|
data/lib/chop/unordered_list.rb
CHANGED
@@ -1,63 +1,22 @@
|
|
1
|
-
require "
|
1
|
+
require "chop/base"
|
2
2
|
|
3
3
|
module Chop
|
4
|
-
class UnorderedList <
|
5
|
-
def self.diff! selector, table, session: Capybara.current_session, &block
|
6
|
-
new(selector, table, session, block).diff!
|
7
|
-
end
|
8
|
-
|
9
|
-
attr_accessor :transformations
|
10
|
-
|
11
|
-
def initialize selector = "ul", table = nil, session = Capybara.current_session, block = nil, &other_block
|
12
|
-
super
|
13
|
-
self.transformations = []
|
14
|
-
instance_eval &block if block.respond_to?(:call)
|
15
|
-
instance_eval &other_block if block_given?
|
16
|
-
end
|
17
|
-
|
18
|
-
def base_to_a
|
19
|
-
rows.collect do |row|
|
20
|
-
row_to_text(row)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def normalized_to_a
|
25
|
-
raw = base_to_a
|
26
|
-
max = raw.map(&:count).max
|
27
|
-
raw.select { |row| row.count == max }
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_a
|
31
|
-
results = normalized_to_a
|
32
|
-
transformations.each { |transformation| transformation.call(results) }
|
33
|
-
results
|
34
|
-
end
|
35
|
-
|
36
|
-
def transformation &block
|
37
|
-
transformations << block
|
38
|
-
end
|
39
|
-
|
40
|
-
def diff! cucumber_table = table
|
41
|
-
cucumber_table.diff! to_a
|
42
|
-
end
|
43
|
-
|
4
|
+
class UnorderedList < Base
|
44
5
|
private
|
45
6
|
|
46
|
-
def
|
47
|
-
|
7
|
+
def default_selector
|
8
|
+
"ul"
|
48
9
|
end
|
49
10
|
|
50
|
-
def
|
51
|
-
|
11
|
+
def default_rows_finder
|
12
|
+
Proc.new do |root|
|
13
|
+
root.all("li")
|
14
|
+
end
|
52
15
|
end
|
53
16
|
|
54
|
-
def
|
55
|
-
|
56
|
-
|
57
|
-
if text.blank? and image = cell.all("img").first
|
58
|
-
text = image["alt"]
|
59
|
-
end
|
60
|
-
text
|
17
|
+
def default_cells_finder
|
18
|
+
Proc.new do |row|
|
19
|
+
[row]
|
61
20
|
end
|
62
21
|
end
|
63
22
|
end
|
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.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -126,9 +126,11 @@ files:
|
|
126
126
|
- bin/setup
|
127
127
|
- chop.gemspec
|
128
128
|
- lib/chop.rb
|
129
|
+
- lib/chop/base.rb
|
129
130
|
- lib/chop/builder.rb
|
130
131
|
- lib/chop/definition_list.rb
|
131
132
|
- lib/chop/dsl.rb
|
133
|
+
- lib/chop/form.rb
|
132
134
|
- lib/chop/table.rb
|
133
135
|
- lib/chop/unordered_list.rb
|
134
136
|
- lib/chop/version.rb
|