diffing 0.1.0 → 0.2.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 +19 -16
- data/lib/diffing/diff.rb +21 -24
- data/lib/diffing/formats/ascii.rb +3 -3
- data/lib/diffing/part.rb +1 -5
- data/lib/diffing.rb +6 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a9db88ed0327a83b434f94b73fa9a425d14dbe8
|
4
|
+
data.tar.gz: 071b087aa7c10b65a685daa44a548c73176fbd88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8e5f2ed5e39eabfa3b035bda196fe1d74d44978579aacda5354d000ebefb905fad14e0b164050990ef6b90e28e95ecb361e87f036afdef96c49c4decc831696
|
7
|
+
data.tar.gz: 502929c52ffc80ed63cf86b0109aeaea91e15382b224ed3aefc66741532ae0ca70e8b13b37ad6e0389b45c0198e7453bbefb7d10b0eedd427e4e4b5f5a4ea72b
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ to = "Hi! I am two string for diffing"
|
|
20
20
|
diff = Diffing.by_chars( from, to )
|
21
21
|
|
22
22
|
diff.as_ascii
|
23
|
-
# => H{
|
23
|
+
# => H{`ello`>>`i`}! I am{+` two`} string for diffing{-` test`}
|
24
24
|
diff.as_html
|
25
25
|
# => H<del>ello</del><ins>i</ins>! I am<ins> two</ins> string for diffing<del> test</del>
|
26
26
|
```
|
@@ -30,9 +30,9 @@ diff.as_html
|
|
30
30
|
diff = Diffing.by_words( from, to )
|
31
31
|
|
32
32
|
diff.as_ascii
|
33
|
-
# => {
|
33
|
+
# => {`Hello!`>>`Hi!`} I am{+` two`} string for diffing{-` test`}
|
34
34
|
diff.as_html
|
35
|
-
# => <del>Hello!</del><ins>Hi!</ins> I am
|
35
|
+
# => <del>Hello!</del><ins>Hi!</ins> I am<ins> two</ins> string for diffing<del> test</del>
|
36
36
|
```
|
37
37
|
|
38
38
|
#### By lines
|
@@ -40,7 +40,7 @@ diff.as_html
|
|
40
40
|
diff = Diffing.by_lines( from, to )
|
41
41
|
|
42
42
|
diff.as_ascii
|
43
|
-
# => {
|
43
|
+
# => {`Hello! I am string for diffing test`>>`Hi! I am two string for diffing`}
|
44
44
|
diff.as_html
|
45
45
|
# => <del>Hello! I am string for diffing test</del><ins>Hi! I am two string for diffing</ins>
|
46
46
|
```
|
@@ -71,21 +71,15 @@ module CustomFormat
|
|
71
71
|
end
|
72
72
|
|
73
73
|
|
74
|
-
Diffing.by_chars.format( CustomFormat )
|
74
|
+
Diffing.by_chars( from, to ).format( CustomFormat )
|
75
75
|
# => H(ello => i)! I am(++ two) string for diffing(-- test)
|
76
|
-
Diffing.by_words.format( CustomFormat )
|
77
|
-
# => (Hello! => Hi!) I am
|
78
|
-
Diffing.by_lines.format( CustomFormat )
|
76
|
+
Diffing.by_words( from, to ).format( CustomFormat )
|
77
|
+
# => (Hello! => Hi!) I am(++ two) string for diffing(-- test)
|
78
|
+
Diffing.by_lines( from, to ).format( CustomFormat )
|
79
79
|
# => (Hello! I am string for diffing test => Hi! I am two string for diffing)
|
80
80
|
|
81
81
|
```
|
82
82
|
|
83
|
-
## Custom delimiter
|
84
|
-
|
85
|
-
```ruby
|
86
|
-
Diffing::Diff.new( from, to, 'i' ).as_ascii
|
87
|
-
# => {"Hello! I am str" >> "Hi! I am two str"}ing for diffi{"ng test" >> "ng"}
|
88
|
-
```
|
89
83
|
|
90
84
|
## Custom use separated parts
|
91
85
|
|
@@ -98,10 +92,19 @@ Diffing.by_words( from, to ).parts.map { |part|
|
|
98
92
|
result << "<delete:#{ part.delete }>" if part.delete?
|
99
93
|
result
|
100
94
|
|
101
|
-
}.join
|
102
|
-
# => <insert:Hi!><delete:Hello!><source:I am><insert:two><source:string for diffing><delete:test>
|
95
|
+
}.join
|
96
|
+
# => <insert:Hi!><delete:Hello!><source: I am><insert: two><source: string for diffing><delete: test>
|
103
97
|
```
|
104
98
|
|
99
|
+
|
100
|
+
## Custom pattern of parts
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
Diffing::Diff.new( from, to, /.{,3}\s?/ ).as_ascii
|
104
|
+
# => {`Hello! `>>`Hi! `}I a{`m string `>>`m two string `}for diffin{`g test`>>`g`}
|
105
|
+
```
|
106
|
+
|
107
|
+
|
105
108
|
## Copyright
|
106
109
|
|
107
110
|
Copyright © 2015 Denis Churbanov
|
data/lib/diffing/diff.rb
CHANGED
@@ -5,36 +5,33 @@ module Diffing
|
|
5
5
|
|
6
6
|
attr_reader :parts
|
7
7
|
|
8
|
-
def initialize( from, to,
|
9
|
-
@
|
10
|
-
@parts
|
8
|
+
def initialize( from, to, pattern = nil )
|
9
|
+
@pattern = pattern
|
10
|
+
@parts = calcucate( split( from.to_s ), split( to.to_s ) ).flatten
|
11
11
|
end
|
12
12
|
|
13
|
-
def format( format )
|
13
|
+
def format( format )
|
14
14
|
result = []
|
15
15
|
@parts.each do |part|
|
16
|
-
result << format.source(
|
17
|
-
if part.
|
18
|
-
|
19
|
-
|
20
|
-
result << format.insert( part.insert ) if part.insert?
|
21
|
-
result << format.delete( part.delete ) if part.delete?
|
22
|
-
end
|
16
|
+
result << format.source( part.source ) if part.source?
|
17
|
+
result << format.insert( part.insert ) if part.insert? && !part.delete?
|
18
|
+
result << format.delete( part.delete ) if part.delete? && !part.insert?
|
19
|
+
result << format.replace( part.delete, part.insert ) if part.insert? && part.delete?
|
23
20
|
end
|
24
|
-
result.join
|
21
|
+
result.join
|
25
22
|
end
|
26
|
-
|
27
|
-
def as_ascii
|
28
|
-
format Format::Ascii
|
23
|
+
|
24
|
+
def as_ascii
|
25
|
+
format Format::Ascii
|
29
26
|
end
|
30
|
-
|
31
|
-
def as_html
|
32
|
-
format Format::Html
|
27
|
+
|
28
|
+
def as_html
|
29
|
+
format Format::Html
|
33
30
|
end
|
34
31
|
|
35
|
-
alias :to_s :as_ascii
|
36
|
-
alias :inspect :as_ascii
|
37
|
-
|
32
|
+
alias :to_s :as_ascii
|
33
|
+
alias :inspect :as_ascii
|
34
|
+
|
38
35
|
|
39
36
|
private
|
40
37
|
|
@@ -78,7 +75,7 @@ module Diffing
|
|
78
75
|
end
|
79
76
|
|
80
77
|
def find_middle_index( set, search_subset )
|
81
|
-
return set.index( search_subset )
|
78
|
+
return set.index( search_subset ) unless @pattern
|
82
79
|
subsets_each( set, search_subset.size ){ |subset, first, last| return first if subset == search_subset }
|
83
80
|
nil
|
84
81
|
end
|
@@ -92,11 +89,11 @@ module Diffing
|
|
92
89
|
end
|
93
90
|
|
94
91
|
def split( set )
|
95
|
-
@
|
92
|
+
@pattern ? set.scan( @pattern ) : set
|
96
93
|
end
|
97
94
|
|
98
95
|
def join( set )
|
99
|
-
@
|
96
|
+
@pattern ? set.join : set
|
100
97
|
end
|
101
98
|
|
102
99
|
end
|
@@ -12,15 +12,15 @@ module Diffing
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def insert( value )
|
15
|
-
"{
|
15
|
+
"{+`#{ value }`}"
|
16
16
|
end
|
17
17
|
|
18
18
|
def delete( value )
|
19
|
-
"{
|
19
|
+
"{-`#{ value }`}"
|
20
20
|
end
|
21
21
|
|
22
22
|
def replace( from, to )
|
23
|
-
"{
|
23
|
+
"{`#{ from }`>>`#{ to }`}"
|
24
24
|
end
|
25
25
|
|
26
26
|
|
data/lib/diffing/part.rb
CHANGED
data/lib/diffing.rb
CHANGED
@@ -9,16 +9,16 @@ module Diffing
|
|
9
9
|
class << self
|
10
10
|
|
11
11
|
|
12
|
-
def
|
13
|
-
Diff.new from, to
|
12
|
+
def by_chars( from, to )
|
13
|
+
Diff.new from, to
|
14
14
|
end
|
15
15
|
|
16
16
|
def by_words( from, to )
|
17
|
-
Diff.new from, to,
|
17
|
+
Diff.new from, to, /\S+|\s+/
|
18
18
|
end
|
19
|
-
|
20
|
-
def
|
21
|
-
Diff.new from, to
|
19
|
+
|
20
|
+
def by_lines( from, to )
|
21
|
+
Diff.new from, to, /[^\n]+|\n+/
|
22
22
|
end
|
23
23
|
|
24
24
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diffing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Churbanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Diffing of two strings
|
14
14
|
email: 4urbanoff@gmail.com
|