leveldb 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/native.rb ADDED
@@ -0,0 +1,86 @@
1
+ require 'fiddler'
2
+
3
+ module LevelDB
4
+ module Native
5
+ include Fiddler
6
+
7
+ prefix 'leveldb_'
8
+ dlload 'libleveldb'
9
+
10
+ cdef :open, VOIDP, options: VOIDP, name: VOIDP, errptr: VOIDP
11
+ cdef :put, VOID, db: VOIDP, options: VOIDP, key: VOIDP, keylen: ULONG, val: VOIDP, vallen: ULONG, errptr: VOIDP
12
+ cdef :get, VOIDP, db: VOIDP, options: VOIDP, key: VOIDP, keylen: ULONG, vallen: VOIDP, errptr: VOIDP
13
+ cdef :delete, VOID, db: VOIDP, options: VOIDP, key: VOIDP, keylen: ULONG, errptr: VOIDP
14
+ cdef :destroy_db, VOID, options: VOIDP, name: VOIDP, errptr: VOIDP
15
+ cdef :repair_db, VOID, options: VOIDP, name: VOIDP, errptr: VOIDP
16
+ cdef :release_snapshot, VOID, db: VOIDP, snapshot: VOIDP
17
+ cdef :create_snapshot, VOIDP, db: VOIDP
18
+ cdef :approximate_sizes, VOID, db: VOIDP, num_ranges: INT, range_start_key: VOIDP, range_start_key_len: VOIDP, range_limit_key: VOIDP, range_limit_key_len: VOIDP, sizes: VOIDP
19
+ cdef :close, VOID, db: VOIDP
20
+ cdef :property_value, VOIDP, db: VOIDP, propname: VOIDP
21
+ cdef :compact_range, VOID, db: VOIDP, start_key: VOIDP, start_key_len: ULONG, limit_key: VOIDP, limit_key_len: ULONG
22
+ cdef :free, VOID, ptr: VOIDP
23
+
24
+ cdef :create_iterator, VOIDP, db: VOIDP, options: VOIDP
25
+ cdef :iter_destroy, VOID, iterator: VOIDP
26
+ cdef :iter_seek_to_first, VOID, iterator: VOIDP
27
+ cdef :iter_seek, VOID, iterator: VOIDP, k: VOIDP, klen: ULONG
28
+ cdef :iter_prev, VOID, iterator: VOIDP
29
+ cdef :iter_key, VOIDP, iterator: VOIDP, klen: VOIDP
30
+ cdef :iter_value, VOIDP, iterator: VOIDP, vlen: VOIDP
31
+ cdef :iter_get_error, VOID, iterator: VOIDP, errptr: VOIDP
32
+ cdef :iter_valid, UCHAR, iterator: VOIDP
33
+ cdef :iter_next, VOID, iterator: VOIDP
34
+ cdef :iter_seek_to_last, VOID, iterator: VOIDP
35
+
36
+ cdef :writebatch_create, VOIDP
37
+ cdef :writebatch_clear, VOID, writebatch: VOIDP
38
+ cdef :writebatch_put, VOID, writebatch: VOIDP, key: VOIDP, klen: ULONG, val: VOIDP, vlen: ULONG
39
+ cdef :writebatch_delete, VOID, writebatch: VOIDP, key: VOIDP, klen: ULONG
40
+ cdef :writebatch_destroy, VOID, writebatch: VOIDP
41
+ cdef :writebatch_iterate, VOID, writebatch: VOIDP, state: VOIDP, put: VOIDP, deleted: VOIDP
42
+ cdef :write, VOID, db: VOIDP, options: VOIDP, batch: VOIDP, errptr: VOIDP
43
+
44
+ cdef :options_create, VOIDP
45
+ cdef :options_set_comparator, VOID, options: VOIDP, comparator: VOIDP
46
+ cdef :options_set_create_if_missing, VOID, options: VOIDP, u_char: UCHAR
47
+ cdef :options_set_paranoid_checks, VOID, options: VOIDP, u_char: UCHAR
48
+ cdef :options_set_info_log, VOID, options: VOIDP, logger: VOIDP
49
+ cdef :options_set_max_open_files, VOID, options: VOIDP, int: INT
50
+ cdef :options_set_block_size, VOID, options: VOIDP, u_long: ULONG
51
+ cdef :options_set_compression, VOID, options: VOIDP, int: INT
52
+ cdef :options_set_filter_policy, VOID, options: VOIDP, filterpolicy: VOIDP
53
+ cdef :options_set_env, VOID, options: VOIDP, env: VOIDP
54
+ cdef :options_set_cache, VOID, options: VOIDP, cache: VOIDP
55
+ cdef :options_set_error_if_exists, VOID, options: VOIDP, u_char: UCHAR
56
+ cdef :options_set_block_restart_interval, VOID, options: VOIDP, int: INT
57
+ cdef :options_set_write_buffer_size, VOID, options: VOIDP, u_long: ULONG
58
+ cdef :options_destroy, VOID, options: VOIDP
59
+
60
+ cdef :readoptions_create, VOIDP
61
+ cdef :readoptions_destroy, VOID, readoptions: VOIDP
62
+ cdef :readoptions_set_verify_checksums, VOID, readoptions: VOIDP, u_char: UCHAR
63
+ cdef :readoptions_set_snapshot, VOID, readoptions: VOIDP, snapshot: VOIDP
64
+ cdef :readoptions_set_fill_cache, VOID, readoptions: VOIDP, u_char: UCHAR
65
+
66
+ cdef :cache_create_lru, VOIDP, capacity: ULONG
67
+ cdef :cache_destroy, VOID, cache: VOIDP
68
+
69
+ cdef :create_default_env, VOIDP
70
+ cdef :env_destroy, VOID, env: VOIDP
71
+
72
+ cdef :comparator_create, VOIDP, state: VOIDP, destructor: VOIDP, compare: VOIDP, name: VOIDP
73
+ cdef :comparator_destroy, VOID, comparator: VOIDP
74
+
75
+ cdef :writeoptions_destroy, VOID, writeoptions: VOIDP
76
+ cdef :writeoptions_set_sync, VOID, writeoptions: VOIDP, u_char: UCHAR
77
+ cdef :writeoptions_create, VOIDP
78
+
79
+ cdef :filterpolicy_create_bloom, VOIDP, bits_per_key: INT
80
+ cdef :filterpolicy_create, VOIDP, state: VOIDP, destructor: VOIDP, create_filter: VOIDP, key_may_match: VOIDP, name: VOIDP
81
+ cdef :filterpolicy_destroy, VOID, filterpolicy: VOIDP
82
+
83
+ cdef :minor_version, INT
84
+ cdef :major_version, INT
85
+ end
86
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/setup'
2
+ require 'leveldb'
3
+ require 'minitest/autorun'
4
+
5
+ # Create a temp directory
6
+ File.mkdir './tmp' unless File.exist?('./tmp')
@@ -0,0 +1,43 @@
1
+ require_relative './helper'
2
+
3
+ class TestBatch < Minitest::Test
4
+ attr_reader :db
5
+
6
+ def setup
7
+ @db ||= LevelDB::DB.new './tmp/test-batch'
8
+ end
9
+
10
+ def teardown
11
+ db.close
12
+ db.destroy
13
+ end
14
+
15
+ def test_batch
16
+ batch = db.batch
17
+ ('a'..'z').each do |l|
18
+ refute db[l]
19
+ batch.put l, l.upcase
20
+ end
21
+
22
+ batch.write!
23
+
24
+ ('a'..'z').each do |l|
25
+ assert batch.delete l
26
+ assert_equal l.upcase, db[l]
27
+ end
28
+
29
+ batch.write!
30
+
31
+ ('a'..'z').each { |l| refute db[l] }
32
+ end
33
+
34
+ def test_batch_block
35
+ ('a'..'z').each { |l| refute db[l] }
36
+
37
+ db.batch do |batch|
38
+ ('a'..'z').each { |l| batch.put l, l.upcase }
39
+ end
40
+
41
+ ('a'..'z').each { |l| assert_equal l.upcase, db[l] }
42
+ end
43
+ end
data/test/test_db.rb ADDED
@@ -0,0 +1,58 @@
1
+ require_relative './helper'
2
+
3
+ class TestBasic < Minitest::Test
4
+
5
+ def db
6
+ Thread.current[:__db__] ||= LevelDB::DB.new './tmp/test'
7
+ end
8
+
9
+ def test_open
10
+ assert_raises(LevelDB::DB::Error) do
11
+ LevelDB::DB.new './doesnt-exist/foo'
12
+ end
13
+ assert db
14
+ end
15
+
16
+ def test_put
17
+ foo = db.put(:foo, :bar)
18
+ assert_equal 'bar', foo
19
+
20
+ foo = db[:foo] = 'bax'
21
+ assert_equal 'bax', foo
22
+ end
23
+
24
+ def test_read
25
+ db.put(:foo, :bar)
26
+ assert_equal 'bar', db.get(:foo)
27
+
28
+ db[:foo] = 'bax'
29
+ assert_equal 'bax', db[:foo]
30
+ end
31
+
32
+ def test_delete
33
+ db[:foo] = 'bar'
34
+
35
+ res = db.delete(:foo)
36
+ assert_equal 'bar', res
37
+
38
+ res = db.delete(:foo)
39
+ assert_nil res
40
+ end
41
+
42
+ def test_close
43
+ d = LevelDB::DB.new './tmp/test-close'
44
+ assert d.close
45
+ assert_raises(LevelDB::DB::ClosedError){ d[:foo] }
46
+ end
47
+
48
+ def test_destroy
49
+ d = LevelDB::DB.new './tmp/test-close'
50
+ assert_raises(LevelDB::DB::Error){ d.destroy }
51
+ assert d.close
52
+ assert d.destroy
53
+ end
54
+
55
+ def test_stats
56
+ assert_match /Level/, db.stats
57
+ end
58
+ end
@@ -0,0 +1,120 @@
1
+ require_relative './helper'
2
+
3
+ class TestIterator < Minitest::Test
4
+ attr_reader :db
5
+
6
+ def setup
7
+ @db ||= LevelDB::DB.new './tmp/test-iterator'
8
+ end
9
+
10
+ def teardown
11
+ db.close
12
+ db.destroy
13
+ end
14
+
15
+ def test_next
16
+ db[:a] = :sten
17
+ db[:b] = :roger
18
+
19
+ iterator = db.each
20
+
21
+ assert_equal %w[a sten], iterator.next
22
+ assert_equal %w[b roger], iterator.next
23
+
24
+ assert db.each.next
25
+ refute iterator.next
26
+ end
27
+
28
+ def test_reverse_next
29
+ db[:a] = :sten
30
+ db[:b] = :roger
31
+
32
+ iterator = db.reverse_each
33
+
34
+ assert_equal %w[b roger], iterator.next
35
+ assert_equal %w[a sten], iterator.next
36
+
37
+ assert db.each.next
38
+ refute iterator.next
39
+ end
40
+
41
+ def test_range_next
42
+ ('a'..'z').each { |l| db[l] = l.upcase }
43
+
44
+ range = db.range('b', 'd')
45
+
46
+ assert_equal %w[b B], range.next
47
+ assert_equal %w[c C], range.next
48
+ assert_equal %w[d D], range.next
49
+
50
+ refute range.next
51
+ end
52
+
53
+ def test_range_reverse_next
54
+ ('a'..'z').each { |l| db[l] = l.upcase }
55
+
56
+ range = db.reverse_range('b', 'd')
57
+
58
+ assert_equal %w[d D], range.next
59
+ assert_equal %w[c C], range.next
60
+ assert_equal %w[b B], range.next
61
+
62
+ refute range.next
63
+ end
64
+
65
+ def test_keys
66
+ db[:a] = :sten
67
+ db[:b] = :roger
68
+
69
+ assert_equal %w[a b], db.keys
70
+ end
71
+
72
+ def test_values
73
+ db[:a] = :sten
74
+ db[:b] = :roger
75
+
76
+ assert_equal %w[sten roger], db.values
77
+ end
78
+
79
+ def test_block
80
+ db[:a] = :sten
81
+ db[:b] = :roger
82
+
83
+ keys, values = [], []
84
+ db.each { |k,v| keys.push(k); values.push(v) }
85
+
86
+ assert_equal %w[a b], keys
87
+ assert_equal %w[sten roger], values
88
+ end
89
+
90
+ def test_reverse_block
91
+ db[:a] = :sten
92
+ db[:b] = :roger
93
+
94
+ keys, values = [], []
95
+ db.reverse_each { |k,v| keys.push(k); values.push(v) }
96
+
97
+ assert_equal %w[b a], keys
98
+ assert_equal %w[roger sten], values
99
+ end
100
+
101
+ def test_range_block
102
+ ('a'..'z').each { |l| db[l] = l.upcase }
103
+
104
+ keys, values = [], []
105
+ db.range('b', 'd') { |k,v| keys.push(k); values.push(v) }
106
+
107
+ assert_equal %w[b c d], keys
108
+ assert_equal %w[B C D], values
109
+ end
110
+
111
+ def test_range_reverse_block
112
+ ('a'..'z').each { |l| db[l] = l.upcase }
113
+
114
+ keys, values = [], []
115
+ db.reverse_range('b', 'd') { |k,v| keys.push(k); values.push(v) }
116
+
117
+ assert_equal %w[d c b], keys
118
+ assert_equal %w[D C B], values
119
+ end
120
+ end
@@ -0,0 +1,37 @@
1
+ require_relative './helper'
2
+
3
+ class TestSnapshot < Minitest::Test
4
+ attr_reader :db
5
+
6
+ def setup
7
+ @db ||= LevelDB::DB.new './tmp/test-snapshot'
8
+ end
9
+
10
+ def teardown
11
+ db.close
12
+ db.destroy
13
+ end
14
+
15
+ def test_snap
16
+ db.put 'a', 1
17
+ db.put 'b', 2
18
+ db.put 'c', 3
19
+
20
+ snap = db.snapshot
21
+
22
+ db.delete 'a'
23
+ refute db.get 'a'
24
+
25
+ snap.set!
26
+
27
+ assert_equal '1', db.get('a')
28
+
29
+ snap.reset!
30
+
31
+ refute db.get('a')
32
+
33
+ snap.set!
34
+
35
+ assert_equal '1', db.get('a')
36
+ end
37
+ end
metadata CHANGED
@@ -1,45 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leveldb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DAddYE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-19 00:00:00.000000000 Z
11
+ date: 2013-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ffi
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.9.0
20
- type: :runtime
19
+ version: '1.3'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.9.0
26
+ version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '>='
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest
56
+ name: ffi
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '>='
@@ -196,10 +196,21 @@ files:
196
196
  - ext/leveldb/build_config.mk
197
197
  - ext/leveldb/LICENSE
198
198
  - ext/leveldb/Makefile
199
+ - lib/fiddler.rb
200
+ - lib/leveldb/batch.rb
201
+ - lib/leveldb/db.rb
202
+ - lib/leveldb/iterator.rb
203
+ - lib/leveldb/snapshot.rb
199
204
  - lib/leveldb/version.rb
200
205
  - lib/leveldb.rb
206
+ - lib/native.rb
201
207
  - README.md
202
208
  - LICENSE.txt
209
+ - test/helper.rb
210
+ - test/test_batch.rb
211
+ - test/test_db.rb
212
+ - test/test_iterator.rb
213
+ - test/test_snapshot.rb
203
214
  homepage: https://github.com/DAddYE/leveldb
204
215
  licenses:
205
216
  - MIT
@@ -224,5 +235,10 @@ rubygems_version: 2.0.3
224
235
  signing_key:
225
236
  specification_version: 4
226
237
  summary: LevelDB for Ruby
227
- test_files: []
238
+ test_files:
239
+ - test/helper.rb
240
+ - test/test_batch.rb
241
+ - test/test_db.rb
242
+ - test/test_iterator.rb
243
+ - test/test_snapshot.rb
228
244
  has_rdoc: