cleversafe 1.0.2

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.
@@ -0,0 +1,73 @@
1
+ module Cleversafe
2
+ class Connection
3
+ attr_reader :username
4
+ attr_accessor :password
5
+ attr_accessor :host
6
+ attr_accessor :proto
7
+ attr_accessor :vault
8
+ attr_accessor :method
9
+
10
+ def initialize(*args)
11
+ if args[0].is_a?(Hash)
12
+ options = args[0]
13
+ @username = options[:username]
14
+ @password = options[:password]
15
+ @host = options[:host]
16
+ @protocol = options[:protocol] || "http"
17
+ else
18
+ @username = args[0]
19
+ @password = args[1]
20
+ @host = args[2]
21
+ @protocol = args[3] || "http"
22
+ end
23
+
24
+ @connection ||= begin
25
+ build_connection
26
+ end
27
+ return @connection
28
+ end
29
+
30
+ def build_connection
31
+ RestClient::Resource.new(base_url, @username, @password)
32
+ end
33
+
34
+ def base_url
35
+ "#{@protocol}://#{@host}/"
36
+ end
37
+
38
+ def vault(name)
39
+ Cleversafe::Vault.new(self, name)
40
+ end
41
+
42
+ def vaults
43
+ vaults = JSON.parse(get(nil))['vaults']
44
+ vaults.collect{|v| v['vault_name']}
45
+ end
46
+
47
+ def vault_exists?(vault_name)
48
+ begin
49
+ response = get(vault_name)
50
+ true
51
+ rescue => e
52
+ false
53
+ end
54
+ end
55
+
56
+ def get(path, options = {})
57
+ @connection[path].get options
58
+ end
59
+
60
+ def head(path, options = {})
61
+ @connection[path].head options
62
+ end
63
+
64
+ def put(path, payload, options = {})
65
+ @connection[path].put payload, options
66
+ end
67
+
68
+ def delete(path)
69
+ @connection[path].delete
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,34 @@
1
+ module Cleversafe
2
+ class Object
3
+
4
+ attr_reader :name
5
+ attr_reader :vault
6
+
7
+ def initialize(vault, objectname = {})
8
+ @vault = vault.name
9
+ @name = objectname
10
+ @connection = vault.connection
11
+ end
12
+
13
+ def data(options ={})
14
+ begin
15
+ @connection.get("#{@vault}/#{@name}", options).body
16
+ rescue RestClient::Exception => e
17
+ raise "#{e.http_code.to_s}: Object #{@name} does not exist" if (e.http_code.to_s == "404")
18
+ end
19
+ end
20
+
21
+ def object_metadata
22
+ begin
23
+ @object_metadata ||= @connection.head("#{@vault}/#{@name}").headers
24
+ rescue RestClient::Exception => e
25
+ raise "#{e.http_code.to_s}: Object #{@name} does not exist" if (e.http_code.to_s == "404")
26
+ end
27
+ end
28
+
29
+ def etag
30
+ self.object_metadata[:etag]
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,60 @@
1
+ module Cleversafe
2
+ class Vault
3
+
4
+ attr_reader :name
5
+ attr_reader :connection
6
+
7
+ def initialize(connection, name)
8
+ @connection = connection
9
+ @name = name
10
+ end
11
+
12
+ def vault_metadata
13
+ @metadata ||= JSON.parse(@connection.get(@name))
14
+ end
15
+
16
+ def bytes_used
17
+ self.vault_metadata['vault_usage']['used_size']
18
+ end
19
+
20
+ def object(objectname)
21
+ Cleversafe::Object.new(self, objectname)
22
+ end
23
+
24
+ def objects(params = {})
25
+ options = {}
26
+ options['X-Operation'] = "list"
27
+ options['X-List-Length-Limit'] = params[:limit] if params[:limit]
28
+ options['X-Start-Id'] = params[:start_id] if params[:start_id]
29
+ @connection.get(@name, options).split("\n")
30
+ end
31
+
32
+ def object_exists?(objectname)
33
+ begin
34
+ response = @connection.head("#{@name}/#{objectname}")
35
+ true
36
+ rescue => e
37
+ false
38
+ end
39
+ end
40
+
41
+ def create_object(payload, options = {})
42
+ response = @connection.put("#{@name}", payload, options)
43
+ digest_header = "x_content_digest"
44
+ if response.headers[:x_content_digest]
45
+ {:id => response.body, :x_content_digest => response.headers[:x_content_digest] }
46
+ else
47
+ response.body
48
+ end
49
+ end
50
+
51
+ def delete_object(objectname)
52
+ begin
53
+ @connection.delete("#{@name}/#{objectname}")
54
+ rescue RestClient::Exception => e
55
+ raise "#{e.http_code.to_s}: Object #{objectname} does not exist" if (e.http_code.to_s == "404")
56
+ end
57
+ end
58
+
59
+ end
60
+ end
data/lib/cleversafe.rb ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'rest-client'
4
+ require 'json'
5
+
6
+ $:.unshift(File.dirname(__FILE__))
7
+ require 'cleversafe/vault'
8
+ require 'cleversafe/object'
9
+ require 'cleversafe/connection'
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cleversafe
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 2
9
+ version: 1.0.2
10
+ platform: ruby
11
+ authors:
12
+ - John Williams
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2013-02-27 00:00:00 -06:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rest-client
22
+ prerelease: false
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
+ description:
33
+ email: john@37signals.com
34
+ executables: []
35
+
36
+ extensions: []
37
+
38
+ extra_rdoc_files: []
39
+
40
+ files:
41
+ - lib/cleversafe/connection.rb
42
+ - lib/cleversafe/object.rb
43
+ - lib/cleversafe/vault.rb
44
+ - lib/cleversafe.rb
45
+ has_rdoc: true
46
+ homepage:
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ requirements: []
69
+
70
+ rubyforge_project:
71
+ rubygems_version: 1.3.6
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: A Ruby API into Cleversafe's REST interface.
75
+ test_files: []
76
+