gooddata_s3 0.0.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47dc8e87e10d925ec00de09f149f1d0199394220
4
- data.tar.gz: 5ad2f2bd5018e53e61f1c7fcefe05b5a9e147fc2
3
+ metadata.gz: 086dbc09b0f9d03a30918f41b7ad26747d05c9f3
4
+ data.tar.gz: 561f7abcacc1d31e3b0816b06946ac9913743a93
5
5
  SHA512:
6
- metadata.gz: bcdec9ce0d4afe77d01e06d13bbf27691ae0f371882b8ba0475278a6b3f46d63897f89c38652546509b2a09fe72febd7d733e973f565e260697b84c7f51cab14
7
- data.tar.gz: 0078fc39f87e1454b077118927dfba674c55c6b926a33b1a88671d4ade4fc73c99e993785cc7d3cabd583013369214e2b11a39bc23d050ed573968cf7041deaf
6
+ metadata.gz: 2505025053c35f23d24c7faa2ec3fd6b2a71d4509dd71007364aa54d1b69266f80955db6ac46210548dfb4645dd201cbd114f334d2a83e955fe905cfcc26879a
7
+ data.tar.gz: 743811f9ab12f52fb2721cf1113c43994189da88ce590459c0f513390746fe13db391ddf8683efd1d21cb967bb0fdbefffe047678777378f6d62f8840da3dac3
@@ -1,17 +1,26 @@
1
1
  require 'json'
2
- require 'pry'
3
2
  require 'aws-sdk'
3
+ require 'fileutils'
4
+ require 'securerandom'
5
+
6
+ require_relative 'models/buckets'
4
7
 
5
8
  class GoodDataS3::Client
6
9
 
7
10
  attr_accessor :bucket_name
8
11
  attr_accessor :bucket
12
+ attr_accessor :directories
13
+
14
+ alias :directory :directories
9
15
 
10
16
  def initialize config = {}
11
17
 
12
18
  public_key = config[:public_key]
13
19
  private_key = config[:private_key] || config[:secret_key]
14
- self.bucket_name = config[:bucket] || 'gooddata_connector'
20
+ proposed_bucket = S3Bucket.new(config[:bucket] || 'gooddata_connector')
21
+
22
+ @bucket_name = proposed_bucket.name
23
+ @directories = proposed_bucket.directories
15
24
 
16
25
  AWS.config(:access_key_id => public_key, :secret_access_key => private_key)
17
26
 
@@ -25,6 +34,11 @@ class GoodDataS3::Client
25
34
  bucket = bucket_exists
26
35
  end
27
36
 
37
+ puts "#{Time.now} => Connected to S3 Bucket: \"#{@bucket_name}\""
38
+ unless @directories.empty?
39
+ puts "#{Time.now} => Assigned default directory location: \"#{@directories.join('/')}\""
40
+ end
41
+
28
42
  raise 'ERROR! :public_key, :private_key must be passed for configuration.' unless public_key && private_key
29
43
 
30
44
  end
@@ -39,22 +53,85 @@ class GoodDataS3::Client
39
53
  end
40
54
  end
41
55
 
42
- def upload file
43
- puts "#{Time.now} => Uploading:S3_Bucket#{@bucket_name}: \"#{file}\""
56
+ def upload file_path, config = {}
57
+
58
+ if File.exists? file_path
59
+
60
+ if @directories.empty?
61
+ directory = config[:directory] || ''
62
+ else
63
+ puts "#{Time.now} => Using default directory \"#{@directories.join('/')}\""
64
+ directory = @directories.join('/')
65
+ end
66
+
67
+ puts local_file = file_path.split('/')[-1]
68
+
69
+ else
70
+
71
+ statement = file_path.split('/')
72
+ local_file = statement.pop
73
+
74
+ if @directories.empty?
75
+ directory = statement.join('/')
76
+ else
77
+ puts "#{Time.now} => Using default directory \"#{@directories.join('/')}\""
78
+ default_directory = @directories.join('/')
79
+ directory = default_directory+"/"+statement.join('/')
80
+ end
81
+
82
+ end
83
+
84
+ raise 'Could not find local file...' unless File.exists? local_file
85
+
86
+ key = directory+"/"+local_file
87
+
88
+ puts "#{Time.now} => Uploading local file \"#{local_file}\" to S3 Bucket \"#{@bucket_name}\" (\"#{key}\")"
89
+ resp = @s3.put_object(
90
+ data: IO.read(local_file),
91
+ bucket_name: @bucket_name,
92
+ key: key
93
+ )
94
+ end
95
+
96
+ def create_directory name
44
97
  resp = @s3.put_object(
45
- data: IO.read(file),
98
+ data:'',
46
99
  bucket_name: @bucket_name,
47
- key: file
100
+ key: name
48
101
  )
49
102
  end
50
103
 
51
- def download file
104
+ def download file_path, config ={}
105
+
52
106
  begin
53
- puts "#{Time.now} => Downloading:S3_Bucket#{@bucket_name}: \"#{file}\""
54
- resp = @s3.get_object(bucket_name: @bucket_name, key:file)
107
+
108
+ if @directories.any?
109
+ puts "#{Time.now} => Using default directory \"#{@directories.join('/')}\""
110
+
111
+ statement = file_path.split('/')
112
+ local_file = statement.pop
113
+ directory = @directories.join('/')
114
+ key = directory+"/"+statement.join('/')+"/"+local_file
115
+
116
+ elsif @directories.empty?
117
+
118
+ directory = config[:directory] || ''
119
+ key = directory+file_path
120
+
121
+ else
122
+
123
+ key = file_path
124
+
125
+ end
126
+
127
+ puts "#{Time.now} => Downloading from S3 Bucket (#{@bucket_name}): \"#{key}\""
128
+
129
+ resp = @s3.get_object(bucket_name: @bucket_name, key:key)
55
130
  resp[:data]
56
- rescue
57
- nil
131
+
132
+ rescue Exception => exp
133
+ puts exp
134
+
58
135
  end
59
136
  end
60
137
 
@@ -134,9 +211,40 @@ class GoodDataS3::Client
134
211
 
135
212
  alias :include? :exists?
136
213
 
137
- def delete file
138
- @s3.delete_object(bucket_name: @bucket_name, key: file)
214
+ def delete file_path
215
+
216
+ begin
217
+
218
+ if @directories.any?
219
+ puts "#{Time.now} => Using default directory \"#{@directories.join('/')}\""
220
+
221
+ statement = file_path.split('/')
222
+ local_file = statement.pop
223
+ directory = @directories.join('/')
224
+ key = directory+"/"+statement.join('/')+"/"+local_file
225
+
226
+ elsif @directories.empty?
227
+
228
+ directory = config[:directory] || ''
229
+ key = directory+file_path
230
+
231
+ else
232
+
233
+ key = file_path
234
+
235
+ end
236
+
237
+ puts "#{Time.now} => Deleting from S3 Bucket (#{@bucket_name}): \"#{key}\""
238
+ @s3.delete_object(bucket_name: @bucket_name, key: key)
239
+
240
+ rescue Exception => exp
241
+ puts exp
242
+
243
+ end
244
+
245
+
139
246
  end
140
247
 
141
248
 
142
249
  end
250
+
@@ -0,0 +1,17 @@
1
+ class S3Bucket
2
+ attr_accessor :name
3
+ attr_accessor :directories
4
+
5
+ def initialize object_string
6
+
7
+ if object_string.include? '/'
8
+ statement = object_string.split('/')
9
+ @name = statement.shift
10
+ @directories = statement
11
+ else
12
+ @name = object_string
13
+ @directories = []
14
+ end
15
+
16
+ end
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gooddata_s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick McConlogue
@@ -88,6 +88,7 @@ extra_rdoc_files: []
88
88
  files:
89
89
  - lib/gooddata_s3.rb
90
90
  - lib/gooddata_s3/client.rb
91
+ - lib/gooddata_s3/models/buckets.rb
91
92
  homepage: https://github.com/thnkr/connectors/tree/master/s3
92
93
  licenses:
93
94
  - MIT