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.
- checksums.yaml +7 -0
- data/.yardopts +9 -0
- data/LICENSE.txt +0 -0
- data/README.md +192 -0
- data/bin/mss-rb +178 -0
- data/ca-bundle.crt +3554 -0
- data/lib/mss/core/async_handle.rb +89 -0
- data/lib/mss/core/cacheable.rb +76 -0
- data/lib/mss/core/client.rb +786 -0
- data/lib/mss/core/collection/simple.rb +81 -0
- data/lib/mss/core/collection/with_limit_and_next_token.rb +70 -0
- data/lib/mss/core/collection/with_next_token.rb +96 -0
- data/lib/mss/core/collection.rb +262 -0
- data/lib/mss/core/configuration.rb +527 -0
- data/lib/mss/core/credential_providers.rb +653 -0
- data/lib/mss/core/data.rb +251 -0
- data/lib/mss/core/deprecations.rb +83 -0
- data/lib/mss/core/endpoints.rb +36 -0
- data/lib/mss/core/http/connection_pool.rb +374 -0
- data/lib/mss/core/http/curb_handler.rb +150 -0
- data/lib/mss/core/http/handler.rb +88 -0
- data/lib/mss/core/http/net_http_handler.rb +144 -0
- data/lib/mss/core/http/patch.rb +98 -0
- data/lib/mss/core/http/request.rb +258 -0
- data/lib/mss/core/http/response.rb +80 -0
- data/lib/mss/core/indifferent_hash.rb +87 -0
- data/lib/mss/core/inflection.rb +55 -0
- data/lib/mss/core/ini_parser.rb +41 -0
- data/lib/mss/core/json_client.rb +46 -0
- data/lib/mss/core/json_parser.rb +75 -0
- data/lib/mss/core/json_request_builder.rb +34 -0
- data/lib/mss/core/json_response_parser.rb +78 -0
- data/lib/mss/core/lazy_error_classes.rb +107 -0
- data/lib/mss/core/log_formatter.rb +426 -0
- data/lib/mss/core/managed_file.rb +31 -0
- data/lib/mss/core/meta_utils.rb +44 -0
- data/lib/mss/core/model.rb +61 -0
- data/lib/mss/core/naming.rb +29 -0
- data/lib/mss/core/option_grammar.rb +737 -0
- data/lib/mss/core/options/json_serializer.rb +81 -0
- data/lib/mss/core/options/validator.rb +154 -0
- data/lib/mss/core/options/xml_serializer.rb +117 -0
- data/lib/mss/core/page_result.rb +74 -0
- data/lib/mss/core/policy.rb +938 -0
- data/lib/mss/core/query_client.rb +40 -0
- data/lib/mss/core/query_error_parser.rb +23 -0
- data/lib/mss/core/query_request_builder.rb +46 -0
- data/lib/mss/core/query_response_parser.rb +34 -0
- data/lib/mss/core/region.rb +84 -0
- data/lib/mss/core/region_collection.rb +79 -0
- data/lib/mss/core/resource.rb +412 -0
- data/lib/mss/core/resource_cache.rb +39 -0
- data/lib/mss/core/response.rb +214 -0
- data/lib/mss/core/response_cache.rb +49 -0
- data/lib/mss/core/rest_error_parser.rb +23 -0
- data/lib/mss/core/rest_json_client.rb +39 -0
- data/lib/mss/core/rest_request_builder.rb +153 -0
- data/lib/mss/core/rest_response_parser.rb +65 -0
- data/lib/mss/core/rest_xml_client.rb +46 -0
- data/lib/mss/core/service_interface.rb +82 -0
- data/lib/mss/core/signers/base.rb +45 -0
- data/lib/mss/core/signers/cloud_front.rb +55 -0
- data/lib/mss/core/signers/s3.rb +158 -0
- data/lib/mss/core/signers/version_2.rb +71 -0
- data/lib/mss/core/signers/version_3.rb +85 -0
- data/lib/mss/core/signers/version_3_https.rb +60 -0
- data/lib/mss/core/signers/version_4/chunk_signed_stream.rb +190 -0
- data/lib/mss/core/signers/version_4.rb +227 -0
- data/lib/mss/core/uri_escape.rb +43 -0
- data/lib/mss/core/xml/frame.rb +245 -0
- data/lib/mss/core/xml/frame_stack.rb +84 -0
- data/lib/mss/core/xml/grammar.rb +306 -0
- data/lib/mss/core/xml/parser.rb +69 -0
- data/lib/mss/core/xml/root_frame.rb +64 -0
- data/lib/mss/core/xml/sax_handlers/libxml.rb +46 -0
- data/lib/mss/core/xml/sax_handlers/nokogiri.rb +55 -0
- data/lib/mss/core/xml/sax_handlers/ox.rb +40 -0
- data/lib/mss/core/xml/sax_handlers/rexml.rb +46 -0
- data/lib/mss/core/xml/stub.rb +122 -0
- data/lib/mss/core.rb +602 -0
- data/lib/mss/errors.rb +161 -0
- data/lib/mss/rails.rb +194 -0
- data/lib/mss/s3/access_control_list.rb +262 -0
- data/lib/mss/s3/acl_object.rb +263 -0
- data/lib/mss/s3/acl_options.rb +200 -0
- data/lib/mss/s3/bucket.rb +757 -0
- data/lib/mss/s3/bucket_collection.rb +161 -0
- data/lib/mss/s3/bucket_lifecycle_configuration.rb +472 -0
- data/lib/mss/s3/bucket_region_cache.rb +51 -0
- data/lib/mss/s3/bucket_tag_collection.rb +110 -0
- data/lib/mss/s3/bucket_version_collection.rb +78 -0
- data/lib/mss/s3/cipher_io.rb +119 -0
- data/lib/mss/s3/client/xml.rb +265 -0
- data/lib/mss/s3/client.rb +2076 -0
- data/lib/mss/s3/config.rb +60 -0
- data/lib/mss/s3/cors_rule.rb +107 -0
- data/lib/mss/s3/cors_rule_collection.rb +193 -0
- data/lib/mss/s3/data_options.rb +190 -0
- data/lib/mss/s3/encryption_utils.rb +145 -0
- data/lib/mss/s3/errors.rb +93 -0
- data/lib/mss/s3/multipart_upload.rb +353 -0
- data/lib/mss/s3/multipart_upload_collection.rb +75 -0
- data/lib/mss/s3/object_collection.rb +355 -0
- data/lib/mss/s3/object_metadata.rb +102 -0
- data/lib/mss/s3/object_upload_collection.rb +76 -0
- data/lib/mss/s3/object_version.rb +153 -0
- data/lib/mss/s3/object_version_collection.rb +88 -0
- data/lib/mss/s3/paginated_collection.rb +74 -0
- data/lib/mss/s3/policy.rb +73 -0
- data/lib/mss/s3/prefix_and_delimiter_collection.rb +46 -0
- data/lib/mss/s3/prefixed_collection.rb +84 -0
- data/lib/mss/s3/presign_v4.rb +135 -0
- data/lib/mss/s3/presigned_post.rb +574 -0
- data/lib/mss/s3/region_detection.rb +75 -0
- data/lib/mss/s3/request.rb +61 -0
- data/lib/mss/s3/s3_object.rb +1795 -0
- data/lib/mss/s3/tree/branch_node.rb +67 -0
- data/lib/mss/s3/tree/child_collection.rb +103 -0
- data/lib/mss/s3/tree/leaf_node.rb +93 -0
- data/lib/mss/s3/tree/node.rb +21 -0
- data/lib/mss/s3/tree/parent.rb +86 -0
- data/lib/mss/s3/tree.rb +115 -0
- data/lib/mss/s3/uploaded_part.rb +81 -0
- data/lib/mss/s3/uploaded_part_collection.rb +83 -0
- data/lib/mss/s3/website_configuration.rb +101 -0
- data/lib/mss/s3.rb +161 -0
- data/lib/mss/version.rb +16 -0
- data/lib/mss-sdk.rb +2 -0
- data/lib/mss.rb +14 -0
- data/rails/init.rb +14 -0
- 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
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
|