cleversafe 1.1.3 → 1.1.12
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 +20 -10
- data/README.md +11 -37
- data/cleversafe.gemspec +6 -3
- data/lib/cleversafe/connection.rb +13 -37
- data/lib/cleversafe/errors.rb +1 -0
- data/lib/cleversafe/http_client.rb +48 -0
- data/lib/cleversafe/object.rb +19 -19
- data/lib/cleversafe/vault.rb +30 -16
- data/lib/cleversafe.rb +5 -4
- 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 +94 -90
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 23cdeb4413138a140c55c5acc0212e31a314e24d
|
4
|
+
data.tar.gz: 7f48cd073f7d718acab1c7e5d777a467be03f606
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fd07fddb0146cccbb6dcc80f86e80a7d17ed89c38890ad8898f36e44431717891fead101761783d5faee20804a1dca4835cd701705f84d7c476e868818812d66
|
7
|
+
data.tar.gz: a159ddfba16c2861efa06cf34eff9dd59863a5da1b545bfb5a90579fe15cc8b85a91f16109140a5b01ea8503687e8f871507dc40e560fe653a2dba783a143bcf
|
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.12)
|
5
5
|
json
|
6
|
-
rest-client (
|
6
|
+
rest-client (>= 1.6.8)
|
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
|
-
|
data/cleversafe.gemspec
CHANGED
@@ -3,13 +3,16 @@ 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.12"
|
7
7
|
|
8
8
|
s.add_dependency 'json'
|
9
|
-
|
9
|
+
|
10
|
+
# N.B. rest-client 1.7+ drops support for Ruby 1.8.
|
11
|
+
s.add_dependency 'rest-client', '>= 1.6.8'
|
10
12
|
|
11
13
|
s.add_development_dependency 'rake'
|
12
|
-
s.add_development_dependency 'minitest'
|
14
|
+
s.add_development_dependency 'minitest', '~> 5'
|
15
|
+
s.add_development_dependency 'webmock', '~> 1.7'
|
13
16
|
|
14
17
|
s.files = Dir["#{File.dirname(__FILE__)}/**/*"]
|
15
18
|
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,48 @@
|
|
1
|
+
module Cleversafe
|
2
|
+
class HttpClient
|
3
|
+
# Disable HTTP client timeouts by default. Older versions of RestClient
|
4
|
+
# use a value of `-1` to disable timeouts; recent versions use `nil`.
|
5
|
+
if RestClient.version < '1.6.9'
|
6
|
+
DEFAULTS = { :timeout => -1, :open_timeout => -1 }
|
7
|
+
else
|
8
|
+
DEFAULTS = { :timeout => nil, :open_timeout => nil }
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :url
|
12
|
+
|
13
|
+
def initialize(url, options = {})
|
14
|
+
@url = url
|
15
|
+
@defaults = DEFAULTS.merge(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def url_for(*path)
|
19
|
+
File.join(url, *path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def head(path, options = {})
|
23
|
+
request :head, path, options
|
24
|
+
end
|
25
|
+
|
26
|
+
def get(path, options = {})
|
27
|
+
request :get, path, options
|
28
|
+
end
|
29
|
+
|
30
|
+
def post(path, payload, options = {})
|
31
|
+
request :post, path, options.merge(:payload => payload)
|
32
|
+
end
|
33
|
+
|
34
|
+
def put(path, payload, options = {})
|
35
|
+
request :put, path, options.merge(:payload => payload)
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete(path, options = {})
|
39
|
+
request :delete, path, options
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def request(method, path, options = {})
|
44
|
+
options = @defaults.merge(options).merge(:method => method, :url => url_for(path))
|
45
|
+
RestClient::Request.execute(options)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
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
@@ -1,9 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'rest-client'
|
2
|
+
|
3
|
+
require 'cleversafe/connection'
|
4
|
+
require 'cleversafe/http_client'
|
2
5
|
require 'cleversafe/vault'
|
3
6
|
require 'cleversafe/object'
|
4
|
-
require 'cleversafe/
|
5
|
-
|
6
|
-
require 'rest-client'
|
7
|
+
require 'cleversafe/errors'
|
7
8
|
|
8
9
|
# Monkeypatch RestClient to prevent it from closing IO objects after they're
|
9
10
|
# uploaded, which it really shouldn't do.
|
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,128 @@
|
|
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.12
|
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.8
|
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:
|
51
38
|
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
|
54
|
-
|
55
|
-
|
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'
|
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
|
-
- ./lib/cleversafe
|
84
|
-
- ./lib/cleversafe/
|
85
|
-
- ./lib/cleversafe/
|
86
|
-
- ./lib/cleversafe.rb
|
87
|
-
- ./
|
88
|
-
- ./
|
89
|
-
- ./test/connection_test.rb
|
90
|
-
- ./test/
|
91
|
-
- ./test/
|
92
|
-
- ./test/
|
93
|
-
|
88
|
+
files:
|
89
|
+
- "./Gemfile"
|
90
|
+
- "./Gemfile.lock"
|
91
|
+
- "./README.md"
|
92
|
+
- "./Rakefile"
|
93
|
+
- "./cleversafe.gemspec"
|
94
|
+
- "./lib/cleversafe.rb"
|
95
|
+
- "./lib/cleversafe/connection.rb"
|
96
|
+
- "./lib/cleversafe/errors.rb"
|
97
|
+
- "./lib/cleversafe/http_client.rb"
|
98
|
+
- "./lib/cleversafe/object.rb"
|
99
|
+
- "./lib/cleversafe/vault.rb"
|
100
|
+
- "./test/connection_test.rb"
|
101
|
+
- "./test/http_client_test.rb"
|
102
|
+
- "./test/lib/cleversafe/test_helper.rb"
|
103
|
+
- "./test/object_test.rb"
|
104
|
+
- "./test/vault_test.rb"
|
94
105
|
homepage:
|
95
106
|
licenses: []
|
96
|
-
|
107
|
+
metadata: {}
|
97
108
|
post_install_message:
|
98
109
|
rdoc_options: []
|
99
|
-
|
100
|
-
require_paths:
|
110
|
+
require_paths:
|
101
111
|
- lib
|
102
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
-
requirements:
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
104
114
|
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
111
119
|
- - ">="
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
- 0
|
115
|
-
version: "0"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
116
122
|
requirements: []
|
117
|
-
|
118
123
|
rubyforge_project:
|
119
|
-
rubygems_version:
|
124
|
+
rubygems_version: 2.5.2
|
120
125
|
signing_key:
|
121
|
-
specification_version:
|
126
|
+
specification_version: 4
|
122
127
|
summary: A Ruby API into Cleversafe's REST interface.
|
123
128
|
test_files: []
|
124
|
-
|