kanamei-keystone 0.0.10 → 0.0.11
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/example/batch_sample.rb +22 -0
- data/example/os.rb +4 -0
- data/example/string_util.rb +8 -0
- data/lib/keystone/base.rb +2 -2
- data/lib/keystone/batch/base.rb +78 -0
- data/lib/keystone/batch.rb +5 -0
- data/lib/keystone/core_ext/array.rb +16 -0
- data/lib/keystone/core_ext/blank.rb +44 -0
- data/lib/keystone/core_ext/dir.rb +12 -0
- data/lib/keystone/core_ext/object.rb +29 -0
- data/lib/keystone/core_ext/tempfile.rb +14 -0
- data/lib/keystone/core_ext/uri.rb +14 -0
- data/lib/keystone/core_ext.rb +10 -69
- data/lib/keystone/mail/send.rb +13 -5
- data/lib/keystone/os/abstract_os.rb +34 -0
- data/lib/keystone/os/centos.rb +6 -0
- data/lib/keystone/os/darwin.rb +9 -0
- data/lib/keystone/os/linux.rb +15 -0
- data/lib/keystone/os/osx.rb +6 -0
- data/lib/keystone/os/unix.rb +34 -0
- data/lib/keystone/os.rb +26 -0
- data/lib/keystone/string_util.rb +3 -2
- data/lib/keystone.rb +5 -5
- data/test/test_string_util.rb +60 -0
- data/vendor/moji.rb +2 -1
- metadata +25 -3
- data/lib/keystone/batch_base.rb +0 -17
- data/lib/keystone/environment.rb +0 -47
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'keystone'
|
3
|
+
|
4
|
+
include Keystone::Batch::Base
|
5
|
+
|
6
|
+
if ARGV[0] == nil
|
7
|
+
puts "set mail addr"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
# ERROR_MAIL_TOを設定しておけば自動でエラーメールが送信される
|
12
|
+
ERROR_MAIL_TO = ARGV[0]
|
13
|
+
# ●定数
|
14
|
+
# ERROR_MAIL_TO (エラーメール送信先) 設定しておけば自動でエラーメールを送信してくれる
|
15
|
+
# ERROR_MAIL_FROM (エラーメール送信元) 設定されてない場合はERROR_MAIL_TOを使用
|
16
|
+
# ERROR_MAIL_STMP_ADDR (エラーメール送信SMTPアドレス) 設定されてない場合は"127.0.0.1"
|
17
|
+
# ERROR_MAIL_STMP_PORT (エラーメール送信SMTPポート) 設定されてない場合は25
|
18
|
+
|
19
|
+
execute() do
|
20
|
+
info "batch process01"
|
21
|
+
raise 'error occur'
|
22
|
+
end
|
data/example/os.rb
ADDED
data/lib/keystone/base.rb
CHANGED
@@ -14,9 +14,9 @@ module Keystone
|
|
14
14
|
|
15
15
|
def error(message)
|
16
16
|
if message.is_a? Exception
|
17
|
-
log(:ERROR,"
|
17
|
+
log(:ERROR,"#{message.message}")
|
18
18
|
message.backtrace.each_with_index {|line, i|
|
19
|
-
log(:ERROR,"
|
19
|
+
log(:ERROR,"#{line})",false)
|
20
20
|
}
|
21
21
|
else
|
22
22
|
log(:ERROR,message.to_s)
|
@@ -0,0 +1,78 @@
|
|
1
|
+
|
2
|
+
require 'digest/md5'
|
3
|
+
|
4
|
+
module Keystone::Batch
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# ●定数
|
8
|
+
# ERROR_MAIL_TO (エラーメール送信先) 設定しておけば自動でエラーメールを送信してくれる
|
9
|
+
# ERROR_MAIL_FROM (エラーメール送信元) 設定されてない場合はERROR_MAIL_TOを使用
|
10
|
+
# ERROR_MAIL_STMP_ADDR (エラーメール送信SMTPアドレス) 設定されてない場合は"127.0.0.1"
|
11
|
+
# ERROR_MAIL_STMP_PORT (エラーメール送信SMTPポート) 設定されてない場合は25
|
12
|
+
#
|
13
|
+
#
|
14
|
+
module Base
|
15
|
+
def execute(double_process_check = true,auto_recover = true,&process)
|
16
|
+
info "start script(#{File.expand_path($0)})"
|
17
|
+
warn "ERROR_MAIL_TO not defined.if you want error mail automatically,set this value." unless Module.constants.include?("ERROR_MAIL_TO")
|
18
|
+
script_started_at = Time.now
|
19
|
+
begin
|
20
|
+
# double process check
|
21
|
+
if double_process_check
|
22
|
+
pg_path = File.expand_path($0)
|
23
|
+
pg_name = File.basename(pg_path)
|
24
|
+
hash = Digest::MD5.hexdigest(pg_path)
|
25
|
+
pid_file = "/tmp/.#{pg_name}.#{hash}.pid"
|
26
|
+
debug pid_file
|
27
|
+
if File.exists?(pid_file)
|
28
|
+
pid = File.open(pid_file).read.chomp
|
29
|
+
pid_list = `ps -e | awk '{print $1}'`
|
30
|
+
if pid_list =~ /#{pid}/
|
31
|
+
warn "pid:#{pid} still running"
|
32
|
+
return nil
|
33
|
+
else
|
34
|
+
if auto_recover
|
35
|
+
warn "pid file still exists,but process does not found.so process continues"
|
36
|
+
else
|
37
|
+
raise "pid file still exists,but process does not found"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
File.open(pid_file, "w"){|file|
|
42
|
+
file.write $$
|
43
|
+
}
|
44
|
+
end
|
45
|
+
return (yield process)
|
46
|
+
rescue => e
|
47
|
+
error e
|
48
|
+
send_error_mail(e)
|
49
|
+
ensure
|
50
|
+
File.delete(pid_file) if double_process_check
|
51
|
+
info "finish script (%1.3fsec)" % (Time.now - script_started_at)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def send_error_mail(error)
|
56
|
+
if Module.constants.include?("ERROR_MAIL_TO")
|
57
|
+
host = Keystone::Os.get()
|
58
|
+
title = %|error occur at "#{host.hostname}" [#{error.message}]|
|
59
|
+
|
60
|
+
mail_to = ERROR_MAIL_TO
|
61
|
+
mail_to = [mail_to] if mail_to.is_a?(String)
|
62
|
+
mail_from = Module.constants.include?("ERROR_MAIL_FROM") ? ERROR_MAIL_FROM : mail_to[0]
|
63
|
+
smtp_addr = Module.constants.include?("ERROR_MAIL_STMP_ADDR") ? ERROR_MAIL_STMP_ADDR : '127.0.0.1'
|
64
|
+
smtp_port = Module.constants.include?("ERROR_MAIL_STMP_PORT") ? ERROR_MAIL_STMP_PORT : 25
|
65
|
+
|
66
|
+
body = <<-BODY
|
67
|
+
==== error message ====
|
68
|
+
#{error.message}
|
69
|
+
====== backtrace ======
|
70
|
+
#{error.backtrace.join("\n")}
|
71
|
+
===== environment =====
|
72
|
+
#{host.dump}
|
73
|
+
BODY
|
74
|
+
Keystone::Mail::Send.send(mail_from,mail_to,title,body,smtp_addr,smtp_port)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class Object
|
2
|
+
# copy from activesupport
|
3
|
+
def blank?
|
4
|
+
respond_to?(:empty?) ? empty? : !self
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class NilClass #:nodoc:
|
9
|
+
def blank?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class FalseClass #:nodoc:
|
15
|
+
def blank?
|
16
|
+
true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class TrueClass #:nodoc:
|
21
|
+
def blank?
|
22
|
+
false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Array #:nodoc:
|
27
|
+
alias_method :blank?, :empty?
|
28
|
+
end
|
29
|
+
|
30
|
+
class Hash #:nodoc:
|
31
|
+
alias_method :blank?, :empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
class String #:nodoc:
|
35
|
+
def blank?
|
36
|
+
self !~ /\S/
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Numeric #:nodoc:
|
41
|
+
def blank?
|
42
|
+
false
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Object
|
2
|
+
# http://www.yohasebe.com/pages/trans-seeing-metaclasses-clearly/
|
3
|
+
def metaclass
|
4
|
+
class << self
|
5
|
+
self
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
# http://www.yohasebe.com/pages/trans-seeing-metaclasses-clearly/
|
10
|
+
def meta_eval(&blk)
|
11
|
+
metaclass.instance_eval(&blk)
|
12
|
+
end
|
13
|
+
|
14
|
+
# http://www.yohasebe.com/pages/trans-seeing-metaclasses-clearly/
|
15
|
+
def meta_def(name, &blk)
|
16
|
+
meta_eval { define_method name, &blk }
|
17
|
+
end
|
18
|
+
|
19
|
+
# http://www.yohasebe.com/pages/trans-seeing-metaclasses-clearly/
|
20
|
+
def class_def(name, &blk)
|
21
|
+
class_eval { define_method name, &blk }
|
22
|
+
end
|
23
|
+
|
24
|
+
# 1.8.7 エミュレート
|
25
|
+
def tap
|
26
|
+
yield(self)
|
27
|
+
self
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
class Tempfile
|
4
|
+
def self.open_with_block(name = nil, dir = nil)
|
5
|
+
name ||= (0..8).map{rand(36).to_s(36)}.join
|
6
|
+
args = dir ? [name, dir] : [name]
|
7
|
+
tmp = Tempfile.open *args
|
8
|
+
begin
|
9
|
+
yield tmp
|
10
|
+
ensure
|
11
|
+
tmp.close true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Uri
|
2
|
+
#
|
3
|
+
def self.escape_raw(st)
|
4
|
+
st.gsub(/([^a-zA-Z0-9_\-\.~])/) { "%#{$1.unpack('H*')[0].scan(/../).join('%').upcase }" }
|
5
|
+
end
|
6
|
+
|
7
|
+
#
|
8
|
+
# usage
|
9
|
+
# @search_tag = Uri.unescape_raw(params[:tag]).toutf8
|
10
|
+
#
|
11
|
+
def self.unescape_raw(st)
|
12
|
+
st.tr('+',' ').gsub(/%([A-Fa-f0-9][A-Fa-f0-9])/) { [$1.hex].pack('C') }
|
13
|
+
end
|
14
|
+
end
|
data/lib/keystone/core_ext.rb
CHANGED
@@ -1,76 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
# usage
|
12
|
-
# @search_tag = Uri.unescape_raw(params[:tag]).toutf8
|
13
|
-
#
|
14
|
-
#
|
15
|
-
def self.unescape_raw(st)
|
16
|
-
st.tr('+',' ').gsub(/%([A-Fa-f0-9][A-Fa-f0-9])/) { [$1.hex].pack('C') }
|
1
|
+
module Keystone
|
2
|
+
module CoreExt
|
3
|
+
require 'keystone/core_ext/blank'
|
4
|
+
require 'keystone/core_ext/uri'
|
5
|
+
require 'keystone/core_ext/tempfile'
|
6
|
+
require 'keystone/core_ext/dir'
|
7
|
+
require 'keystone/core_ext/object'
|
8
|
+
require 'keystone/core_ext/array'
|
17
9
|
end
|
18
10
|
end
|
19
11
|
|
20
|
-
class Tempfile
|
21
|
-
def self.open_with_block(name = nil, dir = nil)
|
22
|
-
name ||= (0..8).map{rand(36).to_s(36)}.join
|
23
|
-
args = dir ? [name, dir] : [name]
|
24
|
-
tmp = Tempfile.open *args
|
25
|
-
begin
|
26
|
-
yield tmp
|
27
|
-
ensure
|
28
|
-
tmp.close true
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
12
|
|
33
|
-
class Dir
|
34
|
-
def self.mkdir_r(dirPath)
|
35
|
-
folders = dirPath.split('/')
|
36
|
-
folderToCreate = ''
|
37
|
-
folders.each do |folder|
|
38
|
-
folderToCreate += folder + '/'
|
39
|
-
if !File.directory?(folderToCreate)
|
40
|
-
Dir.mkdir(folderToCreate)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
13
|
|
46
|
-
|
47
|
-
|
48
|
-
def metaclass
|
49
|
-
class << self
|
50
|
-
self
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# http://www.yohasebe.com/pages/trans-seeing-metaclasses-clearly/
|
55
|
-
def meta_eval(&blk)
|
56
|
-
metaclass.instance_eval(&blk)
|
57
|
-
end
|
58
|
-
|
59
|
-
# http://www.yohasebe.com/pages/trans-seeing-metaclasses-clearly/
|
60
|
-
def meta_def(name, &blk)
|
61
|
-
meta_eval { define_method name, &blk }
|
62
|
-
end
|
63
|
-
|
64
|
-
# http://www.yohasebe.com/pages/trans-seeing-metaclasses-clearly/
|
65
|
-
def class_def(name, &blk)
|
66
|
-
class_eval { define_method name, &blk }
|
67
|
-
end
|
68
|
-
|
69
|
-
# 1.8.7 エミュレート
|
70
|
-
def tap
|
71
|
-
yield(self)
|
72
|
-
self
|
73
|
-
end
|
74
|
-
end
|
14
|
+
|
15
|
+
|
75
16
|
|
76
17
|
|
data/lib/keystone/mail/send.rb
CHANGED
@@ -14,8 +14,16 @@ module Keystone
|
|
14
14
|
|
15
15
|
def self.send(from,to,title,body,smtp_addr="127.0.0.1",smtp_port=25)
|
16
16
|
from_addr,from_addr_4_header = create_addr_and_header(from)
|
17
|
-
title
|
18
|
-
|
17
|
+
title.gsub!(/(\r|\n)/,"")
|
18
|
+
|
19
|
+
subject_header = ""
|
20
|
+
title.split(//).split_by(10).each do |subject|
|
21
|
+
st = subject.join('')
|
22
|
+
st = Kconv.tojis(st)
|
23
|
+
st = st.split(//,1).pack('m'); st = st.chomp
|
24
|
+
subject_header += " =?ISO-2022-JP?B?#{st}?=\n"
|
25
|
+
end
|
26
|
+
|
19
27
|
if to.class.to_s == 'Array'
|
20
28
|
tomany = to.join(',')
|
21
29
|
else
|
@@ -23,13 +31,13 @@ module Keystone
|
|
23
31
|
end
|
24
32
|
|
25
33
|
head = <<HEAD
|
26
|
-
Subject:
|
27
|
-
To: #{tomany}
|
34
|
+
Subject: #{subject_header}To: #{tomany}
|
28
35
|
From: #{from_addr_4_header}
|
29
36
|
Mime-Version: 1.0
|
30
37
|
Content-Transfer-Encoding: 7bit
|
31
38
|
Content-Type: Text/Plain; charset=iso-2022-jp
|
32
39
|
HEAD
|
40
|
+
|
33
41
|
src = head + "\n" + Kconv.tojis(body)
|
34
42
|
# puts src
|
35
43
|
m = Net::SMTPSession.new(smtp_addr, smtp_port)
|
@@ -37,7 +45,7 @@ HEAD
|
|
37
45
|
m.sendmail(src, from_addr, to)
|
38
46
|
m.finish
|
39
47
|
end
|
40
|
-
|
48
|
+
|
41
49
|
def send(from,to,title,body)
|
42
50
|
self.class.send(from,to,title,body,@smtp_addr,@smtp_port)
|
43
51
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Keystone
|
2
|
+
module Os
|
3
|
+
class AbstractOs
|
4
|
+
|
5
|
+
attr_accessor :version
|
6
|
+
|
7
|
+
def ip_address
|
8
|
+
end
|
9
|
+
|
10
|
+
def hostname
|
11
|
+
end
|
12
|
+
|
13
|
+
def disk
|
14
|
+
end
|
15
|
+
|
16
|
+
def process_list
|
17
|
+
end
|
18
|
+
|
19
|
+
def netstat
|
20
|
+
end
|
21
|
+
|
22
|
+
def dump
|
23
|
+
self_methods = self.methods - Class.methods
|
24
|
+
self_methods.delete("version=")
|
25
|
+
self_methods.delete("dump")
|
26
|
+
st = ""
|
27
|
+
self_methods.each do |method|
|
28
|
+
st << "== #{method} ==\n #{self.__send__(method).to_s.split("\n").join("\n ")}\n"
|
29
|
+
end
|
30
|
+
return st
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Keystone::Os
|
2
|
+
class Linux < Unix
|
3
|
+
def self.get
|
4
|
+
Dir.glob("/etc/*{-release,_version}").each do |file|
|
5
|
+
content = File.open(file).read
|
6
|
+
if content =~ /CentOS release (\d*)/
|
7
|
+
os = Centos.new
|
8
|
+
os.version = $1.to_i
|
9
|
+
return os
|
10
|
+
end
|
11
|
+
end
|
12
|
+
return Linux.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Keystone
|
2
|
+
module Os
|
3
|
+
class Unix < AbstractOs
|
4
|
+
def ip_address
|
5
|
+
ifconfig = `/sbin/ifconfig`
|
6
|
+
ips = []
|
7
|
+
|
8
|
+
# TODO mac
|
9
|
+
ifconfig.gsub(/inet addr:(\d+\.\d+\.\d+\.\d+)/){|ip|
|
10
|
+
if $1 != '127.0.0.1'
|
11
|
+
ips << $1
|
12
|
+
end
|
13
|
+
}
|
14
|
+
return ips
|
15
|
+
end
|
16
|
+
|
17
|
+
def hostname
|
18
|
+
`/bin/hostname`.chomp
|
19
|
+
end
|
20
|
+
|
21
|
+
def disk
|
22
|
+
`/bin/df -h`.chomp
|
23
|
+
end
|
24
|
+
|
25
|
+
def process_list
|
26
|
+
`/bin/ps -ef`.chomp
|
27
|
+
end
|
28
|
+
|
29
|
+
def netstat
|
30
|
+
`/usr/sbin/netstat -an`.chomp
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/keystone/os.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'keystone/os/abstract_os'
|
2
|
+
|
3
|
+
module Keystone::Os
|
4
|
+
autoload :Centos, 'keystone/os/centos'
|
5
|
+
autoload :Linux, 'keystone/os/linux'
|
6
|
+
autoload :Darwin, 'keystone/os/darwin'
|
7
|
+
autoload :Osx, 'keystone/os/osx'
|
8
|
+
autoload :Unix, 'keystone/os/unix'
|
9
|
+
# autoload :Windows, 'keystone/env/windows.rb' # fu*k windows
|
10
|
+
def self.oses
|
11
|
+
@oses ||= constants
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.get
|
15
|
+
case RUBY_PLATFORM
|
16
|
+
when /linux/
|
17
|
+
# TODO only centos impremented
|
18
|
+
Keystone::Os::Linux.get()
|
19
|
+
when /darwin/
|
20
|
+
# TODO only osx impremented
|
21
|
+
Keystone::Os::Osx.new
|
22
|
+
else
|
23
|
+
# TODO
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/keystone/string_util.rb
CHANGED
@@ -59,7 +59,7 @@ module Keystone
|
|
59
59
|
#
|
60
60
|
# TODO
|
61
61
|
def self.downcase_roma_number(st)
|
62
|
-
st.tr("
|
62
|
+
st.tr("ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ", "ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ")
|
63
63
|
end
|
64
64
|
|
65
65
|
#
|
@@ -67,7 +67,8 @@ module Keystone
|
|
67
67
|
#
|
68
68
|
def self.to_searchtext(str)
|
69
69
|
self.downcase_roma_number(Moji.han_to_zen(
|
70
|
-
Moji.zen_to_han(str,Moji::ZEN_ALNUM | Moji::ZEN_SYMBOL).downcase,Moji::HAN_KATA | Moji::HAN_JSYMBOL).tr("ー~/","ー~/")
|
70
|
+
#Moji.zen_to_han(str,Moji::ZEN_ALNUM | Moji::ZEN_SYMBOL).downcase,Moji::HAN_KATA | Moji::HAN_JSYMBOL).tr("ー~/","ー~/")
|
71
|
+
Moji.zen_to_han(str,Moji::ZEN_ALNUM | Moji::ZEN_SYMBOL).downcase,Moji::HAN_KATA | Moji::HAN_JSYMBOL)
|
71
72
|
)
|
72
73
|
end
|
73
74
|
end
|
data/lib/keystone.rb
CHANGED
@@ -11,12 +11,12 @@ autoload :Moji , 'moji'
|
|
11
11
|
|
12
12
|
module Keystone
|
13
13
|
|
14
|
-
VERSION = '0.0.
|
14
|
+
VERSION = '0.0.11'
|
15
15
|
|
16
|
-
autoload :StringUtil
|
17
|
-
autoload :
|
18
|
-
autoload :
|
19
|
-
autoload :Mail
|
16
|
+
autoload :StringUtil , 'keystone/string_util'
|
17
|
+
autoload :Batch , 'keystone/batch'
|
18
|
+
autoload :Os , 'keystone/os'
|
19
|
+
autoload :Mail , 'keystone/mail'
|
20
20
|
|
21
21
|
module Rails
|
22
22
|
#autoload :ActiveSupportExt, 'keystone/rails/active_support_ext'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'redgreen'
|
3
|
+
require 'vendor/moji'
|
4
|
+
require 'vendor/flag_set_maker'
|
5
|
+
require 'lib/keystone/string_util'
|
6
|
+
|
7
|
+
$KCODE='u'
|
8
|
+
|
9
|
+
class TestStringUtilBase < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_reverse_mail
|
14
|
+
assert_equal(Keystone::StringUtil::reverse_mail("testuser@softbank.ne.jp"),"jp.ne.softbank@testuser")
|
15
|
+
assert_equal(Keystone::StringUtil::reverse_mail("test.user@somedomain.com"),"com.somedomain@test.user")
|
16
|
+
assert_equal(Keystone::StringUtil::reverse_mail("a.b@c.d"),"d.c@a.b")
|
17
|
+
assert_equal(Keystone::StringUtil::reverse_mail("a.b@"),"@a.b")
|
18
|
+
assert_equal(Keystone::StringUtil::reverse_mail("@c.d"),"d.c@")
|
19
|
+
assert_equal(Keystone::StringUtil::reverse_mail("a.b"),"a.b")
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_int_to_splitted_path
|
23
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(113355,12,"/tmp",".jpg"),"/tmp/000/000/113/355.jpg")
|
24
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(1234567890,10,"/temp",".png"),"/temp/1/234/567/890.png")
|
25
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(1234567890,11,"/temp",".png"),"/temp/01/234/567/890.png")
|
26
|
+
assert_raise(RangeError){Keystone::StringUtil.int_to_splitted_path(12345678901,10,"/tmp")}
|
27
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(00000000000000001,11,"/tmp",".gif"),"/tmp/00/000/000/001.gif")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_serach_string_to_array
|
31
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|test test2 test3|),%w|test test2 test3|)
|
32
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|test "test2" test3|),%w|test test2 test3|)
|
33
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|test "test 2" test3|),["test","test 2","test3"])
|
34
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|"test 1" "test 2" test3|),["test 1","test 2","test3"])
|
35
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|"日本語 1" "test 2" test3|),["日本語 1","test 2","test3"])
|
36
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|"日本語 1" "test 2" ハンカク|),["日本語 1","test 2","ハンカク"])
|
37
|
+
# TODO
|
38
|
+
# assert_equal(Keystone::StringUtil.serach_string_to_array(%|"日本語 1" "tes\"t 2" ハンカク|),["日本語 1","test 2","ハンカク"])
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_to_searchtext
|
42
|
+
assert_equal(Keystone::StringUtil.to_searchtext("日本語"),"日本語")
|
43
|
+
assert_equal(Keystone::StringUtil.to_searchtext("カタカナ"),"カタカナ")
|
44
|
+
assert_equal(Keystone::StringUtil.to_searchtext("ハンカク"),"ハンカク")
|
45
|
+
assert_equal(Keystone::StringUtil.to_searchtext("A"),"a")
|
46
|
+
assert_equal(Keystone::StringUtil.to_searchtext("1"),"1")
|
47
|
+
assert_equal(Keystone::StringUtil.to_searchtext("abCD1234"),"abcd1234")
|
48
|
+
assert_equal(Keystone::StringUtil.to_searchtext("スープ"),"スープ")
|
49
|
+
assert_equal(Keystone::StringUtil.to_searchtext("スープ"),"スープ") # ハンカク半濁点
|
50
|
+
assert_equal(Keystone::StringUtil.to_searchtext("コズミックラナウェイ"),"コズミックラナウェイ") # ハンカク濁点
|
51
|
+
assert_equal(Keystone::StringUtil.to_searchtext("ー―-‐"),"ー―-‐") # ハンカク濁点
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
# TODO
|
56
|
+
assert_equal(Keystone::StringUtil.to_searchtext("!”$%&¥’()*+,-./:;<=>?@[¥]^_‘{|}~#"),"!\"$%&\\'()*+,-./:;<=>?@[\\]^_`{|}~#") # 半角全角変換可能記号
|
57
|
+
assert_equal(Keystone::StringUtil.to_searchtext("。「」、ー゙゚・"),"。「」、ー゛゜・")
|
58
|
+
assert_equal(Keystone::StringUtil.to_searchtext("ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ"),"ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ")
|
59
|
+
end
|
60
|
+
end
|
data/vendor/moji.rb
CHANGED
@@ -298,7 +298,8 @@ module Moji
|
|
298
298
|
module Detail
|
299
299
|
|
300
300
|
HAN_ASYMBOL_LIST= ' !"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
|
301
|
-
ZEN_ASYMBOL_LIST= ' !”#$%&’()*+,-./:;<=>?@[¥]^_‘{|} ̄'
|
301
|
+
# ZEN_ASYMBOL_LIST= ' !”#$%&’()*+,-./:;<=>?@[¥]^_‘{|} ̄' # Keystone replaced
|
302
|
+
ZEN_ASYMBOL_LIST= ' !”#$%&’()*+,-./:;<=>?@[¥]^_‘{|}~'
|
302
303
|
HAN_JSYMBOL1_LIST= '。「」、ー゙゚・'
|
303
304
|
ZEN_JSYMBOL1_LIST= '。「」、ー゛゜・'
|
304
305
|
ZEN_JSYMBOL_LIST= '、。・゛゜´`¨ヽヾゝゞ〃仝々〆〇ー―‐\~〜∥…‥“〔〕〈〉《》「」『』【】'+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kanamei-keystone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kanamei
|
@@ -22,14 +22,34 @@ extensions: []
|
|
22
22
|
extra_rdoc_files: []
|
23
23
|
|
24
24
|
files:
|
25
|
+
- example/batch_sample.rb
|
26
|
+
- example/os.rb
|
27
|
+
- example/string_util.rb
|
28
|
+
- test/test_string_util.rb
|
25
29
|
- lib/keystone
|
26
30
|
- lib/keystone/base.rb
|
27
|
-
- lib/keystone/
|
31
|
+
- lib/keystone/batch
|
32
|
+
- lib/keystone/batch/base.rb
|
33
|
+
- lib/keystone/batch.rb
|
34
|
+
- lib/keystone/core_ext
|
35
|
+
- lib/keystone/core_ext/array.rb
|
36
|
+
- lib/keystone/core_ext/blank.rb
|
37
|
+
- lib/keystone/core_ext/dir.rb
|
38
|
+
- lib/keystone/core_ext/object.rb
|
39
|
+
- lib/keystone/core_ext/tempfile.rb
|
40
|
+
- lib/keystone/core_ext/uri.rb
|
28
41
|
- lib/keystone/core_ext.rb
|
29
|
-
- lib/keystone/environment.rb
|
30
42
|
- lib/keystone/mail
|
31
43
|
- lib/keystone/mail/send.rb
|
32
44
|
- lib/keystone/mail.rb
|
45
|
+
- lib/keystone/os
|
46
|
+
- lib/keystone/os/abstract_os.rb
|
47
|
+
- lib/keystone/os/centos.rb
|
48
|
+
- lib/keystone/os/darwin.rb
|
49
|
+
- lib/keystone/os/linux.rb
|
50
|
+
- lib/keystone/os/osx.rb
|
51
|
+
- lib/keystone/os/unix.rb
|
52
|
+
- lib/keystone/os.rb
|
33
53
|
- lib/keystone/string_util.rb
|
34
54
|
- lib/keystone.rb
|
35
55
|
- vendor/flag_set_maker.rb
|
@@ -42,6 +62,8 @@ rdoc_options: []
|
|
42
62
|
require_paths:
|
43
63
|
- lib
|
44
64
|
- vendor
|
65
|
+
- example
|
66
|
+
- test
|
45
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
46
68
|
requirements:
|
47
69
|
- - ">="
|
data/lib/keystone/batch_base.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module Keystone
|
2
|
-
module BatchBase
|
3
|
-
def execute(&process)
|
4
|
-
info "start script"
|
5
|
-
script_started_at = Time.now
|
6
|
-
begin
|
7
|
-
return (yield process)
|
8
|
-
rescue => e
|
9
|
-
error e
|
10
|
-
Skutil::Mail.send_error(ERROR_MAIL_FROM,ERROR_MAIL_TO,ERROR_MAIL_SUBJECT,e)
|
11
|
-
return e
|
12
|
-
ensure
|
13
|
-
info "finish script (%1.3fsec)" % (Time.now - script_started_at)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/lib/keystone/environment.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
module Keystone
|
2
|
-
class Environment
|
3
|
-
def self.ip_address
|
4
|
-
ifconfig = `/sbin/ifconfig`
|
5
|
-
ips = []
|
6
|
-
|
7
|
-
# TODO mac
|
8
|
-
ifconfig.gsub(/inet addr:(\d+\.\d+\.\d+\.\d+)/){|ip|
|
9
|
-
if $1 != '127.0.0.1'
|
10
|
-
ips << $1
|
11
|
-
end
|
12
|
-
}
|
13
|
-
return ips
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.hostname
|
17
|
-
`/bin/hostname`.chomp
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.df
|
21
|
-
`/bin/df -h`.chomp
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.ps
|
25
|
-
`/bin/ps -ef`.chomp
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.netstat
|
29
|
-
`/usr/sbin/netstat -an`.chomp
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.execute(command)
|
33
|
-
`#{command}`.chomp
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.dump
|
37
|
-
self_methods = self.methods - Class.methods
|
38
|
-
self_methods.delete("dump")
|
39
|
-
self_methods.delete("execute")
|
40
|
-
st = ""
|
41
|
-
self_methods.each do |method|
|
42
|
-
st << "#{method}:\n #{self.__send__(method).to_s.split("\n").join("\n ")}\n"
|
43
|
-
end
|
44
|
-
return st
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|