kraken-build 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gem "rake"
6
6
 
7
7
  group :test do
8
8
  gem 'rspec'
9
+ gem 'ZenTest', "4.8.3"
9
10
  gem 'autotest'
10
11
  end
11
12
 
@@ -1,6 +1,8 @@
1
1
  class JenkinsApi
2
2
  include HTTParty
3
3
 
4
+ attr_accessor :skip_plugins
5
+
4
6
  def initialize(options = {})
5
7
  if options[:port]
6
8
  self.class.base_uri "#{options[:host]}:#{options[:port]}"
@@ -8,9 +10,14 @@ class JenkinsApi
8
10
  self.class.base_uri options[:host]
9
11
  end
10
12
 
11
- if(options[:username] && options[:password])
13
+ if (options[:username] && options[:password])
12
14
  self.class.basic_auth options[:username] , options[:password]
13
15
  end
16
+ if (options[:skip_plugins])
17
+ self.skip_plugins = options[:skip_plugins]
18
+ else
19
+ self.skip_plugins = []
20
+ end
14
21
  end
15
22
 
16
23
  def get_jobs(options = {})
@@ -35,6 +42,14 @@ class JenkinsApi
35
42
  doc = REXML::Document.new(draft)
36
43
  REXML::XPath.first(doc, '//branches//hudson.plugins.git.BranchSpec//name').text = branch
37
44
 
45
+ plugin_names = self.skip_plugins.map { |n| "hudson.plugins.#{n}" }
46
+ publishers = REXML::XPath.first(doc, '//project/publishers')
47
+ if publishers && publishers.has_elements? && self.skip_plugins && !(self.skip_plugins.empty?)
48
+ publishers.children.select { |child| child.xpath.match %r[/hudson\.plugins] }.each do |plugin|
49
+ doc.delete_element(plugin.xpath) if plugin_names.any? { |name| plugin.xpath[name]}
50
+ end
51
+ end
52
+
38
53
  doc.to_s
39
54
  end
40
55
 
@@ -1,5 +1,5 @@
1
1
  module Kraken
2
2
  module Build
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -27,13 +27,17 @@ describe JenkinsApi do
27
27
  api.class.default_options[:base_uri].should == 'http://host:1337'
28
28
  end
29
29
 
30
+ it "sets the plugins to skip at initialization" do
31
+ options = {:skip_plugins => ['test'] }
32
+ jenkins_api = JenkinsApi.new(options)
33
+ jenkins_api.skip_plugins.should eq(['test'])
34
+ end
35
+
30
36
  end
31
37
 
32
38
 
33
39
  context "when interacting with Jenkins" do
34
- before(:each) do
35
- @api = JenkinsApi.new
36
- end
40
+ let(:api) { JenkinsApi.new }
37
41
 
38
42
  it "#get_jobs returns an array of jobs" do
39
43
  j = []
@@ -42,9 +46,9 @@ describe JenkinsApi do
42
46
 
43
47
  results = {"jobs" => j}
44
48
 
45
- @api.class.should_receive(:get).and_return(results)
49
+ api.class.should_receive(:get).and_return(results)
46
50
 
47
- jobs = @api.get_jobs
51
+ jobs = api.get_jobs
48
52
 
49
53
  jobs.should include "Foo"
50
54
  jobs.should include "Bar"
@@ -53,15 +57,15 @@ describe JenkinsApi do
53
57
  it "#remove_job returns true if a job was deleted successfully" do
54
58
  job_name = "foo.test_branch"
55
59
 
56
- @api.class.should_receive(:post).with("/job/#{CGI.escape(job_name)}/doDelete").and_return(true)
60
+ api.class.should_receive(:post).with("/job/#{CGI.escape(job_name)}/doDelete").and_return(true)
57
61
 
58
- @api.remove_job(job_name)
62
+ api.remove_job(job_name)
59
63
  end
60
64
 
61
65
  it "#build_job returns true and triggers a build for a job" do
62
- @api.class.should_receive(:get).with("/job/FooJob/build").and_return(true)
66
+ api.class.should_receive(:get).with("/job/FooJob/build").and_return(true)
63
67
 
64
- @api.build_job("FooJob")
68
+ api.build_job("FooJob")
65
69
  end
66
70
 
67
71
  it "#get_job_configuration returns the xml configuration for a job" do
@@ -71,19 +75,33 @@ describe JenkinsApi do
71
75
  xml = double()
72
76
  xml.should_receive(:body).and_return(a)
73
77
 
74
- @api.class.should_receive(:get).with("/job/FooJob/config.xml", {}).and_return(xml)
78
+ api.class.should_receive(:get).with("/job/FooJob/config.xml", {}).and_return(xml)
75
79
 
76
- @api.get_job_configuration("FooJob").should be(a)
80
+ api.get_job_configuration("FooJob").should be(a)
77
81
  end
78
-
79
- it "#create_job_configuration returns a valid job configuration" do
80
- xml = <<-XML
82
+ context "#create_job_configuration" do
83
+ it "returns a valid job configuration" do
84
+ xml = <<-XML
81
85
  <xml><branches><hudson.plugins.git.BranchSpec><name>master</name></hudson.plugins.git.BranchSpec></branches></xml>
82
- XML
83
- xml.should_receive(:body).and_return(xml)
84
- @api.class.should_receive(:get).with('/job/foobar.master/config.xml', {}).and_return(xml)
85
- @api.create_job_configuration('foobar', 'feature').should =~ /feature/
86
- end
86
+ XML
87
+ xml.should_receive(:body).and_return(xml)
88
+ api.class.should_receive(:get).with('/job/foobar.master/config.xml', {}).and_return(xml)
89
+ api.create_job_configuration('foobar', 'feature').should =~ /feature/
90
+ end
91
+ it "removes all plugins that have been listed in 'skip_plugins'" do
92
+ api.skip_plugins = ['test']
93
+ xml_stripped = <<-XML_S
94
+ <xml><project><branches><hudson.plugins.git.BranchSpec><name>master</name></hudson.plugins.git.BranchSpec></branches><publishers></publishers></project></xml>
95
+ XML_S
96
+ xml = <<-XML
97
+ <xml><project><branches><hudson.plugins.git.BranchSpec><name>master</name></hudson.plugins.git.BranchSpec></branches><publishers><hudson.plugins.test>test</hudson.plugins.test></publishers></project></xml>
98
+ XML
99
+ xml.should_receive(:body).and_return(xml)
100
+ api.class.should_receive(:get).with('/job/foobar.master/config.xml', {}).and_return(xml)
101
+ api.create_job_configuration('foobar', 'feature').should_not =~ /hudson\.plugins\.test/
102
+ end
103
+ end
104
+
87
105
 
88
106
  end
89
107
 
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe KrakenBuild do
4
+ context "Setting config" do
5
+ let(:options) { mock(Hash).as_null_object }
6
+
7
+ it "sets the config options at @config" do
8
+ kraken = KrakenBuild.set_config(options)
9
+ KrakenBuild.instance_variable_get(:@config).should eq(options)
10
+ end
11
+
12
+ it "sets the repository option as @repository" do
13
+ repository = mock(String)
14
+ options.should_receive(:[]).with(:repository).and_return(repository)
15
+ kraken = KrakenBuild.set_config(options)
16
+ KrakenBuild.instance_variable_get(:@repository).should eq(repository)
17
+ end
18
+
19
+ it "sets the github api from instance call" do
20
+ github_api = mock(GithubApi).as_null_object
21
+ GithubApi.should_receive(:new).and_return(github_api)
22
+ kraken = KrakenBuild.set_config(options)
23
+ KrakenBuild.instance_variable_get(:@github).should eq(github_api)
24
+ end
25
+ it "sets the jenkins api from instance call" do
26
+ jenkins_api = mock(GithubApi).as_null_object
27
+ JenkinsApi.should_receive(:new).and_return(jenkins_api)
28
+ kraken = KrakenBuild.set_config(options)
29
+ KrakenBuild.instance_variable_get(:@jenkins).should eq(jenkins_api)
30
+ end
31
+ it "returns the config" do
32
+ kraken = KrakenBuild.set_config(options)
33
+ KrakenBuild.instance_variable_get(:@config).should eq(options)
34
+ kraken.should eq(options)
35
+ end
36
+
37
+ end
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kraken-build
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-09-19 00:00:00.000000000 Z
13
+ date: 2013-02-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -74,6 +74,7 @@ files:
74
74
  - .rspec
75
75
  - .travis.yml
76
76
  - Gemfile
77
+ - Gemfile.lock
77
78
  - LICENSE
78
79
  - README.md
79
80
  - Rakefile
@@ -85,6 +86,7 @@ files:
85
86
  - lib/kraken-build/version.rb
86
87
  - spec/lib/github_api_spec.rb
87
88
  - spec/lib/jenkins_api_spec.rb
89
+ - spec/lib/kraken-build_spec.rb
88
90
  - spec/spec_helper.rb
89
91
  homepage: https://github.com/pxlpnk/kraken-build
90
92
  licenses: []
@@ -100,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
102
  version: '0'
101
103
  segments:
102
104
  - 0
103
- hash: 3700352147428920212
105
+ hash: -3213745627725457868
104
106
  required_rubygems_version: !ruby/object:Gem::Requirement
105
107
  none: false
106
108
  requirements:
@@ -109,14 +111,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
111
  version: '0'
110
112
  segments:
111
113
  - 0
112
- hash: 3700352147428920212
114
+ hash: -3213745627725457868
113
115
  requirements: []
114
116
  rubyforge_project:
115
- rubygems_version: 1.8.24
117
+ rubygems_version: 1.8.25
116
118
  signing_key:
117
119
  specification_version: 3
118
120
  summary: Managing your feature branches on Jenkins and Github
119
121
  test_files:
120
122
  - spec/lib/github_api_spec.rb
121
123
  - spec/lib/jenkins_api_spec.rb
124
+ - spec/lib/kraken-build_spec.rb
122
125
  - spec/spec_helper.rb