cloudfiles 1.4.7 → 1.4.8
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/README.rdoc +12 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/cloudfiles.gemspec +5 -5
- data/lib/cloudfiles.rb +1 -1
- data/lib/cloudfiles/authentication.rb +1 -1
- data/lib/cloudfiles/connection.rb +28 -7
- data/lib/cloudfiles/container.rb +4 -10
- metadata +12 -5
data/README.rdoc
CHANGED
@@ -4,6 +4,16 @@
|
|
4
4
|
|
5
5
|
This is a Ruby interface into the Rackspace[http://rackspace.com/] {Cloud Files}[http://www.rackspacecloud.com/cloud_hosting_products/files] service. Cloud Files is reliable, scalable and affordable web-based storage hosting for backing up and archiving all your static content. Cloud Files is the first and only cloud service that leverages a tier one CDN provider to create such an easy and complete storage-to-delivery solution for media content.
|
6
6
|
|
7
|
+
== Upgrade Gotchas
|
8
|
+
|
9
|
+
As of gem version 1.4.8, the connection method has changed from positional arguments to a hash of options. This is the new style:
|
10
|
+
|
11
|
+
cf = CloudFiles::Connection.new(:username => "MY_USERNAME", :api_key => "MY_API_KEY")
|
12
|
+
|
13
|
+
This is the old style, which still works but is deprecated:
|
14
|
+
|
15
|
+
cf = CloudFiles::Connection.new("MY_USERNAME","MY_API_KEY")
|
16
|
+
|
7
17
|
== Installation
|
8
18
|
|
9
19
|
This source is available on Github[http://github.com/rackspace/ruby-cloudfiles/] and the gem is available on Gemcutter[http://gemcutter.org/]. To install it, do
|
@@ -25,7 +35,7 @@ See the class definitions for documentation on specific methods and operations.
|
|
25
35
|
require 'cloudfiles'
|
26
36
|
|
27
37
|
# Log into the Cloud Files system
|
28
|
-
cf = CloudFiles::Connection.new(
|
38
|
+
cf = CloudFiles::Connection.new(:username => "MY_USERNAME", :api_key => "MY_API_KEY")
|
29
39
|
|
30
40
|
# Get a listing of all containers under this account
|
31
41
|
cf.containers
|
@@ -53,7 +63,7 @@ See the class definitions for documentation on specific methods and operations.
|
|
53
63
|
|
54
64
|
Initial work by Major Hayden <major.hayden@rackspace.com>
|
55
65
|
|
56
|
-
Subsequent work by H. Wade Minter <
|
66
|
+
Subsequent work by H. Wade Minter <minter@lunenburg.org>
|
57
67
|
|
58
68
|
== License
|
59
69
|
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ begin
|
|
6
6
|
gemspec.name = "cloudfiles"
|
7
7
|
gemspec.summary = "A Ruby API into Rackspace Cloud Files"
|
8
8
|
gemspec.description = "A Ruby version of the Rackspace Cloud Files API."
|
9
|
-
gemspec.email = "
|
9
|
+
gemspec.email = "minter@lunenburg.org"
|
10
10
|
gemspec.homepage = "http://www.rackspacecloud.com/cloud_hosting_products/files"
|
11
11
|
gemspec.authors = ["H. Wade Minter", "Rackspace Hosting"]
|
12
12
|
gemspec.add_dependency('mime-types', '>= 1.16')
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.8
|
data/cloudfiles.gemspec
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cloudfiles}
|
8
|
-
s.version = "1.4.
|
8
|
+
s.version = "1.4.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["H. Wade Minter", "Rackspace Hosting"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-02}
|
13
13
|
s.description = %q{A Ruby version of the Rackspace Cloud Files API.}
|
14
|
-
s.email = %q{
|
14
|
+
s.email = %q{minter@lunenburg.org}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.rdoc",
|
17
17
|
"TODO"
|
@@ -40,7 +40,7 @@ Gem::Specification.new do |s|
|
|
40
40
|
s.homepage = %q{http://www.rackspacecloud.com/cloud_hosting_products/files}
|
41
41
|
s.rdoc_options = ["--charset=UTF-8"]
|
42
42
|
s.require_paths = ["lib"]
|
43
|
-
s.rubygems_version = %q{1.3.
|
43
|
+
s.rubygems_version = %q{1.3.7}
|
44
44
|
s.summary = %q{A Ruby API into Rackspace Cloud Files}
|
45
45
|
s.test_files = [
|
46
46
|
"test/cf-testunit.rb",
|
@@ -55,7 +55,7 @@ Gem::Specification.new do |s|
|
|
55
55
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
56
56
|
s.specification_version = 3
|
57
57
|
|
58
|
-
if Gem::Version.new(Gem::
|
58
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
59
59
|
s.add_runtime_dependency(%q<mime-types>, [">= 1.16"])
|
60
60
|
else
|
61
61
|
s.add_dependency(%q<mime-types>, [">= 1.16"])
|
data/lib/cloudfiles.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# ==== Connects Ruby Applications to Rackspace's {Cloud Files service}[http://www.rackspacecloud.com/cloud_hosting_products/files]
|
5
5
|
# Initial work by Major Hayden <major.hayden@rackspace.com>
|
6
6
|
#
|
7
|
-
# Subsequent work by H. Wade Minter <
|
7
|
+
# Subsequent work by H. Wade Minter <minter@lunenburg.org>
|
8
8
|
#
|
9
9
|
# See COPYING for license information.
|
10
10
|
# Copyright (c) 2009, Rackspace US, Inc.
|
@@ -13,7 +13,7 @@ module CloudFiles
|
|
13
13
|
path = '/v1.0'
|
14
14
|
hdrhash = { "X-Auth-User" => connection.authuser, "X-Auth-Key" => connection.authkey }
|
15
15
|
begin
|
16
|
-
server = Net::HTTP.new('auth.api.rackspacecloud.com',443)
|
16
|
+
server = Net::HTTP::Proxy(connection.proxy_host, connection.proxy_port).new('auth.api.rackspacecloud.com',443)
|
17
17
|
server.use_ssl = true
|
18
18
|
server.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
19
19
|
server.start
|
@@ -45,6 +45,10 @@ module CloudFiles
|
|
45
45
|
# The total number of containers under this connection
|
46
46
|
attr_reader :count
|
47
47
|
|
48
|
+
# Optional proxy variables
|
49
|
+
attr_reader :proxy_host
|
50
|
+
attr_reader :proxy_port
|
51
|
+
|
48
52
|
# Creates a new CloudFiles::Connection object. Uses CloudFiles::Authentication to perform the login for the connection.
|
49
53
|
# The authuser is the Rackspace Cloud username, the authkey is the Rackspace Cloud API key.
|
50
54
|
#
|
@@ -58,13 +62,30 @@ module CloudFiles
|
|
58
62
|
# the public network, and the bandwidth is not billed.
|
59
63
|
#
|
60
64
|
# This will likely be the base class for most operations.
|
65
|
+
#
|
66
|
+
# With gem 1.4.8, the connection style has changed. It is now a hash of arguments. Note that the proxy options are currently only
|
67
|
+
# supported in the new style.
|
68
|
+
#
|
69
|
+
# cf = CloudFiles::Connection.new(:username => "MY_USERNAME", :api_key => "MY_API_KEY", :retry_auth => true, :snet => false, :proxy_host => "localhost", :proxy_port => "1234")
|
61
70
|
#
|
62
|
-
#
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
71
|
+
# The old style (positional arguments) is deprecated and will be removed at some point in the future.
|
72
|
+
#
|
73
|
+
# cf = CloudFiles::Connection.new(MY_USERNAME, MY_API_KEY, RETRY_AUTH, USE_SNET)
|
74
|
+
def initialize(*args)
|
75
|
+
if args[0].is_a?(Hash)
|
76
|
+
options = args[0]
|
77
|
+
@authuser = options[:username] ||( raise AuthenticationException, "Must supply a :username")
|
78
|
+
@authkey = options[:api_key] || (raise AuthenticationException, "Must supply an :api_key")
|
79
|
+
@retry_auth = options[:retry_auth] || true
|
80
|
+
@snet = ENV['RACKSPACE_SERVICENET'] || options[:snet]
|
81
|
+
@proxy_host = options[:proxy_host]
|
82
|
+
@proxy_port = options[:proxy_port]
|
83
|
+
elsif args[0].is_a?(String)
|
84
|
+
@authuser = args[0] ||( raise AuthenticationException, "Must supply the username as the first argument")
|
85
|
+
@authkey = args[1] || (raise AuthenticationException, "Must supply the API key as the second argument")
|
86
|
+
@retry_auth = args[2] || true
|
87
|
+
@snet = (ENV['RACKSPACE_SERVICENET'] || args[3]) ? true : false
|
88
|
+
end
|
68
89
|
@authok = false
|
69
90
|
@http = {}
|
70
91
|
CloudFiles::Authentication.new(self)
|
@@ -279,7 +300,7 @@ module CloudFiles
|
|
279
300
|
def start_http(server,path,port,scheme,headers) # :nodoc:
|
280
301
|
if (@http[server].nil?)
|
281
302
|
begin
|
282
|
-
@http[server] = Net::HTTP.new(server,port)
|
303
|
+
@http[server] = Net::HTTP::Proxy(self.proxy_host, self.proxy_port).new(server,port)
|
283
304
|
if scheme == "https"
|
284
305
|
@http[server].use_ssl = true
|
285
306
|
@http[server].verify_mode = OpenSSL::SSL::VERIFY_NONE
|
data/lib/cloudfiles/container.rb
CHANGED
@@ -133,8 +133,8 @@ module CloudFiles
|
|
133
133
|
# if the request fails.
|
134
134
|
def objects(params = {})
|
135
135
|
paramarr = []
|
136
|
-
paramarr << ["limit=#{URI.encode(params[:limit].
|
137
|
-
paramarr << ["offset=#{URI.encode(params[:offset].
|
136
|
+
paramarr << ["limit=#{URI.encode(params[:limit].to_s).gsub(/&/,'%26')}"] if params[:limit]
|
137
|
+
paramarr << ["offset=#{URI.encode(params[:offset].to_s).gsub(/&/,'%26')}"] if params[:offset]
|
138
138
|
paramarr << ["prefix=#{URI.encode(params[:prefix]).gsub(/&/,'%26')}"] if params[:prefix]
|
139
139
|
paramarr << ["path=#{URI.encode(params[:path]).gsub(/&/,'%26')}"] if params[:path]
|
140
140
|
paramstr = (paramarr.size > 0)? paramarr.join("&") : "" ;
|
@@ -164,8 +164,8 @@ module CloudFiles
|
|
164
164
|
def objects_detail(params = {})
|
165
165
|
paramarr = []
|
166
166
|
paramarr << ["format=xml"]
|
167
|
-
paramarr << ["limit=#{URI.encode(params[:limit].
|
168
|
-
paramarr << ["offset=#{URI.encode(params[:offset].
|
167
|
+
paramarr << ["limit=#{URI.encode(params[:limit].to_s).gsub(/&/,'%26')}"] if params[:limit]
|
168
|
+
paramarr << ["offset=#{URI.encode(params[:offset].to_s).gsub(/&/,'%26')}"] if params[:offset]
|
169
169
|
paramarr << ["prefix=#{URI.encode(params[:prefix]).gsub(/&/,'%26')}"] if params[:prefix]
|
170
170
|
paramarr << ["path=#{URI.encode(params[:path]).gsub(/&/,'%26')}"] if params[:path]
|
171
171
|
paramstr = (paramarr.size > 0)? paramarr.join("&") : "" ;
|
@@ -262,12 +262,6 @@ module CloudFiles
|
|
262
262
|
ttl = options
|
263
263
|
options = {:ttl => ttl}
|
264
264
|
end
|
265
|
-
if options[:ttl] < 3600
|
266
|
-
options[:ttl] = 3600
|
267
|
-
end
|
268
|
-
if options[:ttl] > 259200
|
269
|
-
options[:ttl] = 259200
|
270
|
-
end
|
271
265
|
|
272
266
|
response = self.connection.cfreq("PUT",@cdnmgmthost,@cdnmgmtpath,@cdnmgmtport,@cdnmgmtscheme)
|
273
267
|
raise NoSuchContainerException, "Container #{@name} does not exist" unless (response.code == "201" || response.code == "202")
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudfiles
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
8
|
- 4
|
8
|
-
-
|
9
|
-
version: 1.4.
|
9
|
+
- 8
|
10
|
+
version: 1.4.8
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- H. Wade Minter
|
@@ -15,16 +16,18 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2010-
|
19
|
+
date: 2010-08-02 00:00:00 -04:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
22
23
|
name: mime-types
|
23
24
|
prerelease: false
|
24
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
25
27
|
requirements:
|
26
28
|
- - ">="
|
27
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 47
|
28
31
|
segments:
|
29
32
|
- 1
|
30
33
|
- 16
|
@@ -32,7 +35,7 @@ dependencies:
|
|
32
35
|
type: :runtime
|
33
36
|
version_requirements: *id001
|
34
37
|
description: A Ruby version of the Rackspace Cloud Files API.
|
35
|
-
email:
|
38
|
+
email: minter@lunenburg.org
|
36
39
|
executables: []
|
37
40
|
|
38
41
|
extensions: []
|
@@ -70,23 +73,27 @@ rdoc_options:
|
|
70
73
|
require_paths:
|
71
74
|
- lib
|
72
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
73
77
|
requirements:
|
74
78
|
- - ">="
|
75
79
|
- !ruby/object:Gem::Version
|
80
|
+
hash: 3
|
76
81
|
segments:
|
77
82
|
- 0
|
78
83
|
version: "0"
|
79
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
80
86
|
requirements:
|
81
87
|
- - ">="
|
82
88
|
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
83
90
|
segments:
|
84
91
|
- 0
|
85
92
|
version: "0"
|
86
93
|
requirements: []
|
87
94
|
|
88
95
|
rubyforge_project:
|
89
|
-
rubygems_version: 1.3.
|
96
|
+
rubygems_version: 1.3.7
|
90
97
|
signing_key:
|
91
98
|
specification_version: 3
|
92
99
|
summary: A Ruby API into Rackspace Cloud Files
|