cleversafe 1.0.8 → 1.1.3
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/Gemfile.lock +8 -2
- data/Rakefile +9 -2
- data/cleversafe.gemspec +5 -1
- data/lib/cleversafe.rb +9 -3
- data/lib/cleversafe/connection.rb +24 -42
- data/lib/cleversafe/object.rb +10 -16
- data/lib/cleversafe/vault.rb +3 -4
- data/test/connection_test.rb +7 -0
- data/test/lib/cleversafe/test_helper.rb +7 -0
- data/test/object_test.rb +14 -0
- data/test/vault_test.rb +7 -0
- metadata +46 -7
- data/cleversafe-1.0.7.gem +0 -0
data/Gemfile.lock
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cleversafe (1.
|
4
|
+
cleversafe (1.1.1)
|
5
|
+
json
|
5
6
|
rest-client (~> 1.6.7)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
9
10
|
specs:
|
10
|
-
|
11
|
+
json (1.7.7)
|
12
|
+
mime-types (1.23)
|
13
|
+
minitest (4.5.0)
|
14
|
+
rake (10.0.3)
|
11
15
|
rest-client (1.6.7)
|
12
16
|
mime-types (>= 1.16)
|
13
17
|
|
@@ -16,3 +20,5 @@ PLATFORMS
|
|
16
20
|
|
17
21
|
DEPENDENCIES
|
18
22
|
cleversafe!
|
23
|
+
minitest
|
24
|
+
rake
|
data/Rakefile
CHANGED
data/cleversafe.gemspec
CHANGED
@@ -3,9 +3,13 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.summary = "A Ruby API into Cleversafe's REST interface."
|
4
4
|
s.author = "John Williams"
|
5
5
|
s.email = "john@37signals.com"
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.1.3"
|
7
7
|
|
8
|
+
s.add_dependency 'json'
|
8
9
|
s.add_dependency 'rest-client', '~> 1.6.7'
|
9
10
|
|
11
|
+
s.add_development_dependency 'rake'
|
12
|
+
s.add_development_dependency 'minitest'
|
13
|
+
|
10
14
|
s.files = Dir["#{File.dirname(__FILE__)}/**/*"]
|
11
15
|
end
|
data/lib/cleversafe.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
require 'rest-client'
|
2
|
-
require 'json'
|
3
|
-
|
4
1
|
require 'cleversafe/errors'
|
5
2
|
require 'cleversafe/vault'
|
6
3
|
require 'cleversafe/object'
|
7
4
|
require 'cleversafe/connection'
|
5
|
+
|
6
|
+
require 'rest-client'
|
7
|
+
|
8
|
+
# Monkeypatch RestClient to prevent it from closing IO objects after they're
|
9
|
+
# uploaded, which it really shouldn't do.
|
10
|
+
class RestClient::Payload::Streamed
|
11
|
+
def close
|
12
|
+
end
|
13
|
+
end
|
@@ -1,33 +1,17 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module Cleversafe
|
2
4
|
class Connection
|
3
|
-
|
4
|
-
|
5
|
-
def initialize(*args)
|
6
|
-
if args[0].is_a?(Hash)
|
7
|
-
options = args[0]
|
8
|
-
@username = options[:username]
|
9
|
-
@password = options[:password]
|
10
|
-
@host = options[:host]
|
11
|
-
@protocol = options[:protocol] || "http"
|
12
|
-
@open_timeout = options[:open_timeout] || 10
|
13
|
-
else
|
14
|
-
@username = args[0]
|
15
|
-
@password = args[1]
|
16
|
-
@host = args[2]
|
17
|
-
@protocol = args[3] || "http"
|
18
|
-
@open_timeout = args[4] || 10
|
19
|
-
end
|
5
|
+
def initialize(url, options = {})
|
6
|
+
@http = build_http_client(url, options)
|
20
7
|
end
|
21
8
|
|
22
|
-
def
|
23
|
-
|
9
|
+
def url
|
10
|
+
@http.url
|
24
11
|
end
|
25
12
|
|
26
|
-
def url_for(
|
27
|
-
|
28
|
-
host = options.fetch(:host, host)
|
29
|
-
|
30
|
-
"#{protocol}://#{host}/#{vault}/#{objectname}"
|
13
|
+
def url_for(*paths)
|
14
|
+
[ url, *paths ].join('/')
|
31
15
|
end
|
32
16
|
|
33
17
|
def vault(name)
|
@@ -35,41 +19,39 @@ module Cleversafe
|
|
35
19
|
end
|
36
20
|
|
37
21
|
def vaults
|
38
|
-
vaults
|
39
|
-
|
22
|
+
@vaults ||= begin
|
23
|
+
data = JSON.parse get.to_s
|
24
|
+
data['vaults'].map { |v| v['vault_name'] }
|
25
|
+
end
|
40
26
|
end
|
41
27
|
|
42
|
-
def
|
43
|
-
|
28
|
+
def ping
|
29
|
+
head
|
44
30
|
true
|
45
|
-
rescue RestClient::
|
31
|
+
rescue RestClient::Exception
|
46
32
|
false
|
47
33
|
end
|
48
34
|
|
49
|
-
def
|
50
|
-
|
35
|
+
def head(path = '', options = {})
|
36
|
+
@http[path].head options
|
51
37
|
end
|
52
38
|
|
53
|
-
def
|
54
|
-
|
39
|
+
def get(path = '', options = {})
|
40
|
+
@http[path].get options
|
55
41
|
end
|
56
42
|
|
57
43
|
def put(path, payload, options = {})
|
58
|
-
|
44
|
+
@http[path].put payload, options
|
59
45
|
end
|
60
46
|
|
61
47
|
def delete(path)
|
62
|
-
|
48
|
+
@http[path].delete
|
63
49
|
end
|
64
50
|
|
65
51
|
private
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
:password => password,
|
70
|
-
:open_timeout => open_timeout,
|
71
|
-
:raw_response => true
|
72
|
-
)
|
52
|
+
def build_http_client(url, options = {})
|
53
|
+
defaults = { :open_timeout => 0.5 }
|
54
|
+
RestClient::Resource.new(url, defaults.merge(options).merge(:raw_response => true))
|
73
55
|
end
|
74
56
|
end
|
75
57
|
end
|
data/lib/cleversafe/object.rb
CHANGED
@@ -5,7 +5,8 @@ module Cleversafe
|
|
5
5
|
|
6
6
|
attr_reader :connection, :vault, :name
|
7
7
|
|
8
|
-
def initialize(vault, name
|
8
|
+
def initialize(vault, name)
|
9
|
+
raise ArgumentError, "name is required" unless name =~ /\S/
|
9
10
|
@connection = vault.connection
|
10
11
|
@vault = vault.name
|
11
12
|
@name = name
|
@@ -15,8 +16,8 @@ module Cleversafe
|
|
15
16
|
"#{vault}/#{name}"
|
16
17
|
end
|
17
18
|
|
18
|
-
def url
|
19
|
-
connection.url_for(vault, name
|
19
|
+
def url
|
20
|
+
connection.url_for(vault, name)
|
20
21
|
end
|
21
22
|
|
22
23
|
def delete
|
@@ -33,30 +34,23 @@ module Cleversafe
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def data(options={})
|
36
|
-
|
37
|
-
connection.get(key, options).to_s
|
38
|
-
end
|
37
|
+
open(options) { |io| io.read }
|
39
38
|
end
|
40
39
|
|
41
40
|
def open(options={})
|
42
41
|
handle_errors do
|
43
42
|
response = connection.get(key, options)
|
44
43
|
begin
|
45
|
-
|
44
|
+
file = response.file
|
45
|
+
file.open
|
46
|
+
file.binmode
|
47
|
+
yield file
|
46
48
|
ensure
|
47
|
-
|
49
|
+
file.unlink
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
52
|
-
def write_to(filename, options={})
|
53
|
-
handle_errors do
|
54
|
-
response = connection.get(key, options)
|
55
|
-
FileUtils.cp(response.file.path, filename)
|
56
|
-
FileUtils.rm(response.file.path)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
54
|
def metadata
|
61
55
|
@metadata ||= handle_errors do
|
62
56
|
connection.head(key).headers
|
data/lib/cleversafe/vault.rb
CHANGED
@@ -8,15 +8,15 @@ module Cleversafe
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def metadata
|
11
|
-
@metadata ||= JSON.parse
|
11
|
+
@metadata ||= JSON.parse connection.get(name).to_s
|
12
12
|
end
|
13
13
|
|
14
14
|
def bytes_used
|
15
15
|
metadata['vault_usage']['used_size']
|
16
16
|
end
|
17
17
|
|
18
|
-
def object(
|
19
|
-
Cleversafe::Object.new(self,
|
18
|
+
def object(key)
|
19
|
+
Cleversafe::Object.new(self, key)
|
20
20
|
end
|
21
21
|
alias [] object
|
22
22
|
|
@@ -38,6 +38,5 @@ module Cleversafe
|
|
38
38
|
id
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
42
41
|
end
|
43
42
|
end
|
data/test/object_test.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'cleversafe/test_helper'
|
2
|
+
|
3
|
+
class ObjectTest < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
connection = Cleversafe::Connection.new('http://test.host')
|
6
|
+
@vault = Cleversafe::Vault.new(connection, 'test_vault')
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_name_is_required
|
10
|
+
assert_raises ArgumentError do
|
11
|
+
Cleversafe::Object.new(@vault, '')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/test/vault_test.rb
ADDED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
7
|
+
- 1
|
8
|
+
- 3
|
9
|
+
version: 1.1.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- John Williams
|
@@ -14,13 +14,25 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2013-
|
17
|
+
date: 2013-05-14 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: json
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: rest-client
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
24
36
|
requirements:
|
25
37
|
- - ~>
|
26
38
|
- !ruby/object:Gem::Version
|
@@ -30,7 +42,31 @@ dependencies:
|
|
30
42
|
- 7
|
31
43
|
version: 1.6.7
|
32
44
|
type: :runtime
|
33
|
-
version_requirements: *
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :development
|
57
|
+
version_requirements: *id003
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: minitest
|
60
|
+
prerelease: false
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
type: :development
|
69
|
+
version_requirements: *id004
|
34
70
|
description:
|
35
71
|
email: john@37signals.com
|
36
72
|
executables: []
|
@@ -40,7 +76,6 @@ extensions: []
|
|
40
76
|
extra_rdoc_files: []
|
41
77
|
|
42
78
|
files:
|
43
|
-
- ./cleversafe-1.0.7.gem
|
44
79
|
- ./cleversafe.gemspec
|
45
80
|
- ./Gemfile
|
46
81
|
- ./Gemfile.lock
|
@@ -51,6 +86,10 @@ files:
|
|
51
86
|
- ./lib/cleversafe.rb
|
52
87
|
- ./Rakefile
|
53
88
|
- ./README.md
|
89
|
+
- ./test/connection_test.rb
|
90
|
+
- ./test/lib/cleversafe/test_helper.rb
|
91
|
+
- ./test/object_test.rb
|
92
|
+
- ./test/vault_test.rb
|
54
93
|
has_rdoc: true
|
55
94
|
homepage:
|
56
95
|
licenses: []
|
data/cleversafe-1.0.7.gem
DELETED
Binary file
|