go_api_client 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7aa9c91f14314043611166b22565c1c95587702d
4
- data.tar.gz: 1a2fde5f96169a0e4ac65f85d994ee46c4a2eba2
3
+ metadata.gz: e9292590704bef4c1e044e3f8ea526f4c8894fa9
4
+ data.tar.gz: ec1650ae8801c4a8d3fd323eb4d3b3d409eb27e0
5
5
  SHA512:
6
- metadata.gz: f0951a88f086294399c4d1829d0f83d7bf01f04122715ff110ef8241f798922bbfc8ecf5d895d0e5f2e3c27901da2cda0eed85b0ac14f0a5448ede972028a3e1
7
- data.tar.gz: ff239e75702a3bd2f2539dc4d75faa0952af375e06068f10a12e19682efe95075ea38cfa6b35ad561e2b212d61b564c92dd4bc2f6e3af569300f860d99a541a2
6
+ metadata.gz: dfa5833ca5651d494ff944c6c3b3f3befbb4fd45087b21b1868b875e95ca7a75ae4b0bc6f4e42ae0a0c3bc4e22e5963a8de925d5c27972fc4b21afd2fec3f516
7
+ data.tar.gz: 1983b4014f5882a462fcdfc34c4e5a5ddada31511696bc45df79ffb2bc3f471129c396169d9e8eefce2b01ff5d9563a402bcf00322d7931c9a3272b5fd33401b
@@ -9,6 +9,7 @@ module GoApiClient
9
9
 
10
10
  module Api
11
11
  autoload :AbstractApi, 'go_api_client/api/abstract_api'
12
+ autoload :Agent, 'go_api_client/api/agent'
12
13
  autoload :Cctray, 'go_api_client/api/cctray'
13
14
  autoload :Config, 'go_api_client/api/config'
14
15
  autoload :Pipeline, 'go_api_client/api/pipeline'
@@ -19,6 +20,7 @@ module GoApiClient
19
20
  end
20
21
 
21
22
  module Domain
23
+ autoload :Agent, 'go_api_client/domain/agent'
22
24
  autoload :Author, 'go_api_client/domain/author'
23
25
  autoload :Artifact, 'go_api_client/domain/artifact'
24
26
  autoload :Changeset, 'go_api_client/domain/changeset'
@@ -0,0 +1,65 @@
1
+ require 'json'
2
+
3
+ module GoApiClient
4
+ module Api
5
+ class Agent < GoApiClient::Api::AbstractApi
6
+
7
+ def initialize(attributes = {})
8
+ super(attributes)
9
+ @agent_uri = "#{@base_uri}/api/agents"
10
+ @agent_headers = {
11
+ 'Content-Type' => 'application/json',
12
+ 'Accept' => 'application/vnd.go.cd.v1+json'
13
+ }
14
+ end
15
+
16
+ def agents(options={})
17
+ options = ({:uuid => nil}).merge(options)
18
+ uri = options[:uuid] ? "#{@agent_uri}/#{options[:uuid]}" : @agent_uri
19
+
20
+ response = JSON.parse(@http_fetcher.get!(uri, {:headers=>@agent_headers}))
21
+ if response['_embedded']
22
+ response['_embedded']['agents'].map do |agent_hash|
23
+ agent_hash.delete('_links')
24
+ GoApiClient::Domain::Agent.new(agent_hash)
25
+ end
26
+ else
27
+ response.delete('_links')
28
+ GoApiClient::Domain::Agent.new(response)
29
+ end
30
+ end
31
+
32
+ #
33
+ # API available since v15.2.0
34
+ #
35
+ # Possible options:
36
+ # * hostname String The new hostname.
37
+ # * resources String | Array A comma separated strings of resources, or an array of string resources.
38
+ # * enabled Boolean Whether an agent should be enabled. In case of agents awaiting approval, setting this will approve the agents.
39
+ #
40
+ def update(uuid, options={})
41
+ uri = "#{@agent_uri}/#{uuid}"
42
+ response = JSON.parse(@http_fetcher.patch!(uri, {:headers=>@agent_headers, :params=>options}))
43
+ response.delete('_links')
44
+ GoApiClient::Domain::Agent.new(response)
45
+ end
46
+
47
+ def enable(uuid)
48
+ update(uuid, {:enabled => true})
49
+ end
50
+
51
+ def disable(uuid)
52
+ update(uuid, {:enabled => false})
53
+ end
54
+
55
+ def delete(uuid)
56
+ uri = "#{@agent_uri}/#{uuid}"
57
+ @http_fetcher.delete!(uri, {:headers=>@agent_headers})
58
+ true
59
+ end
60
+
61
+ private
62
+ attr_reader :agents_uri
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,12 @@
1
+ module GoApiClient
2
+ module Domain
3
+ class Agent < GoApiClient::AttributeHelper
4
+
5
+ attr_accessor :uuid, :hostname, :ip_address, :enabled, :sandbox, :status, :operating_system, :free_space, :resources, :environments
6
+
7
+ def initialize(attributes)
8
+ super(attributes)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,5 +1,6 @@
1
1
  require 'net/http'
2
2
  require 'net/https'
3
+ require 'json'
3
4
 
4
5
  module GoApiClient
5
6
  class HttpFetcher
@@ -44,9 +45,10 @@ module GoApiClient
44
45
  @username = options[:username]
45
46
  @password = options[:password]
46
47
  @ssl_verify_mode = options[:ssl_verify_mode]
48
+ @read_timeout = options[:read_timeout]
47
49
  end
48
50
 
49
- %w(get post).each do |meth|
51
+ %w(get post delete patch).each do |meth|
50
52
  class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
51
53
  def #{meth}!(url, options={})
52
54
  response_body = #{meth}(url, options).body
@@ -62,6 +64,10 @@ module GoApiClient
62
64
  GoApiClient.logger.error(e.backtrace.collect {|l| " \#{l}"}.join("\n"))
63
65
  raise ConnectionError.new(e)
64
66
  end
67
+
68
+ def #{meth}(url, options={}, limit=10)
69
+ call('#{meth}', url, options, limit)
70
+ end
65
71
  RUBY_EVAL
66
72
  end
67
73
 
@@ -78,70 +84,43 @@ module GoApiClient
78
84
  end
79
85
 
80
86
  private
81
-
82
-
83
- def get(url, options={}, limit = 10)
84
- raise ArgumentError, 'HTTP redirect too deep' if limit == 0
85
- uri = URI.parse(url)
86
-
87
- password = options[:password] || uri.password || @password
88
- username = options[:username] || uri.user || @username
89
- ssl_verify_mode = options[:ssl_verify_mode] || @ssl_verify_mode
90
- params = options[:params] || {}
91
-
92
- uri.query = URI.encode_www_form(params) if params.any?
93
-
94
- http = Net::HTTP.new(uri.host, uri.port)
95
- http.use_ssl = uri.scheme == 'https'
96
- http.verify_mode = ssl_verify_mode == 0 ? OpenSSL::SSL::VERIFY_NONE : OpenSSL::SSL::VERIFY_PEER
97
-
98
-
99
- response = http.start do |http|
100
- req = Net::HTTP::Get.new(uri.request_uri)
101
- req.basic_auth(username, password) if username || password
102
- http.request(req)
103
- end
104
-
105
- case response
106
- when Net::HTTPRedirection then
107
- @response = get(response['location'], options, limit - 1)
108
- else
109
- @response = response
110
- end
111
-
112
- @response
113
- end
114
-
115
- def post(url, options={}, limit = 10)
87
+ def call(method_name, url, options, limit)
116
88
  raise ArgumentError, 'HTTP redirect too deep' if limit == 0
117
89
  uri = URI.parse(url)
118
90
 
119
91
  password = options[:password] || uri.password || @password
120
92
  username = options[:username] || uri.user || @username
121
93
  ssl_verify_mode = options[:ssl_verify_mode] || @ssl_verify_mode
94
+ read_timeout = options[:read_timeout] || @read_timeout || 60
122
95
  params = options[:params] || {}
123
96
  headers = options[:headers] || {}
124
97
 
125
98
  http = Net::HTTP.new(uri.host, uri.port)
126
99
  http.use_ssl = uri.scheme == 'https'
127
100
  http.verify_mode = ssl_verify_mode == 0 ? OpenSSL::SSL::VERIFY_NONE : OpenSSL::SSL::VERIFY_PEER
101
+ http.read_timeout = read_timeout
128
102
 
129
- req = Net::HTTP::Post.new(uri.request_uri)
103
+ class_name = method_name.slice(0, 1).capitalize + method_name.slice(1..-1)
104
+ method_class = "Net::HTTP::#{class_name}".split('::').inject(Object) { |n, c| n.const_get c }
105
+ req = method_class.new(uri.request_uri)
130
106
 
131
107
  headers.each do |header_name, value|
132
108
  req[header_name] = value
133
109
  end
134
110
 
135
111
  req.basic_auth(username, password) if username || password
112
+ if headers['Content-Type'] && headers['Content-Type'] == 'application/json'
113
+ req.body = params.to_json
114
+ else
115
+ req.set_form_data(params)
116
+ end
136
117
 
137
- req.set_form_data(params)
138
118
  response = http.request(req)
139
-
140
119
  case response
141
120
  when Net::HTTPRedirection then
142
- @response = post(response['location'], options, limit - 1)
121
+ @response = self.send(method_name.to_sym, response['location'], options, limit - 1)
143
122
  else
144
- @response = response
123
+ @response = response
145
124
  end
146
125
 
147
126
  @response
@@ -1,7 +1,7 @@
1
1
  module GoApiClient
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 0
4
+ MINOR = 1
5
5
  PATCH = 0
6
6
  RELEASE = ENV['GO_PIPELINE_COUNTER']
7
7
  VERSION = [MAJOR, MINOR, PATCH, RELEASE].compact.join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: go_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikhil Mungel
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-11-18 00:00:00.000000000 Z
14
+ date: 2015-08-31 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: webmock
@@ -132,6 +132,7 @@ files:
132
132
  - go_api_client.gemspec
133
133
  - lib/go_api_client.rb
134
134
  - lib/go_api_client/api/abstract_api.rb
135
+ - lib/go_api_client/api/agent.rb
135
136
  - lib/go_api_client/api/cctray.rb
136
137
  - lib/go_api_client/api/config.rb
137
138
  - lib/go_api_client/api/feed.rb
@@ -141,6 +142,7 @@ files:
141
142
  - lib/go_api_client/api/stage.rb
142
143
  - lib/go_api_client/attribute_helper.rb
143
144
  - lib/go_api_client/client.rb
145
+ - lib/go_api_client/domain/agent.rb
144
146
  - lib/go_api_client/domain/artifact.rb
145
147
  - lib/go_api_client/domain/author.rb
146
148
  - lib/go_api_client/domain/changeset.rb