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
data/test/io_test.rb ADDED
@@ -0,0 +1,172 @@
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 "test_helper"
21
+ require "tmpdir"
22
+
23
+ class IOTest < ActiveSupport::TestCase
24
+ setup do
25
+ @root = Dir.mktmpdir
26
+ File.write(
27
+ "#{@root}/sample",
28
+ <<~EOF
29
+ Sample data for testing
30
+ A line after title
31
+ EOF
32
+ )
33
+ @op = OpenDal::Operator.new("fs", {"root" => @root})
34
+ @io_read = @op.open("sample", "r")
35
+ @io_write = @op.open("sample_write", "w")
36
+ end
37
+
38
+ teardown do
39
+ @io_read.close
40
+ @io_write.close
41
+ FileUtils.remove_entry(@root) if File.exist?(@root)
42
+ end
43
+
44
+ test "#binmode? returns" do
45
+ assert_not @io_read.binmode?
46
+ end
47
+
48
+ test "#binmode returns" do
49
+ assert_nothing_raised do
50
+ @io_read.binmode
51
+ end
52
+ end
53
+
54
+ test "#close closes IO" do
55
+ assert_nothing_raised do
56
+ @io_read.close
57
+ end
58
+ end
59
+
60
+ test "#close_read closes reader" do
61
+ assert_nothing_raised do
62
+ @io_read.close_read
63
+ end
64
+ end
65
+
66
+ test "#close_write closes writer" do
67
+ assert_nothing_raised do
68
+ @io_read.close_write
69
+ end
70
+ end
71
+
72
+ test "#closed? returns" do
73
+ assert_not @io_read.closed?
74
+ end
75
+
76
+ test "#closed_read? returns" do
77
+ assert_not @io_read.closed_read?
78
+ end
79
+
80
+ test "#closed_write? returns" do
81
+ assert @io_read.closed_write?
82
+ end
83
+
84
+ test "#read reads" do
85
+ result = @io_read.read
86
+
87
+ assert_equal "Sample data for testing\nA line after title\n", result
88
+ # should be `assert_equal Encoding::UTF_8, result.encoding`
89
+ end
90
+
91
+ test "#read reads with nil" do
92
+ result = @io_read.read(nil)
93
+
94
+ assert_equal "Sample data for testing\nA line after title\n", result
95
+ end
96
+
97
+ test "#read reads with size" do
98
+ result = @io_read.read(6)
99
+
100
+ assert_equal "Sample", result
101
+ end
102
+
103
+ test "#read raises ArgumentError with -1" do
104
+ assert_raise(ArgumentError) do |err|
105
+ @io_read.read(-1)
106
+
107
+ assert_equal "negative length -1 given", err.message
108
+ end
109
+ end
110
+
111
+ test "#read reads to a buffer" do
112
+ buffer = +"hi " # unfreezes string literal
113
+ result = @io_read.read(6, buffer)
114
+
115
+ assert_equal "Sample", result
116
+ assert_equal "hi Sample", buffer
117
+ end
118
+
119
+ test "#write writes" do
120
+ @io_write.write("This is a sentence.")
121
+ @io_write.close
122
+ assert_equal "This is a sentence.", File.read("#{@root}/sample_write")
123
+ end
124
+
125
+ test "#readline reads a line" do
126
+ line = @io_read.readline
127
+
128
+ assert_equal "Sample data for testing\n", line
129
+ # should be `assert_equal Encoding::UTF_8, line.encoding`
130
+ end
131
+
132
+ test "#readlines reads all lines" do
133
+ lines = @io_read.readlines
134
+
135
+ assert_equal ["Sample data for testing\n", "A line after title\n"], lines
136
+ # should be `assert_equal Encoding::UTF_8, lines.first.encoding`
137
+ end
138
+
139
+ test "#tell returns position" do
140
+ assert_equal 0, @io_read.tell
141
+ end
142
+
143
+ test "#pos= moves position" do
144
+ @io_read.pos = 5
145
+
146
+ assert_equal 5, @io_read.pos
147
+ end
148
+
149
+ test "#rewind moves position to start" do
150
+ @io_read.pos = 5
151
+ @io_read.rewind
152
+
153
+ assert_equal 0, @io_read.pos
154
+ end
155
+
156
+ test "#eof returns" do
157
+ assert_not @io_read.eof
158
+ end
159
+
160
+ test "#eof? returns" do
161
+ @io_read.read
162
+ assert @io_read.eof?
163
+ end
164
+
165
+ test "#length returns" do
166
+ assert_equal 43, @io_read.length
167
+ end
168
+
169
+ test "#size returns" do
170
+ assert_equal 43, @io_read.size
171
+ end
172
+ end
@@ -0,0 +1,77 @@
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 "test_helper"
21
+ require "tmpdir"
22
+
23
+ class ListerTest < ActiveSupport::TestCase
24
+ setup do
25
+ @root = Dir.mktmpdir
26
+ File.write("#{@root}/sample", "Sample data for testing")
27
+ Dir.mkdir("#{@root}/sub")
28
+ File.write("#{@root}/sub/sample", "Sample data for testing")
29
+ @op = OpenDal::Operator.new("fs", {"root" => @root})
30
+ end
31
+
32
+ test "lists the directory" do
33
+ lister = @op.list("")
34
+
35
+ lists = lister.map(&:to_h).map { |e| e[:path] }.sort
36
+
37
+ assert_equal ["/", "sample", "sub/"], lists
38
+ end
39
+
40
+ test "list returns the entry" do
41
+ entry = @op.list("/").first
42
+
43
+ assert entry.is_a?(OpenDal::Entry)
44
+ assert entry.name.length > 0
45
+ end
46
+
47
+ test "entry has the metadata" do
48
+ metadata = @op.list("sample").first.metadata
49
+
50
+ assert metadata.file?
51
+ assert !metadata.dir?
52
+ end
53
+
54
+ test "lists the directory recursively" do
55
+ lister = @op.list("", recursive: true)
56
+
57
+ lists = lister.map(&:to_h).map { |e| e[:path] }.sort
58
+
59
+ assert_equal ["/", "sample", "sub/", "sub/sample"], lists
60
+ end
61
+
62
+ test "lists the directory with limit" do
63
+ lister = @op.list("", limit: 1)
64
+
65
+ lists = lister.map(&:to_h).map { |e| e[:path] }.sort
66
+
67
+ assert_equal ["/", "sample", "sub/"], lists
68
+ end
69
+
70
+ test "lists the directory with start_after" do
71
+ lister = @op.list("", start_after: "sub/")
72
+
73
+ lists = lister.map(&:to_h).map { |e| e[:path] }.sort
74
+
75
+ assert_equal ["/", "sample", "sub/"], lists # fs backend doesn't support start_after
76
+ end
77
+ end
@@ -0,0 +1,78 @@
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 "test_helper"
21
+
22
+ class MetadataTest < ActiveSupport::TestCase
23
+ setup do
24
+ @op = OpenDal::Operator.new("memory", {})
25
+ @op.write("/file", "OpenDAL Ruby is ready.")
26
+ end
27
+
28
+ test "returns metadata" do
29
+ metadata = @op.stat("file")
30
+
31
+ assert_nothing_raised do
32
+ metadata.inspect
33
+ end
34
+ end
35
+
36
+ test "#file? works" do
37
+ metadata = @op.stat("file")
38
+
39
+ assert metadata.file?
40
+ end
41
+
42
+ test "#dir? works" do
43
+ metadata = @op.stat("/")
44
+ assert metadata.dir?
45
+
46
+ assert !@op.stat("file").dir?
47
+ end
48
+
49
+ test "#mode works" do
50
+ metadata = @op.stat("file")
51
+ assert_equal OpenDal::Metadata::FILE, metadata.mode
52
+ end
53
+
54
+ test "#content_disposition works" do
55
+ metadata = @op.stat("file")
56
+ assert_nil metadata.content_disposition
57
+ end
58
+
59
+ test "#content_length works" do
60
+ metadata = @op.stat("file")
61
+ assert_equal 22, metadata.content_length
62
+ end
63
+
64
+ test "#content_md5 works" do
65
+ metadata = @op.stat("file")
66
+ assert_nil metadata.content_md5
67
+ end
68
+
69
+ test "#content_type works" do
70
+ metadata = @op.stat("file")
71
+ assert_nil metadata.content_type
72
+ end
73
+
74
+ test "#etag works" do
75
+ metadata = @op.stat("file")
76
+ assert_nil metadata.etag
77
+ end
78
+ end
@@ -0,0 +1,46 @@
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 "test_helper"
21
+
22
+ class MiddlewaresTest < ActiveSupport::TestCase
23
+ test "builds a retry middleware" do
24
+ assert_nothing_raised do
25
+ OpenDal::Middleware::Retry.new
26
+ end
27
+ end
28
+
29
+ test "builds a concurrent limit middleware" do
30
+ assert_nothing_raised do
31
+ OpenDal::Middleware::ConcurrentLimit.new(10)
32
+ end
33
+ end
34
+
35
+ test "builds a throttle middleware" do
36
+ assert_nothing_raised do
37
+ OpenDal::Middleware::Throttle.new(100, 10)
38
+ end
39
+ end
40
+
41
+ test "builds a timeout middleware" do
42
+ assert_nothing_raised do
43
+ OpenDal::Middleware::Timeout.new(1.23, 1.0)
44
+ end
45
+ end
46
+ end
@@ -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
+ require "test_helper"
21
+
22
+ class OperatorInfoTest < ActiveSupport::TestCase
23
+ setup do
24
+ @op = OpenDal::Operator.new("memory", {})
25
+ end
26
+
27
+ test "returns meta information" do
28
+ info = @op.info
29
+
30
+ assert_equal "memory", info.scheme
31
+ assert_equal "/", info.root
32
+ assert info.name.length > 0
33
+ assert info.capability.stat
34
+ end
35
+ end
@@ -0,0 +1,36 @@
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 "active_support"
21
+ require "minitest/autorun"
22
+ require "minitest/reporters"
23
+
24
+ Minitest::Reporters.use!([Minitest::Reporters::DefaultReporter.new(color: true)])
25
+
26
+ require "opendal"
27
+
28
+ # Uses `ActiveSupport::TestCase` for additional features including:
29
+ # - additional assertions
30
+ # - file fixtures
31
+ # - parallel worker
32
+ #
33
+ # Read more https://edgeapi.rubyonrails.org/classes/ActiveSupport/TestCase.html
34
+ class ActiveSupport::TestCase
35
+ parallelize(workers: :number_of_processors)
36
+ end
metadata ADDED
@@ -0,0 +1,240 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opendal
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.6.pre.rc.1
5
+ platform: aarch64-linux
6
+ authors:
7
+ - OpenDAL Contributors
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-10-01 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - dev@opendal.apache.org
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - "./extconf.rb"
21
+ - ".standard.yml"
22
+ - ".tool-versions"
23
+ - ".yardopts"
24
+ - DEPENDENCIES.md
25
+ - DEPENDENCIES.rust.tsv
26
+ - Gemfile
27
+ - README.md
28
+ - Rakefile
29
+ - core/CHANGELOG.md
30
+ - core/CONTRIBUTING.md
31
+ - core/DEPENDENCIES.md
32
+ - core/DEPENDENCIES.rust.tsv
33
+ - core/LICENSE
34
+ - core/README.md
35
+ - core/benches/README.md
36
+ - core/benches/ops/README.md
37
+ - core/benches/types/README.md
38
+ - core/benches/vs_fs/README.md
39
+ - core/benches/vs_s3/README.md
40
+ - core/edge/README.md
41
+ - core/edge/file_write_on_full_disk/README.md
42
+ - core/edge/s3_aws_assume_role_with_web_identity/README.md
43
+ - core/edge/s3_read_on_wasm/.gitignore
44
+ - core/edge/s3_read_on_wasm/README.md
45
+ - core/edge/s3_read_on_wasm/webdriver.json
46
+ - core/examples/README.md
47
+ - core/examples/basic/README.md
48
+ - core/examples/concurrent-upload/README.md
49
+ - core/examples/multipart-upload/README.md
50
+ - core/fuzz/.gitignore
51
+ - core/fuzz/README.md
52
+ - core/src/docs/comparisons/vs_object_store.md
53
+ - core/src/docs/performance/concurrent_write.md
54
+ - core/src/docs/performance/http_optimization.md
55
+ - core/src/docs/rfcs/0000_example.md
56
+ - core/src/docs/rfcs/0000_foyer_integration.md
57
+ - core/src/docs/rfcs/0041_object_native_api.md
58
+ - core/src/docs/rfcs/0044_error_handle.md
59
+ - core/src/docs/rfcs/0057_auto_region.md
60
+ - core/src/docs/rfcs/0069_object_stream.md
61
+ - core/src/docs/rfcs/0090_limited_reader.md
62
+ - core/src/docs/rfcs/0112_path_normalization.md
63
+ - core/src/docs/rfcs/0191_async_streaming_io.md
64
+ - core/src/docs/rfcs/0203_remove_credential.md
65
+ - core/src/docs/rfcs/0221_create_dir.md
66
+ - core/src/docs/rfcs/0247_retryable_error.md
67
+ - core/src/docs/rfcs/0293_object_id.md
68
+ - core/src/docs/rfcs/0337_dir_entry.md
69
+ - core/src/docs/rfcs/0409_accessor_capabilities.md
70
+ - core/src/docs/rfcs/0413_presign.md
71
+ - core/src/docs/rfcs/0423_command_line_interface.md
72
+ - core/src/docs/rfcs/0429_init_from_iter.md
73
+ - core/src/docs/rfcs/0438_multipart.md
74
+ - core/src/docs/rfcs/0443_gateway.md
75
+ - core/src/docs/rfcs/0501_new_builder.md
76
+ - core/src/docs/rfcs/0554_write_refactor.md
77
+ - core/src/docs/rfcs/0561_list_metadata_reuse.md
78
+ - core/src/docs/rfcs/0599_blocking_api.md
79
+ - core/src/docs/rfcs/0623_redis_service.md
80
+ - core/src/docs/rfcs/0627_split_capabilities.md
81
+ - core/src/docs/rfcs/0661_path_in_accessor.md
82
+ - core/src/docs/rfcs/0793_generic_kv_services.md
83
+ - core/src/docs/rfcs/0926_object_reader.md
84
+ - core/src/docs/rfcs/0977_refactor_error.md
85
+ - core/src/docs/rfcs/1085_object_handler.md
86
+ - core/src/docs/rfcs/1391_object_metadataer.md
87
+ - core/src/docs/rfcs/1398_query_based_metadata.md
88
+ - core/src/docs/rfcs/1420_object_writer.md
89
+ - core/src/docs/rfcs/1477_remove_object_concept.md
90
+ - core/src/docs/rfcs/1735_operation_extension.md
91
+ - core/src/docs/rfcs/2083_writer_sink_api.md
92
+ - core/src/docs/rfcs/2133_append_api.md
93
+ - core/src/docs/rfcs/2299_chain_based_operator_api.md
94
+ - core/src/docs/rfcs/2602_object_versioning.md
95
+ - core/src/docs/rfcs/2758_merge_append_into_write.md
96
+ - core/src/docs/rfcs/2774_lister_api.md
97
+ - core/src/docs/rfcs/2779_list_with_metakey.md
98
+ - core/src/docs/rfcs/2852_native_capability.md
99
+ - core/src/docs/rfcs/2884_merge_range_read_into_read.md
100
+ - core/src/docs/rfcs/3017_remove_write_copy_from.md
101
+ - core/src/docs/rfcs/3197_config.md
102
+ - core/src/docs/rfcs/3232_align_list_api.md
103
+ - core/src/docs/rfcs/3243_list_prefix.md
104
+ - core/src/docs/rfcs/3356_lazy_reader.md
105
+ - core/src/docs/rfcs/3526_list_recursive.md
106
+ - core/src/docs/rfcs/3574_concurrent_stat_in_list.md
107
+ - core/src/docs/rfcs/3734_buffered_reader.md
108
+ - core/src/docs/rfcs/3898_concurrent_writer.md
109
+ - core/src/docs/rfcs/3911_deleter_api.md
110
+ - core/src/docs/rfcs/4382_range_based_read.md
111
+ - core/src/docs/rfcs/4638_executor.md
112
+ - core/src/docs/rfcs/5314_remove_metakey.md
113
+ - core/src/docs/rfcs/5444_operator_from_uri.md
114
+ - core/src/docs/rfcs/5479_context.md
115
+ - core/src/docs/rfcs/5485_conditional_reader.md
116
+ - core/src/docs/rfcs/5495_list_with_deleted.md
117
+ - core/src/docs/rfcs/5556_write_returns_metadata.md
118
+ - core/src/docs/rfcs/5871_read_returns_metadata.md
119
+ - core/src/docs/rfcs/6189_remove_native_blocking.md
120
+ - core/src/docs/rfcs/6209_glob_support.md
121
+ - core/src/docs/rfcs/6213_options_api.md
122
+ - core/src/docs/rfcs/README.md
123
+ - core/src/docs/upgrade.md
124
+ - core/src/services/aliyun_drive/docs.md
125
+ - core/src/services/alluxio/docs.md
126
+ - core/src/services/azblob/docs.md
127
+ - core/src/services/azdls/docs.md
128
+ - core/src/services/azfile/docs.md
129
+ - core/src/services/b2/docs.md
130
+ - core/src/services/cacache/docs.md
131
+ - core/src/services/cloudflare_kv/docs.md
132
+ - core/src/services/cos/docs.md
133
+ - core/src/services/d1/docs.md
134
+ - core/src/services/dashmap/docs.md
135
+ - core/src/services/dbfs/docs.md
136
+ - core/src/services/dropbox/docs.md
137
+ - core/src/services/etcd/docs.md
138
+ - core/src/services/foundationdb/docs.md
139
+ - core/src/services/fs/docs.md
140
+ - core/src/services/ftp/docs.md
141
+ - core/src/services/gcs/docs.md
142
+ - core/src/services/gdrive/docs.md
143
+ - core/src/services/ghac/docs.md
144
+ - core/src/services/github/docs.md
145
+ - core/src/services/gridfs/docs.md
146
+ - core/src/services/hdfs/docs.md
147
+ - core/src/services/hdfs_native/docs.md
148
+ - core/src/services/http/docs.md
149
+ - core/src/services/huggingface/docs.md
150
+ - core/src/services/ipfs/docs.md
151
+ - core/src/services/ipmfs/docs.md
152
+ - core/src/services/koofr/docs.md
153
+ - core/src/services/lakefs/docs.md
154
+ - core/src/services/memcached/docs.md
155
+ - core/src/services/memory/docs.md
156
+ - core/src/services/mini_moka/docs.md
157
+ - core/src/services/moka/docs.md
158
+ - core/src/services/mongodb/docs.md
159
+ - core/src/services/monoiofs/docs.md
160
+ - core/src/services/mysql/docs.md
161
+ - core/src/services/obs/docs.md
162
+ - core/src/services/onedrive/docs.md
163
+ - core/src/services/opfs/docs.md
164
+ - core/src/services/oss/docs.md
165
+ - core/src/services/pcloud/docs.md
166
+ - core/src/services/persy/docs.md
167
+ - core/src/services/postgresql/docs.md
168
+ - core/src/services/redb/docs.md
169
+ - core/src/services/redis/docs.md
170
+ - core/src/services/rocksdb/docs.md
171
+ - core/src/services/s3/compatible_services.md
172
+ - core/src/services/s3/docs.md
173
+ - core/src/services/seafile/docs.md
174
+ - core/src/services/sftp/docs.md
175
+ - core/src/services/sled/docs.md
176
+ - core/src/services/sqlite/docs.md
177
+ - core/src/services/surrealdb/docs.md
178
+ - core/src/services/swift/compatible_services.md
179
+ - core/src/services/swift/docs.md
180
+ - core/src/services/tikv/docs.md
181
+ - core/src/services/upyun/docs.md
182
+ - core/src/services/vercel_artifacts/docs.md
183
+ - core/src/services/vercel_blob/docs.md
184
+ - core/src/services/webdav/docs.md
185
+ - core/src/services/webhdfs/docs.md
186
+ - core/src/services/yandex_disk/docs.md
187
+ - core/tests/behavior/README.md
188
+ - core/tests/data/normal_dir/.gitkeep
189
+ - core/tests/data/normal_file.txt
190
+ - core/tests/data/special_dir !@#$%^&()_+-=;',/.gitkeep
191
+ - core/tests/data/special_file !@#$%^&()_+-=;',.txt
192
+ - core/users.md
193
+ - lib/opendal.rb
194
+ - lib/opendal_ruby/entry.rb
195
+ - lib/opendal_ruby/io.rb
196
+ - lib/opendal_ruby/metadata.rb
197
+ - lib/opendal_ruby/opendal_ruby.so
198
+ - lib/opendal_ruby/operator.rb
199
+ - lib/opendal_ruby/operator_info.rb
200
+ - opendal.gemspec
201
+ - test/blocking_op_test.rb
202
+ - test/capability_test.rb
203
+ - test/io_test.rb
204
+ - test/lister_test.rb
205
+ - test/metadata_test.rb
206
+ - test/middlewares_test.rb
207
+ - test/operator_info_test.rb
208
+ - test/test_helper.rb
209
+ homepage: https://opendal.apache.org/
210
+ licenses:
211
+ - Apache-2.0
212
+ metadata:
213
+ homepage_uri: https://opendal.apache.org/
214
+ source_code_uri: https://github.com/apache/opendal
215
+ changelog_uri: https://github.com/apache/opendal/releases
216
+ rubygems_mfa_required: 'true'
217
+ post_install_message:
218
+ rdoc_options: []
219
+ require_paths:
220
+ - lib
221
+ required_ruby_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: '3.2'
226
+ - - "<"
227
+ - !ruby/object:Gem::Version
228
+ version: 3.5.dev
229
+ required_rubygems_version: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ requirements:
235
+ - Rust >= 1.82
236
+ rubygems_version: 3.5.22
237
+ signing_key:
238
+ specification_version: 4
239
+ summary: OpenDAL Ruby Binding
240
+ test_files: []