aliyun-oss-sdk 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +17 -0
  3. data/Gemfile +1 -0
  4. data/README.md +12 -10
  5. data/Rakefile +10 -0
  6. data/aliyun-oss.gemspec +2 -2
  7. data/lib/aliyun/oss.rb +4 -11
  8. data/lib/aliyun/oss/authorization.rb +59 -27
  9. data/lib/aliyun/oss/client.rb +137 -62
  10. data/lib/aliyun/oss/client/bucket_multiparts.rb +43 -0
  11. data/lib/aliyun/oss/client/bucket_objects.rb +111 -0
  12. data/lib/aliyun/oss/client/buckets.rb +50 -0
  13. data/lib/aliyun/oss/client/clients.rb +54 -0
  14. data/lib/aliyun/oss/error.rb +43 -0
  15. data/lib/aliyun/oss/http.rb +65 -23
  16. data/lib/aliyun/oss/struct.rb +26 -0
  17. data/lib/aliyun/oss/struct/bucket.rb +252 -0
  18. data/lib/aliyun/oss/struct/cors.rb +65 -0
  19. data/lib/aliyun/oss/struct/lifecycle.rb +73 -0
  20. data/lib/aliyun/oss/struct/logging.rb +33 -0
  21. data/lib/aliyun/oss/struct/multipart.rb +101 -0
  22. data/lib/aliyun/oss/struct/object.rb +71 -0
  23. data/lib/aliyun/oss/struct/part.rb +48 -0
  24. data/lib/aliyun/oss/struct/referer.rb +21 -0
  25. data/lib/aliyun/oss/struct/website.rb +13 -0
  26. data/lib/aliyun/oss/utils.rb +41 -1
  27. data/lib/aliyun/oss/version.rb +1 -1
  28. data/lib/aliyun/oss/xml_generator.rb +174 -0
  29. data/todo.md +5 -0
  30. data/wiki/bucket.md +20 -20
  31. data/wiki/cors.md +59 -0
  32. data/wiki/error.md +42 -31
  33. data/wiki/get_start.md +24 -7
  34. data/wiki/installation.md +2 -2
  35. data/wiki/lifecycle.md +75 -0
  36. data/wiki/multipart.md +7 -5
  37. data/wiki/object.md +16 -12
  38. metadata +48 -6
  39. data/lib/aliyun/oss/multipart/part.rb +0 -32
  40. data/lib/aliyun/oss/rule/cors.rb +0 -63
  41. data/lib/aliyun/oss/rule/lifecycle.rb +0 -61
@@ -0,0 +1,252 @@
1
+ module Aliyun
2
+ module Oss
3
+ module Struct
4
+ class Bucket < Base
5
+ # Bucket Name
6
+ attr_accessor :name
7
+
8
+ # Bucket Location
9
+ attr_accessor :location
10
+
11
+ # Createion date of Bucket
12
+ attr_accessor :creation_date
13
+
14
+ # reference to client
15
+ attr_accessor :client
16
+
17
+ # Get the location
18
+ #
19
+ # @return [String]
20
+ #
21
+ # @see Client#bucket_get_location
22
+ def location!
23
+ result = client.bucket_get_location.parsed_response
24
+ Utils.dig_value(result, 'LocationConstraint', '__content__')
25
+ end
26
+
27
+ # Get Logging configration for bucket
28
+ #
29
+ # return [true]
30
+ #
31
+ # @see Client#bucket_get_logging
32
+ def logging!
33
+ result = client.bucket_get_logging.parsed_response
34
+ Struct::Logging.new(Utils.dig_value(result, 'BucketLoggingStatus'))
35
+ end
36
+
37
+ # Used to enable access logging.
38
+ #
39
+ # @param (see #bucket_enable_logging)
40
+ #
41
+ # @return [true]
42
+ #
43
+ # @see Client#bucket_enable_logging
44
+ def enable_logging(*args)
45
+ !!client.bucket_enable_logging(*args)
46
+ end
47
+
48
+ # Used to disable access logging.
49
+ #
50
+ # @param (see #bucket_disable_logging)
51
+ #
52
+ # @return [true]
53
+ #
54
+ # @see Client#bucket_disable_logging
55
+ def disable_logging
56
+ !!client.bucket_disable_logging
57
+ end
58
+
59
+ # Get the acl
60
+ #
61
+ # @return [String]
62
+ #
63
+ # @see Client#bucket_get_acl
64
+ def acl!
65
+ result = client.bucket_get_acl.parsed_response
66
+ acl_keys = %w(AccessControlPolicy AccessControlList Grant)
67
+ Utils.dig_value(result, *acl_keys)
68
+ end
69
+
70
+ # Set ACL for bucket
71
+ #
72
+ # @param (see #bucket_set_acl)
73
+ #
74
+ # @raise (see #bucket_set_acl)
75
+ #
76
+ # @return [true]
77
+ #
78
+ # @see Client#bucket_set_acl
79
+ def set_acl(*args)
80
+ !!client.bucket_set_acl(*args)
81
+ end
82
+
83
+ # Get the CORS
84
+ #
85
+ # @return [Array<Aliyun::Oss::Struct::Cors>]
86
+ #
87
+ # @see Client#bucket_get_cors
88
+ def cors!
89
+ result = client.bucket_get_cors.parsed_response
90
+ cors_keys = %w(CORSConfiguration CORSRule)
91
+ Utils.wrap(Utils.dig_value(result, *cors_keys)).map do |cors|
92
+ Struct::Cors.new(cors)
93
+ end
94
+ end
95
+
96
+ # Set CORS for bucket
97
+ #
98
+ # @see (see #bucket_enable_cors)
99
+ #
100
+ # @param (see #bucket_enable_cors)
101
+ #
102
+ # @raise (see #bucket_enable_cors)
103
+ #
104
+ # @return [true]
105
+ #
106
+ # @see Client#bucket_enable_cors
107
+ def enable_cors(*args)
108
+ !!client.bucket_enable_cors(*args)
109
+ end
110
+
111
+ # Disable CORS for bucket
112
+ #
113
+ # @see (see #bucket_disable_cors)
114
+ #
115
+ # @raise (see #bucket_disable_cors)
116
+ #
117
+ # @return [true]
118
+ #
119
+ # @see Client#bucket_disable_cors
120
+ def disable_cors
121
+ !!client.bucket_disable_cors
122
+ end
123
+
124
+ # Get the website configuration
125
+ #
126
+ # @return [Aliyun::Oss::Rule::Website]
127
+ #
128
+ # @see Client#bucket_get_website
129
+ def website!
130
+ result = client.bucket_get_website.parsed_response
131
+ suffix_keys = %w(WebsiteConfiguration IndexDocument Suffix)
132
+ error_keys = %w(WebsiteConfiguration ErrorDocument Key)
133
+ Aliyun::Oss::Struct::Website.new(
134
+ suffix: Utils.dig_value(result, *suffix_keys),
135
+ error_key: Utils.dig_value(result, *error_keys)
136
+ )
137
+ end
138
+
139
+ # Used to enable static website hosted mode.
140
+ #
141
+ # @see (see #bucket_enable_website)
142
+ #
143
+ # @param (see #bucket_enable_website)
144
+ #
145
+ # @raise (see #bucket_enable_website)
146
+ #
147
+ # @return [true]
148
+ #
149
+ # @see Client#bucket_enable_website
150
+ def enable_website(*args)
151
+ !!client.bucket_enable_website(*args)
152
+ end
153
+
154
+ # Used to disable website hostted mode.
155
+ #
156
+ # @see (see #bucket_disable_website)
157
+ #
158
+ # @raise (see #bucket_disable_website)
159
+ #
160
+ # @return [Response]
161
+ #
162
+ # @see Client#bucket_disable_website
163
+ def disable_website
164
+ !!client.bucket_disable_website
165
+ end
166
+
167
+ # Get the referer configuration
168
+ #
169
+ # @return [Aliyun::Oss::Struct::Referer]
170
+ #
171
+ # @see Client#bucket_get_referer
172
+ def referer!
173
+ result = client.bucket_get_referer.parsed_response
174
+ allow_empty = %w(RefererConfiguration AllowEmptyReferer)
175
+ referers = %w(RefererConfiguration RefererList Referer)
176
+ Aliyun::Oss::Struct::Referer.new(
177
+ allow_empty: Utils.dig_value(result, *allow_empty),
178
+ referers: Utils.dig_value(result, *referers)
179
+ )
180
+ end
181
+
182
+ # Used to set referer for bucket.
183
+ #
184
+ # @see (see #bucket_set_referer)
185
+ #
186
+ # @param (see #bucket_set_referer)
187
+ #
188
+ # @raise (see #bucket_set_referer)
189
+ #
190
+ # @return [true]
191
+ #
192
+ # @see Client#set_referer
193
+ def set_referer(*args)
194
+ !!client.bucket_set_referer(*args)
195
+ end
196
+
197
+ # Get the lifecycle configuration
198
+ #
199
+ # @return [Array<Aliyun::Oss::Struct::Lifecycle?]
200
+ #
201
+ # @see Client#bucket_get_lifecycle
202
+ def lifecycle!
203
+ result = client.bucket_get_lifecycle.parsed_response
204
+ lifecycle_keys = %w(LifecycleConfiguration Rule)
205
+ Utils.wrap(Utils.dig_value(result, *lifecycle_keys)).map do |lifecycle|
206
+ Struct::LifeCycle.new(lifecycle)
207
+ end
208
+ end
209
+
210
+ # Used to enable and set lifecycle for bucket
211
+ #
212
+ # @param (see #bucket_enable_lifecycle)
213
+ #
214
+ # @raise (see #bucket_enable_lifecycle)
215
+ #
216
+ # @return [true]
217
+ #
218
+ # @see Client#bucket_enable_lifecycle
219
+ def enable_lifecycle(*args)
220
+ !!client.bucket_enable_lifecycle(*args)
221
+ end
222
+
223
+ # Used to disable lifecycle for bucket
224
+ #
225
+ # @raise (see #bucket_disable_lifecycle)
226
+ #
227
+ # @return [true]
228
+ #
229
+ # @see Client#bucket_disable_lifecycle
230
+ def disable_lifecycle
231
+ !!client.bucket_disable_lifecycle
232
+ end
233
+
234
+ # OPTIONS Object
235
+ #
236
+ # @see (see #bucket_preflight)
237
+ #
238
+ # @param (see #bucket_preflight)
239
+ #
240
+ # @raise (see #bucket_preflight)
241
+ #
242
+ # @return [true]
243
+ #
244
+ # @see Client#bucket_preflight
245
+ def preflight(*args)
246
+ !!client.bucket_preflight(*args)
247
+ end
248
+ alias_method :options, :preflight
249
+ end
250
+ end
251
+ end
252
+ end
@@ -0,0 +1,65 @@
1
+ module Aliyun
2
+ module Oss
3
+ module Struct
4
+ class Cors < Base
5
+ ACCESSPTED_METHODS = %w(GET PUT DELETE POST HEAD)
6
+
7
+ # Set allowed origins. [Array]
8
+ attr_accessor :allowed_origin
9
+
10
+ # Set allowed methods. [Array]
11
+ attr_accessor :allowed_method
12
+
13
+ # Set allowed headers used in preflight (see #bucket_preflight). [Array]
14
+ attr_accessor :allowed_header
15
+
16
+ # Set allowed used response headers for user. [Array]
17
+ attr_accessor :expose_header
18
+
19
+ # Specifies cache time the browser to pre-fetch a particular resource request in seconds. [Integer]
20
+ attr_accessor :max_age_seconds
21
+
22
+ def allowed_origin=(allowed_origin)
23
+ @allowed_origin = Utils.wrap(allowed_origin)
24
+ end
25
+
26
+ def allowed_method=(allowed_method)
27
+ @allowed_method = Utils.wrap(allowed_method)
28
+ .map(&:upcase)
29
+ .select { |method| ACCESSPTED_METHODS.include?(method.to_s) }
30
+ end
31
+
32
+ def allowed_header=(allowed_header)
33
+ @allowed_header = Utils.wrap(allowed_header)
34
+ end
35
+
36
+ def expose_header=(expose_header)
37
+ @expose_header = Utils.wrap(expose_header)
38
+ end
39
+
40
+ def to_hash
41
+ return {} unless valid?
42
+
43
+ attrs = {
44
+ 'AllowedOrigin' => allowed_origin,
45
+ 'AllowedMethod' => allowed_method
46
+ }
47
+ attrs.merge!('AllowedHeader' => allowed_header) if value_present?(allowed_header)
48
+ attrs.merge!('EsposeHeader' => expose_header) if value_present?(expose_header)
49
+ attrs.merge!('MaxAgeSeconds' => max_age_seconds) if max_age_seconds
50
+ attrs
51
+ end
52
+
53
+ def valid?
54
+ value_present?(allowed_origin) && value_present?(allowed_method)
55
+ end
56
+
57
+ private
58
+
59
+ def value_present?(value)
60
+ value && !value.empty?
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,73 @@
1
+ module Aliyun
2
+ module Oss
3
+ module Struct
4
+ class LifeCycle < Base
5
+ # Rule ID, auto set when not set. [String]
6
+ attr_accessor :id
7
+
8
+ # Used for filter objects. [String]
9
+ attr_accessor :prefix
10
+
11
+ # Used for set rule status. [Boolean]
12
+ attr_accessor :enabled
13
+
14
+ # Set auto delete objects after days since last modified, at least exist one with date [Integer]
15
+ attr_accessor :days
16
+
17
+ # Set auto auto delete object at given time, at least exist one with days, [Time]
18
+ attr_accessor :date
19
+
20
+ def status=(status)
21
+ @enabled = (status == 'Enabled')
22
+ end
23
+
24
+ def date=(date)
25
+ @date = date.is_a?(String) ? Time.parse(date) : date
26
+ end
27
+
28
+ def days=(days)
29
+ @days = days.to_i
30
+ end
31
+
32
+ def to_hash
33
+ return {} unless valid?
34
+
35
+ {
36
+ 'ID' => id || '',
37
+ 'Prefix' => prefix,
38
+ 'Status' => status,
39
+ 'Expiration' => expiration
40
+ }
41
+ end
42
+
43
+ def expiration=(expiration)
44
+ return unless expiration.is_a?(Hash)
45
+
46
+ if expiration.key?('Days')
47
+ self.days = expiration['Days']
48
+ elsif expiration.key?('Date')
49
+ self.date = expiration['Date']
50
+ end
51
+ end
52
+
53
+ def valid?
54
+ prefix && (days || date)
55
+ end
56
+
57
+ private
58
+
59
+ def status
60
+ enabled ? 'Enabled' : 'Disabled'
61
+ end
62
+
63
+ def expiration
64
+ if date && date.is_a?(Time)
65
+ { 'Date' => date.utc.strftime('%Y-%m-%dT00:00:00.000Z') }
66
+ elsif days && days.is_a?(Integer)
67
+ { 'Days' => days.to_i }
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,33 @@
1
+ module Aliyun
2
+ module Oss
3
+ module Struct
4
+ class Logging < Base
5
+ # Container for logging information. This element and its children are present when logging is enabled; otherwise, this element and its children are absent.
6
+ attr_accessor :logging_enabled
7
+
8
+ # This element specifies the bucket where server access logs will be delivered.
9
+ attr_accessor :target_bucket
10
+
11
+ # Specifies the prefix for the keys that the log files are being stored for.
12
+ attr_accessor :target_prefix
13
+
14
+ def initialize(attributes = {})
15
+ @logging_enabled = false
16
+ super
17
+ end
18
+
19
+ def logging_enabled=(logging_enabled)
20
+ return @logging_enabled = false unless logging_enabled.is_a?(Hash)
21
+
22
+ if logging_enabled.key?('TargetBucket')
23
+ @target_bucket = logging_enabled['TargetBucket']
24
+ end
25
+ if logging_enabled.key?('TargetPrefix')
26
+ @target_prefix = logging_enabled['TargetPrefix']
27
+ end
28
+ @logging_enabled = true
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,101 @@
1
+ module Aliyun
2
+ module Oss
3
+ module Struct
4
+ class Multipart < Base
5
+ # UUID for the Multipart Upload Event
6
+ attr_accessor :upload_id
7
+
8
+ # Object name of the Multipart Upload Event
9
+ attr_accessor :key
10
+
11
+ # Bucket name of the Multipart Upload Event
12
+ attr_accessor :bucket
13
+
14
+ # Initiation time of the Multipart Upload Event
15
+ attr_accessor :initiated
16
+
17
+ # reference to client
18
+ attr_accessor :client
19
+
20
+ def initiated=(initiated)
21
+ @initiated = Time.parse(initiated)
22
+ end
23
+
24
+ # Upload part to Multipart Upload Event
25
+ #
26
+ # @param number [Integer] the part number, Range in 1~10000.
27
+ # @param file [File, bin data] the upload data
28
+ #
29
+ # @raise (see #bucket_multipart_upload)
30
+ #
31
+ # @return [true]
32
+ def upload(*args)
33
+ !!client.bucket_multipart_upload(*args.unshift(upload_id, key))
34
+ end
35
+
36
+ # Copy exsting object to Multipart Upload Event
37
+ #
38
+ # @param number [Integer] the part number, Range in 1~10000.
39
+ # @param options [Hash] options
40
+ # @option (see #bucket_multipart_copy_upload)
41
+ #
42
+ # @raise (see #bucket_multipart_copy_upload)
43
+ #
44
+ # @return [true]
45
+ #
46
+ # @see Client#bucket_list_parts
47
+ def copy(*args)
48
+ !!client.bucket_multipart_copy_upload(*args.unshift(upload_id, key))
49
+ end
50
+
51
+ # List uploaded parts for the Multipart Upload Event
52
+ #
53
+ # @param options [Hash] options
54
+ # @option (see #bucket_list_parts)
55
+ #
56
+ # @raise (see #bucket_list_parts)
57
+ #
58
+ # @return [Array<Aliyun::Oss::Struct::Part>]
59
+ #
60
+ # @see Client#bucket_list_parts
61
+ def list_parts(options = {})
62
+ result = client.bucket_list_parts(upload_id, key, options)
63
+ .parsed_response
64
+
65
+ parts_keys = %w(ListPartsResult Part)
66
+ Utils.wrap(Utils.dig_value(result, *parts_keys)).map do |part|
67
+ Struct::Part.new(part)
68
+ end
69
+ end
70
+
71
+ # Complete Multipart Upload Event
72
+ #
73
+ # @param parts [Array<Multipart:Part>] parts
74
+ #
75
+ # @raise (see #bucket_complete_multipart)
76
+ #
77
+ # @return [Struct::Object]
78
+ #
79
+ # @see Client#bucket_complete_multipart
80
+ def complete(parts = [])
81
+ resp = client.bucket_complete_multipart(upload_id, key, parts)
82
+ keys = %w(CompleteMultipartUploadResult)
83
+ Struct::Object.new(
84
+ Utils.dig_value(resp.parsed_response, *keys).merge(client: client)
85
+ )
86
+ end
87
+
88
+ # Abort Multipart Upload Event
89
+ #
90
+ # @raise (see #bucket_abort_multipart)
91
+ #
92
+ # @return [true]
93
+ #
94
+ # @see Client#bucket_abort_multipart
95
+ def abort
96
+ !!client.bucket_abort_multipart(upload_id, key)
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end