dynport_tools 0.2.10 → 0.2.11

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/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: