azure-storage-file 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4b5e6e5e6a79df45e30ec4813dc7f19c511311a2
4
+ data.tar.gz: be5abc0d0649ebe815fbd18ee1b4ee68f2176646
5
+ SHA512:
6
+ metadata.gz: 658bbf8a037b31b1af0cef6e23e9e59ed3d9e586fd66a99d86573434df08541f8c47fbad92c0a3ed0362fced3149829f3871e112ca75d1e9a6b24ed821e39c5d
7
+ data.tar.gz: a54038b764f95c94a8ce8892bbbac281148edc52e2a6cadccf8686b30e036b94fdaf5d1bca410c5816695b6823c62b29c2a049fa3f2eb24613845b564343d2cb
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+ require "azure/storage/file/autoload"
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+
27
+ require "rubygems"
28
+ require "nokogiri"
29
+ require "base64"
30
+
31
+ require "azure/storage/common"
32
+
33
+ module Azure
34
+ module Storage
35
+ module File
36
+ autoload :Default, "azure/storage/file/default"
37
+ autoload :Version, "azure/storage/file/version"
38
+ autoload :FileService, "azure/storage/file/file_service"
39
+ autoload :Share, "azure/storage/file/share"
40
+ autoload :Directory, "azure/storage/file/directory"
41
+ autoload :File, "azure/storage/file/file"
42
+ autoload :Serialization, "azure/storage/file/serialization"
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+
27
+ require "rbconfig"
28
+ require "azure/storage/file/version"
29
+
30
+ module Azure::Storage::File
31
+ module Default
32
+ # Default REST service (STG) version number
33
+ STG_VERSION = "2016-05-31"
34
+
35
+ # The number of default concurrent requests for parallel operation.
36
+ DEFAULT_PARALLEL_OPERATION_THREAD_COUNT = 1
37
+
38
+ # Constant representing a kilobyte (Non-SI version).
39
+ KB = 1024
40
+ # Constant representing a megabyte (Non-SI version).
41
+ MB = 1024 * 1024
42
+ # Constant representing a gigabyte (Non-SI version).
43
+ GB = 1024 * 1024 * 1024
44
+
45
+ # Specifies HTTP.
46
+ HTTP = "http"
47
+ # Specifies HTTPS.
48
+ HTTPS = "https"
49
+ # Default HTTP port.
50
+ DEFAULT_HTTP_PORT = 80
51
+ # Default HTTPS port.
52
+ DEFAULT_HTTPS_PORT = 443
53
+
54
+ # Marker for atom metadata.
55
+ XML_METADATA_MARKER = "$"
56
+ # Marker for atom value.
57
+ XML_VALUE_MARKER = "_"
58
+
59
+ # Default value for Content-Type if request has body.
60
+ CONTENT_TYPE_VALUE = "application/octet-stream"
61
+
62
+ # Default User Agent header string
63
+ USER_AGENT = "Azure-Storage/#{Azure::Storage::File::Version.to_uas}-#{Azure::Storage::Common::Version.to_uas} (Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}; #{Azure::Storage::Common::Default.os})".freeze
64
+ end
65
+
66
+ # Defines constants for use with file operations.
67
+ module FileConstants
68
+ # The default write size, in bytes, used by file streams.
69
+ DEFAULT_WRITE_SIZE_IN_BYTES = 4 * 1024 * 1024
70
+
71
+ # The maximum range size when requesting for a contentMD5.
72
+ MAX_RANGE_GET_SIZE_WITH_MD5 = 4 * 1024 * 1024
73
+
74
+ # The maximum range size for a file update operation.
75
+ MAX_UPDATE_FILE_SIZE = 4 * 1024 * 1024
76
+
77
+ # The default minimum size, in bytes, of a file when it must be separated into ranges.
78
+ DEFAULT_SINGLE_FILE_GET_THRESHOLD_IN_BYTES = 32 * 1024 * 1024
79
+
80
+ # The minimum write file size, in bytes, used by file streams.
81
+ MIN_WRITE_FILE_SIZE_IN_BYTES = 2 * 1024 * 1024
82
+
83
+ # Put range write options
84
+ module RangeWriteOptions
85
+ UPDATE = "update"
86
+ CLEAR = "clear"
87
+ end
88
+
89
+ # Resource types.
90
+ module ResourceTypes
91
+ SHARE = "s"
92
+ FILE = "f"
93
+ end
94
+ end
95
+
96
+ module FileErrorCodeStrings
97
+ SHARE_ALREADY_EXISTS = "ShareAlreadyExists"
98
+ SHARE_NOT_FOUND = "ShareNotFound"
99
+ FILE_NOT_FOUND = "FileNotFound"
100
+ end
101
+ end
@@ -0,0 +1,284 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+ require "azure/storage/file/serialization"
27
+
28
+ module Azure::Storage::File
29
+ StorageService = Azure::Storage::Common::Service::StorageService
30
+ module Directory
31
+ include Azure::Storage::Common::Service
32
+
33
+ class Directory
34
+ def initialize
35
+ @properties = {}
36
+ @metadata = {}
37
+ yield self if block_given?
38
+ end
39
+
40
+ attr_accessor :name
41
+ attr_accessor :properties
42
+ attr_accessor :metadata
43
+ end
44
+ end
45
+
46
+ # Public: Get a list of files or directories under the specified share or directory.
47
+ # It lists the contents only for a single level of the directory hierarchy.
48
+ #
49
+ # ==== Attributes
50
+ #
51
+ # * +share+ - String. The name of the file share.
52
+ # * +directory_path+ - String. The path to the directory.
53
+ # * +options+ - Hash. Optional parameters.
54
+ #
55
+ # ==== Options
56
+ #
57
+ # Accepted key/value pairs in options parameter are:
58
+ #
59
+ # * +:prefix+ - String. Filters the results to return only directories and files
60
+ # whose name begins with the specified prefix. (optional)
61
+ # * +:marker+ - String. An identifier the specifies the portion of the
62
+ # list to be returned. This value comes from the property
63
+ # Azure::Storage::Common::EnumerationResults.continuation_token when there
64
+ # are more shares available than were returned. The
65
+ # marker value may then be used here to request the next set
66
+ # of list items. (optional)
67
+ #
68
+ # * +:max_results+ - Integer. Specifies the maximum number of shares to return.
69
+ # If max_results is not specified, or is a value greater than
70
+ # 5,000, the server will return up to 5,000 items. If it is set
71
+ # to a value less than or equal to zero, the server will return
72
+ # status code 400 (Bad Request). (optional)
73
+ #
74
+ # * +:timeout+ - Integer. A timeout in seconds.
75
+ #
76
+ # * +:request_id+ - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded
77
+ # in the analytics logs when storage analytics logging is enabled.
78
+ #
79
+ # * +:location_mode+ - LocationMode. Specifies the location mode used to decide
80
+ # which location the request should be sent to.
81
+ #
82
+ # See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/list-directories-and-files
83
+ #
84
+ # Returns an Azure::Storage::Common::EnumerationResults
85
+ #
86
+ def list_directories_and_files(share, directory_path, options = {})
87
+ query = { "comp" => "list" }
88
+ unless options.nil?
89
+ StorageService.with_query query, "marker", options[:marker]
90
+ StorageService.with_query query, "maxresults", options[:max_results].to_s if options[:max_results]
91
+ StorageService.with_query query, "timeout", options[:timeout].to_s if options[:timeout]
92
+ StorageService.with_query query, "prefix", options[:prefix].to_s if options[:prefix]
93
+ end
94
+
95
+ options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
96
+ uri = directory_uri(share, directory_path, query, options)
97
+ response = call(:get, uri, nil, {}, options)
98
+
99
+ # Result
100
+ if response.success?
101
+ Serialization.directories_and_files_enumeration_results_from_xml(response.body)
102
+ else
103
+ response.exception
104
+ end
105
+ end
106
+
107
+ # Public: Create a new directory
108
+ #
109
+ # ==== Attributes
110
+ #
111
+ # * +share+ - String. The name of the file share.
112
+ # * +directory_path+ - String. The path to the directory.
113
+ # * +options+ - Hash. Optional parameters.
114
+ #
115
+ # ==== Options
116
+ #
117
+ # Accepted key/value pairs in options parameter are:
118
+ # * +:metadata+ - Hash. User defined metadata for the share (optional).
119
+ # * +:timeout+ - Integer. A timeout in seconds.
120
+ # * +:request_id+ - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded
121
+ # in the analytics logs when storage analytics logging is enabled.
122
+ #
123
+ # See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/create-directory
124
+ #
125
+ # Returns a Directory
126
+ def create_directory(share, directory_path, options = {})
127
+ # Query
128
+ query = {}
129
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
130
+
131
+ # Scheme + path
132
+ uri = directory_uri(share, directory_path, query)
133
+
134
+ # Headers
135
+ headers = {}
136
+ StorageService.add_metadata_to_headers(options[:metadata], headers) if options[:metadata]
137
+
138
+ # Call
139
+ response = call(:put, uri, nil, headers, options)
140
+
141
+ # result
142
+ directory = Serialization.directory_from_headers(response.headers)
143
+ directory.name = directory_path
144
+ directory.metadata = options[:metadata] if options[:metadata]
145
+ directory
146
+ end
147
+
148
+ # Public: Returns all system properties for the specified directory,
149
+ # and can also be used to check the existence of a directory.
150
+ # The data returned does not include the files in the directory or any subdirectories.
151
+ #
152
+ # ==== Attributes
153
+ #
154
+ # * +share+ - String. The name of the file share.
155
+ # * +directory_path+ - String. The path to the directory.
156
+ # * +options+ - Hash. Optional parameters.
157
+ #
158
+ # ==== Options
159
+ #
160
+ # Accepted key/value pairs in options parameter are:
161
+ # * +:timeout+ - Integer. A timeout in seconds.
162
+ # * +:request_id+ - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded
163
+ # in the analytics logs when storage analytics logging is enabled.
164
+ # * +:location_mode+ - LocationMode. Specifies the location mode used to decide
165
+ # which location the request should be sent to.
166
+ #
167
+ # See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-directory-properties
168
+ #
169
+ # Returns a Directory
170
+ def get_directory_properties(share, directory_path, options = {})
171
+ # Query
172
+ query = {}
173
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
174
+
175
+ # Call
176
+ options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
177
+ response = call(:get, directory_uri(share, directory_path, query, options), nil, {}, options)
178
+
179
+ # result
180
+ directory = Serialization.directory_from_headers(response.headers)
181
+ directory.name = directory_path
182
+ directory
183
+ end
184
+
185
+ # Public: Deletes a directory.
186
+ #
187
+ # ==== Attributes
188
+ #
189
+ # * +share+ - String. The name of the file share.
190
+ # * +directory_path+ - String. The path to the directory.
191
+ # * +options+ - Hash. Optional parameters.
192
+ #
193
+ # ==== Options
194
+ #
195
+ # Accepted key/value pairs in options parameter are:
196
+ # * +:timeout+ - Integer. A timeout in seconds.
197
+ # * +:request_id+ - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded
198
+ # in the analytics logs when storage analytics logging is enabled.
199
+ #
200
+ # See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/delete-directory
201
+ #
202
+ # Returns nil on success
203
+ def delete_directory(share, directory_path, options = {})
204
+ # Query
205
+ query = {}
206
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
207
+
208
+ # Call
209
+ call(:delete, directory_uri(share, directory_path, query), nil, {}, options)
210
+
211
+ # result
212
+ nil
213
+ end
214
+
215
+ # Public: Returns only user-defined metadata for the specified directory.
216
+ #
217
+ # ==== Attributes
218
+ #
219
+ # * +share+ - String. The name of the file share.
220
+ # * +directory_path+ - String. The path to the directory.
221
+ # * +options+ - Hash. Optional parameters.
222
+ #
223
+ # ==== Options
224
+ #
225
+ # Accepted key/value pairs in options parameter are:
226
+ # * +:timeout+ - Integer. A timeout in seconds.
227
+ # * +:request_id+ - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded
228
+ # in the analytics logs when storage analytics logging is enabled.
229
+ # * +:location_mode+ - LocationMode. Specifies the location mode used to decide
230
+ # which location the request should be sent to.
231
+ #
232
+ # See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-directory-metadata
233
+ #
234
+ # Returns a Directory
235
+ def get_directory_metadata(share, directory_path, options = {})
236
+ # Query
237
+ query = { "comp" => "metadata" }
238
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
239
+
240
+ # Call
241
+ options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
242
+ response = call(:get, directory_uri(share, directory_path, query, options), nil, {}, options)
243
+
244
+ # result
245
+ directory = Serialization.directory_from_headers(response.headers)
246
+ directory.name = directory_path
247
+ directory
248
+ end
249
+
250
+ # Public: Sets custom metadata for the directory.
251
+ #
252
+ # ==== Attributes
253
+ #
254
+ # * +share+ - String. The name of the file share.
255
+ # * +directory_path+ - String. The path to the directory.
256
+ # * +metadata+ - Hash. A Hash of the metadata values.
257
+ # * +options+ - Hash. Optional parameters.
258
+ #
259
+ # ==== Options
260
+ #
261
+ # Accepted key/value pairs in options parameter are:
262
+ # * +:timeout+ - Integer. A timeout in seconds.
263
+ # * +:request_id+ - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded
264
+ # in the analytics logs when storage analytics logging is enabled.
265
+ #
266
+ # See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-directory-metadata
267
+ #
268
+ # Returns nil on success
269
+ def set_directory_metadata(share, directory_path, metadata, options = {})
270
+ # Query
271
+ query = { "comp" => "metadata" }
272
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
273
+
274
+ # Headers
275
+ headers = {}
276
+ StorageService.add_metadata_to_headers(metadata, headers) if metadata
277
+
278
+ # Call
279
+ call(:put, directory_uri(share, directory_path, query), nil, headers, options)
280
+
281
+ # Result
282
+ nil
283
+ end
284
+ end