dynport_tools 0.2.10 → 0.2.11

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,6 +8,8 @@ source "http://rubygems.org"
8
8
  gem 'nokogiri'
9
9
  gem 'redis'
10
10
  gem 'typhoeus'
11
+ gem "term-ansicolor"
12
+ gem 'diff-lcs'
11
13
 
12
14
  group :development do
13
15
  gem "rspec", "~> 2.3.0"
data/Gemfile.lock CHANGED
@@ -33,6 +33,7 @@ GEM
33
33
  ruby-debug-base (~> 0.10.4.0)
34
34
  ruby-debug-base (0.10.4)
35
35
  linecache (>= 0.3)
36
+ term-ansicolor (1.0.5)
36
37
  timecop (0.3.5)
37
38
  typhoeus (0.2.4)
38
39
  mime-types
@@ -46,11 +47,13 @@ DEPENDENCIES
46
47
  autotest
47
48
  autotest-growl
48
49
  bundler (~> 1.0.0)
50
+ diff-lcs
49
51
  jeweler (~> 1.6.4)
50
52
  nokogiri
51
53
  rcov
52
54
  redis
53
55
  rspec (~> 2.3.0)
54
56
  ruby-debug
57
+ term-ansicolor
55
58
  timecop
56
59
  typhoeus
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.10
1
+ 0.2.11
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dynport_tools}
8
- s.version = "0.2.10"
8
+ s.version = "0.2.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tobias Schwab"]
12
- s.date = %q{2011-08-24}
12
+ s.date = %q{2011-08-25}
13
13
  s.description = %q{Collection of various tools}
14
14
  s.email = %q{tobias.schwab@dynport.de}
15
15
  s.executables = ["xmldiff", "redis_dumper"]
@@ -70,6 +70,8 @@ Gem::Specification.new do |s|
70
70
  s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
71
71
  s.add_runtime_dependency(%q<redis>, [">= 0"])
72
72
  s.add_runtime_dependency(%q<typhoeus>, [">= 0"])
73
+ s.add_runtime_dependency(%q<term-ansicolor>, [">= 0"])
74
+ s.add_runtime_dependency(%q<diff-lcs>, [">= 0"])
73
75
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
74
76
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
75
77
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
@@ -83,6 +85,8 @@ Gem::Specification.new do |s|
83
85
  s.add_dependency(%q<nokogiri>, [">= 0"])
84
86
  s.add_dependency(%q<redis>, [">= 0"])
85
87
  s.add_dependency(%q<typhoeus>, [">= 0"])
88
+ s.add_dependency(%q<term-ansicolor>, [">= 0"])
89
+ s.add_dependency(%q<diff-lcs>, [">= 0"])
86
90
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
87
91
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
88
92
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
@@ -97,6 +101,8 @@ Gem::Specification.new do |s|
97
101
  s.add_dependency(%q<nokogiri>, [">= 0"])
98
102
  s.add_dependency(%q<redis>, [">= 0"])
99
103
  s.add_dependency(%q<typhoeus>, [">= 0"])
104
+ s.add_dependency(%q<term-ansicolor>, [">= 0"])
105
+ s.add_dependency(%q<diff-lcs>, [">= 0"])
100
106
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
101
107
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
102
108
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
data/lib/dynport_tools.rb CHANGED
@@ -5,5 +5,7 @@ require "time"
5
5
  require "typhoeus"
6
6
  require "nokogiri"
7
7
  require "cgi"
8
+ require "term/ansicolor"
9
+ require "diff/lcs"
8
10
 
9
11
  %w(deep_merger differ jenkins redis_dumper xml_file have_attributes redis_q eta ascii_table).map { |m| require "dynport_tools/#{m}" }
@@ -33,8 +33,41 @@ module DynportTools
33
33
  []
34
34
  end
35
35
  end
36
+
37
+ def diff_strings(a, b)
38
+ chunks = []
39
+ last = 0
40
+ Diff::LCS.diff(a, b).each do |group|
41
+ old_s = []
42
+ new_s = []
43
+ removed_elements(group).each_with_index do |c, i|
44
+ chunks << a[last..(c.position - 1)] if i == 0
45
+ old_s << c.element
46
+ last = c.position + 1
47
+ end
48
+ added_elements(group).each_with_index do |c, i|
49
+ if i == 0 && removed_elements(group).empty?
50
+ chunks << a[last..(c.position - 1)]
51
+ last = c.position
52
+ end
53
+ new_s << c.element
54
+ end
55
+ if (old_s.join("").length > 0 || new_s.join("").length > 0)
56
+ chunks << Term::ANSIColor.bold("<#{Term::ANSIColor.red(old_s.join(""))}|#{Term::ANSIColor.green(new_s.join(""))}>")
57
+ end
58
+ end
59
+ chunks.join("")
60
+ end
36
61
 
37
62
  private
63
+ def removed_elements(group)
64
+ group.select { |c| c.action == "-" }
65
+ end
66
+
67
+ def added_elements(group)
68
+ group.select { |c| c.action == "+" }
69
+ end
70
+
38
71
  def expected_value(value)
39
72
  "<#{value.inspect}>"
40
73
  end
@@ -1,10 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
- require "dynport_tools/differ"
4
-
5
3
  describe DynportTools::Differ do
6
4
  let(:differ) { DynportTools::Differ.new }
7
5
 
6
+ def uncolor(str)
7
+ str.gsub(/\e\[(\d+)m/, '')
8
+ end
9
+
8
10
  describe "#initialize" do
9
11
  it "sets diff_all to true by default" do
10
12
  DynportTools::Differ.new.diff_all.should == true
@@ -15,6 +17,26 @@ describe DynportTools::Differ do
15
17
  end
16
18
  end
17
19
 
20
+ describe "#diff_strings" do
21
+ it "diffs two strings" do
22
+ a = %("#!/bin/sh\nssh some.server 'cd /path/to/project && script/runner -e production_slave \"do something\"")
23
+ b = %("#!/bin/sh\nssh some.server \"cd /path/to/project && ./script/runner -e production 'do something'\")
24
+ uncolor(differ.diff_strings(a, b)).should == %("#!/bin/sh\nssh some.server <'|">cd /path/to/project && <|./>script/runner -e production<_slave|> <"|'>do something<"|'>")
25
+ end
26
+
27
+ it "diffes simple strings" do
28
+ a = %(-e production_slave "something)
29
+ b = %(-e production "something)
30
+ uncolor(differ.diff_strings(a, b)).should == %(-e production<_slave|> "something)
31
+ end
32
+
33
+ it "diffs a little bit more complicated string" do
34
+ a = %(-e production_slave "something)
35
+ b = %(-e production 'something)
36
+ uncolor(differ.diff_strings(a, b)).should == %(-e production<_slave|> <"|'>something)
37
+ end
38
+ end
39
+
18
40
  describe "diffing two hashes" do
19
41
  it "returns true when both hashes are equal" do
20
42
  hash = { :a => 1 }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynport_tools
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 10
10
- version: 0.2.10
9
+ - 11
10
+ version: 0.2.11
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Schwab
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-24 00:00:00 +02:00
18
+ date: 2011-08-25 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -61,9 +61,37 @@ dependencies:
61
61
  type: :runtime
62
62
  requirement: *id003
63
63
  - !ruby/object:Gem::Dependency
64
- name: rspec
64
+ name: term-ansicolor
65
65
  prerelease: false
66
66
  version_requirements: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :runtime
76
+ requirement: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: diff-lcs
79
+ prerelease: false
80
+ version_requirements: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :runtime
90
+ requirement: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: rspec
93
+ prerelease: false
94
+ version_requirements: &id006 !ruby/object:Gem::Requirement
67
95
  none: false
68
96
  requirements:
69
97
  - - ~>
@@ -75,11 +103,11 @@ dependencies:
75
103
  - 0
76
104
  version: 2.3.0
77
105
  type: :development
78
- requirement: *id004
106
+ requirement: *id006
79
107
  - !ruby/object:Gem::Dependency
80
108
  name: bundler
81
109
  prerelease: false
82
- version_requirements: &id005 !ruby/object:Gem::Requirement
110
+ version_requirements: &id007 !ruby/object:Gem::Requirement
83
111
  none: false
84
112
  requirements:
85
113
  - - ~>
@@ -91,11 +119,11 @@ dependencies:
91
119
  - 0
92
120
  version: 1.0.0
93
121
  type: :development
94
- requirement: *id005
122
+ requirement: *id007
95
123
  - !ruby/object:Gem::Dependency
96
124
  name: jeweler
97
125
  prerelease: false
98
- version_requirements: &id006 !ruby/object:Gem::Requirement
126
+ version_requirements: &id008 !ruby/object:Gem::Requirement
99
127
  none: false
100
128
  requirements:
101
129
  - - ~>
@@ -107,11 +135,11 @@ dependencies:
107
135
  - 4
108
136
  version: 1.6.4
109
137
  type: :development
110
- requirement: *id006
138
+ requirement: *id008
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rcov
113
141
  prerelease: false
114
- version_requirements: &id007 !ruby/object:Gem::Requirement
142
+ version_requirements: &id009 !ruby/object:Gem::Requirement
115
143
  none: false
116
144
  requirements:
117
145
  - - ">="
@@ -121,11 +149,11 @@ dependencies:
121
149
  - 0
122
150
  version: "0"
123
151
  type: :development
124
- requirement: *id007
152
+ requirement: *id009
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: ZenTest
127
155
  prerelease: false
128
- version_requirements: &id008 !ruby/object:Gem::Requirement
156
+ version_requirements: &id010 !ruby/object:Gem::Requirement
129
157
  none: false
130
158
  requirements:
131
159
  - - "="
@@ -137,11 +165,11 @@ dependencies:
137
165
  - 0
138
166
  version: 4.5.0
139
167
  type: :development
140
- requirement: *id008
168
+ requirement: *id010
141
169
  - !ruby/object:Gem::Dependency
142
170
  name: autotest
143
171
  prerelease: false
144
- version_requirements: &id009 !ruby/object:Gem::Requirement
172
+ version_requirements: &id011 !ruby/object:Gem::Requirement
145
173
  none: false
146
174
  requirements:
147
175
  - - ">="
@@ -151,11 +179,11 @@ dependencies:
151
179
  - 0
152
180
  version: "0"
153
181
  type: :development
154
- requirement: *id009
182
+ requirement: *id011
155
183
  - !ruby/object:Gem::Dependency
156
184
  name: autotest-growl
157
185
  prerelease: false
158
- version_requirements: &id010 !ruby/object:Gem::Requirement
186
+ version_requirements: &id012 !ruby/object:Gem::Requirement
159
187
  none: false
160
188
  requirements:
161
189
  - - ">="
@@ -165,11 +193,11 @@ dependencies:
165
193
  - 0
166
194
  version: "0"
167
195
  type: :development
168
- requirement: *id010
196
+ requirement: *id012
169
197
  - !ruby/object:Gem::Dependency
170
198
  name: ruby-debug
171
199
  prerelease: false
172
- version_requirements: &id011 !ruby/object:Gem::Requirement
200
+ version_requirements: &id013 !ruby/object:Gem::Requirement
173
201
  none: false
174
202
  requirements:
175
203
  - - ">="
@@ -179,11 +207,11 @@ dependencies:
179
207
  - 0
180
208
  version: "0"
181
209
  type: :development
182
- requirement: *id011
210
+ requirement: *id013
183
211
  - !ruby/object:Gem::Dependency
184
212
  name: timecop
185
213
  prerelease: false
186
- version_requirements: &id012 !ruby/object:Gem::Requirement
214
+ version_requirements: &id014 !ruby/object:Gem::Requirement
187
215
  none: false
188
216
  requirements:
189
217
  - - ">="
@@ -193,7 +221,7 @@ dependencies:
193
221
  - 0
194
222
  version: "0"
195
223
  type: :development
196
- requirement: *id012
224
+ requirement: *id014
197
225
  description: Collection of various tools
198
226
  email: tobias.schwab@dynport.de
199
227
  executables: