module Milkode::Util
Public Instance Methods
divide_shortpath(shortpath)
click to toggle source
'package/to/a.txt' #=> 'package', 'to/a.txt' 'package' #=> 'package', nil
# File lib/milkode/common/util.rb, line 176 def divide_shortpath(shortpath) shortpath = shortpath[1..-1] if shortpath[0..0] == '/' # 先頭の'/'はカット a = shortpath.split('/') if (a.size >= 2) return a[0], a[1..-1].join('/') else return a[0], nil end end
downcase?(str)
click to toggle source
# File lib/milkode/common/util.rb, line 112 def downcase?(str) str == str.downcase end
exist_command?(command)
click to toggle source
指定したコマンドが存在するか?
# File lib/milkode/common/util.rb, line 235 def exist_command?(command) # open3 : Not working on Pure Windows # begin # Open3.capture3('type', command)[2].exited? # rescue Errno::ENOENT # false # end # whichr !(RubyWhich.new.which(command).empty?) end
filename_to_utf8(str_from_file)
click to toggle source
# File lib/milkode/common/util.rb, line 84 def filename_to_utf8(str_from_file) if platform_osx? if (ruby19?) str_from_file.encode('UTF-8', 'UTF8-MAC') else str_from_file end else Kconv.kconv(str_from_file, Kconv::UTF8) end end
fuzzy_gotoline_keyword?(keyword)
click to toggle source
# File lib/milkode/common/util.rb, line 124 def fuzzy_gotoline_keyword?(keyword) keyword =~ /\A.*:\d+\Z/ end
gem_version_more?(name, version)
click to toggle source
gem_version_more?('rroonga', '2.1.0') #=> rroonga >= '2.1.0'
# File lib/milkode/common/util.rb, line 221 def gem_version_more?(name, version) Gem.loaded_specs[name].version >= Gem::Version.new(version) end
git_url?(src)
click to toggle source
# File lib/milkode/common/util.rb, line 187 def git_url?(src) (src =~ /^(?:git[:@])|(?:ssh:)|(?:\.git\Z)/) != nil end
github_repo(src)
click to toggle source
# File lib/milkode/common/util.rb, line 301 def github_repo(src) if src.match(/\Agit@github\.com:(.*)\.git\Z/) $1 elsif src.match(/\A\w+:\/\/github\.com\/(.*)\.git\Z/) $1 else nil end end
gotoline_keyword?(keyword)
click to toggle source
# File lib/milkode/common/util.rb, line 120 def gotoline_keyword?(keyword) keyword =~ /\A\/.*:\d+\Z/ end
gotoline_multi?(words)
click to toggle source
# File lib/milkode/common/util.rb, line 166 def gotoline_multi?(words) if (words.join(" ") =~ /:\d+/) true else false end end
groonga_table_sort(table, keys, options = {})
click to toggle source
互換性保持のため
# File lib/milkode/common/util.rb, line 226 def groonga_table_sort(table, keys, options = {}) if gem_version_more?('rroonga', '2.1.0') table.sort(keys, options).map{|r| r.value} else table.sort(keys, options) end end
highlight_keywords(src, keywords, css_class)
click to toggle source
# File lib/milkode/common/util.rb, line 247 def highlight_keywords(src, keywords, css_class) # Init highlight_map hightlight_map = Array.new(src.length, nil) keywords.each do |keyword| pos = 0 loop do r = src.match(/#{Regexp.escape(keyword)}/i, pos) do |m| s = m.begin(0) l = keyword.length e = s+l (s...e).each {|i| hightlight_map[i] = 1 } pos = e end break if r.nil? end end # Delete html tag index = 0 in_tag = false src.each_char do |char| in_tag = true if char == '<' hightlight_map[index] = nil if in_tag in_tag = false if char == '>' index += 1 end # Output result = "" index = 0 prev = nil src.each_char do |char| current = hightlight_map[index] if prev.nil? && current result += "<span class='#{css_class}'>" elsif prev && current.nil? result += "</span>" end result += char index += 1 prev = current end result += "</span>" if prev result end
ignore_case?(pattens, is_sensitive)
click to toggle source
# File lib/milkode/common/util.rb, line 116 def ignore_case?(pattens, is_sensitive) !is_sensitive && (pattens.all? {|v| Util.downcase? v}) end
larger_than_oneline(content)
click to toggle source
# File lib/milkode/common/util.rb, line 96 def larger_than_oneline(content) begin content && content.count($/) > 1 rescue ArgumentError true end end
load_content(out, filename)
click to toggle source
# File lib/milkode/common/util.rb, line 204 def load_content(out, filename) str = File.read(filename) begin Kconv.kconv(str, Kconv::UTF8) rescue ArgumentError warning_alert(out, "skip kconv. file size too big (or negative string size) : #{filename}.") str end end
normalize_filename(str)
click to toggle source
# File lib/milkode/common/util.rb, line 104 def normalize_filename(str) if platform_win? str.gsub(/\A([a-z]):/) { "#{$1.upcase}:" } else str end end
parse_gotoline(words)
click to toggle source
parse_gotoline
(['a', '123', 'b']) #=> [['a', 'b'], 123]] parse_gotoline
(['a', '123', 'b', 55]) #=> [['a', 'b', '123'], 55]] parse_gotoline() #=> [['a'], 55]]
# File lib/milkode/common/util.rb, line 131 def parse_gotoline(words) if gotoline_multi?(words) parse_gotoline_multi(words) else [parse_gotoline_single(words)] end end
parse_gotoline_multi(words)
click to toggle source
# File lib/milkode/common/util.rb, line 159 def parse_gotoline_multi(words) words.map do |v| a = v.split(':') [[a[0..-2].join(':')], a[-1].to_i] end end
parse_gotoline_single(words)
click to toggle source
# File lib/milkode/common/util.rb, line 139 def parse_gotoline_single(words) lineno = -1 index = -1 words.each_with_index do |v, idx| n = v.to_i if (n != 0) lineno = n index = idx end end if (lineno == -1) [words, 1] # 行番号らしきものは見つからなかった else words.delete_at(index) [words, lineno] end end
pipe?(io)
click to toggle source
StringIO patch
# File lib/milkode/common/util.rb, line 196 def pipe?(io) !io.instance_of?(IO) || !File.pipe?(io) end
platform_osx?()
click to toggle source
# File lib/milkode/common/util.rb, line 72 def platform_osx? RUBY_PLATFORM =~ /darwin/ end
platform_win?()
click to toggle source
# File lib/milkode/common/util.rb, line 68 def platform_win? RUBY_PLATFORM =~ /mswin(?!ce)|mingw|cygwin|bccwin/ end
relative_path(path, basedir)
click to toggle source
# File lib/milkode/common/util.rb, line 50 def relative_path(path, basedir) path = Pathname.new(normalize_filename path) basedir = Pathname.new(normalize_filename basedir) begin path.relative_path_from(basedir) rescue ArgumentError path end end
root_entrylist(filename)
click to toggle source
# File lib/milkode/common/util.rb, line 38 def root_entrylist(filename) list = [] Archive::Zip.open(filename) do |archive| archive.each do |entry| list << entry.zip_path if entry.zip_path.split('/').size == 1 end end list end
ruby19?()
click to toggle source
# File lib/milkode/common/util.rb, line 64 def ruby19? RUBY_VERSION >= '1.9.0' end
ruby20?()
click to toggle source
# File lib/milkode/common/util.rb, line 60 def ruby20? RUBY_VERSION >= '2.0.0' end
shell_kcode()
click to toggle source
# File lib/milkode/common/util.rb, line 76 def shell_kcode if platform_win? Kconv::SJIS # win7? cygwin utf8? else Kconv::UTF8 end end
str2kcode(str)
click to toggle source
# File lib/milkode/common/util.rb, line 311 def str2kcode(str) case str.downcase when 'none' Kconv::NOCONV when 'jis' Kconv::JIS when 'sjis' Kconv::SJIS when 'euc' Kconv::EUC when 'ascii' Kconv::ASCII when 'utf8' Kconv::UTF8 when 'utf16' Kconv::UTF16 else nil end end
svn_url?(src)
click to toggle source
# File lib/milkode/common/util.rb, line 191 def svn_url?(src) (src =~ /^(?:svn|svn\+ssh):\/\//) != nil end
truncate_nsec(t)
click to toggle source
Timeからnsecを切り捨てる
rroongaのTimeカラムはマイクロ秒までしか格納出来ない
# File lib/milkode/common/util.rb, line 216 def truncate_nsec(t) Time.at(t.to_i, t.usec) end
warning_alert(out, msg)
click to toggle source
# File lib/milkode/common/util.rb, line 200 def warning_alert(out, msg) out.puts "[warning] #{msg}" end
zip_extract(filename, dst_dir)
click to toggle source
zipファイルを展開し、展開フォルダ名を返す ファイルが見つからなかった時はnilを返す
# File lib/milkode/common/util.rb, line 18 def zip_extract(filename, dst_dir) require 'archive/zip' raise ZipfileNotFound unless File.exist?(filename) root_list = root_entrylist(filename) if (root_list.size == 1) # そのまま展開 Archive::Zip.extract filename, dst_dir return root_list[0].gsub("/", "") else # ディレクトリを作ってその先で展開 dir = File.basename(filename).sub(/#{File.extname(filename)}$/, "") FileUtils.mkdir_p File.join(dst_dir, dir) Archive::Zip.extract filename, File.join(dst_dir, dir) return dir end end