rhc 1.24.4 → 1.25.2

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.
@@ -163,6 +163,7 @@ describe "rhc core scenarios" do
163
163
  context "with a scalable app" do
164
164
  before(:each) do
165
165
  standard_config
166
+ has_gears_available(1)
166
167
  @app = has_a_scalable_application
167
168
  end
168
169
 
data/lib/rhc/rest/base.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'cgi'
1
+ require 'uri'
2
2
 
3
3
  module RHC
4
4
  module Rest
@@ -8,6 +8,8 @@ module RHC
8
8
 
9
9
  define_attr :messages
10
10
 
11
+ URI_ESCAPE_REGEX = Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")
12
+
11
13
  def initialize(attrs=nil, client=nil)
12
14
  @attributes = (attrs || {}).stringify_keys!
13
15
  @attributes['messages'] ||= []
@@ -22,7 +24,7 @@ module RHC
22
24
  link = link(link_name)
23
25
  raise "No link defined for #{link_name}" unless link
24
26
  url = link['href']
25
- url = url.gsub(/:\w+/) { |s| CGI.escape(options[:params][s]) || s } if options[:params]
27
+ url = url.gsub(/:\w+/) { |s| URI.escape(options[:params][s], URI_ESCAPE_REGEX) || s } if options[:params]
26
28
  method = options[:method] || link['method']
27
29
 
28
30
  result = client.request(options.merge({
@@ -53,7 +55,7 @@ module RHC
53
55
 
54
56
  def link_href(sym, params=nil, resource=nil, &block)
55
57
  if (l = link(sym)) && (h = l['href'])
56
- h = h.gsub(/:\w+/){ |s| params[s].nil? ? s : CGI.escape(params[s]) } if params
58
+ h = h.gsub(/:\w+/){ |s| params[s].nil? ? s : URI.escape(params[s], URI_ESCAPE_REGEX) } if params
57
59
  h = "#{h}/#{resource}" if resource
58
60
  return h
59
61
  end
@@ -199,12 +199,15 @@ module RHC
199
199
  end
200
200
 
201
201
  def link_show_application_by_domain_name(domain, application, *args)
202
- [
203
- api.links['LIST_DOMAINS']['href'],
204
- domain,
205
- "applications",
206
- application,
207
- ].concat(args).map{ |s| URI.escape(s) }.join("/")
202
+ if link = api.link_href(:SHOW_APPLICATION_BY_DOMAIN, {':domain_name' => domain, ':name' => application}, *args)
203
+ link
204
+ else
205
+ # Pre-1.5 API
206
+ (
207
+ [api.links['LIST_DOMAINS']['href']] +
208
+ ([domain, "applications", application] + args).map{|s| URI.escape(s, RHC::Rest::Base::URI_ESCAPE_REGEX) }
209
+ ).join("/")
210
+ end
208
211
  end
209
212
 
210
213
  def link_show_application_by_id(id, *args)
data/lib/rhc/rest/mock.rb CHANGED
@@ -422,10 +422,10 @@ module RHC::Rest::Mock
422
422
 
423
423
  def mock_client_links
424
424
  mock_teams_links.concat([
425
- ['GET_USER', 'user/', 'get' ],
425
+ ['GET_USER', 'user', 'get' ],
426
426
  ['ADD_DOMAIN', 'domains/add', 'post'],
427
- ['LIST_DOMAINS', 'domains/', 'get' ],
428
- ['LIST_CARTRIDGES', 'cartridges/', 'get' ]
427
+ ['LIST_DOMAINS', 'domains', 'get' ],
428
+ ['LIST_CARTRIDGES', 'cartridges', 'get' ]
429
429
  ])
430
430
  end
431
431
 
@@ -454,7 +454,7 @@ module RHC::Rest::Mock
454
454
 
455
455
  def mock_team_links(team_id='test_team')
456
456
  [['GET', "team/#{team_id}", 'get' ],
457
- ['ADD_MEMBER', "team/#{team_id}/members/", 'post', {'optional_params' => [{'name' => 'id'}, {'name' => 'login'}], 'required_params' => [{'name' => 'role'}]} ],
457
+ ['ADD_MEMBER', "team/#{team_id}/members", 'post', {'optional_params' => [{'name' => 'id'}, {'name' => 'login'}], 'required_params' => [{'name' => 'role'}]} ],
458
458
  ['LIST_MEMBERS', "team/#{team_id}/update", 'get' ],
459
459
  ['UPDATE_MEMBERS', "team/#{team_id}/delete", 'patch', {'optional_params' => [{'name' => 'id'}, {'name' => 'login'}, {'name' => 'members'}] } ],
460
460
  ['LEAVE', "team/#{team_id}/delete", 'delete' ],
@@ -463,7 +463,7 @@ module RHC::Rest::Mock
463
463
 
464
464
  def mock_domain_links(domain_id='test_domain')
465
465
  [['ADD_APPLICATION', "domains/#{domain_id}/apps/add", 'post', {'optional_params' => [{'name' => 'environment_variables'}, {'name' => 'cartridges[][name]'}, {'name' => 'cartridges[][url]'}]} ],
466
- ['LIST_APPLICATIONS', "domains/#{domain_id}/apps/", 'get' ],
466
+ ['LIST_APPLICATIONS', "domains/#{domain_id}/apps", 'get' ],
467
467
  ['UPDATE', "domains/#{domain_id}/update", 'put'],
468
468
  ['DELETE', "domains/#{domain_id}/delete", 'post']]
469
469
  end
@@ -141,6 +141,32 @@ module RhcExecutionHelper
141
141
  object.members.length.should == 1
142
142
  end
143
143
 
144
+ def has_gears_available(gear_count=1, for_user=nil)
145
+ debug.puts "Ensuring user has at least #{gear_count} gears free" if debug?
146
+
147
+ c = for_user ? for_user.client : client
148
+
149
+ max_gears = c.user.max_gears
150
+ consumed_gears = c.user.consumed_gears
151
+ raise "User has max_gears=#{max_gears}, cannot make #{gear_count} gears available" if max_gears < gear_count
152
+
153
+ max_consumed = max_gears - gear_count
154
+ if consumed_gears <= max_consumed
155
+ debug.puts " user can use up to #{max_consumed} gears and is only using #{consumed_gears}" if debug?
156
+ return
157
+ end
158
+
159
+ delete_count = 0
160
+ c.owned_applications.sort_by(&:gear_count).reverse.each do |app|
161
+ if (consumed_gears - delete_count) > max_consumed
162
+ debug.puts " deleting app to free #{app.gear_count} gears" if debug?
163
+ delete_count += app.gear_count
164
+ debug.puts " user is now using #{consumed_gears - delete_count} gears" if debug?
165
+ app.destroy
166
+ end
167
+ end
168
+ end
169
+
144
170
  def has_an_application(for_user=nil)
145
171
  c = for_user ? for_user.client : client
146
172
  debug.puts "Creating or reusing an app" if debug?
@@ -3,6 +3,7 @@ require 'spec_helper'
3
3
  require 'stringio'
4
4
  require 'rest_spec_helper'
5
5
  require 'rhc/rest'
6
+ require 'uri'
6
7
 
7
8
  module RHC
8
9
  module Rest
@@ -368,6 +369,11 @@ module RHC
368
369
  :status => 'not_found'
369
370
  }, 404)
370
371
  end
372
+ it "encodes application id correctly" do
373
+ url = client.link_show_application_by_domain_name("~[", "~]")
374
+ URI.parse(url)
375
+ url.should == "https://test.domain.com/domains/~%5B/applications/~%5D"
376
+ end
371
377
  it "returns application object for nested application IDs" do
372
378
  match = client.find_application(mock_domain, mock_app)
373
379
  match.class.should == RHC::Rest::Application
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 127
4
+ hash: 119
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 24
9
- - 4
10
- version: 1.24.4
8
+ - 25
9
+ - 2
10
+ version: 1.25.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Red Hat
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2014-05-12 00:00:00 Z
18
+ date: 2014-05-29 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: net-ssh