cloudstorage 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/cloudstorage.rb +138 -0
  3. metadata +89 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 95a54351dbcb96609801aefe1fe5054b51a91e0e
4
+ data.tar.gz: ead16abac127755f29a18cd5116d3343a034cc9b
5
+ SHA512:
6
+ metadata.gz: 09747a1de07f1058926963ae5512817556839bb4cf5d3cdb6016828d9d11ae7d3c67bef68713619f8244dacb4ec14fd6166904fe20c26463a3c78d2638e20f54
7
+ data.tar.gz: 4b322ae49f4118171a67fb8cb0216706ea9a6452abecaf10362a1817cbd553792932c3c3ac207e2c6632959367d24004048eb9e03a41e75dc72b44a9006f3334
@@ -0,0 +1,138 @@
1
+ require 'google/api_client'
2
+
3
+ class CloudStorage
4
+
5
+ def initialize(opts = {})
6
+ @client = Google::APIClient.new(
7
+ :application_name => opts['application_name'],
8
+ :application_version => opts['application_version']
9
+ )
10
+
11
+ key = Google::APIClient::PKCS12.load_key(
12
+ opts['key'],
13
+ "notasecret"
14
+ )
15
+
16
+ @client.authorization = Signet::OAuth2::Client.new(
17
+ :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
18
+ :audience => 'https://accounts.google.com/o/oauth2/token',
19
+ :scope => "https://www.googleapis.com/auth/devstorage.full_control",
20
+ :issuer => opts['service_email'],
21
+ :signing_key => key
22
+ )
23
+
24
+ refresh_auth
25
+
26
+ @cs = @client.discovered_api("storage", "v1beta2")
27
+
28
+ @project = opts['project']
29
+ @bucket = opts['bucket']
30
+ end
31
+
32
+ def buckets
33
+ resp = api({
34
+ :api_method => @cs.buckets.list
35
+ })
36
+ items_to_array(resp['items'])
37
+ end
38
+
39
+ def list_bucket_contents(bucket_name = @bucket)
40
+ resp = api({
41
+ :api_method => @cs.objects.list,
42
+ :parameters => {
43
+ "bucket" => bucket_name
44
+ }
45
+ })
46
+ items_to_array(resp['items'])
47
+ end
48
+
49
+ def get_bucket(bucket_name = @bucket)
50
+ resp = api({
51
+ :api_method => @cs.buckets.get,
52
+ :parameters => {
53
+ 'bucket' => bucket_name
54
+ }
55
+ })
56
+ resp['error'] ? nil : "gs://#{bucket_name}/"
57
+ end
58
+
59
+ def create_bucket(bucket_name)
60
+ bucket = get_bucket(bucket_name)
61
+ return bucket if bucket
62
+ resp = api({
63
+ :api_method => @cs.buckets.insert,
64
+ :body_object => {
65
+ "name" => bucket_name
66
+ }
67
+
68
+ })
69
+ "gs://#{bucket_name}/" unless resp['error']
70
+ end
71
+
72
+ def delete_bucket(bucket_name)
73
+ api({
74
+ :api_method => @cs.buckets.delete,
75
+ :parameters => {
76
+ "bucket" => bucket_name
77
+ }
78
+ })
79
+ end
80
+
81
+ def post_object_default_bucket(local_file, content_type, cs_file_name = nil)
82
+ if @bucket.nil? then return "Default bucket not specified" end
83
+ post_object(@bucket, local_file, content_type, cs_file_name)
84
+ end
85
+
86
+ def post_object(bucket_name, local_file, content_type, cs_file_name = nil)
87
+ cs_file_name ||= File.basename(local_file)
88
+ bucket = create_bucket(bucket_name)
89
+ if bucket.nil? then return "Unable to find or create bucket. Please check the bucket name and try again" end
90
+ media = Google::APIClient::UploadIO.new(local_file, content_type)
91
+ resp = api({
92
+ :api_method => @cs.objects.insert,
93
+ :media => media,
94
+ :parameters => {
95
+ "bucket" => bucket_name,
96
+ "uploadType" => "resumable",
97
+ "name" => cs_file_name
98
+ },
99
+ :body_object => {"contentType" => content_type}
100
+ })
101
+ "#{bucket}#{cs_file_name}"
102
+ end
103
+
104
+ def delete_object(bucket_name, object_name)
105
+ api({
106
+ :api_method => @cs.objects.delete,
107
+ :parameters => {
108
+ "bucket" => bucket_name,
109
+ "object" => object_name
110
+ }
111
+ })
112
+ end
113
+
114
+ def refresh_auth
115
+ @client.authorization.fetch_access_token!
116
+ end
117
+
118
+ private
119
+
120
+ def api(opts)
121
+ if opts[:parameters]
122
+ opts[:parameters] = opts[:parameters].merge({"project" => @project})
123
+ else
124
+ opts[:parameters] = {"project" => @project}
125
+ end
126
+ resp = @client.execute(opts)
127
+ JSON.parse(resp.body) if resp.body
128
+ end
129
+
130
+ def items_to_array(items)
131
+ contents = []
132
+ items.each do |item|
133
+ contents << item['name']
134
+ end
135
+ contents
136
+ end
137
+
138
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudstorage
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jordan Keyes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: google-api-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
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
+ description: |-
56
+ CloudStorage is a wrapper around the Google api client ruby gem designed to make interacting with Google Cloud Storage
57
+ easier, without having to install the command line gsutil tool.
58
+ email:
59
+ - jordan.keyes@perceptivesoftware.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - lib/cloudstorage.rb
65
+ homepage:
66
+ licenses:
67
+ - 3-Clause BSD
68
+ metadata: {}
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project:
85
+ rubygems_version: 2.1.11
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: Google api client ruby gem for Cloud Storage access
89
+ test_files: []