html_surgeon 0.5.2 → 0.6.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: baa39a17d913698e40c9bf2a0aa01b2602c79b25
4
- data.tar.gz: ba53b5ec29bd03823da8f285ed6e4b2da755d19f
3
+ metadata.gz: 34619a8d9e7430b304e686b0a3dbdfb3d02ea140
4
+ data.tar.gz: 672e8ff3f2e8f2fecb3b9121ab8a54d870175d40
5
5
  SHA512:
6
- metadata.gz: 7286686df9036e954a598cbc59a6820dad71eca8b9ce64ea9e3088447868bf99193a1e2f27a64d880c44f169b7e21a309bf4adfcb43d01ef544ab7802cbc937e
7
- data.tar.gz: cb951074c45b144d7cda13ea2408b6f970f709741c2fe952a4cf14d8e22d93788897c8117f87876ac5278b689fd1743548c2e4de6f4ea4b406393bc8cac5281f
6
+ metadata.gz: ef23b46708e249599fe9d28924f4ff7b2566fc5c01c55e055ff791d6680f1ef6355102ed278010bdcedcf4461814ae9c2b7629f1289c75fb8b1224f35e2e8c02
7
+ data.tar.gz: 79e27faa58ffaf5aff691105ba67433eaf6d31d26105010eed840e42f049b9a98b2e8f3ff7e60c4a441b67741fd2815c8fb0384f78f946a5ca4a176e9c0b14ad
data/README.md CHANGED
@@ -210,10 +210,17 @@ We can also revert all audited changes.
210
210
  ```ruby
211
211
  surgeon = HtmlSurgeon.for(GIVEN_HTML)
212
212
 
213
- surgeon.rollback.html # => returns the html with all events reverted
214
- surgeon.rollback(change_set: uuid).html # => returns the html with only the given change set reverted
215
- surgeon.rollback(changed_at: changed_at).html # => returns the html with only the change set with timestamp reverted
216
- surgeon.rollback(changed_from: changed_from).html # => returns the html with any change sets with a timestamp more recent than `changed_from` reverted
213
+ surgeon.rollback # => Integer with number of changes reverted
214
+ surgeon.html # => returns the html with all events reverted
215
+
216
+ surgeon.rollback(change_set: uuid) # => Integer with number of changes reverted
217
+ surgeon.html # => returns the html with only the given change set reverted
218
+
219
+ surgeon.rollback(changed_at: changed_at) # => Integer with number of changes reverted
220
+ surgeon.html # => returns the html with only the change set with timestamp reverted
221
+
222
+ surgeon.rollback(changed_from: changed_from) # => Integer with number of changes reverted
223
+ surgeon.html # => returns the html with any change sets with a timestamp more recent than `changed_from` reverted
217
224
  ```
218
225
 
219
226
  ## Clear Audit trail
@@ -222,7 +229,8 @@ we can clear all audit from the given html with the `clear_audit` method.
222
229
 
223
230
  ```ruby
224
231
  surgeon = HtmlSurgeon.for(GIVEN_HTML)
225
- surgeon.clear_audit.html # => returns the html with all audit html attributes removed
232
+ surgeon.clear_audit # => returns an Integer with the number of changes
233
+ surgeon.html # => returns the html with all audit html attributes removed
226
234
  ```
227
235
 
228
236
  ## Helper Methods
@@ -262,6 +270,10 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/eturin
262
270
  ## CHANGESET
263
271
 
264
272
 
273
+ ### v0.6.0
274
+
275
+ - *WARNING: BREAKING API CHANGE*: now `rollback` and `clear_audit` return the number of changes performed
276
+
265
277
  ### v0.5.2
266
278
 
267
279
  - added `changed_nodes` and `changed_nodes_size` to Change Set
@@ -0,0 +1,25 @@
1
+ module HtmlSurgeon
2
+ module NodeServices
3
+ class AuditCleaner
4
+ attr_reader :node
5
+
6
+ def initialize(node:)
7
+ @node = node
8
+ end
9
+
10
+ def call
11
+ write_empty_changes_list
12
+ 1 # always count as 1 change
13
+ end
14
+
15
+ private
16
+ def write_empty_changes_list
17
+ auditor.apply []
18
+ end
19
+
20
+ def auditor
21
+ @auditor ||= Auditor.new node
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,83 @@
1
+ module HtmlSurgeon
2
+ module NodeServices
3
+ class Reverser
4
+ attr_reader :node, :change_set, :changed_at, :changed_from
5
+
6
+ def initialize(node:, change_set: nil, changed_at: nil, changed_from: nil)
7
+ @node = node
8
+ @change_set = change_set
9
+ @changed_at = changed_at
10
+ @changed_from = changed_from
11
+ end
12
+
13
+ def call
14
+ changes_to_revert.each do |change_definition|
15
+ revert_change change_definition
16
+ end
17
+
18
+ write_remaining_changes
19
+
20
+ changes_to_revert.size
21
+ end
22
+
23
+ private
24
+
25
+ def revert_change(change_definition)
26
+ klass = Changes.change_class_by_type change_definition[:type]
27
+ klass.revert(node, change_definition)
28
+ end
29
+
30
+ def write_remaining_changes
31
+ auditor.apply remaining_changes
32
+ end
33
+
34
+ def changes
35
+ auditor.changes
36
+ end
37
+
38
+ def remaining_changes
39
+ changes - changes_to_revert
40
+ end
41
+
42
+ def changes_to_revert
43
+ @changes_to_revert ||= load_changes_to_revert
44
+ end
45
+
46
+ def auditor
47
+ @auditor ||= Auditor.new node
48
+ end
49
+
50
+ def load_changes_to_revert
51
+ changes.dup.tap do |rev_changes|
52
+ remove_by_change_set(rev_changes)
53
+ remove_by_changed_at(rev_changes)
54
+ remove_by_changed_from(rev_changes)
55
+ end
56
+ end
57
+
58
+ def remove_by_changed_from(rev_changes)
59
+ return unless changed_from.present?
60
+
61
+ changed_from_time = changed_from.to_time.utc
62
+ rev_changes.reject! do |change|
63
+ change[:changed_at].to_time.utc < changed_from_time
64
+ end
65
+ end
66
+
67
+ def remove_by_changed_at(rev_changes)
68
+ return unless changed_at.present?
69
+
70
+ changed_at_time = changed_at.to_time.utc
71
+ rev_changes.reject! do |change|
72
+ change[:changed_at].to_time.utc != changed_at_time
73
+ end
74
+ end
75
+
76
+ def remove_by_change_set(rev_changes)
77
+ return unless change_set.present?
78
+
79
+ rev_changes.reject! { |change| change[:change_set] != change_set }
80
+ end
81
+ end
82
+ end
83
+ end
@@ -26,20 +26,22 @@ module HtmlSurgeon
26
26
  ChangeSet.create(node_set, self)
27
27
  end
28
28
 
29
+ # returns the number of changes performed
29
30
  def rollback(change_set: nil, changed_at: nil, changed_from: nil)
30
- doc.css("[#{DATA_CHANGE_AUDIT_ATTRIBUTE}]").each do |node|
31
- NodeReverser.new(node: node, change_set: change_set, changed_at: changed_at, changed_from: changed_from).call
31
+ doc.css("[#{DATA_CHANGE_AUDIT_ATTRIBUTE}]").reduce(0) do |sum, node|
32
+ reverser = NodeServices::Reverser.new node: node,
33
+ change_set: change_set,
34
+ changed_at: changed_at,
35
+ changed_from: changed_from
36
+ sum + reverser.call
32
37
  end
33
-
34
- self
35
38
  end
36
39
 
37
40
  def clear_audit
38
- doc.css("[#{DATA_CHANGE_AUDIT_ATTRIBUTE}]").each do |node|
39
- NodeAuditCleaner.new(node: node).call
41
+ doc.css("[#{DATA_CHANGE_AUDIT_ATTRIBUTE}]").reduce(0) do |sum, node|
42
+ cleaner = NodeServices::AuditCleaner.new node: node
43
+ sum + cleaner.call
40
44
  end
41
-
42
- self
43
45
  end
44
46
 
45
47
  private
@@ -1,3 +1,3 @@
1
1
  module HtmlSurgeon
2
- VERSION = "0.5.2"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/html_surgeon.rb CHANGED
@@ -6,14 +6,14 @@ require 'active_support/all'
6
6
  require 'html_surgeon/version'
7
7
  require 'html_surgeon/abstract_method_error'
8
8
  require 'html_surgeon/auditor'
9
- require 'html_surgeon/node_reverser'
10
- require 'html_surgeon/node_audit_cleaner'
11
9
  require 'html_surgeon/service'
12
10
  require 'html_surgeon/change_set'
13
11
  require 'html_surgeon/change'
14
12
  require 'html_surgeon/changes'
15
13
  require 'html_surgeon/changes/add_css_class'
16
14
  require 'html_surgeon/changes/replace_tag_name'
15
+ require 'html_surgeon/node_services/audit_cleaner'
16
+ require 'html_surgeon/node_services/reverser'
17
17
 
18
18
  module HtmlSurgeon
19
19
  DATA_CHANGE_AUDIT_ATTRIBUTE = 'data-surgeon-audit'.freeze
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.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo Turiño
@@ -146,8 +146,8 @@ files:
146
146
  - lib/html_surgeon/changes.rb
147
147
  - lib/html_surgeon/changes/add_css_class.rb
148
148
  - lib/html_surgeon/changes/replace_tag_name.rb
149
- - lib/html_surgeon/node_audit_cleaner.rb
150
- - lib/html_surgeon/node_reverser.rb
149
+ - lib/html_surgeon/node_services/audit_cleaner.rb
150
+ - lib/html_surgeon/node_services/reverser.rb
151
151
  - lib/html_surgeon/service.rb
152
152
  - lib/html_surgeon/version.rb
153
153
  homepage: https://github.com/eturino/html_surgeon
@@ -1,22 +0,0 @@
1
- module HtmlSurgeon
2
- class NodeAuditCleaner
3
- attr_reader :node
4
-
5
- def initialize(node:)
6
- @node = node
7
- end
8
-
9
- def call
10
- write_empty_changes_list
11
- end
12
-
13
- private
14
- def write_empty_changes_list
15
- auditor.apply []
16
- end
17
-
18
- def auditor
19
- @auditor ||= Auditor.new node
20
- end
21
- end
22
- end
@@ -1,79 +0,0 @@
1
- module HtmlSurgeon
2
- class NodeReverser
3
- attr_reader :node, :change_set, :changed_at, :changed_from
4
-
5
- def initialize(node:, change_set: nil, changed_at: nil, changed_from: nil)
6
- @node = node
7
- @change_set = change_set
8
- @changed_at = changed_at
9
- @changed_from = changed_from
10
- end
11
-
12
- def call
13
- changes_to_revert.each do |change_definition|
14
- revert_change change_definition
15
- end
16
-
17
- write_remaining_changes
18
- end
19
-
20
- private
21
-
22
- def revert_change(change_definition)
23
- klass = Changes.change_class_by_type change_definition[:type]
24
- klass.revert(node, change_definition)
25
- end
26
-
27
- def write_remaining_changes
28
- auditor.apply remaining_changes
29
- end
30
-
31
- def changes
32
- auditor.changes
33
- end
34
-
35
- def remaining_changes
36
- changes - changes_to_revert
37
- end
38
-
39
- def changes_to_revert
40
- @changes_to_revert ||= load_changes_to_revert
41
- end
42
-
43
- def auditor
44
- @auditor ||= Auditor.new node
45
- end
46
-
47
- def load_changes_to_revert
48
- changes.dup.tap do |rev_changes|
49
- remove_by_change_set(rev_changes)
50
- remove_by_changed_at(rev_changes)
51
- remove_by_changed_from(rev_changes)
52
- end
53
- end
54
-
55
- def remove_by_changed_from(rev_changes)
56
- return unless changed_from.present?
57
-
58
- changed_from_time = changed_from.to_time.utc
59
- rev_changes.reject! do |change|
60
- change[:changed_at].to_time.utc < changed_from_time
61
- end
62
- end
63
-
64
- def remove_by_changed_at(rev_changes)
65
- return unless changed_at.present?
66
-
67
- changed_at_time = changed_at.to_time.utc
68
- rev_changes.reject! do |change|
69
- change[:changed_at].to_time.utc != changed_at_time
70
- end
71
- end
72
-
73
- def remove_by_change_set(rev_changes)
74
- return unless change_set.present?
75
-
76
- rev_changes.reject! { |change| change[:change_set] != change_set }
77
- end
78
- end
79
- end