selectel-s3 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ddacd577764847becd5f4a1f11acec031fce8e54d4662e89fcecb24ae754918a
4
- data.tar.gz: 6420fd2dacce76fe259a20cd829d98e63c7ae7d20666005e16956f11ea6cb214
3
+ metadata.gz: ab9ee0337a902fdae56999da5a3510e709be2c467c60a6cefc4db29620fe6b07
4
+ data.tar.gz: 4a4218a448377b33265ecc8357c01eb7dfc177e35dd876d35395363d010031b8
5
5
  SHA512:
6
- metadata.gz: 23322c724674d5ebdc2a85579b11ea8064613a9798cbdf7a41bd2971a353aae15c8a65baad3bffd994f26d186aa297b0262f50765b572342a7ceb82319537157
7
- data.tar.gz: bff40268dc0d4b4e6de6244859f5041016c0ab09454283e59b5740cc61baa3479b4334b76d19dff83a677d2b49a81a2c947390550018f6201de6ea9acbbdd48f
6
+ metadata.gz: 1a917427b6ce122f4b755eb0049efc4f93962bb6f976b7f21fa9c47c6efe35757483bcbf6618234e60e18964d720e1e36604de5af1b874f275f6e534572d88e7
7
+ data.tar.gz: 982fd09909787f4cfee248ae0e2de9a3bf6cd67629d933de16a844e674f16c67a6550584246043ba42288cdd30651c9ac676d5ed80114b774ac302dd923f6a0d
@@ -0,0 +1,50 @@
1
+ require 'aws-sdk-s3'
2
+ require 'selectel/s3/uploader'
3
+
4
+ module Selectel
5
+ module S3
6
+ class LocalFolder
7
+ def initialize(path)
8
+ @path = File.expand_path(path)
9
+ @s3_resource = Aws::S3::Resource.new(
10
+ region: config.region, access_key_id: config.access_key_id,
11
+ secret_access_key: config.secret_access_key, endpoint: config.endpoint
12
+ )
13
+ end
14
+
15
+ def synchronize(container_name, remote_path)
16
+ objects = s3_resource.bucket(container_name).objects
17
+ uploader = Uploader.new(container_name)
18
+ started_at = Time.now
19
+
20
+ hashed_objects = objects.each_with_object({}) { |object, result| result[object.key] = object }
21
+
22
+ fetch_all_files.each do |file_path|
23
+ object_key = file_path.sub(path, remote_path)
24
+
25
+ if hashed_objects.key?(object_key)
26
+ hashed_objects.delete(object_key)
27
+ else
28
+ uploader.upload_file(file_path, object_key)
29
+ end
30
+ end
31
+
32
+ hashed_objects.values.each(&:delete)
33
+
34
+ puts "Synchronized for #{ Time.now - started_at } seconds"
35
+ end
36
+
37
+ private
38
+
39
+ attr_reader :path, :s3_resource
40
+
41
+ def fetch_all_files
42
+ Dir["#{ path }/**/*"].select { |object_path| File.file?(object_path) }
43
+ end
44
+
45
+ def config
46
+ @config ||= S3.configuration
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,5 +1,5 @@
1
1
  module Selectel
2
2
  module S3
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selectel-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - skrinits
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2021-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-s3
@@ -86,6 +86,7 @@ files:
86
86
  - bin/setup
87
87
  - lib/selectel/s3.rb
88
88
  - lib/selectel/s3/configuration.rb
89
+ - lib/selectel/s3/local_folder.rb
89
90
  - lib/selectel/s3/uploader.rb
90
91
  - lib/selectel/s3/version.rb
91
92
  - selectel-s3.gemspec