ninjudd-bdb 0.0.5 → 0.0.6

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 (3) hide show
  1. data/bdb.gemspec +1 -1
  2. data/lib/bdb/simple.rb +19 -1
  3. metadata +1 -1
data/bdb.gemspec CHANGED
@@ -2,7 +2,7 @@ BDB_SPEC = Gem::Specification.new do |s|
2
2
  s.platform = Gem::Platform::RUBY
3
3
  s.required_ruby_version = '>=1.8.4'
4
4
  s.name = "bdb"
5
- s.version = "0.0.5"
5
+ s.version = "0.0.6"
6
6
  s.authors = ["Matt Bauer", "Dan Janowski"]
7
7
  s.email = "bauer@pedalbrain.com"
8
8
  s.summary = "A Ruby interface to BerkeleyDB"
data/lib/bdb/simple.rb CHANGED
@@ -19,7 +19,7 @@ class Bdb::Simple
19
19
  @db = Bdb::Db.new
20
20
  @db.flags = Bdb::DB_DUPSORT if dup?
21
21
  @db.btree_compare = lambda do |db, key1, key2|
22
- Marshal.load(key1) <=> Marshal.load(key2)
22
+ compare_absolute(Marshal.load(key1), Marshal.load(key2))
23
23
  end
24
24
  @db.open(nil, file, nil, Bdb::Db::BTREE, Bdb::DB_CREATE, 0)
25
25
  end
@@ -84,4 +84,22 @@ class Bdb::Simple
84
84
  db.close(0)
85
85
  @db = nil
86
86
  end
87
+
88
+ def self.compare_absolute(left, right)
89
+ if left.is_a?(Array) and right.is_a?(Array)
90
+ left.zip(right) do |l,r|
91
+ comp = compare_absolute(l, r)
92
+ return comp unless comp == 0
93
+ end
94
+ left.size == right.size ? 0 : -1
95
+ elsif left.kind_of?(right.class) or right.kind_of?(left.class)
96
+ left <=> right rescue 0
97
+ elsif left.is_a?(NilClass)
98
+ -1
99
+ elsif right.is_a?(NilClass)
100
+ 1
101
+ else
102
+ right.class.name <=> left.class.name
103
+ end
104
+ end
87
105
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ninjudd-bdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Bauer