file-manager 0.2.0 → 0.3.0
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 +4 -4
- data/Gemfile.lock +2 -2
- data/file-manager.gemspec +1 -1
- data/lib/file_manager.rb +4 -0
- data/lib/local_file_manager.rb +11 -0
- data/lib/memory_file_manager.rb +9 -0
- data/lib/s3_file_manager.rb +18 -0
- data/test/file_manager_test.rb +14 -0
- data/test/vcr_cassettes/test_downloading_to_temp_file.yml +207 -0
- data/test/vcr_cassettes/test_listing_files.yml +92 -84
- data/test/vcr_cassettes/test_listing_files_in_sub_dir.yml +91 -83
- data/test/vcr_cassettes/test_reading.yml +59 -54
- data/test/vcr_cassettes/test_reading_in_sub_dir.yml +59 -54
- metadata +5 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5b529caed3e2276f2f82062056cfbe2f3db1c46b
         | 
| 4 | 
            +
              data.tar.gz: e58a5c7976cb19b329784fa34ef3ca6dc8ed2d18
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 33882e75cbe545f2b1282bf6bc4a788ce025b1ba64ab44cf8f6ed15fa6aef789ab4887ddef58ac6dd9c2914d997e98fc7b0b8a501fc1e0b2ecb176d0991bb6ae
         | 
| 7 | 
            +
              data.tar.gz: 5cea2792c307170389e2fc39cf690f325016b92c5a94c5f8865104cc8e4c9ea3abd85d15c68342c3632d5d50d736221f452b6bb330fb4802cddbda24c87914f3
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/file-manager.gemspec
    CHANGED
    
    | @@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 3 3 |  | 
| 4 4 | 
             
            Gem::Specification.new do |spec|
         | 
| 5 5 | 
             
              spec.name          = "file-manager"
         | 
| 6 | 
            -
              spec.version       = '0. | 
| 6 | 
            +
              spec.version       = '0.3.0'
         | 
| 7 7 | 
             
              spec.authors       = ["Francisco Barroso / Marlus Saraiva"]
         | 
| 8 8 | 
             
              spec.email         = ["franciscobarroso@grupofortes.com.br"]
         | 
| 9 9 | 
             
              spec.description   = 'File manager, access S3 or local'
         | 
    
        data/lib/file_manager.rb
    CHANGED
    
    
    
        data/lib/local_file_manager.rb
    CHANGED
    
    | @@ -23,6 +23,17 @@ class LocalFileManager < FileManager | |
| 23 23 | 
             
                @logger.puts 'done.'
         | 
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 | 
            +
              def download_to_temp_file(file_name)
         | 
| 27 | 
            +
                @logger.print "Copying local file \"#{file_name}\" to folder \"#{root_path}\"..."
         | 
| 28 | 
            +
                full_file_name = Pathname(File.join(root_path, file_name))
         | 
| 29 | 
            +
                Dir.mktmpdir do |dir|
         | 
| 30 | 
            +
                  temp_file = "#{dir}/#{full_file_name.basename}"
         | 
| 31 | 
            +
                  FileUtils.cp(full_file_name, temp_file)
         | 
| 32 | 
            +
                  yield(temp_file)
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
                @logger.puts 'done.'
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 26 37 | 
             
              def list_files(prefix = '', file_extension = '*')
         | 
| 27 38 | 
             
                FileUtils.mkdir_p(root_path)
         | 
| 28 39 | 
             
                @logger.print "Listing \"#{prefix}*.#{file_extension}\" from local folder \"#{root_path}\"..."
         | 
    
        data/lib/memory_file_manager.rb
    CHANGED
    
    | @@ -23,4 +23,13 @@ class MemoryFileManager < FileManager | |
| 23 23 | 
             
                @data.delete "#{file_name}"
         | 
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 | 
            +
              def download_to_temp_file(file_name)
         | 
| 27 | 
            +
                Dir.mktmpdir do |dir|
         | 
| 28 | 
            +
                  temp_file = "#{dir}/#{Pathname(file_name).basename}"
         | 
| 29 | 
            +
                  content = read_file(file_name)
         | 
| 30 | 
            +
                  File.open(temp_file, 'w') { |file| file.write(content) }
         | 
| 31 | 
            +
                  yield(temp_file)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 26 35 | 
             
            end
         | 
    
        data/lib/s3_file_manager.rb
    CHANGED
    
    | @@ -30,6 +30,19 @@ class S3FileManager < FileManager | |
| 30 30 | 
             
                logger.puts 'done.'
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 | 
            +
              def download_to_temp_file(file_name)
         | 
| 34 | 
            +
                Dir.mktmpdir do |dir|
         | 
| 35 | 
            +
                  @logger.print "Downloading file \"#{bucket_name}/#{file_name}\" to temp folder \"#{dir}\"..."
         | 
| 36 | 
            +
                  temp_file = "#{dir}/#{Pathname(file_name).basename}"
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  s3_client = connect_s3_client
         | 
| 39 | 
            +
                  s3_client.get_object({ bucket: bucket_name, key: file_name }, target: temp_file)
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  yield(temp_file)
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
                logger.puts 'done.'
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 33 46 | 
             
              def list_files(prefix = '', file_extension = '*')
         | 
| 34 47 | 
             
                # objects = []
         | 
| 35 48 | 
             
                # last_key = nil
         | 
| @@ -80,4 +93,9 @@ class S3FileManager < FileManager | |
| 80 93 | 
             
                service
         | 
| 81 94 | 
             
              end
         | 
| 82 95 |  | 
| 96 | 
            +
              def connect_s3_client
         | 
| 97 | 
            +
                credentials = Aws::Credentials.new(options[:access_key_id], options[:secret_access_key])
         | 
| 98 | 
            +
                Aws::S3::Client.new(region: options[:region], credentials: credentials)
         | 
| 99 | 
            +
              end
         | 
| 100 | 
            +
             | 
| 83 101 | 
             
            end
         | 
    
        data/test/file_manager_test.rb
    CHANGED
    
    | @@ -48,8 +48,22 @@ module FileManagerTest | |
| 48 48 | 
             
                assert_empty @manager.list_files
         | 
| 49 49 | 
             
              end
         | 
| 50 50 |  | 
| 51 | 
            +
             | 
| 51 52 | 
             
              def test_remove_not_existing_file_dont_raise
         | 
| 52 53 | 
             
                assert_empty @manager.list_files
         | 
| 53 54 | 
             
                @manager.delete_file 'sub_dir/saved.*'
         | 
| 54 55 | 
             
              end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              def test_downloading_to_temp_file
         | 
| 58 | 
            +
                @manager.save_file 'temp_file/saved', 'content'
         | 
| 59 | 
            +
                assert_equal 'content', @manager.read_file('temp_file/saved')
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                @manager.download_to_temp_file('temp_file/saved') do |temp_file|
         | 
| 62 | 
            +
                  contents = File.open(temp_file) { |f| f.read }
         | 
| 63 | 
            +
                  assert_equal contents, 'content'
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                @manager.delete_file 'temp_file/saved'
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 55 69 | 
             
            end
         | 
| @@ -0,0 +1,207 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            http_interactions:
         | 
| 3 | 
            +
            - request:
         | 
| 4 | 
            +
                method: put
         | 
| 5 | 
            +
                uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
         | 
| 6 | 
            +
                body:
         | 
| 7 | 
            +
                  encoding: UTF-8
         | 
| 8 | 
            +
                  string: content
         | 
| 9 | 
            +
                headers:
         | 
| 10 | 
            +
                  Content-Type:
         | 
| 11 | 
            +
                  - ''
         | 
| 12 | 
            +
                  Accept-Encoding:
         | 
| 13 | 
            +
                  - ''
         | 
| 14 | 
            +
                  User-Agent:
         | 
| 15 | 
            +
                  - aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
         | 
| 16 | 
            +
                  Expect:
         | 
| 17 | 
            +
                  - 100-continue
         | 
| 18 | 
            +
                  Content-Md5:
         | 
| 19 | 
            +
                  - mgNkuembtIDdJeHwKEyFVQ==
         | 
| 20 | 
            +
                  X-Amz-Date:
         | 
| 21 | 
            +
                  - 20170905T193111Z
         | 
| 22 | 
            +
                  Host:
         | 
| 23 | 
            +
                  - file-manager-tests.s3-us-west-2.amazonaws.com
         | 
| 24 | 
            +
                  X-Amz-Content-Sha256:
         | 
| 25 | 
            +
                  - ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73
         | 
| 26 | 
            +
                  Authorization:
         | 
| 27 | 
            +
                  - AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
         | 
| 28 | 
            +
                    SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date, Signature=77b5ca0c733dca9e50fa94641c075eb003cc5f48828806021d91383003b121c2
         | 
| 29 | 
            +
                  Content-Length:
         | 
| 30 | 
            +
                  - '7'
         | 
| 31 | 
            +
                  Accept:
         | 
| 32 | 
            +
                  - "*/*"
         | 
| 33 | 
            +
              response:
         | 
| 34 | 
            +
                status:
         | 
| 35 | 
            +
                  code: 200
         | 
| 36 | 
            +
                  message: OK
         | 
| 37 | 
            +
                headers:
         | 
| 38 | 
            +
                  X-Amz-Id-2:
         | 
| 39 | 
            +
                  - ThrCrHLPq67iKa3zU+BSgqEJ9qqNz636LiISvezfUKVARKmV+3mE400nDn0IEVEKdrB5CKgKBIg=
         | 
| 40 | 
            +
                  X-Amz-Request-Id:
         | 
| 41 | 
            +
                  - EA7AABC0E1F7C52C
         | 
| 42 | 
            +
                  Date:
         | 
| 43 | 
            +
                  - Tue, 05 Sep 2017 19:31:12 GMT
         | 
| 44 | 
            +
                  Etag:
         | 
| 45 | 
            +
                  - '"9a0364b9e99bb480dd25e1f0284c8555"'
         | 
| 46 | 
            +
                  Content-Length:
         | 
| 47 | 
            +
                  - '0'
         | 
| 48 | 
            +
                  Server:
         | 
| 49 | 
            +
                  - AmazonS3
         | 
| 50 | 
            +
                body:
         | 
| 51 | 
            +
                  encoding: UTF-8
         | 
| 52 | 
            +
                  string: ''
         | 
| 53 | 
            +
                http_version: 
         | 
| 54 | 
            +
              recorded_at: Tue, 05 Sep 2017 19:31:12 GMT
         | 
| 55 | 
            +
            - request:
         | 
| 56 | 
            +
                method: get
         | 
| 57 | 
            +
                uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
         | 
| 58 | 
            +
                body:
         | 
| 59 | 
            +
                  encoding: ASCII-8BIT
         | 
| 60 | 
            +
                  string: ''
         | 
| 61 | 
            +
                headers:
         | 
| 62 | 
            +
                  Content-Type:
         | 
| 63 | 
            +
                  - ''
         | 
| 64 | 
            +
                  Accept-Encoding:
         | 
| 65 | 
            +
                  - ''
         | 
| 66 | 
            +
                  User-Agent:
         | 
| 67 | 
            +
                  - aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
         | 
| 68 | 
            +
                  X-Amz-Date:
         | 
| 69 | 
            +
                  - 20170905T193112Z
         | 
| 70 | 
            +
                  Host:
         | 
| 71 | 
            +
                  - file-manager-tests.s3-us-west-2.amazonaws.com
         | 
| 72 | 
            +
                  X-Amz-Content-Sha256:
         | 
| 73 | 
            +
                  - e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
         | 
| 74 | 
            +
                  Authorization:
         | 
| 75 | 
            +
                  - AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
         | 
| 76 | 
            +
                    SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=d77b195464c76daf6a4e0c2d081e9011886a7fe30d5e9eba1fb80bb77568a8fe
         | 
| 77 | 
            +
                  Content-Length:
         | 
| 78 | 
            +
                  - '0'
         | 
| 79 | 
            +
                  Accept:
         | 
| 80 | 
            +
                  - "*/*"
         | 
| 81 | 
            +
              response:
         | 
| 82 | 
            +
                status:
         | 
| 83 | 
            +
                  code: 200
         | 
| 84 | 
            +
                  message: OK
         | 
| 85 | 
            +
                headers:
         | 
| 86 | 
            +
                  X-Amz-Id-2:
         | 
| 87 | 
            +
                  - 9UJ3/6AVPXQ6SLEYwc/+TMoZq0yszEhK1qi8ACLAvyeC8jSy9fBFoWOcvEKwBuLiYPVs8hrOdow=
         | 
| 88 | 
            +
                  X-Amz-Request-Id:
         | 
| 89 | 
            +
                  - 0BE11CB38DBAE349
         | 
| 90 | 
            +
                  Date:
         | 
| 91 | 
            +
                  - Tue, 05 Sep 2017 19:31:14 GMT
         | 
| 92 | 
            +
                  Last-Modified:
         | 
| 93 | 
            +
                  - Tue, 05 Sep 2017 19:31:12 GMT
         | 
| 94 | 
            +
                  Etag:
         | 
| 95 | 
            +
                  - '"9a0364b9e99bb480dd25e1f0284c8555"'
         | 
| 96 | 
            +
                  Accept-Ranges:
         | 
| 97 | 
            +
                  - bytes
         | 
| 98 | 
            +
                  Content-Type:
         | 
| 99 | 
            +
                  - ''
         | 
| 100 | 
            +
                  Content-Length:
         | 
| 101 | 
            +
                  - '7'
         | 
| 102 | 
            +
                  Server:
         | 
| 103 | 
            +
                  - AmazonS3
         | 
| 104 | 
            +
                body:
         | 
| 105 | 
            +
                  encoding: UTF-8
         | 
| 106 | 
            +
                  string: content
         | 
| 107 | 
            +
                http_version: 
         | 
| 108 | 
            +
              recorded_at: Tue, 05 Sep 2017 19:31:13 GMT
         | 
| 109 | 
            +
            - request:
         | 
| 110 | 
            +
                method: get
         | 
| 111 | 
            +
                uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
         | 
| 112 | 
            +
                body:
         | 
| 113 | 
            +
                  encoding: ASCII-8BIT
         | 
| 114 | 
            +
                  string: ''
         | 
| 115 | 
            +
                headers:
         | 
| 116 | 
            +
                  Content-Type:
         | 
| 117 | 
            +
                  - ''
         | 
| 118 | 
            +
                  Accept-Encoding:
         | 
| 119 | 
            +
                  - ''
         | 
| 120 | 
            +
                  User-Agent:
         | 
| 121 | 
            +
                  - aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
         | 
| 122 | 
            +
                  X-Amz-Date:
         | 
| 123 | 
            +
                  - 20170905T193113Z
         | 
| 124 | 
            +
                  Host:
         | 
| 125 | 
            +
                  - file-manager-tests.s3-us-west-2.amazonaws.com
         | 
| 126 | 
            +
                  X-Amz-Content-Sha256:
         | 
| 127 | 
            +
                  - e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
         | 
| 128 | 
            +
                  Authorization:
         | 
| 129 | 
            +
                  - AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
         | 
| 130 | 
            +
                    SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=1256dea399728044ac726831903c6881d13fe35e9b2df7815668a3fb7df1e49c
         | 
| 131 | 
            +
                  Content-Length:
         | 
| 132 | 
            +
                  - '0'
         | 
| 133 | 
            +
                  Accept:
         | 
| 134 | 
            +
                  - "*/*"
         | 
| 135 | 
            +
              response:
         | 
| 136 | 
            +
                status:
         | 
| 137 | 
            +
                  code: 200
         | 
| 138 | 
            +
                  message: OK
         | 
| 139 | 
            +
                headers:
         | 
| 140 | 
            +
                  X-Amz-Id-2:
         | 
| 141 | 
            +
                  - lvcN93Sm1hCQ8hL5G/FVyDs1jBrMBGPLcZ1XFwT8S1LGok6LATTuf7ECp/JdRlsruqynqEPBq/w=
         | 
| 142 | 
            +
                  X-Amz-Request-Id:
         | 
| 143 | 
            +
                  - 776F417270F33D9C
         | 
| 144 | 
            +
                  Date:
         | 
| 145 | 
            +
                  - Tue, 05 Sep 2017 19:31:14 GMT
         | 
| 146 | 
            +
                  Last-Modified:
         | 
| 147 | 
            +
                  - Tue, 05 Sep 2017 19:31:12 GMT
         | 
| 148 | 
            +
                  Etag:
         | 
| 149 | 
            +
                  - '"9a0364b9e99bb480dd25e1f0284c8555"'
         | 
| 150 | 
            +
                  Accept-Ranges:
         | 
| 151 | 
            +
                  - bytes
         | 
| 152 | 
            +
                  Content-Type:
         | 
| 153 | 
            +
                  - ''
         | 
| 154 | 
            +
                  Content-Length:
         | 
| 155 | 
            +
                  - '7'
         | 
| 156 | 
            +
                  Server:
         | 
| 157 | 
            +
                  - AmazonS3
         | 
| 158 | 
            +
                body:
         | 
| 159 | 
            +
                  encoding: UTF-8
         | 
| 160 | 
            +
                  string: content
         | 
| 161 | 
            +
                http_version: 
         | 
| 162 | 
            +
              recorded_at: Tue, 05 Sep 2017 19:31:13 GMT
         | 
| 163 | 
            +
            - request:
         | 
| 164 | 
            +
                method: delete
         | 
| 165 | 
            +
                uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
         | 
| 166 | 
            +
                body:
         | 
| 167 | 
            +
                  encoding: ASCII-8BIT
         | 
| 168 | 
            +
                  string: ''
         | 
| 169 | 
            +
                headers:
         | 
| 170 | 
            +
                  Content-Type:
         | 
| 171 | 
            +
                  - ''
         | 
| 172 | 
            +
                  Accept-Encoding:
         | 
| 173 | 
            +
                  - ''
         | 
| 174 | 
            +
                  User-Agent:
         | 
| 175 | 
            +
                  - aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
         | 
| 176 | 
            +
                  X-Amz-Date:
         | 
| 177 | 
            +
                  - 20170905T193113Z
         | 
| 178 | 
            +
                  Host:
         | 
| 179 | 
            +
                  - file-manager-tests.s3-us-west-2.amazonaws.com
         | 
| 180 | 
            +
                  X-Amz-Content-Sha256:
         | 
| 181 | 
            +
                  - e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
         | 
| 182 | 
            +
                  Authorization:
         | 
| 183 | 
            +
                  - AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
         | 
| 184 | 
            +
                    SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=0f4da92980176e880b3d5c8f837d270c17d4c1a9849aa905650dc073bcb994ac
         | 
| 185 | 
            +
                  Content-Length:
         | 
| 186 | 
            +
                  - '0'
         | 
| 187 | 
            +
                  Accept:
         | 
| 188 | 
            +
                  - "*/*"
         | 
| 189 | 
            +
              response:
         | 
| 190 | 
            +
                status:
         | 
| 191 | 
            +
                  code: 204
         | 
| 192 | 
            +
                  message: No Content
         | 
| 193 | 
            +
                headers:
         | 
| 194 | 
            +
                  X-Amz-Id-2:
         | 
| 195 | 
            +
                  - RGyAFzIbtaWZ6tWxwpay0kziUm4lUDVuopRLLHrwOl79h+IaCit61Q6J2KO3YEtHuPpjaQ2hP54=
         | 
| 196 | 
            +
                  X-Amz-Request-Id:
         | 
| 197 | 
            +
                  - DFEAEC74800C8768
         | 
| 198 | 
            +
                  Date:
         | 
| 199 | 
            +
                  - Tue, 05 Sep 2017 19:31:15 GMT
         | 
| 200 | 
            +
                  Server:
         | 
| 201 | 
            +
                  - AmazonS3
         | 
| 202 | 
            +
                body:
         | 
| 203 | 
            +
                  encoding: UTF-8
         | 
| 204 | 
            +
                  string: ''
         | 
| 205 | 
            +
                http_version: 
         | 
| 206 | 
            +
              recorded_at: Tue, 05 Sep 2017 19:31:14 GMT
         | 
| 207 | 
            +
            recorded_with: VCR 3.0.1
         |