cloudstorage 0.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.
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: []