fog 0.3.29 → 0.3.30

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.
Files changed (41) hide show
  1. data/Gemfile.lock +4 -4
  2. data/fog.gemspec +3 -3
  3. data/lib/fog.rb +2 -2
  4. data/lib/fog/aws/bin.rb +26 -16
  5. data/lib/fog/aws/cdn.rb +2 -2
  6. data/lib/fog/aws/compute.rb +2 -2
  7. data/lib/fog/aws/elb.rb +2 -2
  8. data/lib/fog/aws/iam.rb +2 -2
  9. data/lib/fog/aws/simpledb.rb +2 -2
  10. data/lib/fog/aws/storage.rb +2 -2
  11. data/lib/fog/bluebox/bin.rb +22 -16
  12. data/lib/fog/bluebox/compute.rb +2 -2
  13. data/lib/fog/brightbox/bin.rb +10 -4
  14. data/lib/fog/brightbox/compute.rb +2 -2
  15. data/lib/fog/core/bin.rb +8 -4
  16. data/lib/fog/core/service.rb +21 -1
  17. data/lib/fog/go_grid/bin.rb +11 -5
  18. data/lib/fog/go_grid/compute.rb +2 -2
  19. data/lib/fog/google/bin.rb +10 -5
  20. data/lib/fog/google/parsers/storage/access_control_list.rb +1 -1
  21. data/lib/fog/google/storage.rb +2 -2
  22. data/lib/fog/linode/bin.rb +11 -5
  23. data/lib/fog/linode/compute.rb +2 -2
  24. data/lib/fog/local/bin.rb +11 -5
  25. data/lib/fog/local/storage.rb +1 -1
  26. data/lib/fog/new_servers/bin.rb +11 -5
  27. data/lib/fog/new_servers/compute.rb +2 -2
  28. data/lib/fog/rackspace.rb +0 -6
  29. data/lib/fog/rackspace/bin.rb +18 -8
  30. data/lib/fog/rackspace/cdn.rb +2 -4
  31. data/lib/fog/rackspace/compute.rb +2 -4
  32. data/lib/fog/rackspace/storage.rb +2 -4
  33. data/lib/fog/slicehost/bin.rb +11 -5
  34. data/lib/fog/slicehost/compute.rb +2 -2
  35. data/lib/fog/terremark/ecloud.rb +2 -0
  36. data/lib/fog/terremark/parsers/shared/get_organization.rb +7 -2
  37. data/lib/fog/terremark/parsers/shared/get_organizations.rb +6 -1
  38. data/lib/fog/terremark/parsers/shared/get_vdc.rb +18 -3
  39. data/lib/fog/vcloud.rb +2 -2
  40. data/tests/google/requests/storage/bucket_tests.rb +7 -6
  41. metadata +6 -6
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fog (0.3.29)
4
+ fog (0.3.30)
5
5
  builder
6
6
  excon (>= 0.2.8)
7
7
  formatador (>= 0.0.16)
8
8
  json
9
9
  mime-types
10
- named-parameters (= 0.0.14)
10
+ named-parameters (>= 0.0.17)
11
11
  net-ssh (>= 2.0.23)
12
12
  nokogiri (>= 1.4.4)
13
13
  ruby-hmac
@@ -22,7 +22,7 @@ GEM
22
22
  formatador (>= 0.0.12)
23
23
  json (1.4.6)
24
24
  mime-types (1.16)
25
- named-parameters (0.0.14)
25
+ named-parameters (0.0.17)
26
26
  net-ssh (2.0.23)
27
27
  nokogiri (1.4.4)
28
28
  rake (0.8.7)
@@ -42,7 +42,7 @@ DEPENDENCIES
42
42
  formatador (>= 0.0.16)
43
43
  json
44
44
  mime-types
45
- named-parameters (= 0.0.14)
45
+ named-parameters (>= 0.0.17)
46
46
  net-ssh (>= 2.0.23)
47
47
  nokogiri (>= 1.4.4)
48
48
  rake
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  ## If your rubyforge_project name is different, then edit it and comment out
8
8
  ## the sub! line in the Rakefile
9
9
  s.name = 'fog'
10
- s.version = '0.3.29'
11
- s.date = '2010-12-06'
10
+ s.version = '0.3.30'
11
+ s.date = '2010-12-08'
12
12
  s.rubyforge_project = 'fog'
13
13
 
14
14
  ## Make sure your summary is short. The description may be as long
@@ -47,7 +47,7 @@ Gem::Specification.new do |s|
47
47
  s.add_dependency('formatador', '>=0.0.16')
48
48
  s.add_dependency('json')
49
49
  s.add_dependency('mime-types')
50
- s.add_dependency('named-parameters', '=0.0.14')
50
+ s.add_dependency('named-parameters', '>=0.0.17')
51
51
  s.add_dependency('net-ssh', '>=2.0.23')
52
52
  s.add_dependency('nokogiri', '>=1.4.4')
53
53
  s.add_dependency('ruby-hmac')
data/lib/fog.rb CHANGED
@@ -3,8 +3,8 @@ require 'base64'
3
3
  require 'cgi'
4
4
  require 'excon'
5
5
  require 'formatador'
6
- require 'named-parameters'
7
6
  require 'time'
7
+ require 'named-parameters'
8
8
 
9
9
  __DIR__ = File.dirname(__FILE__)
10
10
 
@@ -19,7 +19,7 @@ module Fog
19
19
  @mocking = false
20
20
 
21
21
  unless const_defined?(:VERSION)
22
- VERSION = '0.3.29'
22
+ VERSION = '0.3.30'
23
23
  end
24
24
 
25
25
  module Mock
@@ -1,35 +1,45 @@
1
1
  class AWS < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :cdn
7
+ Fog::AWS::CDN
8
+ when :compute, :ec2
9
+ Fog::AWS::Compute
10
+ when :elb
11
+ Fog::AWS::ELB
12
+ when :iam
13
+ Fog::AWS::IAM
14
+ when :sdb
15
+ Fog::AWS::SimpleDB
16
+ when :eu_storage, :s3, :storage
17
+ Fog::AWS::Storage
18
+ else
19
+ raise ArgumentError, "Unsupported #{self} service: #{key}"
20
+ end
21
+ end
22
+
4
23
  def [](service)
5
24
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :cdn
8
- Fog::AWS::CDN.new
9
- when :compute
10
- Fog::AWS::Compute.new
25
+ klazz = class_for(key)
26
+ hash[key] = case key
11
27
  when :ec2
12
28
  location = caller.first
13
29
  warning = "[yellow][WARN] AWS[:ec2] is deprecated, use AWS[:compute] instead[/]"
14
30
  warning << " [light_black](" << location << ")[/] "
15
31
  Formatador.display_line(warning)
16
- Fog::AWS::Compute.new
17
- when :elb
18
- Fog::AWS::ELB.new
32
+ klazz.new
19
33
  when :eu_storage
20
- Fog::AWS::Storage.new(:region => 'eu-west-1')
21
- when :iam
22
- Fog::AWS::IAM.new
23
- when :sdb
24
- Fog::AWS::SimpleDB.new
34
+ klazz.new(:region => 'eu-west-1')
25
35
  when :s3
26
36
  location = caller.first
27
37
  warning = "[yellow][WARN] AWS[:s3] is deprecated, use AWS[:storage] instead[/]"
28
38
  warning << " [light_black](" << location << ")[/] "
29
39
  Formatador.display_line(warning)
30
- Fog::AWS::Storage.new
31
- when :storage
32
- Fog::AWS::Storage.new
40
+ klazz.new
41
+ else
42
+ klazz.new
33
43
  end
34
44
  end
35
45
  @@connections[service]
@@ -2,8 +2,8 @@ module Fog
2
2
  module AWS
3
3
  class CDN < Fog::Service
4
4
 
5
- requires :aws_access_key_id, :aws_secret_access_key
6
- recognizes :host, :path, :port, :scheme, :version, :persistent
5
+ requires :aws_access_key_id, :aws_secret_access_key, &inject_parameter_specs
6
+ recognizes :host, :path, :port, :scheme, :version, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/aws/models/cdn'
9
9
 
@@ -2,8 +2,8 @@ module Fog
2
2
  module AWS
3
3
  class Compute < Fog::Service
4
4
 
5
- requires :aws_access_key_id, :aws_secret_access_key
6
- recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent
5
+ requires :aws_access_key_id, :aws_secret_access_key, &inject_parameter_specs
6
+ recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/aws/models/compute'
9
9
  model :address
@@ -2,8 +2,8 @@ module Fog
2
2
  module AWS
3
3
  class ELB < Fog::Service
4
4
 
5
- requires :aws_access_key_id, :aws_secret_access_key
6
- recognizes :region, :host, :path, :port, :scheme, :persistent
5
+ requires :aws_access_key_id, :aws_secret_access_key, &inject_parameter_specs
6
+ recognizes :region, :host, :path, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  request_path 'fog/aws/requests/elb'
9
9
  request :create_load_balancer
@@ -2,8 +2,8 @@ module Fog
2
2
  module AWS
3
3
  class IAM < Fog::Service
4
4
 
5
- requires :aws_access_key_id, :aws_secret_access_key
6
- recognizes :host, :path, :port, :scheme, :persistent
5
+ requires :aws_access_key_id, :aws_secret_access_key, &inject_parameter_specs
6
+ recognizes :host, :path, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  request_path 'fog/aws/requests/iam'
9
9
  request :add_user_to_group
@@ -2,8 +2,8 @@ module Fog
2
2
  module AWS
3
3
  class SimpleDB < Fog::Service
4
4
 
5
- requires :aws_access_key_id, :aws_secret_access_key
6
- recognizes :host, :nil_string, :path, :port, :scheme, :persistent
5
+ requires :aws_access_key_id, :aws_secret_access_key, &inject_parameter_specs
6
+ recognizes :host, :nil_string, :path, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  request_path 'fog/aws/requests/simpledb'
9
9
  request :batch_put_attributes
@@ -2,8 +2,8 @@ module Fog
2
2
  module AWS
3
3
  class Storage < Fog::Service
4
4
 
5
- requires :aws_access_key_id, :aws_secret_access_key
6
- recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent
5
+ requires :aws_access_key_id, :aws_secret_access_key, &inject_parameter_specs
6
+ recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/aws/models/storage'
9
9
  collection :directories
@@ -1,25 +1,31 @@
1
1
  class Bluebox < Fog::Bin
2
2
  class << self
3
3
 
4
- def [](service)
5
- @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :blocks
8
- location = caller.first
9
- warning = "[yellow][WARN] Bluebox[:blocks] is deprecated, use Bluebox[:compute] instead[/]"
10
- warning << " [light_black](" << location << ")[/] "
11
- Formatador.display_line(warning)
12
- Fog::Bluebox::Compute.new
13
- when :compute
14
- Fog::Bluebox::Compute.new
15
- end
16
- end
17
- @@connections[service]
4
+ def class_for(key)
5
+ case key
6
+ when :blocks, :compute
7
+ Fog::Bluebox::Compute
8
+ else
9
+ raise ArgumentError, "Unsupported #{self} service: #{key}"
18
10
  end
11
+ end
19
12
 
20
- def services
21
- [:compute]
13
+ def [](service)
14
+ @@connections ||= Hash.new do |hash, key|
15
+ if key == :blocks
16
+ location = caller.first
17
+ warning = "[yellow][WARN] Bluebox[:blocks] is deprecated, use Bluebox[:compute] instead[/]"
18
+ warning << " [light_black](" << location << ")[/] "
19
+ Formatador.display_line(warning)
20
+ end
21
+ hash[key] = class_for(key).new
22
22
  end
23
+ @@connections[service]
24
+ end
25
+
26
+ def services
27
+ [:compute]
28
+ end
23
29
 
24
30
  end
25
31
  end
@@ -2,8 +2,8 @@ module Fog
2
2
  module Bluebox
3
3
  class Compute < Fog::Service
4
4
 
5
- requires :bluebox_api_key, :bluebox_customer_id
6
- recognizes :bluebox_host, :bluebox_port, :bluebox_scheme, :persistent
5
+ requires :bluebox_api_key, :bluebox_customer_id, &inject_parameter_specs
6
+ recognizes :bluebox_host, :bluebox_port, :bluebox_scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/bluebox/models/compute'
9
9
  model :flavor
@@ -1,12 +1,18 @@
1
1
  class Brightbox < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :compute
7
+ Fog::Brightbox::Compute
8
+ else
9
+ raise ArgumentError, "Unrecognized service: #{key}"
10
+ end
11
+ end
12
+
4
13
  def [](service)
5
14
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :compute
8
- Fog::Brightbox::Compute.new
9
- end
15
+ hash[key] = class_for(key).new
10
16
  end
11
17
  @@connections[service]
12
18
  end
@@ -4,8 +4,8 @@ module Fog
4
4
 
5
5
  API_URL = "https://api.gb1.brightbox.com/"
6
6
 
7
- requires :brightbox_client_id, :brightbox_secret
8
- recognizes :brightbox_auth_url, :brightbox_api_url
7
+ requires :brightbox_client_id, :brightbox_secret, &inject_parameter_specs
8
+ recognizes :brightbox_auth_url, :brightbox_api_url, &inject_parameter_specs
9
9
 
10
10
  model_path 'fog/brightbox/models/compute'
11
11
  model :account # Singular resource, no collection
@@ -34,16 +34,20 @@ module Fog
34
34
  availability = true
35
35
  for service in services
36
36
  begin
37
- service = eval(self[service].class.to_s.split('::')[0...-1].join('::'))
38
- availability &&= service.requirements.all? {|requirement| Fog.credentials.include?(requirement)}
39
- rescue
37
+ service = self.class_for(service)
38
+ availability &&= service.requirements.all? { |requirement| Fog.credentials.include?(requirement) }
39
+ rescue ArgumentError => e
40
+ warning = "[yellow][WARN] #{e.message}[/]"
41
+ Formatador.display_line(warning)
42
+ availability = false
43
+ rescue => e
40
44
  availability = false
41
45
  end
42
46
  end
43
47
 
44
48
  if availability
45
49
  for service in services
46
- for collection in self[service].collections
50
+ for collection in self.class_for(service).collections
47
51
  unless self.respond_to?(collection)
48
52
  self.class_eval <<-EOS, __FILE__, __LINE__
49
53
  def self.#{collection}
@@ -18,6 +18,26 @@ module Fog
18
18
 
19
19
  class << self
20
20
 
21
+ # this is to accomodate Real implementations of Service subclasses
22
+ # NOTE: it might be good to enforce parameter specs to Mock classes as well.
23
+ def inject_parameter_specs
24
+ lambda do |spec|
25
+ implementation = "Real"
26
+ self.const_set(implementation, Class.new) unless self.const_defined? implementation
27
+ realclass = self.const_get implementation
28
+
29
+ if realclass.declared_parameters_for(:'self.new', :required).empty?
30
+ required = declared_parameters_for(:'self.new', :required)
31
+ realclass.send(:requires, *required)
32
+ end
33
+
34
+ if realclass.declared_parameters_for(:'self.new', :optional).empty?
35
+ optional = declared_parameters_for(:'self.new', :optional)
36
+ realclass.send(:recognizes, *optional)
37
+ end
38
+ end
39
+ end
40
+
21
41
  def inherited(child)
22
42
  child.class_eval <<-EOS, __FILE__, __LINE__
23
43
  module Collections
@@ -35,7 +55,7 @@ module Fog
35
55
  end
36
56
 
37
57
  def requirements
38
- declared_parameters_for :new, :required
58
+ declared_parameters_for :'self.new', :required
39
59
  end
40
60
 
41
61
  def new(options={})
@@ -1,18 +1,24 @@
1
1
  class GoGrid < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :compute, :servers
7
+ Fog::GoGrid::Compute
8
+ else
9
+ raise ArgumentError, "Unsupported #{self} service: #{key}"
10
+ end
11
+ end
12
+
4
13
  def [](service)
5
14
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :compute
8
- Fog::GoGrid::Compute.new
9
- when :servers
15
+ if key == :servers
10
16
  location = caller.first
11
17
  warning = "[yellow][WARN] GoGrid[:servers] is deprecated, use GoGrid[:compute] instead[/]"
12
18
  warning << " [light_black](" << location << ")[/] "
13
19
  Formatador.display_line(warning)
14
- Fog::GoGrid::Compute.new
15
20
  end
21
+ hash[key] = class_for(key).new
16
22
  end
17
23
  @@connections[service]
18
24
  end
@@ -2,8 +2,8 @@ module Fog
2
2
  module GoGrid
3
3
  class Compute < Fog::Service
4
4
 
5
- requires :go_grid_api_key, :go_grid_shared_secret
6
- recognizes :host, :path, :port, :scheme, :persistent
5
+ requires :go_grid_api_key, :go_grid_shared_secret, &inject_parameter_specs
6
+ recognizes :host, :path, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/go_grid/models/compute'
9
9
  model :image
@@ -1,12 +1,18 @@
1
1
  class Google < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :storage
7
+ Fog::Google::Storage
8
+ else
9
+ raise ArgumentError, "Unsupported #{self} service: #{key}"
10
+ end
11
+ end
12
+
4
13
  def [](service)
5
14
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :storage
8
- Fog::Google::Storage.new
9
- end
15
+ hash[key] = class_for(key).new
10
16
  end
11
17
  @@connections[service]
12
18
  end
@@ -16,5 +22,4 @@ class Google < Fog::Bin
16
22
  end
17
23
 
18
24
  end
19
-
20
25
  end
@@ -17,7 +17,7 @@ module Fog
17
17
  when 'Entries'
18
18
  @in_entries = true
19
19
  when 'Scope'
20
- key, value = attrs
20
+ key, value = attrs.first
21
21
  @entry['Scope'][key] = value
22
22
  end
23
23
  end
@@ -2,8 +2,8 @@ module Fog
2
2
  module Google
3
3
  class Storage < Fog::Service
4
4
 
5
- requires :google_storage_access_key_id, :google_storage_secret_access_key
6
- recognizes :host, :port, :scheme, :persistent
5
+ requires :google_storage_access_key_id, :google_storage_secret_access_key, &inject_parameter_specs
6
+ recognizes :host, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/google/models/storage'
9
9
  collection :directories
@@ -1,18 +1,24 @@
1
1
  class Linode < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :compute, :linode
7
+ Fog::Linode::Compute
8
+ else
9
+ raise ArgumentError, "Unsupported #{self} service: #{key}"
10
+ end
11
+ end
12
+
4
13
  def [](service)
5
14
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :compute
8
- Fog::Linode::Compute.new
9
- when :linode
15
+ if key == :linode
10
16
  location = caller.first
11
17
  warning = "[yellow][WARN] Linode[:linode] is deprecated, use Linode[:compute] instead[/]"
12
18
  warning << " [light_black](" << location << ")[/] "
13
19
  Formatador.display_line(warning)
14
- Fog::Linode::Compute.new
15
20
  end
21
+ hash[key] = class_for(key).new
16
22
  end
17
23
  @@connections[service]
18
24
  end
@@ -2,8 +2,8 @@ module Fog
2
2
  module Linode
3
3
  class Compute < Fog::Service
4
4
 
5
- requires :linode_api_key
6
- recognizes :port, :scheme, :persistent
5
+ requires :linode_api_key, &inject_parameter_specs
6
+ recognizes :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/linode/models/compute'
9
9
 
@@ -1,18 +1,24 @@
1
1
  class Local < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :files, :storage
7
+ Fog::Local::Storage
8
+ else
9
+ raise ArgumentError, "Unsupported #{self} service: #{key}"
10
+ end
11
+ end
12
+
4
13
  def [](service)
5
14
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :files
15
+ if key == :files
8
16
  location = caller.first
9
17
  warning = "[yellow][WARN] Local[:files] is deprecated, use Local[:storage] instead[/]"
10
18
  warning << " [light_black](" << location << ")[/] "
11
19
  Formatador.display_line(warning)
12
- Fog::Local::Storage.new
13
- when :storage
14
- Fog::Local::Storage.new
15
20
  end
21
+ hash[key] = class_for(key).new
16
22
  end
17
23
  @@connections[service]
18
24
  end
@@ -2,7 +2,7 @@ module Fog
2
2
  module Local
3
3
  class Storage < Fog::Service
4
4
 
5
- requires :local_root
5
+ requires :local_root, &inject_parameter_specs
6
6
 
7
7
  model_path 'fog/local/models/storage'
8
8
  collection :directories
@@ -1,18 +1,24 @@
1
1
  class NewServers < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :compute, :new_servers
7
+ Fog::NewServers::Compute
8
+ else
9
+ raise ArgumentError, "Unsupported #{self} service: #{key}"
10
+ end
11
+ end
12
+
4
13
  def [](service)
5
14
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :compute
8
- Fog::NewServers::Compute.new
9
- when :new_servers
15
+ if key == :new_servers
10
16
  location = caller.first
11
17
  warning = "[yellow][WARN] NewServers[:servers] is deprecated, use NewServers[:compute] instead[/]"
12
18
  warning << " [light_black](" << location << ")[/] "
13
19
  Formatador.display_line(warning)
14
- Fog::NewServers::Compute.new
15
20
  end
21
+ hash[key] = class_for(key).new
16
22
  end
17
23
  @@connections[service]
18
24
  end
@@ -4,8 +4,8 @@ module Fog
4
4
  module NewServers
5
5
  class Compute < Fog::Service
6
6
 
7
- requires :new_servers_password, :new_servers_username
8
- recognizes :host, :port, :scheme, :persistent
7
+ requires :new_servers_password, :new_servers_username, &inject_parameter_specs
8
+ recognizes :host, :port, :scheme, :persistent, &inject_parameter_specs
9
9
 
10
10
  model_path 'fog/new_servers/models/compute'
11
11
 
@@ -1,7 +1,6 @@
1
1
  module Fog
2
2
  module Rackspace
3
3
 
4
- include NamedParameters
5
4
  extend Fog::Provider
6
5
 
7
6
  service_path 'fog/rackspace'
@@ -11,11 +10,6 @@ module Fog
11
10
  service 'servers'
12
11
  service 'storage'
13
12
 
14
- # NOTE: might be better to rely on the caller alone to enforce parameter
15
- # requirements...
16
- has_named_parameters :'self.authenticate',
17
- :required => [ :rackspace_api_key, :rackspace_username ],
18
- :optional => [ :rackspace_auth_url ]
19
13
  def self.authenticate(options)
20
14
  rackspace_auth_url = options[:rackspace_auth_url] || "auth.api.rackspacecloud.com"
21
15
  connection = Fog::Connection.new("https://" + rackspace_auth_url)
@@ -1,27 +1,37 @@
1
1
  class Rackspace < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :cdn
7
+ Fog::Rackspace::CDN
8
+ when :compute, :servers
9
+ Fog::Rackspace::Compute
10
+ when :files, :storage
11
+ Fog::Rackspace::Storage
12
+ else
13
+ raise ArgumentError, "Unrecognized service: #{key}"
14
+ end
15
+ end
16
+
4
17
  def [](service)
5
18
  @@connections ||= Hash.new do |hash, key|
19
+ klazz = class_for(key)
6
20
  hash[key] = case key
7
- when :cdn
8
- Fog::Rackspace::CDN.new
9
- when :compute
10
- Fog::Rackspace::Compute.new
11
21
  when :files
12
22
  location = caller.first
13
23
  warning = "[yellow][WARN] Rackspace[:files] is deprecated, use Rackspace[:storage] instead[/]"
14
24
  warning << " [light_black](" << location << ")[/] "
15
25
  Formatador.display_line(warning)
16
- Fog::Rackspace::Storage.new
26
+ klazz.new
17
27
  when :servers
18
28
  location = caller.first
19
29
  warning = "[yellow][WARN] Rackspace[:servers] is deprecated, use Rackspace[:compute] instead[/]"
20
30
  warning << " [light_black](" << location << ")[/] "
21
31
  Formatador.display_line(warning)
22
- Fog::Rackspace::Compute.new
23
- when :storage
24
- Fog::Rackspace::Storage.new
32
+ klazz.new
33
+ else
34
+ klazz.new
25
35
  end
26
36
  end
27
37
  @@connections[service]
@@ -2,10 +2,8 @@ module Fog
2
2
  module Rackspace
3
3
  class CDN < Fog::Service
4
4
 
5
- requires :rackspace_api_key, :rackspace_username
6
- # NOTE: recognizes clause delegates to Fog::Rackspace.authenticate's so
7
- # we also declare those parameters that the authenticate expects...
8
- recognizes :rackspace_auth_url, :persistent
5
+ requires :rackspace_api_key, :rackspace_username, &inject_parameter_specs
6
+ recognizes :rackspace_auth_url, :persistent, &inject_parameter_specs
9
7
 
10
8
  model_path 'fog/rackspace/models/cdn'
11
9
 
@@ -2,10 +2,8 @@ module Fog
2
2
  module Rackspace
3
3
  class Compute < Fog::Service
4
4
 
5
- requires :rackspace_api_key, :rackspace_username
6
- # NOTE: recognizes clause delegates to Fog::Rackspace.authenticate's so
7
- # we also declare those parameters that the authenticate expects...
8
- recognizes :rackspace_auth_url, :persistent
5
+ requires :rackspace_api_key, :rackspace_username, &inject_parameter_specs
6
+ recognizes :rackspace_auth_url, :persistent, &inject_parameter_specs
9
7
 
10
8
  model_path 'fog/rackspace/models/compute'
11
9
  model :flavor
@@ -2,10 +2,8 @@ module Fog
2
2
  module Rackspace
3
3
  class Storage < Fog::Service
4
4
 
5
- requires :rackspace_api_key, :rackspace_username
6
- # NOTE: recognizes clause delegates to Fog::Rackspace.authenticate's so
7
- # we also declare those parameters that the authenticate expects...
8
- recognizes :rackspace_auth_url, :persistent
5
+ requires :rackspace_api_key, :rackspace_username, &inject_parameter_specs
6
+ recognizes :rackspace_auth_url, :persistent, &inject_parameter_specs
9
7
 
10
8
  model_path 'fog/rackspace/models/storage'
11
9
  model :directory
@@ -1,18 +1,24 @@
1
1
  class Slicehost < Fog::Bin
2
2
  class << self
3
3
 
4
+ def class_for(key)
5
+ case key
6
+ when :compute, :slices
7
+ Fog::Slicehost::Compute
8
+ else
9
+ raise ArgumentError, "Unrecognized service: #{key}"
10
+ end
11
+ end
12
+
4
13
  def [](service)
5
14
  @@connections ||= Hash.new do |hash, key|
6
- hash[key] = case key
7
- when :compute
8
- Fog::Slicehost::Compute.new
9
- when :slices
15
+ if key == :slices
10
16
  location = caller.first
11
17
  warning = "[yellow][WARN] Slicehost[:blocks] is deprecated, use Bluebox[:compute] instead[/]"
12
18
  warning << " [light_black](" << location << ")[/] "
13
19
  Formatador.display_line(warning)
14
- Fog::Slicehost::Compute.new
15
20
  end
21
+ hash[key] = class_for(key).new
16
22
  end
17
23
  @@connections[service]
18
24
  end
@@ -2,8 +2,8 @@ module Fog
2
2
  module Slicehost
3
3
  class Compute < Fog::Service
4
4
 
5
- requires :slicehost_password
6
- recognizes :host, :port, :scheme, :persistent
5
+ requires :slicehost_password, &inject_parameter_specs
6
+ recognizes :host, :port, :scheme, :persistent, &inject_parameter_specs
7
7
 
8
8
  model_path 'fog/slicehost/models/compute'
9
9
  model :flavor
@@ -32,6 +32,8 @@ module Fog
32
32
  end
33
33
 
34
34
  class Real
35
+ # NOTE: When this vbecomes a service, take care to pass the &inject_parameter_specs
36
+ # block on call to requires and recognizes
35
37
  requires :terremark_ecloud_password, :terremark_ecloud_username
36
38
  recognizes :host, :path, :port, :scheme, :persistent
37
39
 
@@ -15,8 +15,13 @@ module Fog
15
15
  when 'Link'
16
16
  link = {}
17
17
  until attributes.empty?
18
- link[attributes.shift] = attributes.shift
19
- end
18
+ if attributes.first.is_a?(Array)
19
+ attribute = attributes.shift
20
+ link[attribute.first] = attribute.last
21
+ else
22
+ link[attributes.shift] = attributes.shift
23
+ end
24
+ end
20
25
  @response['Links'] << link
21
26
  when 'Org'
22
27
  org = {}
@@ -14,7 +14,12 @@ module Fog
14
14
  if name == 'Org'
15
15
  organization = {}
16
16
  until attributes.empty?
17
- organization[attributes.shift] = attributes.shift
17
+ if attributes.first.is_a?(Array)
18
+ attribute = attributes.shift
19
+ organization[attribute.first] = attribute.last
20
+ else
21
+ organization[attributes.shift] = attributes.shift
22
+ end
18
23
  end
19
24
  @response['OrgList'] << organization
20
25
  end
@@ -37,7 +37,12 @@ module Fog
37
37
  when 'Link'
38
38
  link = {}
39
39
  until attributes.empty?
40
- link[attributes.shift] = attributes.shift
40
+ if attributes.first.is_a?(Array)
41
+ attribute = attributes.shift
42
+ link[attribute.first] = attribute.last
43
+ else
44
+ link[attributes.shift] = attributes.shift
45
+ end
41
46
  end
42
47
  @response['links'] << link
43
48
  when 'Memory'
@@ -45,13 +50,23 @@ module Fog
45
50
  when 'Network'
46
51
  network = {}
47
52
  until attributes.empty?
48
- network[attributes.shift] = attributes.shift
53
+ if attributes.first.is_a?(Array)
54
+ attribute = attributes.shift
55
+ network[attribute.first] = attribute.last
56
+ else
57
+ network[attributes.shift] = attributes.shift
58
+ end
49
59
  end
50
60
  @response['AvailableNetworks'] << network
51
61
  when 'ResourceEntity'
52
62
  resource_entity = {}
53
63
  until attributes.empty?
54
- resource_entity[attributes.shift] = attributes.shift
64
+ if attributes.first.is_a?(Array)
65
+ attribute = attributes.shift
66
+ resource_entity[attribute.first] = attribute.last
67
+ else
68
+ resource_entity[attributes.shift] = attributes.shift
69
+ end
55
70
  end
56
71
  @response['ResourceEntities'] << resource_entity
57
72
  when 'StorageCapacity'
@@ -19,8 +19,8 @@ end
19
19
  module Fog
20
20
  class Vcloud < Fog::Service
21
21
 
22
- requires :username, :password, :module, :versions_uri
23
- recognizes :version, :persistent
22
+ requires :username, :password, :module, :versions_uri, &inject_parameter_specs
23
+ recognizes :version, :persistent, &inject_parameter_specs
24
24
 
25
25
  model_path 'fog/vcloud/models'
26
26
  model :vdc
@@ -3,11 +3,12 @@ Shindo.tests('Google::Storage | bucket requests', ['google']) do
3
3
  tests('success') do
4
4
 
5
5
  @bucket_format = {
6
- 'IsTruncated' => Fog::Boolean,
7
- 'Marker' => NilClass,
8
- 'Name' => String,
9
- 'Prefix' => NilClass,
10
- 'Contents' => [{
6
+ 'CommonPrefixes' => [],
7
+ 'IsTruncated' => Fog::Boolean,
8
+ 'Marker' => NilClass,
9
+ 'Name' => String,
10
+ 'Prefix' => NilClass,
11
+ 'Contents' => [{
11
12
  'ETag' => String,
12
13
  'Key' => String,
13
14
  'LastModified' => Time,
@@ -16,7 +17,7 @@ Shindo.tests('Google::Storage | bucket requests', ['google']) do
16
17
  'ID' => String
17
18
  },
18
19
  'Size' => Integer,
19
- 'StorageClass' => String
20
+ 'StorageClass' => String
20
21
  }]
21
22
  }
22
23
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 29
9
- version: 0.3.29
8
+ - 30
9
+ version: 0.3.30
10
10
  platform: ruby
11
11
  authors:
12
12
  - geemus (Wesley Beary)
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-06 00:00:00 -08:00
17
+ date: 2010-12-08 00:00:00 -08:00
18
18
  default_executable: fog
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -86,13 +86,13 @@ dependencies:
86
86
  type: :runtime
87
87
  version_requirements: &id006 !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - "="
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
91
  segments:
92
92
  - 0
93
93
  - 0
94
- - 14
95
- version: 0.0.14
94
+ - 17
95
+ version: 0.0.17
96
96
  requirement: *id006
97
97
  name: named-parameters
98
98
  - !ruby/object:Gem::Dependency