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.
Files changed (191) hide show
  1. checksums.yaml +7 -0
  2. data/.standard.yml +20 -0
  3. data/.tool-versions +1 -0
  4. data/.yardopts +1 -0
  5. data/DEPENDENCIES.md +9 -0
  6. data/DEPENDENCIES.rust.tsv +277 -0
  7. data/Gemfile +35 -0
  8. data/README.md +159 -0
  9. data/Rakefile +149 -0
  10. data/core/CHANGELOG.md +4929 -0
  11. data/core/CONTRIBUTING.md +61 -0
  12. data/core/DEPENDENCIES.md +3 -0
  13. data/core/DEPENDENCIES.rust.tsv +185 -0
  14. data/core/LICENSE +201 -0
  15. data/core/README.md +228 -0
  16. data/core/benches/README.md +18 -0
  17. data/core/benches/ops/README.md +26 -0
  18. data/core/benches/types/README.md +9 -0
  19. data/core/benches/vs_fs/README.md +35 -0
  20. data/core/benches/vs_s3/README.md +55 -0
  21. data/core/edge/README.md +3 -0
  22. data/core/edge/file_write_on_full_disk/README.md +14 -0
  23. data/core/edge/s3_aws_assume_role_with_web_identity/README.md +18 -0
  24. data/core/edge/s3_read_on_wasm/.gitignore +3 -0
  25. data/core/edge/s3_read_on_wasm/README.md +42 -0
  26. data/core/edge/s3_read_on_wasm/webdriver.json +15 -0
  27. data/core/examples/README.md +23 -0
  28. data/core/examples/basic/README.md +15 -0
  29. data/core/examples/concurrent-upload/README.md +15 -0
  30. data/core/examples/multipart-upload/README.md +15 -0
  31. data/core/fuzz/.gitignore +5 -0
  32. data/core/fuzz/README.md +68 -0
  33. data/core/src/docs/comparisons/vs_object_store.md +183 -0
  34. data/core/src/docs/performance/concurrent_write.md +101 -0
  35. data/core/src/docs/performance/http_optimization.md +124 -0
  36. data/core/src/docs/rfcs/0000_example.md +74 -0
  37. data/core/src/docs/rfcs/0000_foyer_integration.md +111 -0
  38. data/core/src/docs/rfcs/0041_object_native_api.md +185 -0
  39. data/core/src/docs/rfcs/0044_error_handle.md +198 -0
  40. data/core/src/docs/rfcs/0057_auto_region.md +160 -0
  41. data/core/src/docs/rfcs/0069_object_stream.md +145 -0
  42. data/core/src/docs/rfcs/0090_limited_reader.md +155 -0
  43. data/core/src/docs/rfcs/0112_path_normalization.md +79 -0
  44. data/core/src/docs/rfcs/0191_async_streaming_io.md +328 -0
  45. data/core/src/docs/rfcs/0203_remove_credential.md +96 -0
  46. data/core/src/docs/rfcs/0221_create_dir.md +89 -0
  47. data/core/src/docs/rfcs/0247_retryable_error.md +87 -0
  48. data/core/src/docs/rfcs/0293_object_id.md +67 -0
  49. data/core/src/docs/rfcs/0337_dir_entry.md +191 -0
  50. data/core/src/docs/rfcs/0409_accessor_capabilities.md +67 -0
  51. data/core/src/docs/rfcs/0413_presign.md +154 -0
  52. data/core/src/docs/rfcs/0423_command_line_interface.md +268 -0
  53. data/core/src/docs/rfcs/0429_init_from_iter.md +107 -0
  54. data/core/src/docs/rfcs/0438_multipart.md +163 -0
  55. data/core/src/docs/rfcs/0443_gateway.md +73 -0
  56. data/core/src/docs/rfcs/0501_new_builder.md +111 -0
  57. data/core/src/docs/rfcs/0554_write_refactor.md +96 -0
  58. data/core/src/docs/rfcs/0561_list_metadata_reuse.md +210 -0
  59. data/core/src/docs/rfcs/0599_blocking_api.md +157 -0
  60. data/core/src/docs/rfcs/0623_redis_service.md +300 -0
  61. data/core/src/docs/rfcs/0627_split_capabilities.md +89 -0
  62. data/core/src/docs/rfcs/0661_path_in_accessor.md +126 -0
  63. data/core/src/docs/rfcs/0793_generic_kv_services.md +209 -0
  64. data/core/src/docs/rfcs/0926_object_reader.md +93 -0
  65. data/core/src/docs/rfcs/0977_refactor_error.md +151 -0
  66. data/core/src/docs/rfcs/1085_object_handler.md +73 -0
  67. data/core/src/docs/rfcs/1391_object_metadataer.md +110 -0
  68. data/core/src/docs/rfcs/1398_query_based_metadata.md +125 -0
  69. data/core/src/docs/rfcs/1420_object_writer.md +147 -0
  70. data/core/src/docs/rfcs/1477_remove_object_concept.md +159 -0
  71. data/core/src/docs/rfcs/1735_operation_extension.md +117 -0
  72. data/core/src/docs/rfcs/2083_writer_sink_api.md +106 -0
  73. data/core/src/docs/rfcs/2133_append_api.md +88 -0
  74. data/core/src/docs/rfcs/2299_chain_based_operator_api.md +99 -0
  75. data/core/src/docs/rfcs/2602_object_versioning.md +138 -0
  76. data/core/src/docs/rfcs/2758_merge_append_into_write.md +79 -0
  77. data/core/src/docs/rfcs/2774_lister_api.md +66 -0
  78. data/core/src/docs/rfcs/2779_list_with_metakey.md +143 -0
  79. data/core/src/docs/rfcs/2852_native_capability.md +58 -0
  80. data/core/src/docs/rfcs/2884_merge_range_read_into_read.md +80 -0
  81. data/core/src/docs/rfcs/3017_remove_write_copy_from.md +94 -0
  82. data/core/src/docs/rfcs/3197_config.md +237 -0
  83. data/core/src/docs/rfcs/3232_align_list_api.md +69 -0
  84. data/core/src/docs/rfcs/3243_list_prefix.md +128 -0
  85. data/core/src/docs/rfcs/3356_lazy_reader.md +111 -0
  86. data/core/src/docs/rfcs/3526_list_recursive.md +59 -0
  87. data/core/src/docs/rfcs/3574_concurrent_stat_in_list.md +80 -0
  88. data/core/src/docs/rfcs/3734_buffered_reader.md +64 -0
  89. data/core/src/docs/rfcs/3898_concurrent_writer.md +66 -0
  90. data/core/src/docs/rfcs/3911_deleter_api.md +165 -0
  91. data/core/src/docs/rfcs/4382_range_based_read.md +213 -0
  92. data/core/src/docs/rfcs/4638_executor.md +215 -0
  93. data/core/src/docs/rfcs/5314_remove_metakey.md +120 -0
  94. data/core/src/docs/rfcs/5444_operator_from_uri.md +162 -0
  95. data/core/src/docs/rfcs/5479_context.md +140 -0
  96. data/core/src/docs/rfcs/5485_conditional_reader.md +112 -0
  97. data/core/src/docs/rfcs/5495_list_with_deleted.md +81 -0
  98. data/core/src/docs/rfcs/5556_write_returns_metadata.md +121 -0
  99. data/core/src/docs/rfcs/5871_read_returns_metadata.md +112 -0
  100. data/core/src/docs/rfcs/6189_remove_native_blocking.md +106 -0
  101. data/core/src/docs/rfcs/6209_glob_support.md +132 -0
  102. data/core/src/docs/rfcs/6213_options_api.md +142 -0
  103. data/core/src/docs/rfcs/README.md +62 -0
  104. data/core/src/docs/upgrade.md +1556 -0
  105. data/core/src/services/aliyun_drive/docs.md +61 -0
  106. data/core/src/services/alluxio/docs.md +45 -0
  107. data/core/src/services/azblob/docs.md +77 -0
  108. data/core/src/services/azdls/docs.md +73 -0
  109. data/core/src/services/azfile/docs.md +65 -0
  110. data/core/src/services/b2/docs.md +54 -0
  111. data/core/src/services/cacache/docs.md +38 -0
  112. data/core/src/services/cloudflare_kv/docs.md +21 -0
  113. data/core/src/services/cos/docs.md +55 -0
  114. data/core/src/services/d1/docs.md +48 -0
  115. data/core/src/services/dashmap/docs.md +38 -0
  116. data/core/src/services/dbfs/docs.md +57 -0
  117. data/core/src/services/dropbox/docs.md +64 -0
  118. data/core/src/services/etcd/docs.md +45 -0
  119. data/core/src/services/foundationdb/docs.md +42 -0
  120. data/core/src/services/fs/docs.md +49 -0
  121. data/core/src/services/ftp/docs.md +42 -0
  122. data/core/src/services/gcs/docs.md +76 -0
  123. data/core/src/services/gdrive/docs.md +65 -0
  124. data/core/src/services/ghac/docs.md +84 -0
  125. data/core/src/services/github/docs.md +52 -0
  126. data/core/src/services/gridfs/docs.md +46 -0
  127. data/core/src/services/hdfs/docs.md +140 -0
  128. data/core/src/services/hdfs_native/docs.md +35 -0
  129. data/core/src/services/http/docs.md +45 -0
  130. data/core/src/services/huggingface/docs.md +61 -0
  131. data/core/src/services/ipfs/docs.md +45 -0
  132. data/core/src/services/ipmfs/docs.md +14 -0
  133. data/core/src/services/koofr/docs.md +51 -0
  134. data/core/src/services/lakefs/docs.md +62 -0
  135. data/core/src/services/memcached/docs.md +47 -0
  136. data/core/src/services/memory/docs.md +36 -0
  137. data/core/src/services/mini_moka/docs.md +19 -0
  138. data/core/src/services/moka/docs.md +42 -0
  139. data/core/src/services/mongodb/docs.md +49 -0
  140. data/core/src/services/monoiofs/docs.md +46 -0
  141. data/core/src/services/mysql/docs.md +47 -0
  142. data/core/src/services/obs/docs.md +54 -0
  143. data/core/src/services/onedrive/docs.md +115 -0
  144. data/core/src/services/opfs/docs.md +18 -0
  145. data/core/src/services/oss/docs.md +74 -0
  146. data/core/src/services/pcloud/docs.md +51 -0
  147. data/core/src/services/persy/docs.md +43 -0
  148. data/core/src/services/postgresql/docs.md +47 -0
  149. data/core/src/services/redb/docs.md +41 -0
  150. data/core/src/services/redis/docs.md +43 -0
  151. data/core/src/services/rocksdb/docs.md +54 -0
  152. data/core/src/services/s3/compatible_services.md +126 -0
  153. data/core/src/services/s3/docs.md +244 -0
  154. data/core/src/services/seafile/docs.md +54 -0
  155. data/core/src/services/sftp/docs.md +49 -0
  156. data/core/src/services/sled/docs.md +39 -0
  157. data/core/src/services/sqlite/docs.md +46 -0
  158. data/core/src/services/surrealdb/docs.md +54 -0
  159. data/core/src/services/swift/compatible_services.md +53 -0
  160. data/core/src/services/swift/docs.md +52 -0
  161. data/core/src/services/tikv/docs.md +43 -0
  162. data/core/src/services/upyun/docs.md +51 -0
  163. data/core/src/services/vercel_artifacts/docs.md +40 -0
  164. data/core/src/services/vercel_blob/docs.md +45 -0
  165. data/core/src/services/webdav/docs.md +49 -0
  166. data/core/src/services/webhdfs/docs.md +90 -0
  167. data/core/src/services/yandex_disk/docs.md +45 -0
  168. data/core/tests/behavior/README.md +77 -0
  169. data/core/tests/data/normal_dir/.gitkeep +0 -0
  170. data/core/tests/data/normal_file.txt +1041 -0
  171. data/core/tests/data/special_dir !@#$%^&()_+-=;',/.gitkeep +0 -0
  172. data/core/tests/data/special_file !@#$%^&()_+-=;',.txt +1041 -0
  173. data/core/users.md +13 -0
  174. data/extconf.rb +24 -0
  175. data/lib/opendal.rb +25 -0
  176. data/lib/opendal_ruby/entry.rb +35 -0
  177. data/lib/opendal_ruby/io.rb +70 -0
  178. data/lib/opendal_ruby/metadata.rb +44 -0
  179. data/lib/opendal_ruby/opendal_ruby.so +0 -0
  180. data/lib/opendal_ruby/operator.rb +29 -0
  181. data/lib/opendal_ruby/operator_info.rb +26 -0
  182. data/opendal.gemspec +91 -0
  183. data/test/blocking_op_test.rb +112 -0
  184. data/test/capability_test.rb +42 -0
  185. data/test/io_test.rb +172 -0
  186. data/test/lister_test.rb +77 -0
  187. data/test/metadata_test.rb +78 -0
  188. data/test/middlewares_test.rb +46 -0
  189. data/test/operator_info_test.rb +35 -0
  190. data/test/test_helper.rb +36 -0
  191. 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,9 @@
1
+ # Dependencies
2
+
3
+ ## Rust Part Dependencies
4
+
5
+ Refer to [DEPENDENCIES.rust.tsv](DEPENDENCIES.rust.tsv) for the full list.
6
+
7
+ ## Ruby Part Dependencies
8
+
9
+ No extra runtime dependencies.
@@ -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
+ [![Gem Version](https://img.shields.io/gem/v/opendal)](https://rubygems.org/gems/opendal)
4
+ [![Gem Downloads (for latest version)](https://img.shields.io/gem/dtv/opendal)](https://rubygems.org/gems/opendal)
5
+
6
+ OpenDAL's Ruby [gem](https://rubygems.org/gems/opendal).
7
+
8
+ ![](https://github.com/apache/opendal/assets/5351546/87bbf6e5-f19e-449a-b368-3e283016c887)
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