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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 128a0133d9c441981b5488fcd23ce7d1d199b295
4
- data.tar.gz: 80cbf114adcbbf71b74ca8c2edc42af26bf32ee6
3
+ metadata.gz: 6988528869b8d0783dc66a3fc95ac318a39f44f4
4
+ data.tar.gz: 9b0a847987cf59900c58d88d68edf65a78c5d2cd
5
5
  SHA512:
6
- metadata.gz: 383b56f154ac0bf797035ad02da5c9ce24bad52efc2d9e2e0659ff91cdce5df07654068845836b12a5cf36feb82f92f5766648424b835aea927ad50e4db8d818
7
- data.tar.gz: 86d0f5ba4376e8337cb62ccf75341d46e72df559b422eca1ae3ac574d06eb58ce1237d08bbd5519677ef94d88ec0f60874e6270b0ca342444488080500ecffb2
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 = node_set
20
- @base = base
21
- @change_list = []
22
- @id = SecureRandom.uuid
23
- @run_time = nil
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
@@ -1,3 +1,3 @@
1
1
  module HtmlSurgeon
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html_surgeon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo Turiño