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 +4 -4
- data/README.md +17 -5
- data/lib/html_surgeon/node_services/audit_cleaner.rb +25 -0
- data/lib/html_surgeon/node_services/reverser.rb +83 -0
- data/lib/html_surgeon/service.rb +10 -8
- data/lib/html_surgeon/version.rb +1 -1
- data/lib/html_surgeon.rb +2 -2
- metadata +3 -3
- data/lib/html_surgeon/node_audit_cleaner.rb +0 -22
- data/lib/html_surgeon/node_reverser.rb +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34619a8d9e7430b304e686b0a3dbdfb3d02ea140
|
4
|
+
data.tar.gz: 672e8ff3f2e8f2fecb3b9121ab8a54d870175d40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
214
|
-
surgeon.
|
215
|
-
|
216
|
-
surgeon.rollback(
|
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
|
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
|
data/lib/html_surgeon/service.rb
CHANGED
@@ -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}]").
|
31
|
-
|
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}]").
|
39
|
-
|
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
|
data/lib/html_surgeon/version.rb
CHANGED
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.
|
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/
|
150
|
-
- lib/html_surgeon/
|
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
|