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 CHANGED
@@ -7,6 +7,7 @@ source "http://rubygems.org"
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  gem 'nokogiri'
9
9
  gem 'redis'
10
+ gem 'typhoeus'
10
11
 
11
12
  group :development do
12
13
  gem "rspec", "~> 2.3.0"
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.2
1
+ 0.2.3
@@ -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.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
@@ -1,7 +1,4 @@
1
1
  module DynportTools
2
- class << self
3
- def xmldiff(file1, file2)
4
- throw :print_usage
5
- end
6
- end
7
- end
2
+ end
3
+
4
+ %w(deep_merger differ jenkins redis_dumper xml_file).map { |m| require "dynport_tools/#{m}" }
@@ -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
@@ -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 &quot;cd /some/path &amp;&amp; ./script/runner -e production &apos;Some.command&apos;&quot;</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: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 2
10
- version: 0.2.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
- type: :runtime
23
- requirement: &id001 !ruby/object:Gem::Requirement
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: &id002 !ruby/object:Gem::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
- name: redis
47
- version_requirements: *id002
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
- type: :development
51
- requirement: &id003 !ruby/object:Gem::Requirement
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: &id004 !ruby/object:Gem::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: &id005 !ruby/object:Gem::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: &id006 !ruby/object:Gem::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: &id007 !ruby/object:Gem::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: &id008 !ruby/object:Gem::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: &id009 !ruby/object:Gem::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: &id010 !ruby/object:Gem::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
- name: ruby-debug
167
- version_requirements: *id010
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