mss-sdk 1.0.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.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/LICENSE.txt +0 -0
  4. data/README.md +192 -0
  5. data/bin/mss-rb +178 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/lib/mss/core/async_handle.rb +89 -0
  8. data/lib/mss/core/cacheable.rb +76 -0
  9. data/lib/mss/core/client.rb +786 -0
  10. data/lib/mss/core/collection/simple.rb +81 -0
  11. data/lib/mss/core/collection/with_limit_and_next_token.rb +70 -0
  12. data/lib/mss/core/collection/with_next_token.rb +96 -0
  13. data/lib/mss/core/collection.rb +262 -0
  14. data/lib/mss/core/configuration.rb +527 -0
  15. data/lib/mss/core/credential_providers.rb +653 -0
  16. data/lib/mss/core/data.rb +251 -0
  17. data/lib/mss/core/deprecations.rb +83 -0
  18. data/lib/mss/core/endpoints.rb +36 -0
  19. data/lib/mss/core/http/connection_pool.rb +374 -0
  20. data/lib/mss/core/http/curb_handler.rb +150 -0
  21. data/lib/mss/core/http/handler.rb +88 -0
  22. data/lib/mss/core/http/net_http_handler.rb +144 -0
  23. data/lib/mss/core/http/patch.rb +98 -0
  24. data/lib/mss/core/http/request.rb +258 -0
  25. data/lib/mss/core/http/response.rb +80 -0
  26. data/lib/mss/core/indifferent_hash.rb +87 -0
  27. data/lib/mss/core/inflection.rb +55 -0
  28. data/lib/mss/core/ini_parser.rb +41 -0
  29. data/lib/mss/core/json_client.rb +46 -0
  30. data/lib/mss/core/json_parser.rb +75 -0
  31. data/lib/mss/core/json_request_builder.rb +34 -0
  32. data/lib/mss/core/json_response_parser.rb +78 -0
  33. data/lib/mss/core/lazy_error_classes.rb +107 -0
  34. data/lib/mss/core/log_formatter.rb +426 -0
  35. data/lib/mss/core/managed_file.rb +31 -0
  36. data/lib/mss/core/meta_utils.rb +44 -0
  37. data/lib/mss/core/model.rb +61 -0
  38. data/lib/mss/core/naming.rb +29 -0
  39. data/lib/mss/core/option_grammar.rb +737 -0
  40. data/lib/mss/core/options/json_serializer.rb +81 -0
  41. data/lib/mss/core/options/validator.rb +154 -0
  42. data/lib/mss/core/options/xml_serializer.rb +117 -0
  43. data/lib/mss/core/page_result.rb +74 -0
  44. data/lib/mss/core/policy.rb +938 -0
  45. data/lib/mss/core/query_client.rb +40 -0
  46. data/lib/mss/core/query_error_parser.rb +23 -0
  47. data/lib/mss/core/query_request_builder.rb +46 -0
  48. data/lib/mss/core/query_response_parser.rb +34 -0
  49. data/lib/mss/core/region.rb +84 -0
  50. data/lib/mss/core/region_collection.rb +79 -0
  51. data/lib/mss/core/resource.rb +412 -0
  52. data/lib/mss/core/resource_cache.rb +39 -0
  53. data/lib/mss/core/response.rb +214 -0
  54. data/lib/mss/core/response_cache.rb +49 -0
  55. data/lib/mss/core/rest_error_parser.rb +23 -0
  56. data/lib/mss/core/rest_json_client.rb +39 -0
  57. data/lib/mss/core/rest_request_builder.rb +153 -0
  58. data/lib/mss/core/rest_response_parser.rb +65 -0
  59. data/lib/mss/core/rest_xml_client.rb +46 -0
  60. data/lib/mss/core/service_interface.rb +82 -0
  61. data/lib/mss/core/signers/base.rb +45 -0
  62. data/lib/mss/core/signers/cloud_front.rb +55 -0
  63. data/lib/mss/core/signers/s3.rb +158 -0
  64. data/lib/mss/core/signers/version_2.rb +71 -0
  65. data/lib/mss/core/signers/version_3.rb +85 -0
  66. data/lib/mss/core/signers/version_3_https.rb +60 -0
  67. data/lib/mss/core/signers/version_4/chunk_signed_stream.rb +190 -0
  68. data/lib/mss/core/signers/version_4.rb +227 -0
  69. data/lib/mss/core/uri_escape.rb +43 -0
  70. data/lib/mss/core/xml/frame.rb +245 -0
  71. data/lib/mss/core/xml/frame_stack.rb +84 -0
  72. data/lib/mss/core/xml/grammar.rb +306 -0
  73. data/lib/mss/core/xml/parser.rb +69 -0
  74. data/lib/mss/core/xml/root_frame.rb +64 -0
  75. data/lib/mss/core/xml/sax_handlers/libxml.rb +46 -0
  76. data/lib/mss/core/xml/sax_handlers/nokogiri.rb +55 -0
  77. data/lib/mss/core/xml/sax_handlers/ox.rb +40 -0
  78. data/lib/mss/core/xml/sax_handlers/rexml.rb +46 -0
  79. data/lib/mss/core/xml/stub.rb +122 -0
  80. data/lib/mss/core.rb +602 -0
  81. data/lib/mss/errors.rb +161 -0
  82. data/lib/mss/rails.rb +194 -0
  83. data/lib/mss/s3/access_control_list.rb +262 -0
  84. data/lib/mss/s3/acl_object.rb +263 -0
  85. data/lib/mss/s3/acl_options.rb +200 -0
  86. data/lib/mss/s3/bucket.rb +757 -0
  87. data/lib/mss/s3/bucket_collection.rb +161 -0
  88. data/lib/mss/s3/bucket_lifecycle_configuration.rb +472 -0
  89. data/lib/mss/s3/bucket_region_cache.rb +51 -0
  90. data/lib/mss/s3/bucket_tag_collection.rb +110 -0
  91. data/lib/mss/s3/bucket_version_collection.rb +78 -0
  92. data/lib/mss/s3/cipher_io.rb +119 -0
  93. data/lib/mss/s3/client/xml.rb +265 -0
  94. data/lib/mss/s3/client.rb +2076 -0
  95. data/lib/mss/s3/config.rb +60 -0
  96. data/lib/mss/s3/cors_rule.rb +107 -0
  97. data/lib/mss/s3/cors_rule_collection.rb +193 -0
  98. data/lib/mss/s3/data_options.rb +190 -0
  99. data/lib/mss/s3/encryption_utils.rb +145 -0
  100. data/lib/mss/s3/errors.rb +93 -0
  101. data/lib/mss/s3/multipart_upload.rb +353 -0
  102. data/lib/mss/s3/multipart_upload_collection.rb +75 -0
  103. data/lib/mss/s3/object_collection.rb +355 -0
  104. data/lib/mss/s3/object_metadata.rb +102 -0
  105. data/lib/mss/s3/object_upload_collection.rb +76 -0
  106. data/lib/mss/s3/object_version.rb +153 -0
  107. data/lib/mss/s3/object_version_collection.rb +88 -0
  108. data/lib/mss/s3/paginated_collection.rb +74 -0
  109. data/lib/mss/s3/policy.rb +73 -0
  110. data/lib/mss/s3/prefix_and_delimiter_collection.rb +46 -0
  111. data/lib/mss/s3/prefixed_collection.rb +84 -0
  112. data/lib/mss/s3/presign_v4.rb +135 -0
  113. data/lib/mss/s3/presigned_post.rb +574 -0
  114. data/lib/mss/s3/region_detection.rb +75 -0
  115. data/lib/mss/s3/request.rb +61 -0
  116. data/lib/mss/s3/s3_object.rb +1795 -0
  117. data/lib/mss/s3/tree/branch_node.rb +67 -0
  118. data/lib/mss/s3/tree/child_collection.rb +103 -0
  119. data/lib/mss/s3/tree/leaf_node.rb +93 -0
  120. data/lib/mss/s3/tree/node.rb +21 -0
  121. data/lib/mss/s3/tree/parent.rb +86 -0
  122. data/lib/mss/s3/tree.rb +115 -0
  123. data/lib/mss/s3/uploaded_part.rb +81 -0
  124. data/lib/mss/s3/uploaded_part_collection.rb +83 -0
  125. data/lib/mss/s3/website_configuration.rb +101 -0
  126. data/lib/mss/s3.rb +161 -0
  127. data/lib/mss/version.rb +16 -0
  128. data/lib/mss-sdk.rb +2 -0
  129. data/lib/mss.rb +14 -0
  130. data/rails/init.rb +14 -0
  131. metadata +201 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1dc2b9530276e02bca4a51104fa404e15f3b05f9
4
+ data.tar.gz: 20e2e17ea7b1e2a43673e93bb99430503d5e36c8
5
+ SHA512:
6
+ metadata.gz: 8aefe23900b039b77f0638c62c1479b5e1e1cfbcfd958f08dc1caab400402c6bf442fdb5b4fc46fe723eb62f7b0af85325d7c814255038e6d9b5c92a7e2f0ccb
7
+ data.tar.gz: 6e6ebbe26542eeb728f2b26dd58e89eb68207ae4f3aca17a1fe58bfaf1e3861d48933e20d72cac9e28431907685364bc9e51b1bb827004d6ac3811f11b6ab4d2
data/.yardopts ADDED
@@ -0,0 +1,9 @@
1
+ --title 'MSS SDK for Ruby'
2
+ --output-dir api-docs
3
+ --template-path doc-src/templates
4
+ --markup markdown
5
+ --markup-provider rdiscount
6
+ --hide-api private
7
+ --plugin sitemap
8
+ -e doc-src/api_docs_plugin.rb
9
+ lib/**/*.rb
data/LICENSE.txt ADDED
File without changes
data/README.md ADDED
@@ -0,0 +1,192 @@
1
+ # MSS(Meituan Storage Service) SDK for Ruby
2
+
3
+ This is MSS SDK for Ruby.
4
+
5
+ ## Introduction
6
+
7
+ ### MSS服务介绍
8
+ 美团云存储服务(Meituan Storage Service, 简称MSS),是美团云对外提供的云存储服务,其具备高可靠,安全,低成本等特性,并且其API兼容S3。MSS适合存放非结构化的数据,比如图片,视频,文档,备份等。
9
+
10
+ ### MSS基本概念介绍
11
+ * MSS的API兼容S3, 其基本概念也和S3相同,主要包括Object, Bucket, Access Key, Secret Key等。
12
+
13
+ * Object对应一个文件,包括数据和元数据两部分。元数据以key-value的形式构成,它包含一些默认的元数据信息,比如Content-Type, Etag等,用户也可以自定义元数据。
14
+
15
+ * Bucket是object的容器,每个object都必须包含在一个bucket中。用户可以创建任意多个bucket。
16
+
17
+ * Access Key和Secret Key: 用户注册MSS时,系统会给用户分配一对Access Key和Secret Key, 用于标识用户,用户在使用API使用MSS服务时,需要使用这两个Key。请在美团云管理控制台查询AccessKey和SecretKey。
18
+
19
+ ### MSS访问域名
20
+
21
+ ```
22
+ mtmss.com
23
+ ```
24
+
25
+ ## Installation
26
+
27
+ 安装MSS SDK for Ruby,需要ruby与gem,并且ruby版本在1.9.3以上。
28
+
29
+ ```
30
+ # Build MSS SDK for Ruby Gem
31
+ gem build mss-sdk.gemspec
32
+
33
+ # Install MSS SDK for Ruby Gem
34
+ gem install -l mss-sdk-1.0.0.gem
35
+ ```
36
+
37
+ ## Quick Start
38
+
39
+ ##### 初始化
40
+
41
+ ```ruby
42
+ require 'mss-sdk'
43
+ s3 = MSS::S3.new({
44
+ :s3_endpoint => 'mtmss.com',
45
+ :use_ssl => false,
46
+ :s3_force_path_style => true,
47
+ :access_key_id => '****Access Key****',
48
+ :secret_access_key => '****Access Secret****'})
49
+ ```
50
+
51
+ ##### 新建bucket
52
+
53
+ ```ruby
54
+ bucket = s3.buckets.create('bucket_name')
55
+ ```
56
+
57
+ ##### 列出所有bucket
58
+
59
+ ```ruby
60
+ s3.buckets.each do |bucket|
61
+ puts bucket.name
62
+ end
63
+ ```
64
+
65
+ ##### 设置bucket属性为公共可读
66
+
67
+ ```ruby
68
+ bucket.set_acl_public_read
69
+ ```
70
+
71
+ ##### 设置bucket属性为私有
72
+
73
+ ```ruby
74
+ bucket.set_acl_private
75
+ ```
76
+
77
+ ##### 判断bucket是否存在
78
+
79
+ ```ruby
80
+ bucket.exists?
81
+ ```
82
+
83
+ ##### 从字符串或缓冲区上传对象
84
+
85
+ ```ruby
86
+ object_name_one = 'object1'
87
+ object_content = 'test'
88
+ obj = bucket.objects[object_name_one].write(object_content)
89
+ ```
90
+
91
+ ##### 删除对象
92
+
93
+ ```ruby
94
+ obj.delete
95
+ ```
96
+
97
+ ##### 从文件上传对象
98
+
99
+ ```ruby
100
+ object_name_for_test_upload = 'object2'
101
+ upload_file_path = 'filepath'
102
+ obj_upload = bucket.objects[object_name_for_test_upload]
103
+ obj_upload.write(:file => upload_file_path)
104
+ ```
105
+
106
+ ##### 下载对象到本地文件
107
+
108
+ ```ruby
109
+ File.open('output', 'wb') do |file|
110
+ obj_upload.read do |chunk|
111
+ file.write(chunk)
112
+ end
113
+ end
114
+ ```
115
+
116
+ ##### 生成预签名的对象地址
117
+
118
+ ```ruby
119
+ temp_url_for_read = obj_upload.url_for(:read, {:expire => 600})
120
+ puts temp_url_for_read
121
+ ```
122
+
123
+ ##### 删除bucket内所有对象
124
+
125
+ ```ruby
126
+ bucket.clear!
127
+ ```
128
+
129
+ ##### 删除bucket
130
+
131
+ ```ruby
132
+ bucket.delete
133
+ ```
134
+
135
+ ##### 大文件分片上传
136
+
137
+ ```ruby
138
+ upload = bucket.objects["Hello美团云!"].multipart_upload
139
+ upload.add_part("a" * 5242880)
140
+ upload.add_part("b" * 2097152)
141
+ upload.complete()
142
+ puts "Multipart upload succ, upload id:" + upload.id
143
+ ```
144
+
145
+ ## 预签名Post上传对象
146
+
147
+ ```
148
+ 请参考samples/s3/presinged_post.rb
149
+ ```
150
+
151
+ ##### 服务器端生成签名表单,用于发给客户端
152
+
153
+ ```ruby
154
+ post_info_str = s3.presigned_post_info(
155
+ "share", # bucket名字
156
+ {
157
+ :expires => 300, # 签名有效期,单位秒
158
+ :metadata => {"x-amz-meta-server" => "Hello Server!"}, # 服务器端自定义的变量,必须以"x-amz-meta-"为前缀
159
+ :callback_url => "http://mtmsscb.mtmss.cn", # 上传成功后的回调url
160
+ :callback_body => "name=${fname}&bucket=${bucket}&key=${key}&hash=${etag}&size=${fsize}&server=${x-amz-meta-server}&client=${x-amz-meta-client}", # 上传成功后回调的内容,可以引用魔法变量和自定义变量
161
+ :callback_body_type => "application/x-www-form-urlencoded", # 上传成功后回调的Content-Type
162
+ :callback_host => "mtmsscb.mtmss.com" # 上传成功后回调http header中的host
163
+ }).to_json
164
+ ```
165
+
166
+ ##### 目前支持的魔法变量
167
+ | 名字 | 描述 |
168
+ |--------|----------------------|
169
+ | bucket | bucket名字 |
170
+ | key | 对象名字 |
171
+ | etag | 对象内容的md5sum |
172
+ | fname | 上传表单中的filename |
173
+ | fsize | 对象大小 |
174
+
175
+ ##### 客户端使用Post上传对象
176
+
177
+ ```ruby
178
+ # 这里使用ruby的rest-client做为示例
179
+ client_info = {
180
+ "x-amz-meta-client" => "Hello Client!", # 客户端自定义变量,mss遵守标准S3协议,post表单最后一项必须是对象内容,因此客户端自定义的变量要写在value之前
181
+ :key => "Key is lena.jpg", # 对象名字
182
+ :value => File.new("./lena.jpg", 'rb'), # 待上传的对象内容
183
+ }
184
+ post_info_obj = JSON.parse(post_info_str) # post_info_str为服务器端生成的签名表单对象,包括url和form,其中form为表单内容,url为上传要用到的url
185
+ RestClient.post post_info_obj["url"], post_info_obj["form"].merge(client_info) # 与客户端自定义的表单内容合并后使用rest-client上传
186
+ ```
187
+
188
+ ##### 回调服务器收到的消息体
189
+
190
+ ```
191
+ name=lena.jpg&bucket=share&key=Key is lena.jpg&hash="76d710edc4cf48d84e3cfc7e24234a09"&size=68261&server=Hello Server!&client=Hello Client!
192
+ ```
data/bin/mss-rb ADDED
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
6
+ # may not use this file except in compliance with the License. A copy of
7
+ # the License is located at
8
+ #
9
+ #
10
+ # or in the "license" file accompanying this file. This file is
11
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
12
+ # ANY KIND, either express or implied. See the License for the specific
13
+ # language governing permissions and limitations under the License.
14
+
15
+ $:.unshift(File.join(File.dirname(File.dirname(__FILE__)), 'lib'))
16
+
17
+ require 'rubygems'
18
+ require 'optparse'
19
+ require 'logger'
20
+
21
+ def env_bool key, default
22
+ if ENV.key?(key)
23
+ !['0', 'false', 'no', 'off'].include?(ENV[key].downcase)
24
+ else
25
+ default
26
+ end
27
+ end
28
+
29
+ # setup default options, check ENV for most
30
+ options = {
31
+ :repl => env_bool('MSSRB', nil),
32
+ :log => env_bool('MSSRB_LOG', true),
33
+ :color => env_bool('MSSRB_COLOR', true),
34
+ :debug => env_bool('MSSRB_DEBUG', false),
35
+ :load_paths => [],
36
+ :require => [],
37
+ :execute => [],
38
+ }
39
+
40
+ OptionParser.new do |opts|
41
+
42
+ opts.banner = "Usage: mss-rb [options]"
43
+
44
+ opts.on("--repl REPL", "specify the repl environment, pry or irb") do |value|
45
+ options[:repl] = value
46
+ end
47
+
48
+ opts.on("-e 'command'", "one line of script. Several -e's allowed.") do |value|
49
+ options[:execute] << value
50
+ options[:log] = false unless options[:log_set]
51
+ options[:debug] = false unless options[:debug_set]
52
+ end
53
+
54
+ opts.on("-l", "--[no-]log", "log client requets, on by default") do |value|
55
+ options[:log] = value
56
+ options[:log_set] = true
57
+ end
58
+
59
+ opts.on("-c", "--[no-]color", "colorize request logging, on by default") do |value|
60
+ options[:color] = value
61
+ end
62
+
63
+ opts.on("--profile PROFILE", "Use a specific profile from your credential file.") do |value|
64
+ options[:profile] = value
65
+ end
66
+
67
+ opts.on("-d", "--[no-]debug", "log HTTP wire traces, off by default") do |value|
68
+ options[:debug] = value
69
+ options[:debug_set] = true
70
+ end
71
+
72
+ opts.on("-Idirectory", Array, "specify $LOAD_PATH directory (may be used more than once)") do |values|
73
+ options[:load_paths] += values
74
+ end
75
+
76
+ opts.on("-rlibrary", Array, "require the library") do |values|
77
+ options[:require] += values
78
+ end
79
+
80
+ opts.on("-v", "--verbose", "enable client logging and HTTP wire tracing") do |value|
81
+ options[:log] = true
82
+ options[:log_set] = true
83
+ options[:debug] = true
84
+ options[:debug_set] = true
85
+ end
86
+
87
+ opts.on("-q", "--quiet", "disable client logging and HTTP wire tracing") do |value|
88
+ options[:log] = false
89
+ options[:log_set] = true
90
+ options[:debug] = false
91
+ options[:debug_set] = true
92
+ end
93
+
94
+ opts.on("-h", "--help") do
95
+ puts opts
96
+ exit
97
+ end
98
+
99
+ end.parse!
100
+
101
+ # amend the $LOAD_PATH
102
+ options[:load_paths].each do |path|
103
+ $LOAD_PATH.unshift(path)
104
+ end
105
+
106
+ require 'mss-sdk'
107
+
108
+ # configure the mss-sdk gem
109
+
110
+ cfg = {}
111
+
112
+ if options[:profile]
113
+ provider = MSS::Core::CredentialProviders::SharedCredentialFileProvider.new(
114
+ :profile_name => options[:profile]
115
+ )
116
+ cfg[:credential_provider] = provider
117
+ end
118
+
119
+ if options[:log]
120
+ logger = Logger.new($stdout)
121
+ logger.formatter = proc {|severity, datetime, progname, msg| msg }
122
+ cfg[:logger] = logger
123
+ end
124
+
125
+ if options[:color]
126
+ cfg[:log_formatter] = MSS::Core::LogFormatter.colored
127
+ end
128
+
129
+ if options[:debug]
130
+ cfg[:http_wire_trace] = true
131
+ end
132
+
133
+ MSS.config(cfg)
134
+
135
+ options[:require].each do |library|
136
+ require(library)
137
+ end
138
+
139
+ unless options[:execute].empty?
140
+ eval(options[:execute].join("\n"))
141
+ exit
142
+ end
143
+
144
+ unless options[:repl] == 'irb'
145
+ # these dependencies are normally autoloaded by the mss-sdk, however
146
+ # we require them up front to squelch warnings from pry
147
+ require 'nokogiri'
148
+ require 'json'
149
+ end
150
+
151
+ class PryNotAvailable < StandardError; end
152
+
153
+ def run_with_pry
154
+ begin
155
+ require 'pry'
156
+ rescue LoadError
157
+ raise PryNotAvailable
158
+ end
159
+ Pry.config.prompt = [proc { "MSS> " }, proc { "MSS| " }]
160
+ MSS.pry
161
+ end
162
+
163
+ def run_with_irb
164
+ require 'irb'
165
+ IRB.start
166
+ end
167
+
168
+ case options[:repl]
169
+ when 'pry' then run_with_pry
170
+ when 'irb' then run_with_irb
171
+ else
172
+ begin
173
+ run_with_pry
174
+ rescue PryNotAvailable
175
+ warn("Pry not available, falling back to irb")
176
+ run_with_irb
177
+ end
178
+ end