cleversafe 1.1.3 → 1.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +20 -10
- data/README.md +11 -37
- data/cleversafe-1.1.10.gem +0 -0
- data/cleversafe-1.1.11.gem +0 -0
- data/cleversafe-1.1.12.gem +0 -0
- data/cleversafe.gemspec +4 -3
- data/lib/cleversafe/connection.rb +13 -37
- data/lib/cleversafe/errors.rb +1 -0
- data/lib/cleversafe/http_client.rb +42 -0
- data/lib/cleversafe/object.rb +19 -19
- data/lib/cleversafe/vault.rb +30 -16
- data/lib/cleversafe.rb +3 -2
- data/test/connection_test.rb +1 -1
- data/test/http_client_test.rb +14 -0
- data/test/lib/cleversafe/test_helper.rb +2 -3
- data/test/object_test.rb +6 -1
- data/test/vault_test.rb +14 -3
- metadata +97 -90
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 18677c6a6c521554741f3af8d8d1cb1b758e14c8
|
4
|
+
data.tar.gz: 13fc121e700597895df533e32cbc72235332ff6e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d50d22d53a7d2d1876d0a9827d34c5f7a6b2bf5d5106b35c52c7961cd5cd6c1ca383160946af8f602971e536156800cdefa7c7b6c4a586c563730ee53160329a
|
7
|
+
data.tar.gz: c94b1bdce16240613f90d1d2668fccd99f311650192c1aaf0ff75d9861a88eb8fce820a9e496e39d702e6c701936b26174445267de75ae71b835c6aa946931ad
|
data/Gemfile
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
source
|
2
|
-
gemspec
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,24 +1,34 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cleversafe (1.1.
|
4
|
+
cleversafe (1.1.10)
|
5
5
|
json
|
6
|
-
rest-client (~> 1.6
|
6
|
+
rest-client (~> 1.6)
|
7
7
|
|
8
8
|
GEM
|
9
|
-
remote:
|
9
|
+
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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)
|
17
26
|
|
18
27
|
PLATFORMS
|
19
28
|
ruby
|
20
29
|
|
21
30
|
DEPENDENCIES
|
22
31
|
cleversafe!
|
23
|
-
minitest
|
32
|
+
minitest (~> 5)
|
24
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
|
-
|
Binary file
|
Binary file
|
Binary file
|
data/cleversafe.gemspec
CHANGED
@@ -3,13 +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.1.
|
6
|
+
s.version = "1.1.10"
|
7
7
|
|
8
8
|
s.add_dependency 'json'
|
9
|
-
s.add_dependency 'rest-client', '~> 1.6
|
9
|
+
s.add_dependency 'rest-client', '~> 1.6'
|
10
10
|
|
11
11
|
s.add_development_dependency 'rake'
|
12
|
-
s.add_development_dependency 'minitest'
|
12
|
+
s.add_development_dependency 'minitest', '~> 5'
|
13
|
+
s.add_development_dependency 'webmock', '~> 1.7'
|
13
14
|
|
14
15
|
s.files = Dir["#{File.dirname(__FILE__)}/**/*"]
|
15
16
|
end
|
@@ -1,57 +1,33 @@
|
|
1
1
|
require 'json'
|
2
|
+
require 'forwardable'
|
2
3
|
|
3
4
|
module Cleversafe
|
4
5
|
class Connection
|
5
|
-
|
6
|
-
@http = build_http_client(url, options)
|
7
|
-
end
|
6
|
+
extend Forwardable
|
8
7
|
|
9
|
-
|
10
|
-
@http.url
|
11
|
-
end
|
12
|
-
|
13
|
-
def url_for(*paths)
|
14
|
-
[ url, *paths ].join('/')
|
15
|
-
end
|
16
|
-
|
17
|
-
def vault(name)
|
18
|
-
Cleversafe::Vault.new(self, name)
|
19
|
-
end
|
8
|
+
def_delegators :@http, :url, :url_for, :get, :head, :put, :delete
|
20
9
|
|
21
|
-
def
|
22
|
-
@
|
23
|
-
data = JSON.parse get.to_s
|
24
|
-
data['vaults'].map { |v| v['vault_name'] }
|
25
|
-
end
|
10
|
+
def initialize(url, options = {})
|
11
|
+
@http = Cleversafe::HttpClient.new(url, options)
|
26
12
|
end
|
27
13
|
|
28
14
|
def ping
|
29
|
-
head
|
15
|
+
head '/'
|
30
16
|
true
|
31
|
-
rescue
|
17
|
+
rescue Exception
|
32
18
|
false
|
33
19
|
end
|
34
20
|
|
35
|
-
def
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
def get(path = '', options = {})
|
40
|
-
@http[path].get options
|
21
|
+
def status
|
22
|
+
JSON.parse(get('/').to_s)
|
41
23
|
end
|
42
24
|
|
43
|
-
def
|
44
|
-
|
25
|
+
def vaults
|
26
|
+
status['vaults'].map { |v| v['vault_name'] }
|
45
27
|
end
|
46
28
|
|
47
|
-
def
|
48
|
-
|
29
|
+
def vault(name)
|
30
|
+
Cleversafe::Vault.new(self, name)
|
49
31
|
end
|
50
|
-
|
51
|
-
private
|
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))
|
55
|
-
end
|
56
32
|
end
|
57
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,28 +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
|
-
raise ArgumentError, "
|
9
|
+
def initialize(vault, key)
|
10
|
+
raise ArgumentError, "key is required" unless key =~ /\S/
|
11
|
+
@vault = vault
|
12
|
+
@key = key
|
10
13
|
@connection = vault.connection
|
11
|
-
@vault = vault.name
|
12
|
-
@name = name
|
13
14
|
end
|
14
15
|
|
15
|
-
def
|
16
|
-
"#{vault}/#{
|
16
|
+
def path
|
17
|
+
"#{vault.path}/#{CGI.escape(key)}"
|
17
18
|
end
|
18
19
|
|
19
20
|
def url
|
20
|
-
connection.url_for(
|
21
|
+
connection.url_for(path)
|
21
22
|
end
|
22
23
|
|
23
24
|
def delete
|
24
25
|
handle_errors do
|
25
|
-
connection.delete(
|
26
|
+
connection.delete(path)
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
@@ -33,13 +34,13 @@ module Cleversafe
|
|
33
34
|
false
|
34
35
|
end
|
35
36
|
|
36
|
-
def data(options={})
|
37
|
+
def data(options = {})
|
37
38
|
open(options) { |io| io.read }
|
38
39
|
end
|
39
40
|
|
40
|
-
def open(options={})
|
41
|
+
def open(options = {})
|
41
42
|
handle_errors do
|
42
|
-
response = connection.get(
|
43
|
+
response = connection.get(path, options.merge(:raw_response => true))
|
43
44
|
begin
|
44
45
|
file = response.file
|
45
46
|
file.open
|
@@ -53,7 +54,7 @@ module Cleversafe
|
|
53
54
|
|
54
55
|
def metadata
|
55
56
|
@metadata ||= handle_errors do
|
56
|
-
connection.head(
|
57
|
+
connection.head(path).headers
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
@@ -66,11 +67,10 @@ module Cleversafe
|
|
66
67
|
end
|
67
68
|
|
68
69
|
private
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
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
|
75
75
|
end
|
76
76
|
end
|
data/lib/cleversafe/vault.rb
CHANGED
@@ -1,18 +1,21 @@
|
|
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
|
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
21
|
def object(key)
|
@@ -20,23 +23,34 @@ module Cleversafe
|
|
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
|
-
|
37
|
+
handle_errors do
|
38
|
+
response = connection.put(path, payload, options)
|
39
|
+
id = response.to_s.strip
|
34
40
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
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
|
41
55
|
end
|
42
56
|
end
|
data/lib/cleversafe.rb
CHANGED
data/test/connection_test.rb
CHANGED
@@ -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
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'cleversafe/test_helper'
|
2
2
|
|
3
|
-
class ObjectTest <
|
3
|
+
class ObjectTest < Minitest::Test
|
4
4
|
def setup
|
5
5
|
connection = Cleversafe::Connection.new('http://test.host')
|
6
6
|
@vault = Cleversafe::Vault.new(connection, 'test_vault')
|
@@ -11,4 +11,9 @@ class ObjectTest < MiniTest::Unit::TestCase
|
|
11
11
|
Cleversafe::Object.new(@vault, '')
|
12
12
|
end
|
13
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
|
14
19
|
end
|
data/test/vault_test.rb
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
require 'cleversafe/test_helper'
|
2
2
|
|
3
|
-
class VaultTest <
|
4
|
-
def
|
5
|
-
|
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
|
6
17
|
end
|
7
18
|
end
|
metadata
CHANGED
@@ -1,124 +1,131 @@
|
|
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
|
-
- 1
|
8
|
-
- 3
|
9
|
-
version: 1.1.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.10
|
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
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2022-07-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: json
|
22
|
-
|
23
|
-
|
24
|
-
requirements:
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
25
17
|
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
- 0
|
29
|
-
version: "0"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
30
20
|
type: :runtime
|
31
|
-
version_requirements: *id001
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: rest-client
|
34
21
|
prerelease: false
|
35
|
-
|
36
|
-
requirements:
|
37
|
-
- -
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
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'
|
44
34
|
type: :runtime
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rake
|
48
35
|
prerelease: false
|
49
|
-
|
50
|
-
requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
51
45
|
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
|
54
|
-
- 0
|
55
|
-
version: "0"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
56
48
|
type: :development
|
57
|
-
version_requirements: *id003
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: minitest
|
60
49
|
prerelease: false
|
61
|
-
|
62
|
-
requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
63
52
|
- - ">="
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
|
66
|
-
|
67
|
-
|
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'
|
68
62
|
type: :development
|
69
|
-
|
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'
|
70
83
|
description:
|
71
84
|
email: john@37signals.com
|
72
85
|
executables: []
|
73
|
-
|
74
86
|
extensions: []
|
75
|
-
|
76
87
|
extra_rdoc_files: []
|
77
|
-
|
78
|
-
|
79
|
-
- ./
|
80
|
-
- ./
|
81
|
-
- ./
|
82
|
-
- ./
|
83
|
-
- ./
|
84
|
-
- ./
|
85
|
-
- ./
|
86
|
-
- ./lib/cleversafe.rb
|
87
|
-
- ./
|
88
|
-
- ./
|
89
|
-
- ./
|
90
|
-
- ./
|
91
|
-
- ./
|
92
|
-
- ./test/
|
93
|
-
|
88
|
+
files:
|
89
|
+
- "./Gemfile"
|
90
|
+
- "./Gemfile.lock"
|
91
|
+
- "./README.md"
|
92
|
+
- "./Rakefile"
|
93
|
+
- "./cleversafe-1.1.10.gem"
|
94
|
+
- "./cleversafe-1.1.11.gem"
|
95
|
+
- "./cleversafe-1.1.12.gem"
|
96
|
+
- "./cleversafe.gemspec"
|
97
|
+
- "./lib/cleversafe.rb"
|
98
|
+
- "./lib/cleversafe/connection.rb"
|
99
|
+
- "./lib/cleversafe/errors.rb"
|
100
|
+
- "./lib/cleversafe/http_client.rb"
|
101
|
+
- "./lib/cleversafe/object.rb"
|
102
|
+
- "./lib/cleversafe/vault.rb"
|
103
|
+
- "./test/connection_test.rb"
|
104
|
+
- "./test/http_client_test.rb"
|
105
|
+
- "./test/lib/cleversafe/test_helper.rb"
|
106
|
+
- "./test/object_test.rb"
|
107
|
+
- "./test/vault_test.rb"
|
94
108
|
homepage:
|
95
109
|
licenses: []
|
96
|
-
|
110
|
+
metadata: {}
|
97
111
|
post_install_message:
|
98
112
|
rdoc_options: []
|
99
|
-
|
100
|
-
require_paths:
|
113
|
+
require_paths:
|
101
114
|
- lib
|
102
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
-
requirements:
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
104
117
|
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
111
122
|
- - ">="
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
- 0
|
115
|
-
version: "0"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
116
125
|
requirements: []
|
117
|
-
|
118
126
|
rubyforge_project:
|
119
|
-
rubygems_version:
|
127
|
+
rubygems_version: 2.5.2
|
120
128
|
signing_key:
|
121
|
-
specification_version:
|
129
|
+
specification_version: 4
|
122
130
|
summary: A Ruby API into Cleversafe's REST interface.
|
123
131
|
test_files: []
|
124
|
-
|