sekka 0.8.1 → 0.8.2

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.
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- mode: nendo; syntax: scheme ; coding: utf-8 -*-
3
+ require 'nendo'
4
+ $LOAD_PATH.push( File.dirname(__FILE__) + "/../lib" )
5
+ core = Nendo::Core.new()
6
+ core.setArgv( ARGV )
7
+ core.loadInitFile
8
+ core.evalStr( <<";;END-OF-SCRIPT" )
9
+ ;;;
10
+ ;;; sekka-benchmark - sekka-serverのベンチマークプログラム
11
+ ;;;
12
+ ;;; Copyright (c) 2010 Kiyoka Nishiyama <kiyoka@sumibi.org>
13
+ ;;;
14
+ ;;; Redistribution and use in source and binary forms, with or without
15
+ ;;; modification, are permitted provided that the following conditions
16
+ ;;; are met:
17
+ ;;;
18
+ ;;; 1. Redistributions of source code must retain the above copyright
19
+ ;;; notice, this list of conditions and the following disclaimer.
20
+ ;;;
21
+ ;;; 2. Redistributions in binary form must reproduce the above copyright
22
+ ;;; notice, this list of conditions and the following disclaimer in the
23
+ ;;; documentation and/or other materials provided with the distribution.
24
+ ;;;
25
+ ;;; 3. Neither the name of the authors nor the names of its contributors
26
+ ;;; may be used to endorse or promote products derived from this
27
+ ;;; software without specific prior written permission.
28
+ ;;;
29
+ ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30
+ ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31
+ ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32
+ ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33
+ ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34
+ ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
35
+ ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
36
+ ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
37
+ ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
38
+ ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39
+ ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40
+ ;;;
41
+ ;;; $Id:
42
+ ;;;
43
+ (require "benchmark")
44
+ (define (bench-block title block)
45
+ (print "----------------------------------------")
46
+ (printf "[%s]\n" title )
47
+ (.puts Benchmark::CAPTION)
48
+ (.puts (Benchmark.measure
49
+ (&block ()
50
+ (block)))))
51
+
52
+
53
+ (define (gen-curl-command-string keyword limit)
54
+ (let ((host "localhost"))
55
+ (sprintf "curl --silent --show-error --max-time 60 --insecure --header 'Content-Type: application/x-www-form-urlencoded' http://%s:12929/henkan --data 'format=sexp' --data 'yomi=%s' --data 'limit=%d' --data 'method=normal' --data 'userid=%s' > /dev/null" host keyword limit "benchuser")))
56
+
57
+
58
+ (define (henkan-with-same-keyword limit)
59
+ (let1 cmd (gen-curl-command-string "Kanji" limit)
60
+ (bench-block
61
+ (sprintf "Samekey limit=%d (all request hits memcached)" limit)
62
+ (lambda ()
63
+ (for-each
64
+ (lambda (x)
65
+ (display ".")
66
+ (.system cmd))
67
+ (range 100))
68
+ (newline)))))
69
+
70
+ (define (henkan-with-uniq-keyword limit)
71
+ (let1 keylist
72
+ '(
73
+ "Aimai" "Ao" "Aoumigame" "Akakeitou"
74
+ "Bangou" "Bankai" "Banninkyoutuu" "Banouyaku"
75
+ "Chance"
76
+ "Dangai" "Daiichihousoku" "Daigakuin" "Daidokoro"
77
+ "Enjin" "Eigyoukatudou" "Eiseikidou" "Ebisu"
78
+ "Fantaji-"
79
+ "Goukaku" "Gakkou" "Gaikoku" "Gakki" "Gamenkeishiki" "Gamensaizu" "Garapagosu" "Gankyuu"
80
+ "Hinode" "Hi-ro-" "Hiroshima" "Hinjaku" "Hakari" "Ha-monika" "Haru"
81
+ "Iwanami" "Ikimono" "Inarizushi" "Iso" "Ishi" "Ima" "Imi" "Inu"
82
+ "Jinkoumondai" "Jinkoueisei" "Jiken" "Jiko" "Jirou" "Jakouneko"
83
+ "Kousei" "Kaisen" "Kiso" "Kisokenkyuu" "Kisoshikkan" "Kenkyuukikan" "Kenkyuunaiyou"
84
+ "London" "Lonly" "Load" "Love" "Listen" "List"
85
+ "Manyousyuu"
86
+ "Nouzei" "Namae" "Nakanaka" "Nihongohenkan" "Nihongo" "Nishi"
87
+ "Okinawa" "Oudanhodou"
88
+ "Painappuru" "Pa-sonaru"
89
+ "Quizu"
90
+ "Rokuon" "Rasenkaidan" "Risoku" "Risuku"
91
+ "Sougouhyouka" "Sougou" "Son" "Soro"
92
+ "Tuuka" "Tuika" "Taiyou" "Taiou" "Tamatama"
93
+ "Umi" "Ushiro" "Utagoe" "Uso" "Ukai"
94
+ "World" "Watagashi" "Watarigani"
95
+ "Yamagataken" "Yamai" "Yu-suke-su"
96
+ "Zonbi" "Zou" "Zanshin" "Zannen"
97
+ )
98
+
99
+ (bench-block
100
+ (sprintf "Uniqkey limit=%d" limit)
101
+ (lambda ()
102
+ (for-each
103
+ (lambda (x)
104
+ (let1 cmd (gen-curl-command-string x limit)
105
+ (display ".")
106
+ (.system cmd)))
107
+ keylist)
108
+ (newline)))))
109
+
110
+
111
+ (define (display-help)
112
+ (print "Usage : ")
113
+ (print " sekka-benchmark samekey0 .... henkan 100 times with same keyword [Kanji] (get N candidate)")
114
+ (print " sekka-benchmark samekey1 .... henkan 100 times with same keyword [Kanji] (get 1 candidate)")
115
+ (print " sekka-benchmark uniqkey0 .... henkan 100 times with uniq keywords [Aimai Ao ...] (get N candidate)"))
116
+
117
+
118
+ (define (main argv)
119
+ (cond
120
+ ((= 0 (length argv))
121
+ (display-help))
122
+ (else
123
+ (let1 command (string->symbol (first argv))
124
+ (cond
125
+ ((eq? 'samekey0 command)
126
+ (henkan-with-same-keyword 0))
127
+ ((eq? 'samekey1 command)
128
+ (henkan-with-same-keyword 1))
129
+ ((eq? 'uniqkey0 command)
130
+ (henkan-with-uniq-keyword 0))
131
+ (else
132
+ (errorf "Error: no such command [%s] \n" command )))))))
133
+
134
+ (main *argv*)
135
+ ;;END-OF-SCRIPT
data/emacs/sekka.el CHANGED
@@ -55,11 +55,6 @@
55
55
  :type 'string
56
56
  :group 'sekka)
57
57
 
58
- (defcustom sekka-use-viper nil
59
- "*Non-nil であれば、VIPER に対応する"
60
- :type 'boolean
61
- :group 'sekka)
62
-
63
58
  (defcustom sekka-realtime-guide-running-seconds 30
64
59
  "リアルタイムガイド表示の継続時間(秒数)・ゼロでガイド表示機能が無効になる"
65
60
  :type 'integer
@@ -369,14 +364,17 @@
369
364
  ;; ユーザー語彙をサーバーに登録する。
370
365
  ;;
371
366
  (defun sekka-register-userdict-internal ()
372
- (let ((str (sekka-get-jisyo-str "~/.sekka-jisyo")))
373
- (when str
374
- (message "Requesting to sekka server...")
375
- (sekka-debug-print (format "register [%s]\n" str))
376
- (let ((result (sekka-rest-request "register" `((dict . ,str)))))
377
- (sekka-debug-print (format "register-result:%S\n" result))
378
- (message result)
379
- t))))
367
+ (let* ((str (sekka-get-jisyo-str "~/.sekka-jisyo"))
368
+ (str-lst (sekka-divide-into-few-line str)))
369
+ (mapcar
370
+ (lambda (x)
371
+ ;;(message "Requesting to sekka server...")
372
+ (sekka-debug-print (format "register [%s]\n" x))
373
+ (let ((result (sekka-rest-request "register" `((dict . ,x)))))
374
+ (sekka-debug-print (format "register-result:%S\n" result))
375
+ (message result)))
376
+ str-lst)
377
+ t))
380
378
 
381
379
 
382
380
  ;;
@@ -392,17 +390,52 @@
392
390
  t))
393
391
 
394
392
 
393
+ ;; str = "line1 \n line2 \n line3 \n line4 \n line5 \n "
394
+ ;; result:
395
+ ;; '(
396
+ ;; ("line1 \n line2 \n line3 \n ")
397
+ ;; ("line4 \n line5 \n ")
398
+ ;; )
399
+ ;;
400
+ ;; for-testing:
401
+ ;; (sekka-divide-into-few-line
402
+ ;; "line1 \n line2 \n line3 \n line4 \n line5 \n line6 \n line7 \n line8 \n line9 \n line10 \n line11 \n line12 \n")
403
+ ;;
404
+ (defun sekka-divide-into-few-line (str)
405
+ (if (stringp str)
406
+ (let ((str-lst (split-string str "\n"))
407
+ (result '()))
408
+ (while (< 0 (length str-lst))
409
+ (push
410
+ (concat
411
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
412
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
413
+
414
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
415
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
416
+
417
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
418
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
419
+
420
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
421
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
422
+
423
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
424
+ (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n" (pop str-lst) "\n"
425
+ )
426
+ result))
427
+ (reverse result))
428
+ '()))
429
+
395
430
  (defun sekka-get-jisyo-str (file &optional nomsg)
396
- "FILE を開いて SKK 辞書バッファを作り、バッファを返す。
397
- オプション引数の NOMSG を指定するとファイル読み込みの際のメッセージを表示しな
398
- い。"
431
+ "FILE を開いて Sekka辞書バッファを作り、バッファ1行1文字列のリストで返す"
399
432
  (when file
400
433
  (let* ((file (or (car-safe file)
401
434
  file))
402
435
  (file (expand-file-name file)))
403
436
  (if (not (file-exists-p file))
404
437
  (progn
405
- (message (format "SKK 辞書 %s が存在しません..." file))
438
+ (message (format "Sekka辞書 %s が存在しません..." file))
406
439
  nil)
407
440
  (let ((str "")
408
441
  (buf-name (file-name-nondirectory file)))
@@ -410,12 +443,10 @@
410
443
  (find-file-read-only file)
411
444
  (setq str (with-current-buffer (get-buffer buf-name)
412
445
  (buffer-substring-no-properties (point-min) (point-max))))
413
- (message (format "SKK 辞書 %s を開いています...完了!" (file-name-nondirectory file)))
446
+ (message (format "Sekka辞書 %s を開いています...完了!" (file-name-nondirectory file)))
414
447
  (kill-buffer-if-not-modified (get-buffer buf-name)))
415
448
  str)))))
416
449
 
417
- ;;(sekka-get-jisyo-str "~/.sekka-jisyo")
418
-
419
450
 
420
451
  ;; ポータブル文字列置換( EmacsとXEmacsの両方で動く )
421
452
  (defun sekka-replace-regexp-in-string (regexp replace str)
@@ -998,36 +1029,6 @@
998
1029
  (point))
999
1030
  result)))))
1000
1031
 
1001
-
1002
- ;;;
1003
- ;;; with viper
1004
- ;;;
1005
- ;; code from skk-viper.el
1006
- (defun sekka-viper-normalize-map ()
1007
- (let ((other-buffer
1008
- (if (featurep 'xemacs)
1009
- (local-variable-p 'minor-mode-map-alist nil t)
1010
- (local-variable-if-set-p 'minor-mode-map-alist))))
1011
- ;; for current buffer and buffers to be created in the future.
1012
- ;; substantially the same job as viper-harness-minor-mode does.
1013
- (viper-normalize-minor-mode-map-alist)
1014
- (setq-default minor-mode-map-alist minor-mode-map-alist)
1015
- (when other-buffer
1016
- ;; for buffers which are already created and have
1017
- ;; the minor-mode-map-alist localized by Viper.
1018
- (dolist (buf (buffer-list))
1019
- (with-current-buffer buf
1020
- (unless (assq 'sekka-mode minor-mode-map-alist)
1021
- (setq minor-mode-map-alist
1022
- (append (list (cons 'sekka-mode sekka-mode-map)
1023
- (cons 'sekka-select-mode
1024
- sekka-select-mode-map))
1025
- minor-mode-map-alist)))
1026
- (viper-normalize-minor-mode-map-alist))))))
1027
-
1028
- (defun sekka-viper-init-function ()
1029
- (sekka-viper-normalize-map)
1030
- (remove-hook 'sekka-mode-hook 'sekka-viper-init-function))
1031
1032
 
1032
1033
  (defun sekka-sticky-shift-init-function ()
1033
1034
  ;; sticky-shift
@@ -1156,8 +1157,6 @@ point から行頭方向に同種の文字列が続く間を漢字変換しま
1156
1157
  (sekka-kill-sekka-mode))
1157
1158
  (setq sekka-mode (if (null arg) (not sekka-mode)
1158
1159
  (> (prefix-numeric-value arg) 0))))
1159
- (when sekka-use-viper
1160
- (add-hook 'sekka-mode-hook 'sekka-viper-init-function))
1161
1160
  (when sekka-sticky-shift
1162
1161
  (add-hook 'sekka-mode-hook 'sekka-sticky-shift-init-function))
1163
1162
  (when sekka-mode (run-hooks 'sekka-mode-hook)))
@@ -1199,7 +1198,7 @@ point から行頭方向に同種の文字列が続く間を漢字変換しま
1199
1198
  (setq default-input-method "japanese-sekka")
1200
1199
 
1201
1200
  (defconst sekka-version
1202
- "0.8.1" ;;SEKKA-VERSION
1201
+ "0.8.2" ;;SEKKA-VERSION
1203
1202
  )
1204
1203
  (defun sekka-version (&optional arg)
1205
1204
  "入力モード変更"
data/lib/sekka/kvs.rb CHANGED
@@ -41,6 +41,7 @@ class Kvs
41
41
  case dbtype
42
42
  when :tokyocabinet
43
43
  @db = TokyoCabinet::HDB.new( )
44
+ # @db.setxmsiz(512 * 1024 * 1024) # expand memory
44
45
  when :memcache
45
46
  # do nothing
46
47
  else
@@ -1,6 +1,6 @@
1
1
  class SekkaVersion
2
2
  include Singleton
3
3
  def self.version
4
- "0.8.1"
4
+ "0.8.2"
5
5
  end
6
6
  end
data/lib/sekkaserver.rb CHANGED
@@ -39,6 +39,7 @@ require 'nendo'
39
39
  require 'eventmachine'
40
40
  require 'syslog'
41
41
  require 'uri'
42
+ require 'date'
42
43
  require './lib/sekkaconfig'
43
44
  require './lib/sekka/sekkaversion'
44
45
 
@@ -67,15 +68,22 @@ module SekkaServer
67
68
  @thread = Thread.new do
68
69
  Thread.pass
69
70
  EventMachine::run {
71
+ d = DateTime.now
70
72
  EventMachine::PeriodicTimer.new( 5 ) do
71
73
  while not @queue.empty?
72
- @queue.pop { |word|
74
+ @queue.pop { |word|
73
75
  arr = word.split( /[ ]+/ )
74
76
  userid = arr[0]
75
- dictline = arr[1] + " " + arr[2]
77
+ dictline =
78
+ if 3 == arr.size
79
+ arr[1] + " " + arr[2]
80
+ else
81
+ ";; comment"
82
+ end
76
83
  registered = @core.registerUserJisyo(userid, @kvs, dictline)
77
84
  if registered
78
- puts "Info: added to dict userid[" + userid + "] dictline[" + dictline + "]"
85
+ str = d.strftime( "%D %X" )
86
+ puts "Info: [" + str + "]added to dict userid[" + userid + "] dictline[" + dictline + "]"
79
87
  @core.flushCacheServer( @cachesv )
80
88
  else
81
89
  puts "Info: ignored (already added or comment) userid[" + userid + "] dictline[" + dictline + "]"
@@ -110,14 +118,14 @@ module SekkaServer
110
118
  when "/register"
111
119
  dict = URI.decode( req.params['dict'].force_encoding( "UTF-8" ) ).split( "\n" )
112
120
  dict.each { |x| @queue.push( userid + " " + x ) }
113
- sprintf( "register request successful (%s) words", dict.size )
121
+ sprintf( "sekka-server:register request (%s) words added, current-queue-size (%s)", dict.size, @queue.size )
114
122
  when "/flush"
115
123
  @core.flushCacheServer( @cachesv )
116
124
  n = @core.flushUserJisyo( userid, @kvs )
117
125
  printf( "info : flush [%s] user's dict %d entries.", userid, n )
118
- sprintf( "flush request successful. flush (%d) entries.", n )
126
+ sprintf( "sekka-server:flush request successful. flush (%d) entries.", n )
119
127
  else
120
- sprintf( "unknown path name. [%s]", req.path )
128
+ sprintf( "sekka-server:unknown path name. [%s]", req.path )
121
129
  end
122
130
  else
123
131
  "no message."
@@ -36,7 +36,7 @@
36
36
  (require "sekka/kvs")
37
37
  (use nendo.test)
38
38
  (use sekka.henkan)
39
- (load "test/common.nnd")
39
+ (load "./test/common.nnd")
40
40
 
41
41
  (define dbtype (string->symbol (first *argv*)))
42
42
 
@@ -36,7 +36,7 @@
36
36
  (use nendo.test)
37
37
  (use sekka.roman-lib)
38
38
  (test-start "roman-lib")
39
- (load "test/skk-azik-table")
39
+ (load "./test/skk-azik-table.nnd")
40
40
 
41
41
  ;;===================================================================
42
42
  (define skk-azik-roman->kana-alist
data/test/henkan-main.nnd CHANGED
@@ -37,7 +37,7 @@
37
37
  (use nendo.test)
38
38
  (use sekka.convert-jisyo)
39
39
  (use sekka.henkan)
40
- (load "test/common.nnd")
40
+ (load "./test/common.nnd")
41
41
 
42
42
  (define dbtype (string->symbol (first *argv*)))
43
43
  (define userid "dummy")
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sekka
3
3
  version: !ruby/object:Gem::Version
4
- hash: 61
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 8
9
- - 1
10
- version: 0.8.1
8
+ - 2
9
+ version: 0.8.2
11
10
  platform: ruby
12
11
  authors:
13
12
  - Kiyoka Nishiyama
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-11-26 00:00:00 +09:00
17
+ date: 2010-12-06 00:00:00 +09:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 3
30
28
  segments:
31
29
  - 0
32
30
  version: "0"
@@ -40,7 +38,6 @@ dependencies:
40
38
  requirements:
41
39
  - - ">="
42
40
  - !ruby/object:Gem::Version
43
- hash: 3
44
41
  segments:
45
42
  - 0
46
43
  version: "0"
@@ -54,7 +51,6 @@ dependencies:
54
51
  requirements:
55
52
  - - ">="
56
53
  - !ruby/object:Gem::Version
57
- hash: 3
58
54
  segments:
59
55
  - 0
60
56
  version: "0"
@@ -68,7 +64,6 @@ dependencies:
68
64
  requirements:
69
65
  - - ">="
70
66
  - !ruby/object:Gem::Version
71
- hash: 3
72
67
  segments:
73
68
  - 0
74
69
  version: "0"
@@ -82,7 +77,6 @@ dependencies:
82
77
  requirements:
83
78
  - - ">="
84
79
  - !ruby/object:Gem::Version
85
- hash: 3
86
80
  segments:
87
81
  - 0
88
82
  version: "0"
@@ -96,7 +90,6 @@ dependencies:
96
90
  requirements:
97
91
  - - ">="
98
92
  - !ruby/object:Gem::Version
99
- hash: 3
100
93
  segments:
101
94
  - 0
102
95
  version: "0"
@@ -110,7 +103,6 @@ dependencies:
110
103
  requirements:
111
104
  - - ">="
112
105
  - !ruby/object:Gem::Version
113
- hash: 15
114
106
  segments:
115
107
  - 0
116
108
  - 4
@@ -126,7 +118,6 @@ dependencies:
126
118
  requirements:
127
119
  - - ">="
128
120
  - !ruby/object:Gem::Version
129
- hash: 3
130
121
  segments:
131
122
  - 0
132
123
  version: "0"
@@ -140,7 +131,6 @@ dependencies:
140
131
  requirements:
141
132
  - - ">="
142
133
  - !ruby/object:Gem::Version
143
- hash: 3
144
134
  segments:
145
135
  - 0
146
136
  version: "0"
@@ -149,6 +139,7 @@ dependencies:
149
139
  description: Sekka is a SKK like input method. Sekka server provides REST Based API. If you are SKK user, let's try it.
150
140
  email: kiyoka@sumibi.org
151
141
  executables:
142
+ - sekka-benchmark
152
143
  - sekka-jisyo
153
144
  - sekka-server
154
145
  extensions: []
@@ -158,6 +149,7 @@ extra_rdoc_files:
158
149
  files:
159
150
  - COPYING
160
151
  - README
152
+ - bin/sekka-benchmark
161
153
  - bin/sekka-jisyo
162
154
  - bin/sekka-server
163
155
  - emacs/http-cookies.el
@@ -198,7 +190,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
190
  requirements:
199
191
  - - ">="
200
192
  - !ruby/object:Gem::Version
201
- hash: 49
202
193
  segments:
203
194
  - 1
204
195
  - 9
@@ -209,7 +200,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
200
  requirements:
210
201
  - - ">="
211
202
  - !ruby/object:Gem::Version
212
- hash: 3
213
203
  segments:
214
204
  - 0
215
205
  version: "0"