Class: Keystone::StringUtil

Inherits:
Object show all
Defined in:
lib/keystone/string_util.rb

Constant Summary collapse

MULTIBYTE_SPACE =
[0x3000].pack("U")
PRESERVED_QUERY_WORDS_RE =
/(AND|OR|ANDNOT)/

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.downcase_roma_number(st) ⇒ Object

TODO



62
63
64
# File 'lib/keystone/string_util.rb', line 62

def self.downcase_roma_number(st)
  st.tr("ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ", "ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ")
end

.int_to_splitted_path(i_value, value_length, base_folder, suffix = "") ⇒ Object

Raises:

  • (RangeError)


4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/keystone/string_util.rb', line 4

def self.int_to_splitted_path(i_value,value_length,base_folder,suffix="")
  file_name = Integer(i_value).to_s
  raise RangeError,"value_length must bigger than 0" if value_length < 1
  raise RangeError, 'i_value length is bigger than value_length' if file_name.size > value_length
  file_name = file_name.rjust(value_length, '0')
  new_path = base_folder.dup
  group_regex = ""
  i = value_length
  group_cnt = 0
  loop do
    group_cnt += 1
    if i > 2
      group_regex << "(\\d\\d\\d)"
      i -= 3
      break if i < 1
    else
      group_regex = "(#{"\\d"*i})" + group_regex
      break
    end
  end
  file_name.gsub(/#{group_regex}/) do |hit|
    1.upto(group_cnt) do |i|
      new_path << "/#{Regexp.last_match[i]}"
    end
  end
  new_path << suffix if suffix != ""
  return new_path
end

.remove_html_tag(html, tag, erace_all = false) ⇒ Object

tagで指定したhtmlタグを削除する

erace_all = true でタグのcontentsも丸ごと削除



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/keystone/string_util.rb', line 81

def self.remove_html_tag(html,tag,erace_all = false)
  poss = []
  last_hit = 0
  next_check_start = 0
  str = html.clone
  strori = str.clone
  loop do
    pos,size=nil,nil
    if pos = str =~ /(<#{tag}.*?>)/
      size = $1.size
    else
      break
    end
    last_hit = next_check_start + pos
    next_check_start = last_hit + size
    poss << last_hit
    str = str[pos+size..-1]
  end

  poss.reverse!
  str = strori

  poss.each do |pos|
    str1 = str[0..pos-1]
    str2 = str[pos..-1]
    str1 = '' if pos == 0
    if erace_all
      str2.sub!(/<#{tag}.*?>(.*?)<\/#{tag}>/mi){''}
    else
      str2.sub!(/<#{tag}.*?>(.*?)<\/#{tag}>/mi){$1}
    end
    str = str1 + str2
  end
  return str
end

.reverse_mail_address(mail) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/keystone/string_util.rb', line 33

def self.reverse_mail_address(mail)
  if mail.index('@') == nil
    return mail
  end
  user,dom = mail.split('@')
  if dom == nil
    return "@#{user}"
  end
  return dom.split('.').reverse.join(".") + "@" + user
end

.serach_string_to_array(query) ⇒ Object

adviced by Mr.morohashi



49
50
51
52
53
54
55
56
57
# File 'lib/keystone/string_util.rb', line 49

def self.serach_string_to_array(query)
  tokens = query.scan(/'([^']*)'|"([^"]*)"|([^\s#{MULTIBYTE_SPACE}]*)/).flatten.reject{|i| i == nil || i == "" }
  tokens.map do |token|
    next unless token
    #token.gsub!(PRESERVED_QUERY_WORDS_RE, $1.downcase) if token =~ PRESERVED_QUERY_WORDS_RE
    token.gsub!(/\A['"]|['"]\z/, '') # strip quatos
    token
  end
end

.to_searchtext(str) ⇒ Object

making search text for indexing



69
70
71
72
73
74
# File 'lib/keystone/string_util.rb', line 69

def self.to_searchtext(str)
  self.downcase_roma_number(Moji.han_to_zen(
      #Moji.zen_to_han(str,Moji::ZEN_ALNUM | Moji::ZEN_SYMBOL).downcase,Moji::HAN_KATA | Moji::HAN_JSYMBOL).tr("ー~/","ー~/")
      Moji.zen_to_han(str,Moji::ZEN_ALNUM | Moji::ZEN_SYMBOL).downcase,Moji::HAN_KATA | Moji::HAN_JSYMBOL)
  )
end

Instance Method Details

#to_fileable_st(st) ⇒ Object

指定された文字列より以外を取り除く



123
124
125
# File 'lib/keystone/string_util.rb', line 123

def to_fileable_st(st)
  st.gsub(/[^\w\-_\.]/,"")
end