opendal 0.1.6.pre.rc.1-aarch64-linux
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/.standard.yml +20 -0
- data/.tool-versions +1 -0
- data/.yardopts +1 -0
- data/DEPENDENCIES.md +9 -0
- data/DEPENDENCIES.rust.tsv +277 -0
- data/Gemfile +35 -0
- data/README.md +159 -0
- data/Rakefile +149 -0
- data/core/CHANGELOG.md +4929 -0
- data/core/CONTRIBUTING.md +61 -0
- data/core/DEPENDENCIES.md +3 -0
- data/core/DEPENDENCIES.rust.tsv +185 -0
- data/core/LICENSE +201 -0
- data/core/README.md +228 -0
- data/core/benches/README.md +18 -0
- data/core/benches/ops/README.md +26 -0
- data/core/benches/types/README.md +9 -0
- data/core/benches/vs_fs/README.md +35 -0
- data/core/benches/vs_s3/README.md +55 -0
- data/core/edge/README.md +3 -0
- data/core/edge/file_write_on_full_disk/README.md +14 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/README.md +18 -0
- data/core/edge/s3_read_on_wasm/.gitignore +3 -0
- data/core/edge/s3_read_on_wasm/README.md +42 -0
- data/core/edge/s3_read_on_wasm/webdriver.json +15 -0
- data/core/examples/README.md +23 -0
- data/core/examples/basic/README.md +15 -0
- data/core/examples/concurrent-upload/README.md +15 -0
- data/core/examples/multipart-upload/README.md +15 -0
- data/core/fuzz/.gitignore +5 -0
- data/core/fuzz/README.md +68 -0
- data/core/src/docs/comparisons/vs_object_store.md +183 -0
- data/core/src/docs/performance/concurrent_write.md +101 -0
- data/core/src/docs/performance/http_optimization.md +124 -0
- data/core/src/docs/rfcs/0000_example.md +74 -0
- data/core/src/docs/rfcs/0000_foyer_integration.md +111 -0
- data/core/src/docs/rfcs/0041_object_native_api.md +185 -0
- data/core/src/docs/rfcs/0044_error_handle.md +198 -0
- data/core/src/docs/rfcs/0057_auto_region.md +160 -0
- data/core/src/docs/rfcs/0069_object_stream.md +145 -0
- data/core/src/docs/rfcs/0090_limited_reader.md +155 -0
- data/core/src/docs/rfcs/0112_path_normalization.md +79 -0
- data/core/src/docs/rfcs/0191_async_streaming_io.md +328 -0
- data/core/src/docs/rfcs/0203_remove_credential.md +96 -0
- data/core/src/docs/rfcs/0221_create_dir.md +89 -0
- data/core/src/docs/rfcs/0247_retryable_error.md +87 -0
- data/core/src/docs/rfcs/0293_object_id.md +67 -0
- data/core/src/docs/rfcs/0337_dir_entry.md +191 -0
- data/core/src/docs/rfcs/0409_accessor_capabilities.md +67 -0
- data/core/src/docs/rfcs/0413_presign.md +154 -0
- data/core/src/docs/rfcs/0423_command_line_interface.md +268 -0
- data/core/src/docs/rfcs/0429_init_from_iter.md +107 -0
- data/core/src/docs/rfcs/0438_multipart.md +163 -0
- data/core/src/docs/rfcs/0443_gateway.md +73 -0
- data/core/src/docs/rfcs/0501_new_builder.md +111 -0
- data/core/src/docs/rfcs/0554_write_refactor.md +96 -0
- data/core/src/docs/rfcs/0561_list_metadata_reuse.md +210 -0
- data/core/src/docs/rfcs/0599_blocking_api.md +157 -0
- data/core/src/docs/rfcs/0623_redis_service.md +300 -0
- data/core/src/docs/rfcs/0627_split_capabilities.md +89 -0
- data/core/src/docs/rfcs/0661_path_in_accessor.md +126 -0
- data/core/src/docs/rfcs/0793_generic_kv_services.md +209 -0
- data/core/src/docs/rfcs/0926_object_reader.md +93 -0
- data/core/src/docs/rfcs/0977_refactor_error.md +151 -0
- data/core/src/docs/rfcs/1085_object_handler.md +73 -0
- data/core/src/docs/rfcs/1391_object_metadataer.md +110 -0
- data/core/src/docs/rfcs/1398_query_based_metadata.md +125 -0
- data/core/src/docs/rfcs/1420_object_writer.md +147 -0
- data/core/src/docs/rfcs/1477_remove_object_concept.md +159 -0
- data/core/src/docs/rfcs/1735_operation_extension.md +117 -0
- data/core/src/docs/rfcs/2083_writer_sink_api.md +106 -0
- data/core/src/docs/rfcs/2133_append_api.md +88 -0
- data/core/src/docs/rfcs/2299_chain_based_operator_api.md +99 -0
- data/core/src/docs/rfcs/2602_object_versioning.md +138 -0
- data/core/src/docs/rfcs/2758_merge_append_into_write.md +79 -0
- data/core/src/docs/rfcs/2774_lister_api.md +66 -0
- data/core/src/docs/rfcs/2779_list_with_metakey.md +143 -0
- data/core/src/docs/rfcs/2852_native_capability.md +58 -0
- data/core/src/docs/rfcs/2884_merge_range_read_into_read.md +80 -0
- data/core/src/docs/rfcs/3017_remove_write_copy_from.md +94 -0
- data/core/src/docs/rfcs/3197_config.md +237 -0
- data/core/src/docs/rfcs/3232_align_list_api.md +69 -0
- data/core/src/docs/rfcs/3243_list_prefix.md +128 -0
- data/core/src/docs/rfcs/3356_lazy_reader.md +111 -0
- data/core/src/docs/rfcs/3526_list_recursive.md +59 -0
- data/core/src/docs/rfcs/3574_concurrent_stat_in_list.md +80 -0
- data/core/src/docs/rfcs/3734_buffered_reader.md +64 -0
- data/core/src/docs/rfcs/3898_concurrent_writer.md +66 -0
- data/core/src/docs/rfcs/3911_deleter_api.md +165 -0
- data/core/src/docs/rfcs/4382_range_based_read.md +213 -0
- data/core/src/docs/rfcs/4638_executor.md +215 -0
- data/core/src/docs/rfcs/5314_remove_metakey.md +120 -0
- data/core/src/docs/rfcs/5444_operator_from_uri.md +162 -0
- data/core/src/docs/rfcs/5479_context.md +140 -0
- data/core/src/docs/rfcs/5485_conditional_reader.md +112 -0
- data/core/src/docs/rfcs/5495_list_with_deleted.md +81 -0
- data/core/src/docs/rfcs/5556_write_returns_metadata.md +121 -0
- data/core/src/docs/rfcs/5871_read_returns_metadata.md +112 -0
- data/core/src/docs/rfcs/6189_remove_native_blocking.md +106 -0
- data/core/src/docs/rfcs/6209_glob_support.md +132 -0
- data/core/src/docs/rfcs/6213_options_api.md +142 -0
- data/core/src/docs/rfcs/README.md +62 -0
- data/core/src/docs/upgrade.md +1556 -0
- data/core/src/services/aliyun_drive/docs.md +61 -0
- data/core/src/services/alluxio/docs.md +45 -0
- data/core/src/services/azblob/docs.md +77 -0
- data/core/src/services/azdls/docs.md +73 -0
- data/core/src/services/azfile/docs.md +65 -0
- data/core/src/services/b2/docs.md +54 -0
- data/core/src/services/cacache/docs.md +38 -0
- data/core/src/services/cloudflare_kv/docs.md +21 -0
- data/core/src/services/cos/docs.md +55 -0
- data/core/src/services/d1/docs.md +48 -0
- data/core/src/services/dashmap/docs.md +38 -0
- data/core/src/services/dbfs/docs.md +57 -0
- data/core/src/services/dropbox/docs.md +64 -0
- data/core/src/services/etcd/docs.md +45 -0
- data/core/src/services/foundationdb/docs.md +42 -0
- data/core/src/services/fs/docs.md +49 -0
- data/core/src/services/ftp/docs.md +42 -0
- data/core/src/services/gcs/docs.md +76 -0
- data/core/src/services/gdrive/docs.md +65 -0
- data/core/src/services/ghac/docs.md +84 -0
- data/core/src/services/github/docs.md +52 -0
- data/core/src/services/gridfs/docs.md +46 -0
- data/core/src/services/hdfs/docs.md +140 -0
- data/core/src/services/hdfs_native/docs.md +35 -0
- data/core/src/services/http/docs.md +45 -0
- data/core/src/services/huggingface/docs.md +61 -0
- data/core/src/services/ipfs/docs.md +45 -0
- data/core/src/services/ipmfs/docs.md +14 -0
- data/core/src/services/koofr/docs.md +51 -0
- data/core/src/services/lakefs/docs.md +62 -0
- data/core/src/services/memcached/docs.md +47 -0
- data/core/src/services/memory/docs.md +36 -0
- data/core/src/services/mini_moka/docs.md +19 -0
- data/core/src/services/moka/docs.md +42 -0
- data/core/src/services/mongodb/docs.md +49 -0
- data/core/src/services/monoiofs/docs.md +46 -0
- data/core/src/services/mysql/docs.md +47 -0
- data/core/src/services/obs/docs.md +54 -0
- data/core/src/services/onedrive/docs.md +115 -0
- data/core/src/services/opfs/docs.md +18 -0
- data/core/src/services/oss/docs.md +74 -0
- data/core/src/services/pcloud/docs.md +51 -0
- data/core/src/services/persy/docs.md +43 -0
- data/core/src/services/postgresql/docs.md +47 -0
- data/core/src/services/redb/docs.md +41 -0
- data/core/src/services/redis/docs.md +43 -0
- data/core/src/services/rocksdb/docs.md +54 -0
- data/core/src/services/s3/compatible_services.md +126 -0
- data/core/src/services/s3/docs.md +244 -0
- data/core/src/services/seafile/docs.md +54 -0
- data/core/src/services/sftp/docs.md +49 -0
- data/core/src/services/sled/docs.md +39 -0
- data/core/src/services/sqlite/docs.md +46 -0
- data/core/src/services/surrealdb/docs.md +54 -0
- data/core/src/services/swift/compatible_services.md +53 -0
- data/core/src/services/swift/docs.md +52 -0
- data/core/src/services/tikv/docs.md +43 -0
- data/core/src/services/upyun/docs.md +51 -0
- data/core/src/services/vercel_artifacts/docs.md +40 -0
- data/core/src/services/vercel_blob/docs.md +45 -0
- data/core/src/services/webdav/docs.md +49 -0
- data/core/src/services/webhdfs/docs.md +90 -0
- data/core/src/services/yandex_disk/docs.md +45 -0
- data/core/tests/behavior/README.md +77 -0
- data/core/tests/data/normal_dir/.gitkeep +0 -0
- data/core/tests/data/normal_file.txt +1041 -0
- data/core/tests/data/special_dir !@#$%^&()_+-=;',/.gitkeep +0 -0
- data/core/tests/data/special_file !@#$%^&()_+-=;',.txt +1041 -0
- data/core/users.md +13 -0
- data/extconf.rb +24 -0
- data/lib/opendal.rb +25 -0
- data/lib/opendal_ruby/entry.rb +35 -0
- data/lib/opendal_ruby/io.rb +70 -0
- data/lib/opendal_ruby/metadata.rb +44 -0
- data/lib/opendal_ruby/opendal_ruby.so +0 -0
- data/lib/opendal_ruby/operator.rb +29 -0
- data/lib/opendal_ruby/operator_info.rb +26 -0
- data/opendal.gemspec +91 -0
- data/test/blocking_op_test.rb +112 -0
- data/test/capability_test.rb +42 -0
- data/test/io_test.rb +172 -0
- data/test/lister_test.rb +77 -0
- data/test/metadata_test.rb +78 -0
- data/test/middlewares_test.rb +46 -0
- data/test/operator_info_test.rb +35 -0
- data/test/test_helper.rb +36 -0
- metadata +240 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9e6091ea071668b654e6bf2675b1951b959fbcfacb59923105b2cf2dee7af526
|
|
4
|
+
data.tar.gz: 9aee6aafd1ca3a5b32919fdddb89929e05f884e920aaf4226ff9c67a02c0ed08
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 490fd649b7690ce216e147f527abb8e87e374991177bb398ed3a784bc3d4970f6f520c70c953f4a628a02622296a6406171b35ff0edebf67c3b0715732a6410f
|
|
7
|
+
data.tar.gz: 19b3620c423204e77d74b9dadba63e8ff654f2037ab70a0f3c73168eea5a1791f23b42b5a70ac1cdd294a5cbda79819d6cbf1977ea8f9aadc50f78878f816af3
|
data/.standard.yml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
# For available configuration options, see:
|
|
19
|
+
# https://github.com/testdouble/standard
|
|
20
|
+
ruby_version: 3.2
|
data/.tool-versions
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby 3.3
|
data/.yardopts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--markup=markdown
|
data/DEPENDENCIES.md
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-2-Clause BSD-3-Clause BSL-1.0 CDLA-Permissive-2.0 ISC LGPL-2.1-or-later MIT Unicode-3.0 Unlicense Zlib
|
|
2
|
+
addr2line@0.24.2 X X
|
|
3
|
+
adler2@2.0.1 X X X
|
|
4
|
+
aes@0.8.4 X X
|
|
5
|
+
aho-corasick@1.1.3 X X
|
|
6
|
+
allocator-api2@0.2.21 X X
|
|
7
|
+
android-tzdata@0.1.1 X X
|
|
8
|
+
android_system_properties@0.1.5 X X
|
|
9
|
+
anyhow@1.0.98 X X
|
|
10
|
+
async-trait@0.1.88 X X
|
|
11
|
+
autocfg@1.5.0 X X
|
|
12
|
+
backon@1.5.1 X
|
|
13
|
+
backtrace@0.3.75 X X
|
|
14
|
+
base64@0.22.1 X X
|
|
15
|
+
base64ct@1.8.0 X X
|
|
16
|
+
bindgen@0.69.5 X
|
|
17
|
+
bitflags@2.9.1 X X
|
|
18
|
+
block-buffer@0.10.4 X X
|
|
19
|
+
block-padding@0.3.3 X X
|
|
20
|
+
bumpalo@3.19.0 X X
|
|
21
|
+
byteorder@1.5.0 X X
|
|
22
|
+
bytes@1.10.1 X
|
|
23
|
+
cbc@0.1.2 X X
|
|
24
|
+
cc@1.2.29 X X
|
|
25
|
+
cexpr@0.6.0 X X
|
|
26
|
+
cfg-if@1.0.1 X X
|
|
27
|
+
chrono@0.4.41 X X
|
|
28
|
+
cipher@0.4.4 X X
|
|
29
|
+
clang-sys@1.8.1 X
|
|
30
|
+
const-oid@0.9.6 X X
|
|
31
|
+
core-foundation-sys@0.8.7 X X
|
|
32
|
+
cpufeatures@0.2.17 X X
|
|
33
|
+
crc32c@0.6.8 X X
|
|
34
|
+
crossbeam-utils@0.8.21 X X
|
|
35
|
+
crypto-common@0.1.6 X X
|
|
36
|
+
dashmap@6.1.0 X
|
|
37
|
+
der@0.7.10 X X
|
|
38
|
+
deranged@0.4.0 X X
|
|
39
|
+
digest@0.10.7 X X
|
|
40
|
+
displaydoc@0.2.5 X X
|
|
41
|
+
either@1.15.0 X X
|
|
42
|
+
equivalent@1.0.2 X X
|
|
43
|
+
fastrand@2.3.0 X X
|
|
44
|
+
fnv@1.0.7 X X
|
|
45
|
+
foldhash@0.1.5 X
|
|
46
|
+
form_urlencoded@1.2.1 X X
|
|
47
|
+
futures@0.3.31 X X
|
|
48
|
+
futures-channel@0.3.31 X X
|
|
49
|
+
futures-core@0.3.31 X X
|
|
50
|
+
futures-io@0.3.31 X X
|
|
51
|
+
futures-macro@0.3.31 X X
|
|
52
|
+
futures-sink@0.3.31 X X
|
|
53
|
+
futures-task@0.3.31 X X
|
|
54
|
+
futures-timer@3.0.3 X X
|
|
55
|
+
futures-util@0.3.31 X X
|
|
56
|
+
generic-array@0.14.7 X
|
|
57
|
+
getrandom@0.2.16 X X
|
|
58
|
+
getrandom@0.3.3 X X
|
|
59
|
+
ghac@0.2.0 X
|
|
60
|
+
gimli@0.31.1 X X
|
|
61
|
+
glob@0.3.2 X X
|
|
62
|
+
gloo-timers@0.3.0 X X
|
|
63
|
+
governor@0.10.0 X
|
|
64
|
+
hashbrown@0.14.5 X X
|
|
65
|
+
hashbrown@0.15.4 X X
|
|
66
|
+
hex@0.4.3 X X
|
|
67
|
+
hmac@0.12.1 X X
|
|
68
|
+
home@0.5.11 X X
|
|
69
|
+
http@1.3.1 X X
|
|
70
|
+
http-body@1.0.1 X
|
|
71
|
+
http-body-util@0.1.3 X
|
|
72
|
+
httparse@1.10.1 X X
|
|
73
|
+
hyper@1.6.0 X
|
|
74
|
+
hyper-rustls@0.27.7 X X X
|
|
75
|
+
hyper-util@0.1.15 X
|
|
76
|
+
iana-time-zone@0.1.63 X X
|
|
77
|
+
iana-time-zone-haiku@0.1.2 X X
|
|
78
|
+
icu_collections@2.0.0 X
|
|
79
|
+
icu_locale_core@2.0.0 X
|
|
80
|
+
icu_normalizer@2.0.0 X
|
|
81
|
+
icu_normalizer_data@2.0.0 X
|
|
82
|
+
icu_properties@2.0.1 X
|
|
83
|
+
icu_properties_data@2.0.1 X
|
|
84
|
+
icu_provider@2.0.0 X
|
|
85
|
+
idna@1.0.3 X X
|
|
86
|
+
idna_adapter@1.2.1 X X
|
|
87
|
+
inout@0.1.4 X X
|
|
88
|
+
io-uring@0.7.8 X X
|
|
89
|
+
ipnet@2.11.0 X X
|
|
90
|
+
iri-string@0.7.8 X X
|
|
91
|
+
itertools@0.12.1 X X
|
|
92
|
+
itertools@0.14.0 X X
|
|
93
|
+
itoa@1.0.15 X X
|
|
94
|
+
js-sys@0.3.77 X X
|
|
95
|
+
jsonwebtoken@9.3.1 X
|
|
96
|
+
lazy_static@1.5.0 X X
|
|
97
|
+
lazycell@1.3.0 X X
|
|
98
|
+
libc@0.2.174 X X
|
|
99
|
+
libloading@0.8.8 X
|
|
100
|
+
libm@0.2.15 X
|
|
101
|
+
litemap@0.8.0 X
|
|
102
|
+
lock_api@0.4.13 X X
|
|
103
|
+
log@0.4.27 X X
|
|
104
|
+
magnus@0.8.0 X
|
|
105
|
+
magnus-macros@0.8.0 X
|
|
106
|
+
md-5@0.10.6 X X
|
|
107
|
+
memchr@2.7.5 X X
|
|
108
|
+
minimal-lexical@0.2.1 X X
|
|
109
|
+
miniz_oxide@0.8.9 X X X
|
|
110
|
+
mio@1.0.4 X
|
|
111
|
+
nom@7.1.3 X
|
|
112
|
+
nonzero_ext@0.3.0 X
|
|
113
|
+
num-bigint@0.4.6 X X
|
|
114
|
+
num-bigint-dig@0.8.4 X X
|
|
115
|
+
num-conv@0.1.0 X X
|
|
116
|
+
num-integer@0.1.46 X X
|
|
117
|
+
num-iter@0.1.45 X X
|
|
118
|
+
num-traits@0.2.19 X X
|
|
119
|
+
object@0.36.7 X X
|
|
120
|
+
once_cell@1.21.3 X X
|
|
121
|
+
opendal@0.54.1 X
|
|
122
|
+
opendal-ruby@0.0.0 X
|
|
123
|
+
parking_lot@0.12.4 X X
|
|
124
|
+
parking_lot_core@0.9.11 X X
|
|
125
|
+
pbkdf2@0.12.2 X X
|
|
126
|
+
pem@3.0.5 X
|
|
127
|
+
pem-rfc7468@0.7.0 X X
|
|
128
|
+
percent-encoding@2.3.1 X X
|
|
129
|
+
pin-project-lite@0.2.16 X X
|
|
130
|
+
pin-utils@0.1.0 X X
|
|
131
|
+
pkcs1@0.7.5 X X
|
|
132
|
+
pkcs5@0.7.1 X X
|
|
133
|
+
pkcs8@0.10.2 X X
|
|
134
|
+
portable-atomic@1.11.1 X X
|
|
135
|
+
potential_utf@0.1.2 X
|
|
136
|
+
powerfmt@0.2.0 X X
|
|
137
|
+
ppv-lite86@0.2.21 X X
|
|
138
|
+
proc-macro2@1.0.95 X X
|
|
139
|
+
prost@0.13.5 X
|
|
140
|
+
prost-derive@0.13.5 X
|
|
141
|
+
quanta@0.12.6 X
|
|
142
|
+
quick-xml@0.37.5 X
|
|
143
|
+
quick-xml@0.38.3 X
|
|
144
|
+
quote@1.0.40 X X
|
|
145
|
+
r-efi@5.3.0 X X X
|
|
146
|
+
rand@0.8.5 X X
|
|
147
|
+
rand@0.9.1 X X
|
|
148
|
+
rand_chacha@0.3.1 X X
|
|
149
|
+
rand_chacha@0.9.0 X X
|
|
150
|
+
rand_core@0.6.4 X X
|
|
151
|
+
rand_core@0.9.3 X X
|
|
152
|
+
raw-cpuid@11.5.0 X
|
|
153
|
+
rb-sys@0.9.116 X X
|
|
154
|
+
rb-sys-build@0.9.116 X X
|
|
155
|
+
rb-sys-env@0.1.2 X X
|
|
156
|
+
rb-sys-env@0.2.2 X X
|
|
157
|
+
redox_syscall@0.5.13 X
|
|
158
|
+
regex@1.11.1 X X
|
|
159
|
+
regex-automata@0.4.9 X X
|
|
160
|
+
regex-syntax@0.8.5 X X
|
|
161
|
+
reqsign@0.16.5 X
|
|
162
|
+
reqwest@0.12.22 X X
|
|
163
|
+
ring@0.17.14 X X
|
|
164
|
+
rsa@0.9.8 X X
|
|
165
|
+
rustc-demangle@0.1.25 X X
|
|
166
|
+
rustc-hash@1.1.0 X X
|
|
167
|
+
rustc_version@0.4.1 X X
|
|
168
|
+
rustls@0.23.29 X X X
|
|
169
|
+
rustls-pki-types@1.12.0 X X
|
|
170
|
+
rustls-webpki@0.103.4 X
|
|
171
|
+
rustversion@1.0.21 X X
|
|
172
|
+
ryu@1.0.20 X X
|
|
173
|
+
salsa20@0.10.2 X X
|
|
174
|
+
scopeguard@1.2.0 X X
|
|
175
|
+
scrypt@0.11.0 X X
|
|
176
|
+
semver@1.0.26 X X
|
|
177
|
+
seq-macro@0.3.6 X X
|
|
178
|
+
serde@1.0.219 X X
|
|
179
|
+
serde_derive@1.0.219 X X
|
|
180
|
+
serde_json@1.0.140 X X
|
|
181
|
+
serde_urlencoded@0.7.1 X X
|
|
182
|
+
sha1@0.10.6 X X
|
|
183
|
+
sha2@0.10.9 X X
|
|
184
|
+
shell-words@1.1.0 X X
|
|
185
|
+
shlex@1.3.0 X X
|
|
186
|
+
signal-hook-registry@1.4.5 X X
|
|
187
|
+
signature@2.2.0 X X
|
|
188
|
+
simple_asn1@0.6.3 X
|
|
189
|
+
slab@0.4.10 X
|
|
190
|
+
smallvec@1.15.1 X X
|
|
191
|
+
socket2@0.5.10 X X
|
|
192
|
+
socket2@0.6.0 X X
|
|
193
|
+
spin@0.9.8 X
|
|
194
|
+
spinning_top@0.3.0 X X
|
|
195
|
+
spki@0.7.3 X X
|
|
196
|
+
stable_deref_trait@1.2.0 X X
|
|
197
|
+
subtle@2.6.1 X
|
|
198
|
+
syn@2.0.104 X X
|
|
199
|
+
sync_wrapper@1.0.2 X
|
|
200
|
+
synstructure@0.13.2 X
|
|
201
|
+
thiserror@2.0.12 X X
|
|
202
|
+
thiserror-impl@2.0.12 X X
|
|
203
|
+
time@0.3.41 X X
|
|
204
|
+
time-core@0.1.4 X X
|
|
205
|
+
time-macros@0.2.22 X X
|
|
206
|
+
tinystr@0.8.1 X
|
|
207
|
+
tokio@1.47.1 X
|
|
208
|
+
tokio-macros@2.5.0 X
|
|
209
|
+
tokio-rustls@0.26.2 X X
|
|
210
|
+
tokio-util@0.7.15 X
|
|
211
|
+
tower@0.5.2 X
|
|
212
|
+
tower-http@0.6.6 X
|
|
213
|
+
tower-layer@0.3.3 X
|
|
214
|
+
tower-service@0.3.3 X
|
|
215
|
+
tracing@0.1.41 X
|
|
216
|
+
tracing-core@0.1.34 X
|
|
217
|
+
try-lock@0.2.5 X
|
|
218
|
+
typenum@1.18.0 X X
|
|
219
|
+
unicode-ident@1.0.18 X X X
|
|
220
|
+
untrusted@0.9.0 X
|
|
221
|
+
url@2.5.4 X X
|
|
222
|
+
utf8_iter@1.0.4 X X
|
|
223
|
+
uuid@1.17.0 X X
|
|
224
|
+
version_check@0.9.5 X X
|
|
225
|
+
want@0.3.1 X
|
|
226
|
+
wasi@0.11.1+wasi-snapshot-preview1 X X X
|
|
227
|
+
wasi@0.14.2+wasi-0.2.4 X X X
|
|
228
|
+
wasm-bindgen@0.2.100 X X
|
|
229
|
+
wasm-bindgen-backend@0.2.100 X X
|
|
230
|
+
wasm-bindgen-futures@0.4.50 X X
|
|
231
|
+
wasm-bindgen-macro@0.2.100 X X
|
|
232
|
+
wasm-bindgen-macro-support@0.2.100 X X
|
|
233
|
+
wasm-bindgen-shared@0.2.100 X X
|
|
234
|
+
wasm-streams@0.4.2 X X
|
|
235
|
+
web-sys@0.3.77 X X
|
|
236
|
+
web-time@1.1.0 X X
|
|
237
|
+
webpki-roots@1.0.1 X
|
|
238
|
+
winapi@0.3.9 X X
|
|
239
|
+
winapi-i686-pc-windows-gnu@0.4.0 X X
|
|
240
|
+
winapi-x86_64-pc-windows-gnu@0.4.0 X X
|
|
241
|
+
windows-core@0.61.2 X X
|
|
242
|
+
windows-implement@0.60.0 X X
|
|
243
|
+
windows-interface@0.59.1 X X
|
|
244
|
+
windows-link@0.1.3 X X
|
|
245
|
+
windows-result@0.3.4 X X
|
|
246
|
+
windows-strings@0.4.2 X X
|
|
247
|
+
windows-sys@0.52.0 X X
|
|
248
|
+
windows-sys@0.59.0 X X
|
|
249
|
+
windows-targets@0.52.6 X X
|
|
250
|
+
windows-targets@0.53.2 X X
|
|
251
|
+
windows_aarch64_gnullvm@0.52.6 X X
|
|
252
|
+
windows_aarch64_gnullvm@0.53.0 X X
|
|
253
|
+
windows_aarch64_msvc@0.52.6 X X
|
|
254
|
+
windows_aarch64_msvc@0.53.0 X X
|
|
255
|
+
windows_i686_gnu@0.52.6 X X
|
|
256
|
+
windows_i686_gnu@0.53.0 X X
|
|
257
|
+
windows_i686_gnullvm@0.52.6 X X
|
|
258
|
+
windows_i686_gnullvm@0.53.0 X X
|
|
259
|
+
windows_i686_msvc@0.52.6 X X
|
|
260
|
+
windows_i686_msvc@0.53.0 X X
|
|
261
|
+
windows_x86_64_gnu@0.52.6 X X
|
|
262
|
+
windows_x86_64_gnu@0.53.0 X X
|
|
263
|
+
windows_x86_64_gnullvm@0.52.6 X X
|
|
264
|
+
windows_x86_64_gnullvm@0.53.0 X X
|
|
265
|
+
windows_x86_64_msvc@0.52.6 X X
|
|
266
|
+
windows_x86_64_msvc@0.53.0 X X
|
|
267
|
+
wit-bindgen-rt@0.39.0 X X X
|
|
268
|
+
writeable@0.6.1 X
|
|
269
|
+
yoke@0.8.0 X
|
|
270
|
+
yoke-derive@0.8.0 X
|
|
271
|
+
zerocopy@0.8.26 X X X
|
|
272
|
+
zerofrom@0.1.6 X
|
|
273
|
+
zerofrom-derive@0.1.6 X
|
|
274
|
+
zeroize@1.8.1 X X
|
|
275
|
+
zerotrie@0.2.2 X
|
|
276
|
+
zerovec@0.11.2 X
|
|
277
|
+
zerovec-derive@0.11.1 X
|
data/Gemfile
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
# frozen_string_literal: true
|
|
19
|
+
|
|
20
|
+
source "https://rubygems.org"
|
|
21
|
+
|
|
22
|
+
# Includes runtime dependencies from opendal.gemspec
|
|
23
|
+
gemspec
|
|
24
|
+
|
|
25
|
+
group :development, :test do
|
|
26
|
+
gem "rake", ">= 13.2"
|
|
27
|
+
gem "rb_sys", "~> 0.9.110" # for Makefile generation in extconf.rb
|
|
28
|
+
gem "rake-compiler", "~> 1.2.9" # to build a debug build
|
|
29
|
+
gem "minitest", "~> 5.25.0" # test library
|
|
30
|
+
gem "minitest-reporters", "~> 1.7.1" # better test output
|
|
31
|
+
gem "activesupport", "~> 8.0.1" # testing support
|
|
32
|
+
gem "standard", "~> 1.44" # linter with pre-specified rules
|
|
33
|
+
gem "redcarpet", "~> 3.6" # for documentation markdown parsing
|
|
34
|
+
gem "yard-rustdoc", "~> 0.4.1" # to generate YARD documentation from Ruby and Rust source
|
|
35
|
+
end
|
data/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Apache OpenDAL™ Ruby Binding
|
|
2
|
+
|
|
3
|
+
[](https://rubygems.org/gems/opendal)
|
|
4
|
+
[](https://rubygems.org/gems/opendal)
|
|
5
|
+
|
|
6
|
+
OpenDAL's Ruby [gem](https://rubygems.org/gems/opendal).
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
Read OpenDAL's [ruby](https://opendal.apache.org/docs/ruby/) documentation.
|
|
11
|
+
|
|
12
|
+
You can find Rust documentation [here](https://docs.rs/opendal/latest/opendal/index.html).
|
|
13
|
+
|
|
14
|
+
## Get started
|
|
15
|
+
|
|
16
|
+
### Installation
|
|
17
|
+
|
|
18
|
+
Install gem:
|
|
19
|
+
|
|
20
|
+
```shell
|
|
21
|
+
bundle add opendal
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
or add it in Gemfile:
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
# Gemfile
|
|
28
|
+
|
|
29
|
+
source "https://rubygems.org"
|
|
30
|
+
|
|
31
|
+
gem 'opendal'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Examples
|
|
35
|
+
|
|
36
|
+
#### File operations with an in-memory storage
|
|
37
|
+
|
|
38
|
+
```ruby
|
|
39
|
+
require 'opendal'
|
|
40
|
+
|
|
41
|
+
op = OpenDal::Operator.new("memory", {})
|
|
42
|
+
op.write("file", "hello world")
|
|
43
|
+
puts op.read("file") # => "hello world"
|
|
44
|
+
puts ""
|
|
45
|
+
|
|
46
|
+
puts "List:", op.list("").map { |e| e.path }
|
|
47
|
+
puts ""
|
|
48
|
+
|
|
49
|
+
puts "Stat"
|
|
50
|
+
puts op.stat("file").inspect # => #<OpenDal::Metadata mode: File, content_type: , content_length: 11>
|
|
51
|
+
puts ""
|
|
52
|
+
|
|
53
|
+
puts "Deleting 'file'"
|
|
54
|
+
op.delete("/file")
|
|
55
|
+
puts ""
|
|
56
|
+
|
|
57
|
+
puts "Exist?", op.exist?("/file") # => false
|
|
58
|
+
puts ""
|
|
59
|
+
|
|
60
|
+
puts "Info:", op.info.inspect # => #<OpenDal::OperatorInfo scheme: "memory", root: "/">
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### A S3 operator
|
|
64
|
+
|
|
65
|
+
```ruby
|
|
66
|
+
require 'opendal'
|
|
67
|
+
|
|
68
|
+
op = OpenDal::Operator.new("s3", {
|
|
69
|
+
"endpoint" => "http://localhost:9000",
|
|
70
|
+
"access_key_id" => "minioadmin" ,
|
|
71
|
+
"secret_access_key" => "minioadmin",
|
|
72
|
+
"bucket" => "test",
|
|
73
|
+
"region" => "us-east-1",
|
|
74
|
+
})
|
|
75
|
+
op.write("file", "hello world")
|
|
76
|
+
puts op.read("file") # => "hello world"
|
|
77
|
+
puts ""
|
|
78
|
+
|
|
79
|
+
puts "List:", op.list("").map { |e| e.path }
|
|
80
|
+
puts ""
|
|
81
|
+
|
|
82
|
+
puts "Stat"
|
|
83
|
+
puts op.stat("file").inspect # => #<OpenDal::Metadata mode: File, content_type: binary/octet-stream, content_length: 11>
|
|
84
|
+
puts ""
|
|
85
|
+
|
|
86
|
+
puts "Deleting 'file'"
|
|
87
|
+
op.delete("file")
|
|
88
|
+
puts ""
|
|
89
|
+
|
|
90
|
+
puts "Exist?", op.exist?("file") # => false
|
|
91
|
+
puts ""
|
|
92
|
+
|
|
93
|
+
puts "Info:", op.info.inspect # => #<OpenDal::OperatorInfo scheme: "s3", root: "/">
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### Use middleware
|
|
97
|
+
|
|
98
|
+
```ruby
|
|
99
|
+
require 'opendal'
|
|
100
|
+
|
|
101
|
+
op = OpenDal::Operator.new("s3", {
|
|
102
|
+
"endpoint" => "http://localhost:9000",
|
|
103
|
+
"access_key_id" => "minioadmin" ,
|
|
104
|
+
"secret_access_key" => "minioadmin",
|
|
105
|
+
"bucket" => "test",
|
|
106
|
+
"region" => "us-east-1",
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
op.middleware(OpenDal::Middleware::ConcurrentLimit.new(5))
|
|
110
|
+
op.middleware(OpenDal::Middleware::Retry.new)
|
|
111
|
+
op.middleware(OpenDal::Middleware::Timeout.new(1, 2))
|
|
112
|
+
|
|
113
|
+
op.list("/").map do |e|
|
|
114
|
+
puts e.inspect
|
|
115
|
+
end
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Documentation
|
|
119
|
+
|
|
120
|
+
More detailed documentation is a work in progress.
|
|
121
|
+
|
|
122
|
+
- OpenDAL's [ruby](https://opendal.apache.org/docs/ruby/) documentation
|
|
123
|
+
- Rust [documentation](https://docs.rs/opendal/latest/opendal/index.html)
|
|
124
|
+
- Rust documentation for [services](https://docs.rs/opendal/latest/opendal/services/index.html)
|
|
125
|
+
- Rust documentation for [layers](https://docs.rs/opendal/latest/opendal/layers/index.html) (middlewares in Ruby)
|
|
126
|
+
|
|
127
|
+
## Development
|
|
128
|
+
|
|
129
|
+
Install gem and its dependencies:
|
|
130
|
+
|
|
131
|
+
```shell
|
|
132
|
+
bundle
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Build bindings:
|
|
136
|
+
|
|
137
|
+
```shell
|
|
138
|
+
bundle exec rake compile
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Run tests:
|
|
142
|
+
|
|
143
|
+
```shell
|
|
144
|
+
bundle exec rake test
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Run linters:
|
|
148
|
+
|
|
149
|
+
```shell
|
|
150
|
+
bundle exec rake standard:fix
|
|
151
|
+
rustfmt --config-path ../../rustfmt.toml src/*.rs # Run rustfmt for Rust files
|
|
152
|
+
cargo clippy --fix --all-targets # Run rust linter clippy
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## License and Trademarks
|
|
156
|
+
|
|
157
|
+
Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
|
158
|
+
|
|
159
|
+
Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
# frozen_string_literal: true
|
|
19
|
+
|
|
20
|
+
require "bundler/gem_tasks"
|
|
21
|
+
require "rake/testtask"
|
|
22
|
+
require "rb_sys/extensiontask"
|
|
23
|
+
require "standard/rake"
|
|
24
|
+
|
|
25
|
+
GEMSPEC = Gem::Specification.load("opendal.gemspec")
|
|
26
|
+
CRATE_PACKAGE_NAME = "opendal-ruby"
|
|
27
|
+
|
|
28
|
+
RbSys::ExtensionTask.new(CRATE_PACKAGE_NAME, GEMSPEC) do |ext|
|
|
29
|
+
ext.name = "opendal_ruby"
|
|
30
|
+
ext.ext_dir = "."
|
|
31
|
+
ext.lib_dir = "lib/opendal_ruby"
|
|
32
|
+
|
|
33
|
+
ext.cross_compile = true
|
|
34
|
+
ext.cross_platform = %w[
|
|
35
|
+
x86_64-linux
|
|
36
|
+
arm64-linux
|
|
37
|
+
arm64-darwin
|
|
38
|
+
arm64-darwin23
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
# Override Ruby version requirement for native gems
|
|
42
|
+
# This prevents automatic constraint to the build Ruby version (e.g., >= 3.3, < 3.4.dev)
|
|
43
|
+
ext.cross_compiling do |gem_spec|
|
|
44
|
+
# keep in sync with opendal.gemspec
|
|
45
|
+
gem_spec.required_ruby_version = ">= 3.2", "< 3.5.dev"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
Rake::Task[:test].prerequisites << :compile
|
|
50
|
+
|
|
51
|
+
Rake::TestTask.new do |t|
|
|
52
|
+
t.libs << "lib"
|
|
53
|
+
t.libs << "test"
|
|
54
|
+
t.pattern = "test/**/*_test.rb"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
namespace :doc do
|
|
58
|
+
task default: %i[rustdoc yard]
|
|
59
|
+
|
|
60
|
+
desc "Generate YARD documentation"
|
|
61
|
+
task :yard do
|
|
62
|
+
run("bundle exec yard doc --plugin rustdoc -- lib tmp/doc/opendal_ruby.json")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
desc "Generate Rust documentation as JSON"
|
|
66
|
+
task :rustdoc do
|
|
67
|
+
target_dir = "tmp"
|
|
68
|
+
ext_dir = "opendal-ruby"
|
|
69
|
+
run(<<~CMD)
|
|
70
|
+
cargo +nightly-2025-03-18 rustdoc \
|
|
71
|
+
--target-dir #{target_dir} \
|
|
72
|
+
--package #{ext_dir} \
|
|
73
|
+
-Zunstable-options \
|
|
74
|
+
--output-format json \
|
|
75
|
+
--lib \
|
|
76
|
+
-- \
|
|
77
|
+
--document-private-items
|
|
78
|
+
CMD
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def run(cmd)
|
|
82
|
+
system(cmd)
|
|
83
|
+
fail if $? != 0
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
task doc: "doc:default"
|
|
88
|
+
task default: %i[compile test standard]
|
|
89
|
+
task purge: %i[clean clobber]
|
|
90
|
+
|
|
91
|
+
desc "report gem version"
|
|
92
|
+
task :version do
|
|
93
|
+
print GEMSPEC.version
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
desc "Resolve symlinks in core directory for gem packaging" # Read more in `.release-ruby.yml`
|
|
97
|
+
task :resolve_symlinks do
|
|
98
|
+
puts "Changing symlinks in core directory to actual files for packaging..."
|
|
99
|
+
Dir.chdir("core") do # a symbolic link to OpenDAL core for packaging
|
|
100
|
+
Dir.glob("**/*", File::FNM_DOTMATCH).each do |file|
|
|
101
|
+
next unless File.symlink?(file)
|
|
102
|
+
|
|
103
|
+
link_target = File.readlink(file)
|
|
104
|
+
resolved_path = File.expand_path(link_target, File.dirname(file))
|
|
105
|
+
|
|
106
|
+
if File.exist?(resolved_path)
|
|
107
|
+
puts "Resolving symlink: #{file} -> #{link_target}"
|
|
108
|
+
File.delete(file)
|
|
109
|
+
FileUtils.cp(resolved_path, file)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Hook into build task to resolve symlinks first
|
|
116
|
+
Rake::Task["build"].enhance([:resolve_symlinks]) if Rake::Task.task_defined?("build")
|
|
117
|
+
|
|
118
|
+
Rake::Task["release"].clear # clear the existing release task to allow override
|
|
119
|
+
Rake::Task["release:rubygem_push"].clear if Rake::Task.task_defined?("release:rubygem_push")
|
|
120
|
+
|
|
121
|
+
# overrides bundler's default rake release task
|
|
122
|
+
# we removed build and git tagging steps. Read more in `.release-ruby.yml`
|
|
123
|
+
# read more https://github.com/rubygems/rubygems/blob/master/bundler/lib/bundler/gem_helper.rb
|
|
124
|
+
desc "Multi-arch release"
|
|
125
|
+
task release: [
|
|
126
|
+
"release:guard_clean",
|
|
127
|
+
"release:rubygem_push"
|
|
128
|
+
]
|
|
129
|
+
|
|
130
|
+
namespace :release do
|
|
131
|
+
desc "Push all gems to RubyGems"
|
|
132
|
+
task :rubygem_push do
|
|
133
|
+
# Push all gem files (source + platform-specific) like Nokogiri does
|
|
134
|
+
# Bundler's built_gem_path only returns the last modified gem, so we glob all gems instead
|
|
135
|
+
gem_files = Gem::Util.glob_files_in_dir("#{GEMSPEC.name}-*.gem", "pkg").sort
|
|
136
|
+
|
|
137
|
+
if gem_files.empty?
|
|
138
|
+
abort "No gem files found in pkg/"
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
puts "Found #{gem_files.length} gem(s) to push:"
|
|
142
|
+
gem_files.each { |f| puts " - #{File.basename(f)}" }
|
|
143
|
+
|
|
144
|
+
gem_files.each do |gem_file|
|
|
145
|
+
puts "\nPushing #{File.basename(gem_file)}..."
|
|
146
|
+
sh "gem push #{gem_file}"
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|