dynport_tools 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +5 -0
- data/VERSION +1 -1
- data/dynport_tools.gemspec +9 -1
- data/lib/dynport_tools/deep_merger.rb +39 -0
- data/lib/dynport_tools/jenkins.rb +37 -0
- data/lib/dynport_tools.rb +3 -6
- data/spec/dynport_tools/deep_merger_spec.rb +61 -0
- data/spec/dynport_tools/jenkins_spec.rb +119 -0
- data/spec/dynport_tools_spec.rb +0 -8
- data/spec/fixtures/jenkins_job.xml +30 -0
- metadata +71 -52
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -14,6 +14,7 @@ GEM
|
|
14
14
|
rake
|
15
15
|
linecache (0.46)
|
16
16
|
rbx-require-relative (> 0.0.4)
|
17
|
+
mime-types (1.16)
|
17
18
|
nokogiri (1.5.0)
|
18
19
|
rake (0.9.2)
|
19
20
|
rbx-require-relative (0.0.5)
|
@@ -32,6 +33,9 @@ GEM
|
|
32
33
|
ruby-debug-base (~> 0.10.4.0)
|
33
34
|
ruby-debug-base (0.10.4)
|
34
35
|
linecache (>= 0.3)
|
36
|
+
typhoeus (0.2.4)
|
37
|
+
mime-types
|
38
|
+
mime-types
|
35
39
|
|
36
40
|
PLATFORMS
|
37
41
|
ruby
|
@@ -47,3 +51,4 @@ DEPENDENCIES
|
|
47
51
|
redis
|
48
52
|
rspec (~> 2.3.0)
|
49
53
|
ruby-debug
|
54
|
+
typhoeus
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/dynport_tools.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dynport_tools}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.3"
|
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"]
|
@@ -32,15 +32,20 @@ Gem::Specification.new do |s|
|
|
32
32
|
"bin/xmldiff",
|
33
33
|
"dynport_tools.gemspec",
|
34
34
|
"lib/dynport_tools.rb",
|
35
|
+
"lib/dynport_tools/deep_merger.rb",
|
35
36
|
"lib/dynport_tools/differ.rb",
|
37
|
+
"lib/dynport_tools/jenkins.rb",
|
36
38
|
"lib/dynport_tools/redis_dumper.rb",
|
37
39
|
"lib/dynport_tools/xml_file.rb",
|
38
40
|
"lib/have_attributes.rb",
|
41
|
+
"spec/dynport_tools/deep_merger_spec.rb",
|
39
42
|
"spec/dynport_tools/differ_spec.rb",
|
43
|
+
"spec/dynport_tools/jenkins_spec.rb",
|
40
44
|
"spec/dynport_tools/redis_dumper_spec.rb",
|
41
45
|
"spec/dynport_tools/xml_file_spec.rb",
|
42
46
|
"spec/dynport_tools_spec.rb",
|
43
47
|
"spec/fixtures/file_a.xml",
|
48
|
+
"spec/fixtures/jenkins_job.xml",
|
44
49
|
"spec/spec_helper.rb",
|
45
50
|
"spec/xml_diff_spec.rb"
|
46
51
|
]
|
@@ -56,6 +61,7 @@ Gem::Specification.new do |s|
|
|
56
61
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
57
62
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
58
63
|
s.add_runtime_dependency(%q<redis>, [">= 0"])
|
64
|
+
s.add_runtime_dependency(%q<typhoeus>, [">= 0"])
|
59
65
|
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
60
66
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
61
67
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -67,6 +73,7 @@ Gem::Specification.new do |s|
|
|
67
73
|
else
|
68
74
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
69
75
|
s.add_dependency(%q<redis>, [">= 0"])
|
76
|
+
s.add_dependency(%q<typhoeus>, [">= 0"])
|
70
77
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
71
78
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
72
79
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -79,6 +86,7 @@ Gem::Specification.new do |s|
|
|
79
86
|
else
|
80
87
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
81
88
|
s.add_dependency(%q<redis>, [">= 0"])
|
89
|
+
s.add_dependency(%q<typhoeus>, [">= 0"])
|
82
90
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
83
91
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
84
92
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class DynportTools::DeepMerger
|
2
|
+
class << self
|
3
|
+
def merge(a, b)
|
4
|
+
if a.class == b.class
|
5
|
+
if a.is_a?(Hash)
|
6
|
+
return merge_hashes(a, b)
|
7
|
+
elsif a.is_a?(Array)
|
8
|
+
return merge_arrays(a, b)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
b
|
12
|
+
end
|
13
|
+
|
14
|
+
def merge_arrays(a, b)
|
15
|
+
[a.length, b.length].max.times.map do |i|
|
16
|
+
if b.length < i + 1
|
17
|
+
a[i]
|
18
|
+
elsif a.length < i + 1
|
19
|
+
b[i]
|
20
|
+
else
|
21
|
+
merge(a[i], b[i])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def merge_hashes(a, b)
|
27
|
+
(a.keys + b.keys).uniq.inject({}) do |hash, key|
|
28
|
+
if !a.has_key?(key)
|
29
|
+
hash[key] = b[key]
|
30
|
+
elsif !b.has_key?(key)
|
31
|
+
hash[key] = a[key]
|
32
|
+
else
|
33
|
+
hash[key] = merge(a[key], b[key])
|
34
|
+
end
|
35
|
+
hash
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "typhoeus"
|
2
|
+
require "nokogiri"
|
3
|
+
|
4
|
+
class DynportTools::Jenkins
|
5
|
+
attr_accessor :url
|
6
|
+
|
7
|
+
def initialize(url = nil)
|
8
|
+
self.url = url
|
9
|
+
end
|
10
|
+
|
11
|
+
def hydra
|
12
|
+
@hydra ||= Typhoeus::Hydra.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def jobs_hash
|
16
|
+
Nokogiri::XML(Typhoeus::Request.get("#{url}/api/xml").body).search("job").inject({}) do |hash, node|
|
17
|
+
url = node.at("url").inner_text.strip if node.at("url")
|
18
|
+
name = node.at("name").inner_text.strip if node.at("name")
|
19
|
+
hash[url] = { :url => url, :name => name }
|
20
|
+
hash
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def job_details
|
25
|
+
jobs = {}
|
26
|
+
jobs_hash.each do |url, job|
|
27
|
+
request = Typhoeus::Request.new("#{url}config.xml")
|
28
|
+
request.on_complete do |response|
|
29
|
+
xml = Nokogiri::XML(response.body).to_s
|
30
|
+
jobs[url] = job.merge(:body => xml, :md5 => Digest::MD5.hexdigest(xml))
|
31
|
+
end
|
32
|
+
hydra.queue(request)
|
33
|
+
end
|
34
|
+
hydra.run
|
35
|
+
jobs
|
36
|
+
end
|
37
|
+
end
|
data/lib/dynport_tools.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe DynportTools::DeepMerger do
|
4
|
+
it "merges two hashes" do
|
5
|
+
DynportTools::DeepMerger.merge({ :a => 1 }, { :b => 2 }).should == { :a => 1, :b => 2 }
|
6
|
+
end
|
7
|
+
|
8
|
+
it "merges two arrays with same number of attributes" do
|
9
|
+
DynportTools::DeepMerger.merge([{ :a => 1, :b => 1 }], [{ :a => 2, :c => 3 }]).should == [{ :a => 2, :b => 1, :c => 3 }]
|
10
|
+
end
|
11
|
+
|
12
|
+
it "correctly merges two arrays with the first one being longer" do
|
13
|
+
DynportTools::DeepMerger.merge([{ :a => 1, :b => 1 }], []).should == [{ :a => 1, :b => 1 }]
|
14
|
+
end
|
15
|
+
|
16
|
+
it "correctly merges two arrays with the first one being longer" do
|
17
|
+
DynportTools::DeepMerger.merge([], [{ :a => 1, :b => 1 }]).should == [{ :a => 1, :b => 1 }]
|
18
|
+
end
|
19
|
+
|
20
|
+
it "merges simple arrays" do
|
21
|
+
DynportTools::DeepMerger.merge([1, 2, 3], [3, 4]).should == [3, 4, 3]
|
22
|
+
end
|
23
|
+
|
24
|
+
it "correctly merges two arrays with different numbers and content" do
|
25
|
+
DynportTools::DeepMerger.merge([{ :a => 1 }, { :b => 2, :c => 3 }], [{ :b => 2 }, { :c => 2 }, { :d => 1 }]).should == [
|
26
|
+
{ :a => 1, :b => 2 },
|
27
|
+
{ :b => 2, :c => 2 },
|
28
|
+
{ :d => 1 }
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns the second argument when types are different" do
|
33
|
+
DynportTools::DeepMerger.merge([], "a").should == "a"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "calls merge on each value of two hashes" do
|
37
|
+
a = { :a => 1, :b => 2 }
|
38
|
+
b = { :b => 1, :c => 2 }
|
39
|
+
DynportTools::DeepMerger.merge(a, b).should == { :a => 1, :b => 1, :c => 2 }
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns b when both have the same type but not array or hash" do
|
43
|
+
DynportTools::DeepMerger.merge(1, 2).should == 2
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#merge_hashes" do
|
47
|
+
it "joins both hashes" do
|
48
|
+
DynportTools::DeepMerger.merge_hashes({:a => 1}, {:b => 2}).should == { :a => 1, :b => 2 }
|
49
|
+
end
|
50
|
+
|
51
|
+
it "overwrites values from a with values from b" do
|
52
|
+
DynportTools::DeepMerger.merge_hashes({:a => 1}, {:a => 2}).should == { :a => 2 }
|
53
|
+
end
|
54
|
+
|
55
|
+
it "merges nested hashes" do
|
56
|
+
DynportTools::DeepMerger.merge_hashes({ :nested => { :a1 => 1, :b1 => 1 } }, { :nested => { :a1 => 2, :b2 => 3 }}).should == {
|
57
|
+
:nested => { :a1 => 2, :b1 => 1, :b2 => 3 }
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require "dynport_tools/jenkins"
|
4
|
+
|
5
|
+
describe "DynportTools::Jenkins" do
|
6
|
+
let(:root) { "http://some.url.com:8098" }
|
7
|
+
let(:jenkins) { DynportTools::Jenkins.new(root) }
|
8
|
+
|
9
|
+
describe "#initialize" do
|
10
|
+
it "sets the root url" do
|
11
|
+
DynportTools::Jenkins.new("some/host").url.should == "some/host"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#jobs_hash" do
|
16
|
+
let(:body) do
|
17
|
+
html =<<-HTML
|
18
|
+
<hudson>
|
19
|
+
<assignedLabel/>
|
20
|
+
<mode>NORMAL</mode>
|
21
|
+
<nodeDescription>the master Hudson node</nodeDescription>
|
22
|
+
<nodeName/>
|
23
|
+
<numExecutors>5</numExecutors>
|
24
|
+
<job>
|
25
|
+
<name>Job 2</name>
|
26
|
+
<url>
|
27
|
+
http://hudson.host:8080/job/Job2/
|
28
|
+
</url>
|
29
|
+
<color>blue</color>
|
30
|
+
</job>
|
31
|
+
<job>
|
32
|
+
<name>Job 1</name>
|
33
|
+
<url>
|
34
|
+
http://hudson.host:8080/job/Job1/
|
35
|
+
</url>
|
36
|
+
<color>blue</color>
|
37
|
+
</job>
|
38
|
+
</hudson>
|
39
|
+
HTML
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:response) { double("response", :body => body).as_null_object }
|
43
|
+
|
44
|
+
before(:each) do
|
45
|
+
Typhoeus::Request.stub(:get).and_return response
|
46
|
+
end
|
47
|
+
|
48
|
+
it "fetches the correct url" do
|
49
|
+
Typhoeus::Request.should_receive(:get).with("http://some.url.com:8098/api/xml")
|
50
|
+
jenkins.jobs_hash
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns the correct jobs_hash" do
|
54
|
+
jobs = jenkins.jobs_hash
|
55
|
+
jobs["http://hudson.host:8080/job/Job1/"].should == { :url => "http://hudson.host:8080/job/Job1/", :name => "Job 1"}
|
56
|
+
jobs["http://hudson.host:8080/job/Job2/"].should == { :url => "http://hudson.host:8080/job/Job2/", :name => "Job 2"}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "#job_details" do
|
61
|
+
before(:each) do
|
62
|
+
jenkins.stub!(:jobs_hash).and_return(
|
63
|
+
"http://hudson.host:8080/job/Job1/" => { :url => "http://hudson.host:8080/job/Job1/", :name => "Job 1"},
|
64
|
+
"http://hudson.host:8080/job/Job2/" => { :url => "http://hudson.host:8080/job/Job2/", :name => "Job 2"}
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "returns a hash with the correct job details and normalizes with nokogiri" do
|
69
|
+
response1 = Typhoeus::Response.new(:code => 200, :headers => "", :body => "<root><a>test1</a><b></b></root>")
|
70
|
+
response2 = Typhoeus::Response.new(:code => 200, :headers => "", :body => "<root><a>test2</a><b></b></root>")
|
71
|
+
jenkins.hydra.stub(:get, "http://hudson.host:8080/job/Job1/config.xml").and_return(response1)
|
72
|
+
jenkins.hydra.stub(:get, "http://hudson.host:8080/job/Job2/config.xml").and_return(response2)
|
73
|
+
details = jenkins.job_details
|
74
|
+
details.should be_an_instance_of(Hash)
|
75
|
+
details["http://hudson.host:8080/job/Job2/"].should == {
|
76
|
+
:body=>"<?xml version=\"1.0\"?>\n<root>\n <a>test2</a>\n <b/>\n</root>\n",
|
77
|
+
:md5=>"b52105fcdd28fe6428df019e121f106a", :name=>"Job 2", :url=>"http://hudson.host:8080/job/Job2/"
|
78
|
+
}
|
79
|
+
details["http://hudson.host:8080/job/Job1/"].should == {
|
80
|
+
:body=>"<?xml version=\"1.0\"?>\n<root>\n <a>test1</a>\n <b/>\n</root>\n",
|
81
|
+
:md5=>"14fa3890bea86820f7e45ce7f5a3ada4", :name=>"Job 1", :url=>"http://hudson.host:8080/job/Job1/"
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
it "has a builder" do
|
86
|
+
builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
|
87
|
+
xml.project {
|
88
|
+
xml.actions
|
89
|
+
xml.description
|
90
|
+
xml.keepDependencies false
|
91
|
+
xml.properties
|
92
|
+
xml.scm(:class => "hudson.scm.NullSCM")
|
93
|
+
xml.canRoam true
|
94
|
+
xml.disabled false
|
95
|
+
xml.blockBuildWhenDownstreamBuilding false
|
96
|
+
xml.blockBuildWhenUpstreamBuilding false
|
97
|
+
xml.triggers(:class => "vector")
|
98
|
+
xml.concurrentBuild false
|
99
|
+
xml.builders do
|
100
|
+
xml.send("hudson.tasks.Shell") do
|
101
|
+
xml.command %(#!/bin/sh\nssh some.host "cd /some/path && ./script/runner -e production 'Some.command'")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
xml.publishers
|
105
|
+
xml.buildWrappers do
|
106
|
+
xml.send("hudson.plugins.locksandlatches.LockWrapper") do
|
107
|
+
xml.locks do
|
108
|
+
xml.send("hudson.plugins.locksandlatches.LockWrapper_-LockWaitConfig") do
|
109
|
+
xml.name "Popularities"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
}
|
115
|
+
end
|
116
|
+
builder.to_xml.should == Nokogiri::XML(File.read(ROOT.join("spec/fixtures/jenkins_job.xml"))).to_s
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
data/spec/dynport_tools_spec.rb
CHANGED
@@ -1,12 +1,4 @@
|
|
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
|
12
4
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
2
|
+
<project>
|
3
|
+
<actions/>
|
4
|
+
<description></description>
|
5
|
+
<keepDependencies>false</keepDependencies>
|
6
|
+
<properties/>
|
7
|
+
<scm class="hudson.scm.NullSCM"/>
|
8
|
+
<canRoam>true</canRoam>
|
9
|
+
<disabled>false</disabled>
|
10
|
+
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
|
11
|
+
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
|
12
|
+
<triggers class="vector"/>
|
13
|
+
<concurrentBuild>false</concurrentBuild>
|
14
|
+
<builders>
|
15
|
+
<hudson.tasks.Shell>
|
16
|
+
<command>#!/bin/sh
|
17
|
+
ssh some.host "cd /some/path && ./script/runner -e production 'Some.command'"</command>
|
18
|
+
</hudson.tasks.Shell>
|
19
|
+
</builders>
|
20
|
+
<publishers/>
|
21
|
+
<buildWrappers>
|
22
|
+
<hudson.plugins.locksandlatches.LockWrapper>
|
23
|
+
<locks>
|
24
|
+
<hudson.plugins.locksandlatches.LockWrapper_-LockWaitConfig>
|
25
|
+
<name>Popularities</name>
|
26
|
+
</hudson.plugins.locksandlatches.LockWrapper_-LockWaitConfig>
|
27
|
+
</locks>
|
28
|
+
</hudson.plugins.locksandlatches.LockWrapper>
|
29
|
+
</buildWrappers>
|
30
|
+
</project>
|
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: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tobias Schwab
|
@@ -19,8 +19,9 @@ date: 2011-08-17 00:00:00 +02:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
|
22
|
+
name: nokogiri
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
25
|
none: false
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
@@ -29,12 +30,12 @@ dependencies:
|
|
29
30
|
segments:
|
30
31
|
- 0
|
31
32
|
version: "0"
|
32
|
-
name: nokogiri
|
33
|
-
version_requirements: *id001
|
34
|
-
prerelease: false
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
33
|
type: :runtime
|
37
|
-
requirement:
|
34
|
+
requirement: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: redis
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
38
39
|
none: false
|
39
40
|
requirements:
|
40
41
|
- - ">="
|
@@ -43,12 +44,26 @@ dependencies:
|
|
43
44
|
segments:
|
44
45
|
- 0
|
45
46
|
version: "0"
|
46
|
-
|
47
|
-
|
47
|
+
type: :runtime
|
48
|
+
requirement: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: typhoeus
|
48
51
|
prerelease: false
|
52
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :runtime
|
62
|
+
requirement: *id003
|
49
63
|
- !ruby/object:Gem::Dependency
|
50
|
-
|
51
|
-
|
64
|
+
name: rspec
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
52
67
|
none: false
|
53
68
|
requirements:
|
54
69
|
- - ~>
|
@@ -59,12 +74,12 @@ dependencies:
|
|
59
74
|
- 3
|
60
75
|
- 0
|
61
76
|
version: 2.3.0
|
62
|
-
name: rspec
|
63
|
-
version_requirements: *id003
|
64
|
-
prerelease: false
|
65
|
-
- !ruby/object:Gem::Dependency
|
66
77
|
type: :development
|
67
|
-
requirement:
|
78
|
+
requirement: *id004
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: bundler
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
68
83
|
none: false
|
69
84
|
requirements:
|
70
85
|
- - ~>
|
@@ -75,12 +90,12 @@ dependencies:
|
|
75
90
|
- 0
|
76
91
|
- 0
|
77
92
|
version: 1.0.0
|
78
|
-
name: bundler
|
79
|
-
version_requirements: *id004
|
80
|
-
prerelease: false
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
93
|
type: :development
|
83
|
-
requirement:
|
94
|
+
requirement: *id005
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: jeweler
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
84
99
|
none: false
|
85
100
|
requirements:
|
86
101
|
- - ~>
|
@@ -91,12 +106,12 @@ dependencies:
|
|
91
106
|
- 6
|
92
107
|
- 4
|
93
108
|
version: 1.6.4
|
94
|
-
name: jeweler
|
95
|
-
version_requirements: *id005
|
96
|
-
prerelease: false
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
109
|
type: :development
|
99
|
-
requirement:
|
110
|
+
requirement: *id006
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rcov
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
100
115
|
none: false
|
101
116
|
requirements:
|
102
117
|
- - ">="
|
@@ -105,12 +120,12 @@ dependencies:
|
|
105
120
|
segments:
|
106
121
|
- 0
|
107
122
|
version: "0"
|
108
|
-
name: rcov
|
109
|
-
version_requirements: *id006
|
110
|
-
prerelease: false
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
123
|
type: :development
|
113
|
-
requirement:
|
124
|
+
requirement: *id007
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: ZenTest
|
127
|
+
prerelease: false
|
128
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
114
129
|
none: false
|
115
130
|
requirements:
|
116
131
|
- - "="
|
@@ -121,12 +136,12 @@ dependencies:
|
|
121
136
|
- 5
|
122
137
|
- 0
|
123
138
|
version: 4.5.0
|
124
|
-
name: ZenTest
|
125
|
-
version_requirements: *id007
|
126
|
-
prerelease: false
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
139
|
type: :development
|
129
|
-
requirement:
|
140
|
+
requirement: *id008
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: autotest
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
130
145
|
none: false
|
131
146
|
requirements:
|
132
147
|
- - ">="
|
@@ -135,12 +150,12 @@ dependencies:
|
|
135
150
|
segments:
|
136
151
|
- 0
|
137
152
|
version: "0"
|
138
|
-
name: autotest
|
139
|
-
version_requirements: *id008
|
140
|
-
prerelease: false
|
141
|
-
- !ruby/object:Gem::Dependency
|
142
153
|
type: :development
|
143
|
-
requirement:
|
154
|
+
requirement: *id009
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: autotest-growl
|
157
|
+
prerelease: false
|
158
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
144
159
|
none: false
|
145
160
|
requirements:
|
146
161
|
- - ">="
|
@@ -149,12 +164,12 @@ dependencies:
|
|
149
164
|
segments:
|
150
165
|
- 0
|
151
166
|
version: "0"
|
152
|
-
name: autotest-growl
|
153
|
-
version_requirements: *id009
|
154
|
-
prerelease: false
|
155
|
-
- !ruby/object:Gem::Dependency
|
156
167
|
type: :development
|
157
|
-
requirement:
|
168
|
+
requirement: *id010
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: ruby-debug
|
171
|
+
prerelease: false
|
172
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
158
173
|
none: false
|
159
174
|
requirements:
|
160
175
|
- - ">="
|
@@ -163,9 +178,8 @@ dependencies:
|
|
163
178
|
segments:
|
164
179
|
- 0
|
165
180
|
version: "0"
|
166
|
-
|
167
|
-
|
168
|
-
prerelease: false
|
181
|
+
type: :development
|
182
|
+
requirement: *id011
|
169
183
|
description: Collection of various tools
|
170
184
|
email: tobias.schwab@dynport.de
|
171
185
|
executables:
|
@@ -191,15 +205,20 @@ files:
|
|
191
205
|
- bin/xmldiff
|
192
206
|
- dynport_tools.gemspec
|
193
207
|
- lib/dynport_tools.rb
|
208
|
+
- lib/dynport_tools/deep_merger.rb
|
194
209
|
- lib/dynport_tools/differ.rb
|
210
|
+
- lib/dynport_tools/jenkins.rb
|
195
211
|
- lib/dynport_tools/redis_dumper.rb
|
196
212
|
- lib/dynport_tools/xml_file.rb
|
197
213
|
- lib/have_attributes.rb
|
214
|
+
- spec/dynport_tools/deep_merger_spec.rb
|
198
215
|
- spec/dynport_tools/differ_spec.rb
|
216
|
+
- spec/dynport_tools/jenkins_spec.rb
|
199
217
|
- spec/dynport_tools/redis_dumper_spec.rb
|
200
218
|
- spec/dynport_tools/xml_file_spec.rb
|
201
219
|
- spec/dynport_tools_spec.rb
|
202
220
|
- spec/fixtures/file_a.xml
|
221
|
+
- spec/fixtures/jenkins_job.xml
|
203
222
|
- spec/spec_helper.rb
|
204
223
|
- spec/xml_diff_spec.rb
|
205
224
|
has_rdoc: true
|