jenkins_api_client 0.10.0 → 0.11.0

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/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
+