jenkins_api_client 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ CHANGELOG
4
4
  upcoming
5
5
  --------
6
6
 
7
+ v0.11.0 [09-JUN-2013]
8
+ ----------------------
9
+ * A new input argument `server_url` is supported which accepts the jenkins URL instead of IP address and Port. Credit: @dieterdemeyer
10
+ * When renaming the job, preserve the job history. Credit: @rubytester
11
+ * Various exception handling improvements. Credit: @drnic
12
+
7
13
  v0.10.0 [24-APR-2013]
8
14
  ----------------------
9
15
  * new function to execute jenkins CLI `cli_exec`. Credit: @missedone
data/README.md CHANGED
@@ -11,7 +11,9 @@ Client libraries for communicating with a Jenkins CI server and programatically
11
11
 
12
12
  IRC Channel: ##jenkins-api-client
13
13
 
14
- Mailing list: jenkins.api.client@librelist.com
14
+ Mailing list: jenkins_api_client@googlegroups.com
15
+
16
+ Google Group: https://groups.google.com/group/jenkins_api_client
15
17
 
16
18
  OVERVIEW:
17
19
  ---------
@@ -4,13 +4,16 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = "jenkins_api_client"
8
- s.version = "0.9.1"
7
+ s.name = %q{jenkins_api_client}
8
+ s.version = "0.11.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kannan Manickam"]
12
- s.date = "2013-04-16"
13
- s.description = "\nThis is a simple and easy-to-use Jenkins Api client with features focused on\nautomating Job configuration programaticaly and so forth"
12
+ s.date = %q{2013-06-09}
13
+ s.default_executable = %q{jenkinscli}
14
+ s.description = %q{
15
+ This is a simple and easy-to-use Jenkins Api client with features focused on
16
+ automating Job configuration programaticaly and so forth}
14
17
  s.email = ["arangamani.kannan@gmail.com"]
15
18
  s.executables = ["jenkinscli"]
16
19
  s.files = [
@@ -25,6 +28,7 @@ Gem::Specification.new do |s|
25
28
  "bin/jenkinscli",
26
29
  "config/login.yml.example",
27
30
  "java_deps/jenkins-cli.jar",
31
+ "jenkins_api_client.gemspec",
28
32
  "lib/jenkins_api_client.rb",
29
33
  "lib/jenkins_api_client/build_queue.rb",
30
34
  "lib/jenkins_api_client/cli/base.rb",
@@ -56,15 +60,16 @@ Gem::Specification.new do |s|
56
60
  "spec/unit_tests/system_spec.rb",
57
61
  "spec/unit_tests/view_spec.rb"
58
62
  ]
59
- s.homepage = "https://github.com/arangamani/jenkins_api_client"
63
+ s.homepage = %q{https://github.com/arangamani/jenkins_api_client}
60
64
  s.require_paths = ["lib"]
61
- s.rubygems_version = "1.8.25"
62
- s.summary = "Jenkins JSON API Client"
65
+ s.rubygems_version = %q{1.3.6}
66
+ s.summary = %q{Jenkins JSON API Client}
63
67
 
64
68
  if s.respond_to? :specification_version then
69
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
65
70
  s.specification_version = 3
66
71
 
67
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
72
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
68
73
  s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
69
74
  s.add_runtime_dependency(%q<thor>, [">= 0.16.0"])
70
75
  s.add_runtime_dependency(%q<json>, [">= 0"])
@@ -25,6 +25,7 @@ module JenkinsApi
25
25
  # This classes communicates with the Build Queue API exposed by Jenkins at
26
26
  # "/queue" that gives information about jobs/tasks in the queue and their
27
27
  # details.
28
+ #
28
29
  class BuildQueue
29
30
 
30
31
  # Initializes a new BuildQueue object.
@@ -28,9 +28,11 @@ require "#{File.dirname(__FILE__)}/system.rb"
28
28
 
29
29
  module JenkinsApi
30
30
  # This is the base module for all command line interface for Jenkins API.
31
+ #
31
32
  module CLI
32
33
  # This is the base class for the command line interface which adds other
33
34
  # classes as subcommands to the CLI.
35
+ #
34
36
  class Base < Thor
35
37
 
36
38
  class_option :username, :aliases => "-u", :desc => "Name of Jenkins user"
@@ -29,10 +29,12 @@ require "mixlib/shellout"
29
29
 
30
30
  # The main module that contains the Client class and all subclasses that
31
31
  # communicate with the Jenkins's Remote Access API.
32
+ #
32
33
  module JenkinsApi
33
34
  # This is the client class that acts as the bridge between the subclasses and
34
35
  # Jnekins. This class contains methods that performs GET and POST requests
35
36
  # for various operations.
37
+ #
36
38
  class Client
37
39
  attr_accessor :debug, :timeout
38
40
  # Default port to be used to connect to Jenkins
@@ -41,6 +43,7 @@ module JenkinsApi
41
43
  DEFAULT_TIMEOUT = 120
42
44
  # Parameters that are permitted as options while initializing the client
43
45
  VALID_PARAMS = [
46
+ "server_url",
44
47
  "server_ip",
45
48
  "server_port",
46
49
  "proxy_ip",
@@ -59,8 +62,12 @@ module JenkinsApi
59
62
  # @param [Hash] args
60
63
  # * the +:server_ip+ param is the IP address of the Jenkins CI server
61
64
  # * the +:server_port+ param is the port on which the Jenkins listens
65
+ # * the +:server_url+ param is the full URL address of the Jenkins CI server (http/https)
62
66
  # * the +:username+ param is the username used for connecting to the server
63
67
  # * the +:password+ param is the password for connecting to the CI server
68
+ # * the +:proxy_ip+ param is the proxy IP address
69
+ # * the +:proxy_port+ param is the proxy port
70
+ # * the +:jenkins_path+ param is the optional context path for Jenkins
64
71
  # * the +:ssl+ param indicates if Jenkins is accessible over HTTPS
65
72
  # (defaults to false)
66
73
  #
@@ -74,8 +81,8 @@ module JenkinsApi
74
81
  instance_variable_set("@#{key}", value)
75
82
  end
76
83
  end if args.is_a? Hash
77
- unless @server_ip
78
- raise ArgumentError, "Server IP is required to connect to Jenkins"
84
+ unless @server_ip || @server_url
85
+ raise ArgumentError, "Server IP or Server URL is required to connect to Jenkins"
79
86
  end
80
87
  unless @username && (@password || @password_base64)
81
88
  raise ArgumentError, "Credentials are required to connect to Jenkins"
@@ -84,9 +91,11 @@ module JenkinsApi
84
91
  raise ArgumentError, "Proxy IP and port must both be specified or" +
85
92
  " both left nil"
86
93
  end
94
+ @server_uri = URI.parse(@server_url) if @server_url
87
95
  @server_port = DEFAULT_SERVER_PORT unless @server_port
88
96
  @timeout = DEFAULT_TIMEOUT unless @timeout
89
97
  @ssl ||= false
98
+ @ssl = @server_uri.scheme == "https" if @server_uri
90
99
  @debug = false unless @debug
91
100
 
92
101
  # Base64 decode inserts a newline character at the end. As a workaround
@@ -155,11 +164,19 @@ module JenkinsApi
155
164
  # @param [Net::HTTPRequest] request The request object to send
156
165
  #
157
166
  # @return [Net::HTTPResponse] Response from Jenkins
167
+ #
158
168
  def make_http_request( request )
159
- Net::HTTP.start(
160
- @server_ip, @server_port, @proxy_ip, @proxy_port, :use_ssl => @ssl
161
- ) do |http|
169
+ if @server_url
170
+ http = Net::HTTP.new(@server_uri.host, @server_uri.port)
171
+ http.use_ssl = true if @ssl
172
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @ssl
162
173
  return http.request(request)
174
+ else
175
+ Net::HTTP.start(
176
+ @server_ip, @server_port, @proxy_ip, @proxy_port, :use_ssl => @ssl
177
+ ) do |http|
178
+ return http.request(request)
179
+ end
163
180
  end
164
181
  end
165
182
  protected :make_http_request
@@ -323,24 +340,25 @@ module JenkinsApi
323
340
  #
324
341
  # @param [Net::HTTP::Response] response Response from Jenkins
325
342
  # @param [String] to_send What should be returned as a response. Allowed
326
- # values: "code" and "body".
343
+ # values: "code" and "body".
327
344
  # @param [Boolean] send_json Boolean value used to determine whether to
328
- # load the JSON or send the response as is.
345
+ # load the JSON or send the response as is.
329
346
  #
330
347
  # @return [String, JSON] Response returned whether loaded JSON or raw
331
- # string
348
+ # string
332
349
  #
333
350
  # @raise [Exceptions::UnauthorizedException] When invalid credentials are
334
- # provided to connect to Jenkins
351
+ # provided to connect to Jenkins
335
352
  # @raise [Exceptions::NotFoundException] When the requested page on Jenkins
336
- # is found
353
+ # is found
337
354
  # @raise [Exceptions::InternelServerErrorException] When Jenkins returns a
338
- # 500 Internel Server Error
355
+ # 500 Internel Server Error
339
356
  # @raise [Exceptions::ApiException] Any other exception returned from
340
- # Jenkins that are not categorized in the API Client.
357
+ # Jenkins that are not categorized in the API Client.
341
358
  #
342
359
  def handle_exception(response, to_send = "code", send_json = false)
343
360
  msg = "HTTP Code: #{response.code}, Response Body: #{response.body}"
361
+ puts msg if @debug
344
362
  case response.code.to_i
345
363
  when 200, 302
346
364
  if to_send == "body" && send_json
@@ -350,6 +368,15 @@ module JenkinsApi
350
368
  elsif to_send == "code"
351
369
  return response.code
352
370
  end
371
+ when 400
372
+ case response.body
373
+ when /A job already exists with the name/
374
+ raise Exceptions::JobAlreadyExistsWithName.new
375
+ when /Nothing is submitted/
376
+ raise Exceptions::NothingSubmitted.new
377
+ else
378
+ raise Exceptions::ApiException.new("Error code 400")
379
+ end
353
380
  when 401
354
381
  raise Exceptions::UnautherizedException.new
355
382
  when 404
@@ -357,7 +384,7 @@ module JenkinsApi
357
384
  when 500
358
385
  raise Exceptions::InternelServerErrorException.new
359
386
  else
360
- raise Exceptions::ApiException.new
387
+ raise Exceptions::ApiException.new("Error code #{response.code}")
361
388
  end
362
389
  end
363
390
 
@@ -22,17 +22,38 @@
22
22
 
23
23
  module JenkinsApi
24
24
  # This module contains classes that define exceptions for various catories.
25
+ #
25
26
  module Exceptions
26
27
  # This is the base class for Exceptions that is inherited from
27
28
  # RuntimeError.
29
+ #
28
30
  class ApiException < RuntimeError
29
31
  def initialize(message = "")
30
32
  super("Error: #{message}")
31
33
  end
32
34
  end
33
35
 
36
+ # This exception class handles cases where parameters are expected
37
+ # but not provided.
38
+ #
39
+ class NothingSubmitted < ApiException
40
+ def initialize(message = "")
41
+ super("Nothing is submitted. #{message}")
42
+ end
43
+ end
44
+
45
+ # This exception class handles cases where a job not able to be created
46
+ # because it already exists.
47
+ #
48
+ class JobAlreadyExistsWithName < ApiException
49
+ def initialize(message = "")
50
+ super("Job already exists with that name. #{message}")
51
+ end
52
+ end
53
+
34
54
  # This exception class handles cases where invalid credentials are provided
35
- # to connect to the Jenkins
55
+ # to connect to the Jenkins.
56
+ #
36
57
  class UnautherizedException < ApiException
37
58
  def initialize(message = "")
38
59
  super("Invalid credentials are provided. #{message}")
@@ -40,7 +61,8 @@ module JenkinsApi
40
61
  end
41
62
 
42
63
  # This exception class handles cases where a requested page is not found on
43
- # the Jenkins API
64
+ # the Jenkins API.
65
+ #
44
66
  class NotFoundException < ApiException
45
67
  def initialize(message = "")
46
68
  super("Requested component is not found on the Jenkins CI server." +
@@ -49,7 +71,8 @@ module JenkinsApi
49
71
  end
50
72
 
51
73
  # This exception class handles cases where the Jenkins API returns with a
52
- # 500 Internel Server Error
74
+ # 500 Internel Server Error.
75
+ #
53
76
  class InternelServerErrorException < ApiException
54
77
  def initialize(message = "")
55
78
  super("Internel Server Error. Perhaps the in-memory configuration of" +
@@ -60,6 +83,7 @@ module JenkinsApi
60
83
  end
61
84
 
62
85
  # Exception occurred while running java CLI commands
86
+ #
63
87
  class CLIException < ApiException
64
88
  def initialize(message = "")
65
89
  super("Execute CLI Error. #{message}")
@@ -24,6 +24,7 @@ module JenkinsApi
24
24
  class Client
25
25
  # This class communicates with the Jenkins "/job" API to obtain details
26
26
  # about jobs, creating, deleting, building, and various other operations.
27
+ #
27
28
  class Job
28
29
 
29
30
  # Initialize the Job object and store the reference to Client object
@@ -274,12 +275,7 @@ module JenkinsApi
274
275
  # @param [String] new_job Name of the new job.
275
276
  #
276
277
  def rename(old_job, new_job)
277
- # Obtain the configuration of the old job
278
- xml = get_config(old_job)
279
- # Create the new job with the configuration obtained
280
- create(new_job, xml)
281
- # Delete the old job
282
- delete(old_job)
278
+ @client.api_post_request("/job/#{old_job}/doRename?newName=#{new_job}")
283
279
  end
284
280
 
285
281
  # Delete a job given the name
@@ -24,6 +24,7 @@ module JenkinsApi
24
24
  class Client
25
25
  # This class communicates with Jenkins "/computer" API to obtain details
26
26
  # about nodes or slaves connected to the Jenkins.
27
+ #
27
28
  class Node
28
29
 
29
30
  # General attributes of a node.
@@ -31,9 +32,9 @@ module JenkinsApi
31
32
  # These methods are defined using define_method and are prefixed
32
33
  # with get_.
33
34
  #
34
- # def get_busyExecutors
35
- # def get_displayName
36
- # def get_totalExecutors
35
+ # def get_busyExecutors
36
+ # def get_displayName
37
+ # def get_totalExecutors
37
38
  #
38
39
  GENERAL_ATTRIBUTES = [
39
40
  "busyExecutors",
@@ -45,12 +46,12 @@ module JenkinsApi
45
46
  # The following methods are defined to be called on the node object
46
47
  # and are prefixed with is_ and end with ? as they return true or false.
47
48
  #
48
- # def is_idle?(node_name)
49
- # def is_jnlpAgent?(node_name)
50
- # def is_launchSupported?(node_name)
51
- # def is_manualLaunchAllowed?(node_name)
52
- # def is_offline?(node_name)
53
- # def is_temporarilyOffline?(node_name)
49
+ # def is_idle?(node_name)
50
+ # def is_jnlpAgent?(node_name)
51
+ # def is_launchSupported?(node_name)
52
+ # def is_manualLaunchAllowed?(node_name)
53
+ # def is_offline?(node_name)
54
+ # def is_temporarilyOffline?(node_name)
54
55
  #
55
56
  NODE_PROPERTIES = [
56
57
  "idle",
@@ -65,13 +66,13 @@ module JenkinsApi
65
66
  # The following methods are defined using define_method.
66
67
  # These methods are prefixed with get_node_.
67
68
  #
68
- # def get_node_numExecutors(node_name)
69
- # def get_node_icon(node_name)
70
- # def get_node_displayName(node_name)
71
- # def get_node_loadStatistics(node_name)
72
- # def get_node_monitorData(node_name)
73
- # def get_node_offlineCause(node_name)
74
- # def get_node_oneOffExecutors(node_name)
69
+ # def get_node_numExecutors(node_name)
70
+ # def get_node_icon(node_name)
71
+ # def get_node_displayName(node_name)
72
+ # def get_node_loadStatistics(node_name)
73
+ # def get_node_monitorData(node_name)
74
+ # def get_node_offlineCause(node_name)
75
+ # def get_node_oneOffExecutors(node_name)
75
76
  #
76
77
  NODE_ATTRIBUTES = [
77
78
  "numExecutors",
@@ -26,6 +26,7 @@ module JenkinsApi
26
26
  class Client
27
27
  # This class is used to communicate with Jenkins and performing some admin
28
28
  # level operations such as restarting and reloading Jenkins.
29
+ #
29
30
  class System
30
31
 
31
32
  # Initializes a new System object.
@@ -81,11 +82,12 @@ module JenkinsApi
81
82
  while true do
82
83
  response = @client.get_root
83
84
  puts "[INFO] Waiting for jenkins to restart..." if @client.debug
84
- if (response.body =~ /Please wait while Jenkins is restarting/ || response.body =~ /Please wait while Jenkins is getting ready to work/)
85
+ if (response.body =~ /Please wait while Jenkins is restarting/ ||
86
+ response.body =~ /Please wait while Jenkins is getting ready to work/)
85
87
  sleep 30
86
88
  redo
87
89
  else
88
- return true
90
+ return true
89
91
  end
90
92
  end
91
93
  end
@@ -25,7 +25,7 @@ module JenkinsApi
25
25
  # Major version of the gem
26
26
  MAJOR = 0
27
27
  # Minor version of the gem
28
- MINOR = 10
28
+ MINOR = 11
29
29
  # Tiny version of the gem used for patches
30
30
  TINY = 0
31
31
  # Used for pre-releases
@@ -25,6 +25,7 @@ module JenkinsApi
25
25
  # This class communicates with Jenkins "/view" API and used to create,
26
26
  # delete, update, and various other operations permitted on the Jenkins
27
27
  # API.
28
+ #
28
29
  class View
29
30
 
30
31
  # Initializes a new view object
@@ -25,6 +25,18 @@ describe JenkinsApi::Client do
25
25
  ).not_to raise_error
26
26
  end
27
27
 
28
+ it "initializes with server_url without exception" do
29
+ expect(
30
+ lambda do
31
+ JenkinsApi::Client.new(
32
+ :server_url => 'http://localhost',
33
+ :username => 'username',
34
+ :password => 'password'
35
+ )
36
+ end
37
+ ).not_to raise_error
38
+ end
39
+
28
40
  it "initializes with proxy args without exception" do
29
41
  expect(
30
42
  lambda do
@@ -215,11 +227,12 @@ describe JenkinsApi::Client do
215
227
 
216
228
  context "With some required parameters missing" do
217
229
  context "#initialize" do
218
- it "Should fail if server_ip is missing" do
230
+ it "Should fail if server_ip and server_url are missing" do
219
231
  expect(
220
232
  lambda do
221
233
  JenkinsApi::Client.new({
222
234
  :bogus => '127.0.0.1',
235
+ :bogus_url => 'http://localhost',
223
236
  :server_port => 8080,
224
237
  :username => 'username',
225
238
  :password => 'password'
@@ -168,12 +168,8 @@ describe JenkinsApi::Client::Job do
168
168
 
169
169
  describe "#rename" do
170
170
  it "accepts the old and new job names and renames the job" do
171
- @client.should_receive(:get_config).with("/job/old_job")
172
171
  @client.should_receive(:api_post_request).with(
173
- "/job/old_job/doDelete"
174
- )
175
- @client.should_receive(:post_config).with(
176
- "/createItem?name=new_job", nil
172
+ "/job/old_job/doRename?newName=new_job"
177
173
  )
178
174
  @job.rename("old_job", "new_job")
179
175
  end
metadata CHANGED
@@ -1,172 +1,152 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jenkins_api_client
3
- version: !ruby/object:Gem::Version
4
- version: 0.10.0
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 11
8
+ - 0
9
+ version: 0.11.0
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Kannan Manickam
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2013-04-24 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: nokogiri
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
16
+
17
+ date: 2013-06-09 00:00:00 -07:00
18
+ default_executable: jenkinscli
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
22
21
  type: :runtime
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ segments:
27
+ - 0
28
+ version: "0"
29
+ name: nokogiri
30
+ requirement: *id001
23
31
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: thor
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 0.16.0
32
+ - !ruby/object:Gem::Dependency
38
33
  type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
34
+ version_requirements: &id002 !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ segments:
39
+ - 0
40
+ - 16
41
+ - 0
45
42
  version: 0.16.0
46
- - !ruby/object:Gem::Dependency
47
- name: json
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
43
+ name: thor
44
+ requirement: *id002
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: terminal-table
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: 1.4.0
46
+ - !ruby/object:Gem::Dependency
70
47
  type: :runtime
48
+ version_requirements: &id003 !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ segments:
53
+ - 0
54
+ version: "0"
55
+ name: json
56
+ requirement: *id003
71
57
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: 1.4.0
78
- - !ruby/object:Gem::Dependency
79
- name: mixlib-shellout
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 1.1.0
58
+ - !ruby/object:Gem::Dependency
86
59
  type: :runtime
60
+ version_requirements: &id004 !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ segments:
65
+ - 1
66
+ - 4
67
+ - 0
68
+ version: 1.4.0
69
+ name: terminal-table
70
+ requirement: *id004
87
71
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
72
+ - !ruby/object:Gem::Dependency
73
+ type: :runtime
74
+ version_requirements: &id005 !ruby/object:Gem::Requirement
75
+ requirements:
91
76
  - - ~>
92
- - !ruby/object:Gem::Version
77
+ - !ruby/object:Gem::Version
78
+ segments:
79
+ - 1
80
+ - 1
81
+ - 0
93
82
  version: 1.1.0
94
- - !ruby/object:Gem::Dependency
95
- name: bundler
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '1.0'
102
- type: :development
83
+ name: mixlib-shellout
84
+ requirement: *id005
103
85
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '1.0'
110
- - !ruby/object:Gem::Dependency
111
- name: jeweler
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: 1.6.4
86
+ - !ruby/object:Gem::Dependency
118
87
  type: :development
88
+ version_requirements: &id006 !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ segments:
93
+ - 1
94
+ - 0
95
+ version: "1.0"
96
+ name: bundler
97
+ requirement: *id006
119
98
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
99
+ - !ruby/object:Gem::Dependency
100
+ type: :development
101
+ version_requirements: &id007 !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ segments:
106
+ - 1
107
+ - 6
108
+ - 4
125
109
  version: 1.6.4
126
- - !ruby/object:Gem::Dependency
127
- name: simplecov
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
110
+ name: jeweler
111
+ requirement: *id007
112
+ prerelease: false
113
+ - !ruby/object:Gem::Dependency
134
114
  type: :development
115
+ version_requirements: &id008 !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ name: simplecov
123
+ requirement: *id008
135
124
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: rspec
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
125
+ - !ruby/object:Gem::Dependency
150
126
  type: :development
127
+ version_requirements: &id009 !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ segments:
132
+ - 0
133
+ version: "0"
134
+ name: rspec
135
+ requirement: *id009
151
136
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- description: ! '
159
-
137
+ description: |-
138
+
160
139
  This is a simple and easy-to-use Jenkins Api client with features focused on
161
-
162
- automating Job configuration programaticaly and so forth'
163
- email:
140
+ automating Job configuration programaticaly and so forth
141
+ email:
164
142
  - arangamani.kannan@gmail.com
165
- executables:
143
+ executables:
166
144
  - jenkinscli
167
145
  extensions: []
146
+
168
147
  extra_rdoc_files: []
169
- files:
148
+
149
+ files:
170
150
  - .gitignore
171
151
  - .jenkins.yml
172
152
  - .travis.yml
@@ -209,28 +189,35 @@ files:
209
189
  - spec/unit_tests/spec_helper.rb
210
190
  - spec/unit_tests/system_spec.rb
211
191
  - spec/unit_tests/view_spec.rb
192
+ has_rdoc: true
212
193
  homepage: https://github.com/arangamani/jenkins_api_client
213
194
  licenses: []
195
+
214
196
  post_install_message:
215
197
  rdoc_options: []
216
- require_paths:
198
+
199
+ require_paths:
217
200
  - lib
218
- required_ruby_version: !ruby/object:Gem::Requirement
219
- none: false
220
- requirements:
221
- - - ! '>='
222
- - !ruby/object:Gem::Version
223
- version: '0'
224
- required_rubygems_version: !ruby/object:Gem::Requirement
225
- none: false
226
- requirements:
227
- - - ! '>='
228
- - !ruby/object:Gem::Version
229
- version: '0'
201
+ required_ruby_version: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ segments:
206
+ - 0
207
+ version: "0"
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ segments:
213
+ - 0
214
+ version: "0"
230
215
  requirements: []
216
+
231
217
  rubyforge_project:
232
- rubygems_version: 1.8.23
218
+ rubygems_version: 1.3.6
233
219
  signing_key:
234
220
  specification_version: 3
235
221
  summary: Jenkins JSON API Client
236
222
  test_files: []
223
+