ninjudd-bdb 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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