cleversafe 1.0.8 → 1.1.11
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.
- checksums.yaml +7 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +22 -6
- data/README.md +11 -37
- data/Rakefile +9 -2
- data/cleversafe-1.1.12.gem +0 -0
- data/cleversafe.gemspec +7 -2
- data/lib/cleversafe/connection.rb +16 -58
- data/lib/cleversafe/errors.rb +1 -0
- data/lib/cleversafe/http_client.rb +42 -0
- data/lib/cleversafe/object.rb +26 -32
- data/lib/cleversafe/vault.rb +32 -19
- data/lib/cleversafe.rb +12 -5
- data/test/connection_test.rb +7 -0
- data/test/http_client_test.rb +14 -0
- data/test/lib/cleversafe/test_helper.rb +6 -0
- data/test/object_test.rb +19 -0
- data/test/vault_test.rb +18 -0
- metadata +104 -60
- data/cleversafe-1.0.7.gem +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8f03c57c69ee3a91b75c581ef1242bace7254961
|
4
|
+
data.tar.gz: 1d0c163b97b2edf66159fd87cfe5486a8c1829db
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0df80cd07ed30340690fedd24e2f8bd9090816b4b2a5f888d7bd7d9cd7f846c43f12c718c1bd2f268c654bb0e846bc817c252384a3b113c10b3f3c04ea2f0bd7
|
7
|
+
data.tar.gz: 4224dae346c95382b6a88c335c2e7a841097ae747fe88d85b49581d1196f63e3d5a47d2944981549852ed1ad5fcbab7bf7749216de5d12c00c4e8ab767ba5046
|
data/Gemfile
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
source
|
2
|
-
gemspec
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,34 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cleversafe (1.
|
5
|
-
|
4
|
+
cleversafe (1.1.11)
|
5
|
+
json
|
6
|
+
rest-client (>= 1.6.8)
|
6
7
|
|
7
8
|
GEM
|
8
|
-
remote:
|
9
|
+
remote: https://rubygems.org/
|
9
10
|
specs:
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
addressable (2.3.7)
|
12
|
+
crack (0.4.2)
|
13
|
+
safe_yaml (~> 1.0.0)
|
14
|
+
json (1.8.2)
|
15
|
+
mime-types (2.4.3)
|
16
|
+
minitest (5.5.1)
|
17
|
+
netrc (0.10.2)
|
18
|
+
rake (10.4.2)
|
19
|
+
rest-client (1.7.3)
|
20
|
+
mime-types (>= 1.16, < 3.0)
|
21
|
+
netrc (~> 0.7)
|
22
|
+
safe_yaml (1.0.4)
|
23
|
+
webmock (1.20.4)
|
24
|
+
addressable (>= 2.3.6)
|
25
|
+
crack (>= 0.3.2)
|
13
26
|
|
14
27
|
PLATFORMS
|
15
28
|
ruby
|
16
29
|
|
17
30
|
DEPENDENCIES
|
18
31
|
cleversafe!
|
32
|
+
minitest (~> 5)
|
33
|
+
rake
|
34
|
+
webmock (~> 1.7)
|
data/README.md
CHANGED
@@ -10,47 +10,21 @@ This is a Ruby interface into the Cleversafe's SOH API.
|
|
10
10
|
## Todo
|
11
11
|
* Support range requests for getting an object
|
12
12
|
|
13
|
-
##
|
13
|
+
## Usage
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
#
|
17
|
-
|
16
|
+
# Connect to Cleversafe
|
17
|
+
connection = Cleversafe::Connection.new('http://127.0.0.1:1234')
|
18
18
|
|
19
|
-
#
|
20
|
-
|
19
|
+
# Open a vault
|
20
|
+
vault = connection.vault('pictures')
|
21
21
|
|
22
|
-
#
|
23
|
-
|
22
|
+
# Upload, download, delete
|
23
|
+
key = vault.create_object(open('~/cat.jpg'))
|
24
24
|
|
25
|
-
|
26
|
-
vault.
|
27
|
-
|
28
|
-
|
29
|
-
vault.objects(:limit => 10, :start_id => "1f1665dce23b515cedf29edaf1d033730000")
|
30
|
-
|
31
|
-
# load object
|
32
|
-
object = "1f1665dce23b515cedf29edaf1d033730000"
|
33
|
-
|
34
|
-
# get etag of object
|
35
|
-
vault.object(object).etag
|
36
|
-
|
37
|
-
# download object
|
38
|
-
File.open("downloaded.file", 'w') {|f| f.write(vault.object(object).data) }
|
39
|
-
|
40
|
-
# upload object, don't use multipart, it is not supported
|
41
|
-
uploaded_object = vault.create_object File.new("upload.file", "r"), :multipart => false, 'X-Digest' => "md5"
|
42
|
-
|
43
|
-
# uploaded object's digest
|
44
|
-
uploaded_object[:id]
|
45
|
-
|
46
|
-
# object's digest
|
47
|
-
uploaded_object[:x_content_digest]
|
48
|
-
|
49
|
-
# uploaded object exists?
|
50
|
-
vault.object_exists?(uploaded_object[:id])
|
51
|
-
|
52
|
-
# deleting the uploaded object
|
53
|
-
vault.delete_object(uploaded_object[:id])
|
25
|
+
vault[key].exists?
|
26
|
+
vault[key].size
|
27
|
+
vault[key].open { |io| ... }
|
28
|
+
vault[key].delete
|
54
29
|
|
55
30
|
```
|
56
|
-
|
data/Rakefile
CHANGED
Binary file
|
data/cleversafe.gemspec
CHANGED
@@ -3,9 +3,14 @@ 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.11"
|
7
7
|
|
8
|
-
s.add_dependency '
|
8
|
+
s.add_dependency 'json'
|
9
|
+
s.add_dependency 'rest-client', '>= 1.6.8'
|
10
|
+
|
11
|
+
s.add_development_dependency 'rake'
|
12
|
+
s.add_development_dependency 'minitest', '~> 5'
|
13
|
+
s.add_development_dependency 'webmock', '~> 1.7'
|
9
14
|
|
10
15
|
s.files = Dir["#{File.dirname(__FILE__)}/**/*"]
|
11
16
|
end
|
@@ -1,75 +1,33 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'forwardable'
|
3
|
+
|
1
4
|
module Cleversafe
|
2
5
|
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
|
20
|
-
end
|
21
|
-
|
22
|
-
def base_url
|
23
|
-
"#{protocol}://#{host}/"
|
24
|
-
end
|
6
|
+
extend Forwardable
|
25
7
|
|
26
|
-
|
27
|
-
protocol = options.fetch(:protocol, protocol)
|
28
|
-
host = options.fetch(:host, host)
|
29
|
-
|
30
|
-
"#{protocol}://#{host}/#{vault}/#{objectname}"
|
31
|
-
end
|
32
|
-
|
33
|
-
def vault(name)
|
34
|
-
Cleversafe::Vault.new(self, name)
|
35
|
-
end
|
8
|
+
def_delegators :@http, :url, :url_for, :get, :head, :put, :delete
|
36
9
|
|
37
|
-
def
|
38
|
-
|
39
|
-
vaults.collect{|v| v['vault_name']}
|
10
|
+
def initialize(url, options = {})
|
11
|
+
@http = Cleversafe::HttpClient.new(url, options)
|
40
12
|
end
|
41
13
|
|
42
|
-
def
|
43
|
-
|
14
|
+
def ping
|
15
|
+
head '/'
|
44
16
|
true
|
45
|
-
rescue
|
17
|
+
rescue Exception
|
46
18
|
false
|
47
19
|
end
|
48
20
|
|
49
|
-
def
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
def head(path, options = {})
|
54
|
-
connection[path].head options
|
21
|
+
def status
|
22
|
+
JSON.parse(get('/').to_s)
|
55
23
|
end
|
56
24
|
|
57
|
-
def
|
58
|
-
|
25
|
+
def vaults
|
26
|
+
status['vaults'].map { |v| v['vault_name'] }
|
59
27
|
end
|
60
28
|
|
61
|
-
def
|
62
|
-
|
29
|
+
def vault(name)
|
30
|
+
Cleversafe::Vault.new(self, name)
|
63
31
|
end
|
64
|
-
|
65
|
-
private
|
66
|
-
def connection
|
67
|
-
@connection ||= RestClient::Resource.new(base_url,
|
68
|
-
:user => username,
|
69
|
-
:password => password,
|
70
|
-
:open_timeout => open_timeout,
|
71
|
-
:raw_response => true
|
72
|
-
)
|
73
|
-
end
|
74
32
|
end
|
75
33
|
end
|
data/lib/cleversafe/errors.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Cleversafe
|
2
|
+
class HttpClient
|
3
|
+
DEFAULTS = { :timeout => nil, :open_timeout => nil }
|
4
|
+
|
5
|
+
attr_reader :url
|
6
|
+
|
7
|
+
def initialize(url, options = {})
|
8
|
+
@url = url
|
9
|
+
@defaults = DEFAULTS.merge(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def url_for(*path)
|
13
|
+
File.join(url, *path)
|
14
|
+
end
|
15
|
+
|
16
|
+
def head(path, options = {})
|
17
|
+
request :head, path, options
|
18
|
+
end
|
19
|
+
|
20
|
+
def get(path, options = {})
|
21
|
+
request :get, path, options
|
22
|
+
end
|
23
|
+
|
24
|
+
def post(path, payload, options = {})
|
25
|
+
request :post, path, options.merge(:payload => payload)
|
26
|
+
end
|
27
|
+
|
28
|
+
def put(path, payload, options = {})
|
29
|
+
request :put, path, options.merge(:payload => payload)
|
30
|
+
end
|
31
|
+
|
32
|
+
def delete(path, options = {})
|
33
|
+
request :delete, path, options
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def request(method, path, options = {})
|
38
|
+
options = @defaults.merge(options).merge(:method => method, :url => url_for(path))
|
39
|
+
RestClient::Request.execute(options)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/cleversafe/object.rb
CHANGED
@@ -1,27 +1,29 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'cgi'
|
2
3
|
|
3
4
|
module Cleversafe
|
4
5
|
class Object
|
5
6
|
|
6
|
-
attr_reader :
|
7
|
+
attr_reader :vault, :key, :connection
|
7
8
|
|
8
|
-
def initialize(vault,
|
9
|
+
def initialize(vault, key)
|
10
|
+
raise ArgumentError, "key is required" unless key =~ /\S/
|
11
|
+
@vault = vault
|
12
|
+
@key = key
|
9
13
|
@connection = vault.connection
|
10
|
-
@vault = vault.name
|
11
|
-
@name = name
|
12
14
|
end
|
13
15
|
|
14
|
-
def
|
15
|
-
"#{vault}/#{
|
16
|
+
def path
|
17
|
+
"#{vault.path}/#{CGI.escape(key)}"
|
16
18
|
end
|
17
19
|
|
18
|
-
def url
|
19
|
-
connection.url_for(
|
20
|
+
def url
|
21
|
+
connection.url_for(path)
|
20
22
|
end
|
21
23
|
|
22
24
|
def delete
|
23
25
|
handle_errors do
|
24
|
-
connection.delete(
|
26
|
+
connection.delete(path)
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
@@ -32,34 +34,27 @@ module Cleversafe
|
|
32
34
|
false
|
33
35
|
end
|
34
36
|
|
35
|
-
def data(options={})
|
36
|
-
|
37
|
-
connection.get(key, options).to_s
|
38
|
-
end
|
37
|
+
def data(options = {})
|
38
|
+
open(options) { |io| io.read }
|
39
39
|
end
|
40
40
|
|
41
|
-
def open(options={})
|
41
|
+
def open(options = {})
|
42
42
|
handle_errors do
|
43
|
-
response = connection.get(
|
43
|
+
response = connection.get(path, options.merge(:raw_response => true))
|
44
44
|
begin
|
45
|
-
|
45
|
+
file = response.file
|
46
|
+
file.open
|
47
|
+
file.binmode
|
48
|
+
yield file
|
46
49
|
ensure
|
47
|
-
|
50
|
+
file.unlink
|
48
51
|
end
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
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
55
|
def metadata
|
61
56
|
@metadata ||= handle_errors do
|
62
|
-
connection.head(
|
57
|
+
connection.head(path).headers
|
63
58
|
end
|
64
59
|
end
|
65
60
|
|
@@ -72,11 +67,10 @@ module Cleversafe
|
|
72
67
|
end
|
73
68
|
|
74
69
|
private
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
70
|
+
def handle_errors
|
71
|
+
yield
|
72
|
+
rescue RestClient::ResourceNotFound
|
73
|
+
raise Cleversafe::Errors::NotFound, "object `#{key}' does not exist", caller[0..-2]
|
74
|
+
end
|
81
75
|
end
|
82
76
|
end
|
data/lib/cleversafe/vault.rb
CHANGED
@@ -1,43 +1,56 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
1
3
|
module Cleversafe
|
2
4
|
class Vault
|
3
|
-
attr_reader :connection, :name
|
5
|
+
attr_reader :connection, :name, :path
|
4
6
|
|
5
7
|
def initialize(connection, name)
|
6
8
|
@connection = connection
|
7
9
|
@name = name
|
10
|
+
@path = CGI.escape name
|
8
11
|
end
|
9
12
|
|
10
13
|
def metadata
|
11
|
-
@metadata ||= JSON.parse(connection.get(
|
14
|
+
@metadata ||= JSON.parse(connection.get(path).to_s)
|
12
15
|
end
|
13
16
|
|
14
|
-
def
|
15
|
-
metadata['vault_usage']
|
17
|
+
def usage
|
18
|
+
metadata['vault_usage']
|
16
19
|
end
|
17
20
|
|
18
|
-
def object(
|
19
|
-
Cleversafe::Object.new(self,
|
21
|
+
def object(key)
|
22
|
+
Cleversafe::Object.new(self, key)
|
20
23
|
end
|
21
24
|
alias [] object
|
22
25
|
|
23
|
-
def objects(
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
def objects(options = {})
|
27
|
+
headers = {}
|
28
|
+
|
29
|
+
headers['X-Operation'] = 'list'
|
30
|
+
headers['X-Start-Id'] = options[:start_id] if options[:start_id]
|
31
|
+
headers['X-List-Length-Limit'] = options[:limit] if options[:limit]
|
32
|
+
|
33
|
+
connection.get(path, :headers => headers).to_s.split("\n")
|
29
34
|
end
|
30
35
|
|
31
36
|
def create_object(payload, options = {})
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
handle_errors do
|
38
|
+
response = connection.put(path, payload, options)
|
39
|
+
id = response.to_s.strip
|
40
|
+
|
41
|
+
if response.headers[:x_content_digest]
|
42
|
+
{ :id => id, :x_content_digest => response.headers[:x_content_digest] }
|
43
|
+
else
|
44
|
+
id
|
45
|
+
end
|
39
46
|
end
|
40
47
|
end
|
41
48
|
|
49
|
+
private
|
50
|
+
def handle_errors
|
51
|
+
yield
|
52
|
+
rescue RestClient::MethodNotAllowed
|
53
|
+
raise Cleversafe::Errors::VaultMisconfigured, "Vault has not been added to accessers.", caller[0..-2]
|
54
|
+
end
|
42
55
|
end
|
43
56
|
end
|
data/lib/cleversafe.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
|
4
|
-
require 'cleversafe/errors'
|
1
|
+
require 'cleversafe/connection'
|
2
|
+
require 'cleversafe/http_client'
|
5
3
|
require 'cleversafe/vault'
|
6
4
|
require 'cleversafe/object'
|
7
|
-
require 'cleversafe/
|
5
|
+
require 'cleversafe/errors'
|
6
|
+
|
7
|
+
require 'rest-client'
|
8
|
+
|
9
|
+
# Monkeypatch RestClient to prevent it from closing IO objects after they're
|
10
|
+
# uploaded, which it really shouldn't do.
|
11
|
+
class RestClient::Payload::Streamed
|
12
|
+
def close
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'cleversafe/test_helper'
|
2
|
+
|
3
|
+
class HttpClientTest < Minitest::Test
|
4
|
+
def test_url_for
|
5
|
+
client = Cleversafe::HttpClient.new('http://example.com')
|
6
|
+
|
7
|
+
assert_equal 'http://example.com/', client.url_for('')
|
8
|
+
assert_equal 'http://example.com/', client.url_for('/')
|
9
|
+
assert_equal 'http://example.com/a/b', client.url_for('/a/b')
|
10
|
+
assert_equal 'http://example.com/a/b', client.url_for('a/b')
|
11
|
+
assert_equal 'http://example.com/a/b', client.url_for('a', 'b')
|
12
|
+
assert_equal 'http://example.com/a%2Fb', client.url_for('a%2Fb')
|
13
|
+
end
|
14
|
+
end
|
data/test/object_test.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'cleversafe/test_helper'
|
2
|
+
|
3
|
+
class ObjectTest < Minitest::Test
|
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
|
+
|
15
|
+
def test_path_is_escaped
|
16
|
+
object = Cleversafe::Object.new(@vault, 'foo/bar[1].png')
|
17
|
+
assert_equal 'test_vault/foo%2Fbar%5B1%5D.png', object.path
|
18
|
+
end
|
19
|
+
end
|
data/test/vault_test.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'cleversafe/test_helper'
|
2
|
+
|
3
|
+
class VaultTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@connection = Cleversafe::Connection.new('http://test.host')
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_path_is_escaped
|
9
|
+
assert_equal 'test%2Fvault', Cleversafe::Vault.new(@connection, 'test/vault').path
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_vault_is_configured_correctly
|
13
|
+
stub_request(:put, "http://test.host/assets").with(:body => "foo").to_return(:status => 405, :body => "", :headers => {})
|
14
|
+
vault = Cleversafe::Vault.new(@connection, 'assets')
|
15
|
+
error = assert_raises(Cleversafe::Errors::VaultMisconfigured) { vault.create_object('foo') }
|
16
|
+
assert_equal 'Vault has not been added to accessers.', error.message
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,85 +1,129 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cleversafe
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
segments:
|
6
|
-
- 1
|
7
|
-
- 0
|
8
|
-
- 8
|
9
|
-
version: 1.0.8
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.11
|
10
5
|
platform: ruby
|
11
|
-
authors:
|
6
|
+
authors:
|
12
7
|
- John Williams
|
13
8
|
autorequire:
|
14
9
|
bindir: bin
|
15
10
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
date: 2022-07-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
22
21
|
prerelease: false
|
23
|
-
|
24
|
-
requirements:
|
25
|
-
- -
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.6.8
|
32
34
|
type: :runtime
|
33
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.6.8
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.7'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.7'
|
34
83
|
description:
|
35
84
|
email: john@37signals.com
|
36
85
|
executables: []
|
37
|
-
|
38
86
|
extensions: []
|
39
|
-
|
40
87
|
extra_rdoc_files: []
|
41
|
-
|
42
|
-
|
43
|
-
- ./
|
44
|
-
- ./
|
45
|
-
- ./
|
46
|
-
- ./
|
47
|
-
- ./
|
48
|
-
- ./lib/cleversafe
|
49
|
-
- ./lib/cleversafe/
|
50
|
-
- ./lib/cleversafe/
|
51
|
-
- ./lib/cleversafe.rb
|
52
|
-
- ./
|
53
|
-
- ./
|
54
|
-
|
88
|
+
files:
|
89
|
+
- "./Gemfile"
|
90
|
+
- "./Gemfile.lock"
|
91
|
+
- "./README.md"
|
92
|
+
- "./Rakefile"
|
93
|
+
- "./cleversafe-1.1.12.gem"
|
94
|
+
- "./cleversafe.gemspec"
|
95
|
+
- "./lib/cleversafe.rb"
|
96
|
+
- "./lib/cleversafe/connection.rb"
|
97
|
+
- "./lib/cleversafe/errors.rb"
|
98
|
+
- "./lib/cleversafe/http_client.rb"
|
99
|
+
- "./lib/cleversafe/object.rb"
|
100
|
+
- "./lib/cleversafe/vault.rb"
|
101
|
+
- "./test/connection_test.rb"
|
102
|
+
- "./test/http_client_test.rb"
|
103
|
+
- "./test/lib/cleversafe/test_helper.rb"
|
104
|
+
- "./test/object_test.rb"
|
105
|
+
- "./test/vault_test.rb"
|
55
106
|
homepage:
|
56
107
|
licenses: []
|
57
|
-
|
108
|
+
metadata: {}
|
58
109
|
post_install_message:
|
59
110
|
rdoc_options: []
|
60
|
-
|
61
|
-
require_paths:
|
111
|
+
require_paths:
|
62
112
|
- lib
|
63
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
65
115
|
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
72
120
|
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
- 0
|
76
|
-
version: "0"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
77
123
|
requirements: []
|
78
|
-
|
79
124
|
rubyforge_project:
|
80
|
-
rubygems_version:
|
125
|
+
rubygems_version: 2.5.2
|
81
126
|
signing_key:
|
82
|
-
specification_version:
|
127
|
+
specification_version: 4
|
83
128
|
summary: A Ruby API into Cleversafe's REST interface.
|
84
129
|
test_files: []
|
85
|
-
|
data/cleversafe-1.0.7.gem
DELETED
Binary file
|