dynport_tools 0.2.2 → 0.2.3
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 +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
|