html_surgeon 0.3.0 → 0.4.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/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