html_surgeon 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -0
- data/lib/html_surgeon/change_set.rb +30 -6
- data/lib/html_surgeon/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6988528869b8d0783dc66a3fc95ac318a39f44f4
|
4
|
+
data.tar.gz: 9b0a847987cf59900c58d88d68edf65a78c5d2cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e5ffbded35f90903bc1aaa0af358dd903fa99024f122ff20195b4c91b667d8842136aa31546422ec12ee81d045be4d13d7ac6562c0844e3314ac260778b9ee8
|
7
|
+
data.tar.gz: 8baf36739a718bb7eb98a0208ebb92ef2564a8349492062cb5bac7275252d7449d8802a00c56481c45b711e26a54629f779a88db28b3cbd9ff5ec9e8464dec2d
|
data/README.md
CHANGED
@@ -165,6 +165,16 @@ change_set = surgeon.css('div.to-be-changed')
|
|
165
165
|
change_set = surgeon.xpath("span") # note that we use Nokogiri's HTML Fragment and the use of self is special.
|
166
166
|
```
|
167
167
|
|
168
|
+
### Refining the selection
|
169
|
+
|
170
|
+
we can skip some nodes based on callbacks added to the Change Set using `select` and `reject` methods.
|
171
|
+
|
172
|
+
```ruby
|
173
|
+
change_set = surgeon.css('.to-be-changed')
|
174
|
+
change_set.reject { |node| node.name == 'div' }.select { |node| node.get_attribute('class').to_s.split(' ').include? 'yeah-do-it' }
|
175
|
+
change_set.run # => nodes skipped if reject callback return truthy or if select callback return falsey
|
176
|
+
```
|
177
|
+
|
168
178
|
## Available Changes
|
169
179
|
|
170
180
|
### Replace Tag Name
|
@@ -228,6 +238,10 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/eturin
|
|
228
238
|
|
229
239
|
## CHANGESET
|
230
240
|
|
241
|
+
### v0.4.0
|
242
|
+
|
243
|
+
- added `select` and `reject` callbacks to Change Set, based on blocks with `node` as single argument
|
244
|
+
|
231
245
|
### v0.3.0
|
232
246
|
|
233
247
|
- added fluid ChangeSet ID setter
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module HtmlSurgeon
|
2
2
|
|
3
3
|
class ChangeSet
|
4
|
-
attr_reader :node_set, :base, :change_list, :run_time
|
4
|
+
attr_reader :node_set, :base, :change_list, :run_time, :refinement_callbacks
|
5
5
|
|
6
6
|
def self.create(node_set, base)
|
7
7
|
new_class.new node_set, base
|
@@ -16,11 +16,12 @@ module HtmlSurgeon
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def initialize(node_set, base)
|
19
|
-
@node_set
|
20
|
-
@base
|
21
|
-
@change_list
|
22
|
-
@id
|
23
|
-
@run_time
|
19
|
+
@node_set = node_set
|
20
|
+
@base = base
|
21
|
+
@change_list = []
|
22
|
+
@id = SecureRandom.uuid
|
23
|
+
@run_time = nil
|
24
|
+
@refinement_callbacks = []
|
24
25
|
end
|
25
26
|
|
26
27
|
delegate :audit?, :html, to: :base
|
@@ -51,6 +52,16 @@ module HtmlSurgeon
|
|
51
52
|
change_list.map &:log
|
52
53
|
end
|
53
54
|
|
55
|
+
def select(&block)
|
56
|
+
refinement_callbacks << [:select, block]
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def reject(&block)
|
61
|
+
refinement_callbacks << [:reject, block]
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
54
65
|
# CHANGES
|
55
66
|
|
56
67
|
private
|
@@ -61,6 +72,19 @@ module HtmlSurgeon
|
|
61
72
|
end
|
62
73
|
|
63
74
|
def apply_on_node(node)
|
75
|
+
refinement_callbacks.each do |(type, refinement)|
|
76
|
+
case type
|
77
|
+
when :select
|
78
|
+
return false unless refinement.call(node)
|
79
|
+
when :reject
|
80
|
+
return false if refinement.call(node)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
do_apply_on_node(node)
|
85
|
+
end
|
86
|
+
|
87
|
+
def do_apply_on_node(node)
|
64
88
|
change_list.each do |change|
|
65
89
|
change.apply(node)
|
66
90
|
end
|
data/lib/html_surgeon/version.rb
CHANGED