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.
- data/bdb.gemspec +1 -1
- data/lib/bdb/simple.rb +19 -1
- 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
|
+
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)
|
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
|