html_surgeon 0.5.2 → 0.6.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: 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