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 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