dynport_tools 0.1.3 → 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.
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/VERSION +1 -1
- data/bin/redis_dumper +4 -0
- data/bin/xmldiff +4 -4
- data/dynport_tools.gemspec +12 -6
- data/lib/dynport_tools/redis_dumper.rb +55 -0
- data/lib/{xml_file.rb → dynport_tools/xml_file.rb} +1 -1
- data/lib/dynport_tools.rb +5 -0
- data/spec/dynport_tools/redis_dumper_spec.rb +70 -0
- data/spec/{xml_file_spec.rb → dynport_tools/xml_file_spec.rb} +4 -4
- data/spec/dynport_tools_spec.rb +8 -0
- data/spec/xml_diff_spec.rb +4 -0
- metadata +43 -24
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -18,6 +18,7 @@ GEM
|
|
18
18
|
rake (0.9.2)
|
19
19
|
rbx-require-relative (0.0.5)
|
20
20
|
rcov (0.9.9)
|
21
|
+
redis (2.2.1)
|
21
22
|
rspec (2.3.0)
|
22
23
|
rspec-core (~> 2.3.0)
|
23
24
|
rspec-expectations (~> 2.3.0)
|
@@ -43,5 +44,6 @@ DEPENDENCIES
|
|
43
44
|
jeweler (~> 1.6.4)
|
44
45
|
nokogiri
|
45
46
|
rcov
|
47
|
+
redis
|
46
48
|
rspec (~> 2.3.0)
|
47
49
|
ruby-debug
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/redis_dumper
ADDED
data/bin/xmldiff
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
require "dynport_tools/differ"
|
3
|
-
require "xml_file"
|
3
|
+
require "dynport_tools/xml_file"
|
4
4
|
|
5
5
|
file_a, file_b = ARGV[0,2]
|
6
6
|
|
7
7
|
if file_a && File.exists?(file_a) && file_b && File.exists?(file_b)
|
8
|
-
a = XmlFile.new(file_a)
|
9
|
-
b = XmlFile.new(file_b)
|
8
|
+
a = DynportTools::XmlFile.new(file_a)
|
9
|
+
b = DynportTools::XmlFile.new(file_b)
|
10
10
|
differ = DynportTools::Differ.new
|
11
11
|
diff = differ.diff(a.nodes_hash, b.nodes_hash)
|
12
12
|
puts differ.diff_to_message_lines(diff)
|
data/dynport_tools.gemspec
CHANGED
@@ -5,15 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dynport_tools}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
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-
|
13
|
-
s.default_executable = %q{xmldiff}
|
12
|
+
s.date = %q{2011-08-16}
|
14
13
|
s.description = %q{Collection of various tools}
|
15
14
|
s.email = %q{tobias.schwab@dynport.de}
|
16
|
-
s.executables = ["xmldiff"]
|
15
|
+
s.executables = ["xmldiff", "redis_dumper"]
|
17
16
|
s.extra_rdoc_files = [
|
18
17
|
"LICENSE.txt",
|
19
18
|
"README.rdoc"
|
@@ -28,17 +27,21 @@ Gem::Specification.new do |s|
|
|
28
27
|
"Rakefile",
|
29
28
|
"VERSION",
|
30
29
|
"autotest/discover.rb",
|
30
|
+
"bin/redis_dumper",
|
31
31
|
"bin/xmldiff",
|
32
32
|
"dynport_tools.gemspec",
|
33
33
|
"lib/dynport_tools.rb",
|
34
34
|
"lib/dynport_tools/differ.rb",
|
35
|
+
"lib/dynport_tools/redis_dumper.rb",
|
36
|
+
"lib/dynport_tools/xml_file.rb",
|
35
37
|
"lib/have_attributes.rb",
|
36
|
-
"lib/xml_file.rb",
|
37
38
|
"spec/dynport_tools/differ_spec.rb",
|
39
|
+
"spec/dynport_tools/redis_dumper_spec.rb",
|
40
|
+
"spec/dynport_tools/xml_file_spec.rb",
|
38
41
|
"spec/dynport_tools_spec.rb",
|
39
42
|
"spec/fixtures/file_a.xml",
|
40
43
|
"spec/spec_helper.rb",
|
41
|
-
"spec/
|
44
|
+
"spec/xml_diff_spec.rb"
|
42
45
|
]
|
43
46
|
s.homepage = %q{http://github.com/tobstarr/dynport_tools}
|
44
47
|
s.licenses = ["MIT"]
|
@@ -51,6 +54,7 @@ Gem::Specification.new do |s|
|
|
51
54
|
|
52
55
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
56
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
57
|
+
s.add_runtime_dependency(%q<redis>, [">= 0"])
|
54
58
|
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
55
59
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
56
60
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -61,6 +65,7 @@ Gem::Specification.new do |s|
|
|
61
65
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
62
66
|
else
|
63
67
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
68
|
+
s.add_dependency(%q<redis>, [">= 0"])
|
64
69
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
65
70
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
66
71
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -72,6 +77,7 @@ Gem::Specification.new do |s|
|
|
72
77
|
end
|
73
78
|
else
|
74
79
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
80
|
+
s.add_dependency(%q<redis>, [">= 0"])
|
75
81
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
76
82
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
77
83
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "dynport_tools"
|
2
|
+
require "redis"
|
3
|
+
|
4
|
+
class DynportTools::RedisDumper
|
5
|
+
attr_accessor :redis
|
6
|
+
|
7
|
+
def initialize(redis = nil)
|
8
|
+
self.redis = redis
|
9
|
+
end
|
10
|
+
|
11
|
+
def zset_to_hash(key, window = 10_000)
|
12
|
+
hash = {}
|
13
|
+
offset = 0
|
14
|
+
while true
|
15
|
+
values = redis.zrevrange(key, offset, offset + (window - 1), :with_scores => true)
|
16
|
+
current_key = nil
|
17
|
+
values.each do |value|
|
18
|
+
if current_key.nil?
|
19
|
+
current_key = value
|
20
|
+
else
|
21
|
+
hash[current_key] = value
|
22
|
+
current_key = nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
offset += window
|
26
|
+
break if values.length < window * 2
|
27
|
+
end
|
28
|
+
hash
|
29
|
+
end
|
30
|
+
|
31
|
+
def dump_hash(hash)
|
32
|
+
hash.each do |key, value|
|
33
|
+
puts [key, value].join("\t")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def run_from_args(args)
|
38
|
+
host, port, key = args
|
39
|
+
if key
|
40
|
+
self.redis = Redis.new(:host => host, :port => port)
|
41
|
+
key_type = redis.type(key)
|
42
|
+
if key_type == "zset"
|
43
|
+
dump_hash(zset_to_hash(key))
|
44
|
+
else
|
45
|
+
puts "only zsets are supported for now"
|
46
|
+
end
|
47
|
+
else
|
48
|
+
print_usage
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def print_usage
|
53
|
+
puts "USAGE: redis_dumper <redis_host> <redis_port> <key>"
|
54
|
+
end
|
55
|
+
end
|
data/lib/dynport_tools.rb
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require "dynport_tools/redis_dumper"
|
3
|
+
|
4
|
+
describe "DynportTools::RedisDumper" do
|
5
|
+
let(:redis) { double("redis", :type => "zset") }
|
6
|
+
let(:dumper) { DynportTools::RedisDumper.new(redis) }
|
7
|
+
|
8
|
+
describe "#initialize" do
|
9
|
+
it "can be initialized with redis" do
|
10
|
+
redis = double("redis")
|
11
|
+
dumper = DynportTools::RedisDumper.new(redis)
|
12
|
+
dumper.redis.should == redis
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#zset_to_hash" do
|
17
|
+
it "calls zrevrange the correct number of times" do
|
18
|
+
redis.should_receive(:zrevrange).with("redis_key", 0, 1, :with_scores => true).and_return(["1", "2", "2", "4"])
|
19
|
+
redis.should_receive(:zrevrange).with("redis_key", 2, 3, :with_scores => true).and_return(["3", "2"])
|
20
|
+
dumper.zset_to_hash("redis_key", 2).should == { "1" => "2", "2" => "4", "3" => "2" }
|
21
|
+
end
|
22
|
+
|
23
|
+
it "only calls once when window is big enough" do
|
24
|
+
redis.should_receive(:zrevrange).with("redis_key", 0, 9999, :with_scores => true).and_return(["1", "2", "2", "4"])
|
25
|
+
dumper.zset_to_hash("redis_key").should == { "1" => "2", "2" => "4" }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#dump_hash" do
|
30
|
+
it "calls puts the correct lines" do
|
31
|
+
dumper.should_receive(:puts).with("a\t1")
|
32
|
+
dumper.should_receive(:puts).with("b\t3")
|
33
|
+
dumper.dump_hash("a" => "1", "b" => "3")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#run_from_args" do
|
38
|
+
before(:each) do
|
39
|
+
Redis.stub!(:new).and_return redis
|
40
|
+
dumper.stub(:zset_to_hash).and_return({})
|
41
|
+
dumper.stub(:dump_hash).and_return true
|
42
|
+
end
|
43
|
+
|
44
|
+
it "initializes a new redis instance" do
|
45
|
+
Redis.should_receive(:new).with(:host => "host", :port => "port").and_return redis
|
46
|
+
dumper.redis = nil
|
47
|
+
dumper.run_from_args(["host", "port", "key"])
|
48
|
+
dumper.redis.should == redis
|
49
|
+
end
|
50
|
+
|
51
|
+
it "calls dump_hash with zset_to_hash when type is zset" do
|
52
|
+
redis.should_receive(:type).with("key").and_return "zset"
|
53
|
+
hash = { "a" => 1 }
|
54
|
+
dumper.should_receive(:zset_to_hash).and_return(hash)
|
55
|
+
dumper.should_receive(:dump_hash).with(hash)
|
56
|
+
dumper.run_from_args(["host", "port", "key"])
|
57
|
+
end
|
58
|
+
|
59
|
+
it "prints a message when type is not zset" do
|
60
|
+
redis.should_receive(:type).with("key").and_return "hash"
|
61
|
+
dumper.should_receive(:puts).with("only zsets are supported for now")
|
62
|
+
dumper.run_from_args(["host", "port", "key"])
|
63
|
+
end
|
64
|
+
|
65
|
+
it "calls print_usage when not enough parameters" do
|
66
|
+
dumper.should_receive(:print_usage)
|
67
|
+
dumper.run_from_args(["host", "port"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require "xml_file"
|
2
|
+
require "dynport_tools/xml_file"
|
3
3
|
|
4
4
|
FILE1 = ROOT.join("spec/fixtures/file_a.xml")
|
5
5
|
FILE2 = ROOT.join("spec/fixtures/file_b.xml")
|
6
6
|
|
7
7
|
|
8
|
-
describe XmlFile do
|
9
|
-
let(:file) { XmlFile.new(FILE1) }
|
8
|
+
describe "DynportTools::XmlFile" do
|
9
|
+
let(:file) { DynportTools::XmlFile.new(FILE1) }
|
10
10
|
|
11
11
|
describe "#initialize" do
|
12
12
|
it "sets the correct path" do
|
13
|
-
XmlFile.new(FILE1).path.should == FILE1.to_s
|
13
|
+
DynportTools::XmlFile.new(FILE1).path.should == FILE1.to_s
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
data/spec/dynport_tools_spec.rb
CHANGED
@@ -1,4 +1,12 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "DynportTools" do
|
4
|
+
describe "#xmldiff" do
|
5
|
+
it "raises print usage when first file does not exist" do
|
6
|
+
catch(:print_usage) do
|
7
|
+
DynportTools.xmldiff(nil, nil)
|
8
|
+
violated "print_usage should been thrown"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
4
12
|
end
|
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:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tobias Schwab
|
@@ -15,8 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-08-16 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: nokogiri
|
@@ -33,9 +33,23 @@ dependencies:
|
|
33
33
|
type: :runtime
|
34
34
|
requirement: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: redis
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
requirement: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rspec
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
39
53
|
none: false
|
40
54
|
requirements:
|
41
55
|
- - ~>
|
@@ -47,11 +61,11 @@ dependencies:
|
|
47
61
|
- 0
|
48
62
|
version: 2.3.0
|
49
63
|
type: :development
|
50
|
-
requirement: *
|
64
|
+
requirement: *id003
|
51
65
|
- !ruby/object:Gem::Dependency
|
52
66
|
name: bundler
|
53
67
|
prerelease: false
|
54
|
-
version_requirements: &
|
68
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
55
69
|
none: false
|
56
70
|
requirements:
|
57
71
|
- - ~>
|
@@ -63,11 +77,11 @@ dependencies:
|
|
63
77
|
- 0
|
64
78
|
version: 1.0.0
|
65
79
|
type: :development
|
66
|
-
requirement: *
|
80
|
+
requirement: *id004
|
67
81
|
- !ruby/object:Gem::Dependency
|
68
82
|
name: jeweler
|
69
83
|
prerelease: false
|
70
|
-
version_requirements: &
|
84
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
71
85
|
none: false
|
72
86
|
requirements:
|
73
87
|
- - ~>
|
@@ -79,11 +93,11 @@ dependencies:
|
|
79
93
|
- 4
|
80
94
|
version: 1.6.4
|
81
95
|
type: :development
|
82
|
-
requirement: *
|
96
|
+
requirement: *id005
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rcov
|
85
99
|
prerelease: false
|
86
|
-
version_requirements: &
|
100
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
87
101
|
none: false
|
88
102
|
requirements:
|
89
103
|
- - ">="
|
@@ -93,11 +107,11 @@ dependencies:
|
|
93
107
|
- 0
|
94
108
|
version: "0"
|
95
109
|
type: :development
|
96
|
-
requirement: *
|
110
|
+
requirement: *id006
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: ZenTest
|
99
113
|
prerelease: false
|
100
|
-
version_requirements: &
|
114
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
101
115
|
none: false
|
102
116
|
requirements:
|
103
117
|
- - "="
|
@@ -109,11 +123,11 @@ dependencies:
|
|
109
123
|
- 0
|
110
124
|
version: 4.5.0
|
111
125
|
type: :development
|
112
|
-
requirement: *
|
126
|
+
requirement: *id007
|
113
127
|
- !ruby/object:Gem::Dependency
|
114
128
|
name: autotest
|
115
129
|
prerelease: false
|
116
|
-
version_requirements: &
|
130
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
117
131
|
none: false
|
118
132
|
requirements:
|
119
133
|
- - ">="
|
@@ -123,11 +137,11 @@ dependencies:
|
|
123
137
|
- 0
|
124
138
|
version: "0"
|
125
139
|
type: :development
|
126
|
-
requirement: *
|
140
|
+
requirement: *id008
|
127
141
|
- !ruby/object:Gem::Dependency
|
128
142
|
name: autotest-growl
|
129
143
|
prerelease: false
|
130
|
-
version_requirements: &
|
144
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
131
145
|
none: false
|
132
146
|
requirements:
|
133
147
|
- - ">="
|
@@ -137,11 +151,11 @@ dependencies:
|
|
137
151
|
- 0
|
138
152
|
version: "0"
|
139
153
|
type: :development
|
140
|
-
requirement: *
|
154
|
+
requirement: *id009
|
141
155
|
- !ruby/object:Gem::Dependency
|
142
156
|
name: ruby-debug
|
143
157
|
prerelease: false
|
144
|
-
version_requirements: &
|
158
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
145
159
|
none: false
|
146
160
|
requirements:
|
147
161
|
- - ">="
|
@@ -151,11 +165,12 @@ dependencies:
|
|
151
165
|
- 0
|
152
166
|
version: "0"
|
153
167
|
type: :development
|
154
|
-
requirement: *
|
168
|
+
requirement: *id010
|
155
169
|
description: Collection of various tools
|
156
170
|
email: tobias.schwab@dynport.de
|
157
171
|
executables:
|
158
172
|
- xmldiff
|
173
|
+
- redis_dumper
|
159
174
|
extensions: []
|
160
175
|
|
161
176
|
extra_rdoc_files:
|
@@ -171,17 +186,21 @@ files:
|
|
171
186
|
- Rakefile
|
172
187
|
- VERSION
|
173
188
|
- autotest/discover.rb
|
189
|
+
- bin/redis_dumper
|
174
190
|
- bin/xmldiff
|
175
191
|
- dynport_tools.gemspec
|
176
192
|
- lib/dynport_tools.rb
|
177
193
|
- lib/dynport_tools/differ.rb
|
194
|
+
- lib/dynport_tools/redis_dumper.rb
|
195
|
+
- lib/dynport_tools/xml_file.rb
|
178
196
|
- lib/have_attributes.rb
|
179
|
-
- lib/xml_file.rb
|
180
197
|
- spec/dynport_tools/differ_spec.rb
|
198
|
+
- spec/dynport_tools/redis_dumper_spec.rb
|
199
|
+
- spec/dynport_tools/xml_file_spec.rb
|
181
200
|
- spec/dynport_tools_spec.rb
|
182
201
|
- spec/fixtures/file_a.xml
|
183
202
|
- spec/spec_helper.rb
|
184
|
-
- spec/
|
203
|
+
- spec/xml_diff_spec.rb
|
185
204
|
has_rdoc: true
|
186
205
|
homepage: http://github.com/tobstarr/dynport_tools
|
187
206
|
licenses:
|