sekka 0.8.6 → 0.8.7
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.
- data/emacs/sekka.el +1 -1
- data/lib/sekka/jisyo-db.nnd +10 -0
- data/lib/sekka/kvs.rb +27 -13
- data/lib/sekka/roman-lib.nnd +2 -11
- data/lib/sekka/sekkaversion.rb +1 -1
- data/lib/sekka/util.nnd +2 -6
- data/lib/sekkaconfig.rb +11 -11
- data/lib/sekkaserver.rb +11 -11
- data/test/henkan-main.nnd +2 -3
- data/test/memcache.nnd +101 -0
- metadata +6 -5
data/emacs/sekka.el
CHANGED
data/lib/sekka/jisyo-db.nnd
CHANGED
@@ -179,6 +179,16 @@
|
|
179
179
|
(obj.open cacheSource)
|
180
180
|
obj)
|
181
181
|
#f)
|
182
|
+
;; 読み書きできるか調べる
|
183
|
+
(let ([d (. (Date.new 0) to_s)])
|
184
|
+
(if (and (kvs.pure_put! "key_for_ping" d)
|
185
|
+
(string=? (kvs.get "key_for_ping") d))
|
186
|
+
(STDERR.puts "Info: database file was clean")
|
187
|
+
;; 正常に読み書きできないようであれば、データベースを修復する
|
188
|
+
(begin
|
189
|
+
(STDERR.puts "Info: database file was NOT clean. try to fix...")
|
190
|
+
(kvs.fixdb)
|
191
|
+
(STDERR.puts "Info: done."))))
|
182
192
|
(to-arr (list kvs cachesv)))))
|
183
193
|
;; Export to Ruby world
|
184
194
|
(export-to-ruby openSekkaJisyo)
|
data/lib/sekka/kvs.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
# kvs.rb - "wrapper library for Key-Value-Store"
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Copyright (c) 2010 Kiyoka Nishiyama <kiyoka@sumibi.org>
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without
|
6
6
|
# modification, are permitted provided that the following conditions
|
7
7
|
# are met:
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# 1. Redistributions of source code must retain the above copyright
|
10
10
|
# notice, this list of conditions and the following disclaimer.
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# 2. Redistributions in binary form must reproduce the above copyright
|
13
13
|
# notice, this list of conditions and the following disclaimer in the
|
14
14
|
# documentation and/or other materials provided with the distribution.
|
15
|
-
#
|
15
|
+
#
|
16
16
|
# 3. Neither the name of the authors nor the names of its contributors
|
17
17
|
# may be used to endorse or promote products derived from this
|
18
18
|
# software without specific prior written permission.
|
19
|
-
#
|
19
|
+
#
|
20
20
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
21
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
22
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
@@ -28,8 +28,8 @@
|
|
28
28
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
29
29
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
30
30
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
#
|
32
|
-
# $Id:
|
31
|
+
#
|
32
|
+
# $Id:
|
33
33
|
#
|
34
34
|
require 'tokyocabinet'
|
35
35
|
require 'memcache'
|
@@ -62,9 +62,22 @@ class Kvs
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
def fixdb( )
|
66
|
+
if not @db.optimize( )
|
67
|
+
raise RuntimeError, sprintf( "TokyoCabinet::HDB.optimize error: file=%s", name )
|
68
|
+
end
|
69
|
+
true
|
70
|
+
end
|
71
|
+
|
65
72
|
def put!( key, value, timeout = 0 )
|
73
|
+
if not self.pure_put!( key, value, timeout )
|
74
|
+
raise RuntimeError sprintf( "put! error: key=%s", key.force_encoding("ASCII-8BIT"))
|
75
|
+
end
|
76
|
+
value
|
77
|
+
end
|
78
|
+
|
79
|
+
def pure_put!( key, value, timeout = 0 )
|
66
80
|
if 0 < key.size
|
67
|
-
#p "put! " + key + ":" + value
|
68
81
|
case @dbtype
|
69
82
|
when :tokyocabinet
|
70
83
|
@db[ key.force_encoding("ASCII-8BIT") ] = value.force_encoding("ASCII-8BIT")
|
@@ -74,6 +87,7 @@ class Kvs
|
|
74
87
|
raise RuntimeError
|
75
88
|
end
|
76
89
|
end
|
90
|
+
value
|
77
91
|
end
|
78
92
|
|
79
93
|
def get( key, fallback = false )
|
@@ -97,7 +111,7 @@ class Kvs
|
|
97
111
|
case @dbtype
|
98
112
|
when :tokyocabinet
|
99
113
|
@db.clear
|
100
|
-
when :memcache
|
114
|
+
when :memcache
|
101
115
|
# do nothing
|
102
116
|
else
|
103
117
|
raise RuntimeError
|
@@ -111,7 +125,7 @@ class Kvs
|
|
111
125
|
@db.keys.map { |k|
|
112
126
|
k.force_encoding("UTF-8")
|
113
127
|
}
|
114
|
-
when :memcache
|
128
|
+
when :memcache
|
115
129
|
raise RuntimeError, "Kvs#keys method was not implemented for memcache."
|
116
130
|
else
|
117
131
|
raise RuntimeError
|
@@ -124,7 +138,7 @@ class Kvs
|
|
124
138
|
@db.fwmkeys( prefix ).each { |k|
|
125
139
|
k.force_encoding("UTF-8")
|
126
140
|
}
|
127
|
-
when :memcache
|
141
|
+
when :memcache
|
128
142
|
raise RuntimeError, "Kvs#forward_match_keys method was not implemented for memcache."
|
129
143
|
else
|
130
144
|
raise RuntimeError
|
@@ -141,7 +155,7 @@ class Kvs
|
|
141
155
|
raise RuntimeError
|
142
156
|
end
|
143
157
|
end
|
144
|
-
|
158
|
+
|
145
159
|
## for testing
|
146
160
|
def _db()
|
147
161
|
@db
|
data/lib/sekka/roman-lib.nnd
CHANGED
@@ -34,6 +34,8 @@
|
|
34
34
|
;;; $Id:
|
35
35
|
;;;
|
36
36
|
(use srfi-1)
|
37
|
+
(use util.list)
|
38
|
+
(use util.combinations)
|
37
39
|
|
38
40
|
;; 子音が1音だけ入ったテーブル
|
39
41
|
;; このテーブルはruby-romkan から変換し、一部不足を追加した。
|
@@ -772,17 +774,6 @@
|
|
772
774
|
(gen-hiragana->katakana x))
|
773
775
|
(gen-roman->hiragana roman-str roman-method)))
|
774
776
|
|
775
|
-
;; This function port from Gauche-0.9's util.combinations.
|
776
|
-
(define (cartesian-product lol)
|
777
|
-
(if (null? lol)
|
778
|
-
(list '())
|
779
|
-
(let ((l (car lol))
|
780
|
-
(rest (cartesian-product (cdr lol))))
|
781
|
-
(append-map
|
782
|
-
(lambda (x)
|
783
|
-
(map (lambda (sub-prod) (cons x sub-prod)) rest))
|
784
|
-
l))))
|
785
|
-
|
786
777
|
|
787
778
|
(define (patterns->roman-list patterns)
|
788
779
|
(uniq
|
data/lib/sekka/sekkaversion.rb
CHANGED
data/lib/sekka/util.nnd
CHANGED
@@ -33,6 +33,8 @@
|
|
33
33
|
;;;
|
34
34
|
;;; $Id:
|
35
35
|
;;;
|
36
|
+
(use util.list)
|
37
|
+
|
36
38
|
(define (string-drop str n)
|
37
39
|
(or (str.slice n (str.size))
|
38
40
|
""))
|
@@ -55,10 +57,4 @@
|
|
55
57
|
(. (line.slice index (line.size)) strip))
|
56
58
|
#f))
|
57
59
|
|
58
|
-
(define (take* lst limit)
|
59
|
-
(let1 len (length lst)
|
60
|
-
(if (< len limit)
|
61
|
-
lst
|
62
|
-
(take lst limit))))
|
63
|
-
|
64
60
|
|
data/lib/sekkaconfig.rb
CHANGED
@@ -2,24 +2,24 @@
|
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
#
|
4
4
|
# sekkaconfig.rb - "a config info class"
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Copyright (c) 2010 Kiyoka Nishiyama <kiyoka@sumibi.org>
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Redistribution and use in source and binary forms, with or without
|
9
9
|
# modification, are permitted provided that the following conditions
|
10
10
|
# are met:
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# 1. Redistributions of source code must retain the above copyright
|
13
13
|
# notice, this list of conditions and the following disclaimer.
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# 2. Redistributions in binary form must reproduce the above copyright
|
16
16
|
# notice, this list of conditions and the following disclaimer in the
|
17
17
|
# documentation and/or other materials provided with the distribution.
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# 3. Neither the name of the authors nor the names of its contributors
|
20
20
|
# may be used to endorse or promote products derived from this
|
21
21
|
# software without specific prior written permission.
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
24
24
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
25
25
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
@@ -31,15 +31,15 @@
|
|
31
31
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
32
32
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
33
33
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
34
|
-
#
|
35
|
-
# $Id:
|
34
|
+
#
|
35
|
+
# $Id:
|
36
36
|
#
|
37
37
|
require 'singleton'
|
38
38
|
|
39
39
|
module SekkaServer
|
40
40
|
class Config
|
41
41
|
include Singleton
|
42
|
-
|
42
|
+
|
43
43
|
def self.setup( dictSource, cacheSource = false, listenPort, proxyHost, proxyPort )
|
44
44
|
@@dictSource = dictSource
|
45
45
|
@@cacheSource = cacheSource
|
@@ -47,11 +47,11 @@ module SekkaServer
|
|
47
47
|
@@proxyHost = proxyHost
|
48
48
|
@@proxyPort = proxyPort
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
def self.dictSource
|
52
52
|
@@dictSource
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
def self.cacheSource
|
56
56
|
@@cacheSource
|
57
57
|
end
|
data/lib/sekkaserver.rb
CHANGED
@@ -2,24 +2,24 @@
|
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
#
|
4
4
|
# sekkaserver.rb - "a sekka server"
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Copyright (c) 2010 Kiyoka Nishiyama <kiyoka@sumibi.org>
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Redistribution and use in source and binary forms, with or without
|
9
9
|
# modification, are permitted provided that the following conditions
|
10
10
|
# are met:
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# 1. Redistributions of source code must retain the above copyright
|
13
13
|
# notice, this list of conditions and the following disclaimer.
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# 2. Redistributions in binary form must reproduce the above copyright
|
16
16
|
# notice, this list of conditions and the following disclaimer in the
|
17
17
|
# documentation and/or other materials provided with the distribution.
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# 3. Neither the name of the authors nor the names of its contributors
|
20
20
|
# may be used to endorse or promote products derived from this
|
21
21
|
# software without specific prior written permission.
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
24
24
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
25
25
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
@@ -31,8 +31,8 @@
|
|
31
31
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
32
32
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
33
33
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
34
|
-
#
|
35
|
-
# $Id:
|
34
|
+
#
|
35
|
+
# $Id:
|
36
36
|
#
|
37
37
|
require 'rack'
|
38
38
|
require 'nendo'
|
@@ -83,8 +83,8 @@ module SekkaServer
|
|
83
83
|
@mutex.synchronize {
|
84
84
|
case command
|
85
85
|
when 'r' # register
|
86
|
-
dictline =
|
87
|
-
if 4 == arr.size
|
86
|
+
dictline =
|
87
|
+
if 4 == arr.size
|
88
88
|
arr[2] + " " + arr[3]
|
89
89
|
else
|
90
90
|
";; comment"
|
@@ -127,7 +127,7 @@ module SekkaServer
|
|
127
127
|
}
|
128
128
|
}
|
129
129
|
end
|
130
|
-
end
|
130
|
+
end
|
131
131
|
}
|
132
132
|
end
|
133
133
|
@thread.run
|
data/test/henkan-main.nnd
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
((eq? dbtype 'tokyocabinet)
|
53
53
|
(set! target "./test.tch"))
|
54
54
|
((eq? dbtype 'memcache)
|
55
|
-
(
|
55
|
+
(error "memcached interface is obsolute."))
|
56
56
|
(else
|
57
57
|
(errorf "Unsupported db type [%s]" (symbol->string dbtype))))
|
58
58
|
|
@@ -107,8 +107,7 @@
|
|
107
107
|
(kvs.open target)
|
108
108
|
(require "tokyocabinet"))
|
109
109
|
((eq? dbtype 'memcache)
|
110
|
-
(
|
111
|
-
(require "memcache"))
|
110
|
+
(error "memcached interface is obsolute."))
|
112
111
|
(else
|
113
112
|
(errorf "Unsupported db type [%s]" (symbol->string dbtype))))
|
114
113
|
|
data/test/memcache.nnd
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
;;-*- mode: nendo; syntax: scheme -*-
|
2
|
+
;;;
|
3
|
+
;;; memcache.nnd - memcacheアクセスのテスト
|
4
|
+
;;;
|
5
|
+
;;; Copyright (c) 2011 Kiyoka Nishiyama <kiyoka@sumibi.org>
|
6
|
+
;;;
|
7
|
+
;;; Redistribution and use in source and binary forms, with or without
|
8
|
+
;;; modification, are permitted provided that the following conditions
|
9
|
+
;;; are met:
|
10
|
+
;;;
|
11
|
+
;;; 1. Redistributions of source code must retain the above copyright
|
12
|
+
;;; notice, this list of conditions and the following disclaimer.
|
13
|
+
;;;
|
14
|
+
;;; 2. Redistributions in binary form must reproduce the above copyright
|
15
|
+
;;; notice, this list of conditions and the following disclaimer in the
|
16
|
+
;;; documentation and/or other materials provided with the distribution.
|
17
|
+
;;;
|
18
|
+
;;; 3. Neither the name of the authors nor the names of its contributors
|
19
|
+
;;; may be used to endorse or promote products derived from this
|
20
|
+
;;; software without specific prior written permission.
|
21
|
+
;;;
|
22
|
+
;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
23
|
+
;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
24
|
+
;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
25
|
+
;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
26
|
+
;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
27
|
+
;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
28
|
+
;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
29
|
+
;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
30
|
+
;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
31
|
+
;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
32
|
+
;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
33
|
+
;;;
|
34
|
+
;;; $Id:
|
35
|
+
;;;
|
36
|
+
(require "sekka/kvs")
|
37
|
+
(use nendo.test)
|
38
|
+
(load "./test/common.nnd")
|
39
|
+
|
40
|
+
(define dbtype 'memcache)
|
41
|
+
(define userid "temp")
|
42
|
+
(define cachesv (Kvs.new dbtype))
|
43
|
+
(cachesv.open "localhost:11211")
|
44
|
+
|
45
|
+
(test-start "memcached I/F")
|
46
|
+
;;===================================================================
|
47
|
+
|
48
|
+
;;-------------------------------------------------------------------
|
49
|
+
(test-section "memcached access")
|
50
|
+
|
51
|
+
(test* "db store 1"
|
52
|
+
"one"
|
53
|
+
(cachesv.put! "temp::1" "one"))
|
54
|
+
|
55
|
+
(test* "db fetch 1"
|
56
|
+
"one"
|
57
|
+
(cachesv.get "temp::1"))
|
58
|
+
|
59
|
+
(test* "db fetch fallback"
|
60
|
+
false
|
61
|
+
(cachesv.get "temp::none" false))
|
62
|
+
|
63
|
+
|
64
|
+
;;-------------------------------------------------------------------
|
65
|
+
(test-section "memcached access heavily")
|
66
|
+
|
67
|
+
(test* "db rw"
|
68
|
+
10000
|
69
|
+
(let1 count 0
|
70
|
+
(for-each
|
71
|
+
(lambda (n)
|
72
|
+
(let1 str (sprintf "%06d" n)
|
73
|
+
(cachesv.put! (+ "temp::" str) str)
|
74
|
+
(when (string=?
|
75
|
+
str
|
76
|
+
(cachesv.get (+ "temp::" str) str))
|
77
|
+
(set! count (+ count 1)))))
|
78
|
+
(range 10000))
|
79
|
+
count))
|
80
|
+
|
81
|
+
|
82
|
+
(test-section "memcached expire data")
|
83
|
+
(test* "db expire time 1"
|
84
|
+
"now"
|
85
|
+
(cachesv.put! "temp::1" "now" 2))
|
86
|
+
|
87
|
+
(test* "db expire time 2"
|
88
|
+
"now"
|
89
|
+
(cachesv.get "temp::1" "now"))
|
90
|
+
|
91
|
+
(test* "db expire time 3"
|
92
|
+
"miss"
|
93
|
+
(begin
|
94
|
+
(.sleep 3)
|
95
|
+
(cachesv.get "temp::1" "miss")))
|
96
|
+
|
97
|
+
|
98
|
+
;;===================================================================
|
99
|
+
|
100
|
+
|
101
|
+
(test-end)
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 8
|
8
|
-
-
|
9
|
-
version: 0.8.
|
8
|
+
- 7
|
9
|
+
version: 0.8.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kiyoka Nishiyama
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-06-24 00:00:00 +09:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -92,9 +92,9 @@ dependencies:
|
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
segments:
|
94
94
|
- 0
|
95
|
-
-
|
95
|
+
- 5
|
96
96
|
- 1
|
97
|
-
version: 0.
|
97
|
+
version: 0.5.1
|
98
98
|
type: :runtime
|
99
99
|
version_requirements: *id006
|
100
100
|
- !ruby/object:Gem::Dependency
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- test/google-ime.nnd
|
168
168
|
- test/henkan-main.nnd
|
169
169
|
- test/jisyo.nnd
|
170
|
+
- test/memcache.nnd
|
170
171
|
- test/roman-lib.nnd
|
171
172
|
- test/sharp-number.nnd
|
172
173
|
- test/skk-azik-table.nnd
|