lora-ruby 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/lora_ruby/version.rb +1 -1
  3. data/src/lib.rs +37 -14
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f225172245d7983494a2d5d498edc749e31629b811453667be8517d7624fde0
4
- data.tar.gz: 36e8d24e24003755b36abcf34354df4c7af42125d969c27c2e76de551d2cb06d
3
+ metadata.gz: 93108d86cc62dc1e96f8f4f486696b9b422a4ccf62119e56c79131df476a8144
4
+ data.tar.gz: a2d547e01de27be476b969c8cecfdaaf940eda38b58ea39a930a16bf57001c98
5
5
  SHA512:
6
- metadata.gz: 48356ff0802ae5949f2d000580779c865b793dc562d8068deb92e72eefc7a2409fa9890b7a69ff336ef8c0ba2d67c27da57f253e6db2674920715b71320f7c07
7
- data.tar.gz: 4446b8aac9ac26302ccb688784c6bd20f3e6f4ca80d6fb66525505c7022964f672cf9272876584672ce8b34a183708a50f9cc54e785ae75420394b365ecc43f2
6
+ metadata.gz: 53a6ef06bc8d0e456d53100fde0ee2aeae43085d4923b65842f70b014360d7ab18025f70f7ac09a101fb7916cfabe0f385fa632cea1b8105440a24011ef657f7
7
+ data.tar.gz: 90f93b470012d15fb981e79db8ae47913396f95de2a7379e3258749ef5bbaab70b9712d480f268759c96a4e0996bbd1bed044b1406e1dac4ef76edf1aba9ad90
@@ -10,5 +10,5 @@ module LoraRuby
10
10
  # Guard against redefinition so re-requiring this file (or loading
11
11
  # both paths) doesn't emit a "warning: already initialized constant"
12
12
  # when the native extension loads second with the identical value.
13
- VERSION = "0.4.0" unless const_defined?(:VERSION)
13
+ VERSION = "0.5.0" unless const_defined?(:VERSION)
14
14
  end
data/src/lib.rs CHANGED
@@ -24,8 +24,8 @@ use magnus::{
24
24
  };
25
25
 
26
26
  use lora_database::{
27
- Database as InnerDatabase, ExecuteOptions, InMemoryGraph, LoraValue, QueryResult, ResultFormat,
28
- WalConfig,
27
+ Database as InnerDatabase, DatabaseOpenOptions, ExecuteOptions, InMemoryGraph, LoraValue,
28
+ QueryResult, ResultFormat,
29
29
  };
30
30
  use lora_store::{
31
31
  LoraDate, LoraDateTime, LoraDuration, LoraLocalDateTime, LoraLocalTime, LoraPoint, LoraTime,
@@ -138,8 +138,9 @@ impl Database {
138
138
  // singletons so callers can use whichever idiom they prefer; both are
139
139
  // cost-equivalent.
140
140
  fn database_new(ruby: &Ruby, args: &[Value]) -> Result<Database, MagnusError> {
141
- let wal_dir = optional_wal_dir_arg(ruby, args)?;
142
- let db = without_gvl(move || open_database(wal_dir)).map_err(|e| query_error(ruby, e))?;
141
+ let (database_name, options) = database_open_args(ruby, args)?;
142
+ let db = without_gvl(move || open_database(database_name, options))
143
+ .map_err(|e| query_error(ruby, e))?;
143
144
  Ok(Database::from_db(db))
144
145
  }
145
146
 
@@ -233,28 +234,50 @@ fn snapshot_meta_to_rhash(
233
234
  Ok(h)
234
235
  }
235
236
 
236
- fn optional_wal_dir_arg(ruby: &Ruby, args: &[Value]) -> Result<Option<String>, MagnusError> {
237
+ fn database_open_args(
238
+ ruby: &Ruby,
239
+ args: &[Value],
240
+ ) -> Result<(Option<String>, DatabaseOpenOptions), MagnusError> {
237
241
  match args.len() {
238
- 0 => Ok(None),
242
+ 0 => Ok((None, DatabaseOpenOptions::default())),
239
243
  1 => {
240
244
  if args[0].is_nil() {
241
- Ok(None)
245
+ Ok((None, DatabaseOpenOptions::default()))
246
+ } else {
247
+ Ok((
248
+ Some(RString::try_convert(args[0])?.to_string()?),
249
+ DatabaseOpenOptions::default(),
250
+ ))
251
+ }
252
+ }
253
+ 2 => {
254
+ let database_name = if args[0].is_nil() {
255
+ None
242
256
  } else {
243
- Ok(Some(RString::try_convert(args[0])?.to_string()?))
257
+ Some(RString::try_convert(args[0])?.to_string()?)
258
+ };
259
+ let mut options = DatabaseOpenOptions::default();
260
+ let hash = RHash::try_convert(args[1])?;
261
+ if let Some(dir) = hash_get_either(ruby, hash, "database_dir")
262
+ .or_else(|| hash_get_either(ruby, hash, "databaseDir"))
263
+ {
264
+ options.database_dir = RString::try_convert(dir)?.to_string()?.into();
244
265
  }
266
+ Ok((database_name, options))
245
267
  }
246
268
  n => Err(MagnusError::new(
247
269
  ruby.exception_arg_error(),
248
- format!("wrong number of arguments (given {n}, expected 0..1)"),
270
+ format!("wrong number of arguments (given {n}, expected 0..2)"),
249
271
  )),
250
272
  }
251
273
  }
252
274
 
253
- fn open_database(wal_dir: Option<String>) -> Result<Arc<InnerDatabase<InMemoryGraph>>, String> {
254
- let db = match wal_dir {
255
- Some(dir) => {
256
- InnerDatabase::open_with_wal(WalConfig::enabled(dir)).map_err(|e| e.to_string())?
257
- }
275
+ fn open_database(
276
+ database_name: Option<String>,
277
+ options: DatabaseOpenOptions,
278
+ ) -> Result<Arc<InnerDatabase<InMemoryGraph>>, String> {
279
+ let db = match database_name {
280
+ Some(name) => InnerDatabase::open_named(name, options).map_err(|e| e.to_string())?,
258
281
  None => InnerDatabase::in_memory(),
259
282
  };
260
283
  Ok(Arc::new(db))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lora-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LoraDB, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-04-25 00:00:00.000000000 Z
11
+ date: 2026-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb_sys