diff_from_delta 0.0.2

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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in diff_from_delta.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
data/README ADDED
@@ -0,0 +1,13 @@
1
+ == diff_from_delta
2
+
3
+ diff_from_delta converts delta strings produced by diff-match-patch ( http://code.google.com/p/google-diff-match-patch/ ) back to an array of diffs.
4
+
5
+ Usage:
6
+
7
+ To get the compiled string..
8
+
9
+ DiffFromDelta::compile_diff_from_delta(original_text, delta_string)
10
+
11
+ For the actual diff array..
12
+
13
+ DiffFromDelta::diff_from_delta(original_text, delta_string)
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "diff_from_delta/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "diff_from_delta"
7
+ s.version = DiffFromDelta::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Henry Turner"]
10
+ #s.email = ["TODO: Write your email address"]
11
+ #s.homepage = ""
12
+ s.summary = %q{A ruby helper to decode diff deltas produced by diff-match-patch}
13
+ s.description = %q{A conversion of the python version to ruby from http://code.google.com/p/google-diff-match-patch/ and added tests.}
14
+
15
+ s.add_development_dependency "rspec"
16
+ s.add_development_dependency "guard-rspec"
17
+
18
+ s.rubyforge_project = "diff_from_delta"
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+ end
@@ -0,0 +1,3 @@
1
+ module DiffFromDelta
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,54 @@
1
+ module DiffFromDelta
2
+
3
+ def self.compile_diff_from_delta(text1, delta)
4
+ diff_from_delta(text1, delta).delete_if{|d| d[0]==-1 }.map{|d| d[1] }.join("")
5
+ end
6
+
7
+ def self.diff_from_delta(text1, delta)
8
+ diff_delete = -1
9
+ diff_insert = 1
10
+ diff_equal = 0
11
+ diffs = []
12
+ pointer = 0 # Cursor in text1
13
+ tokens = delta.split("\t")
14
+ for token in tokens
15
+ if token == ""
16
+ # Blank tokens are ok (from a trailing \t).
17
+ next
18
+ end
19
+ # Each token begins with a one character parameter which specifies the
20
+ # operation of this token (delete, insert, equality).
21
+ param = token[1..-1]
22
+ if token[0..0] == "+"
23
+ param = URI.unescape(param)
24
+ diffs << [diff_insert, param]
25
+ elsif token[0..0] == "-" || token[0..0] == "="
26
+ begin
27
+ n = param.to_i
28
+ rescue
29
+ raise("Invalid number in diff_fromDelta: " + param)
30
+ end
31
+ if n < 0
32
+ raise("Negative number in diff_fromDelta: " + param)
33
+ end
34
+ #text = text1[pointer : pointer + n]
35
+ text = text1[pointer..pointer+(n-1)]
36
+ pointer += n
37
+ if token[0..0] == "="
38
+ diffs << [diff_equal, text]
39
+ else
40
+ diffs << [diff_delete, text]
41
+ end
42
+ else
43
+ # Anything else is an error.
44
+ raise("Invalid diff operation in diff_fromDelta: #{token[0..0]}")
45
+ end
46
+ end # end for token in tokens
47
+ if pointer != text1.length
48
+ raise("Delta length (#{pointer}) does not equal source text length (#{text1.length}).")
49
+ end
50
+ return diffs
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,20 @@
1
+ require File.join(File.dirname(__FILE__), "../lib/diff_from_delta")
2
+
3
+ describe "#diff_from_delta" do
4
+
5
+ initial_text = "The quick\nbrown fox\njumped over\nthe lazy dog"
6
+
7
+ examples = [
8
+ {:delta => "=4\t-5\t+slow\t=35", :result => "The slow\nbrown fox\njumped over\nthe lazy dog"},
9
+ {:delta => "=35\t-5\t=4", :result => "The quick\nbrown fox\njumped over\nthe dog"},
10
+ {:delta => "=4\t-5\t+daft\t=35\t+%20twice", :result => "The daft\nbrown fox\njumped over\nthe lazy dog twice"},
11
+ {:delta => "-44\t+Barnacles", :result => "Barnacles"},
12
+ ]
13
+
14
+ examples.each do |example|
15
+ it "should process the delta #{example[:delta]} correctly" do
16
+ DiffFromDelta::compile_diff_from_delta(initial_text, example[:delta]).should == example[:result]
17
+ end
18
+ end
19
+
20
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: diff_from_delta
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Henry Turner
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-10-09 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :development
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: guard-rspec
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :development
45
+ version_requirements: *id002
46
+ description: A conversion of the python version to ruby from http://code.google.com/p/google-diff-match-patch/ and added tests.
47
+ email:
48
+ executables: []
49
+
50
+ extensions: []
51
+
52
+ extra_rdoc_files: []
53
+
54
+ files:
55
+ - .gitignore
56
+ - Gemfile
57
+ - Guardfile
58
+ - README
59
+ - Rakefile
60
+ - diff_from_delta.gemspec
61
+ - lib/diff_from_delta.rb
62
+ - lib/diff_from_delta/version.rb
63
+ - spec/examples_spec.rb
64
+ has_rdoc: true
65
+ homepage:
66
+ licenses: []
67
+
68
+ post_install_message:
69
+ rdoc_options: []
70
+
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ requirements: []
90
+
91
+ rubyforge_project: diff_from_delta
92
+ rubygems_version: 1.3.7
93
+ signing_key:
94
+ specification_version: 3
95
+ summary: A ruby helper to decode diff deltas produced by diff-match-patch
96
+ test_files:
97
+ - spec/examples_spec.rb