lib/commandbase.rb in narou-2.9.5 vs lib/commandbase.rb in narou-3.0.0

- old
+ new

@@ -2,10 +2,11 @@ # # Copyright 2013 whiteleaf. All rights reserved. # require "optparse" +require "termcolorlight" require_relative "web/worker" module Command class CommandBase # postfixies は改行で区切ることで2パターン以上記述できる @@ -67,30 +68,36 @@ # # タグ情報をID情報に展開する # def tagname_to_ids(array) database = Database.instance - tag_index = Hash.new { [] } - database.each do |id, data| - tags = data["tags"] || [] - tags.each do |tag| - tag_index[tag] |= [id] - end - end - array.map! { |arg| - if arg =~ /^[0-9]+$/ + tag_index = database.tag_indexies + all_ids = database.ids + expanded_array = array.map { |arg| + if arg =~ /\A\d+\z/ # 優先度はID>タグのため、数字のみ指定されたら # そのIDが存在した場合はIDとみなす - next arg if database[arg.to_i] + id = arg.to_i + next id if database[id] end - if arg =~ /^tag:(.+)$/ - # tag:タグ名 は直接タグと指定できる形式 - # (数字タグとIDがかぶった場合にタグを指定出来るようにするもの) - arg = $1 - end - ids = tag_index[arg] + ids = + case arg + when /\Atag:(.+)\z/ + # tag:タグ名 は直接タグと指定できる形式 + # (数字タグとIDがかぶった場合にタグを指定出来るようにするもの) + arg = $1 + tag_index[$1] + when /\A\^tag:(.+)\z/ + # ^tag:タグ名 は除外タグ指定 + arg = $1 + indexies = tag_index[$1] + indexies.empty? ? [] : all_ids - indexies + else + tag_index[arg] + end ids.empty? ? arg : ids - }.flatten! + }.flatten.uniq + array.replace(expanded_array) end # # 普通にコマンドを実行するけど、exit(2) を補足してexitstatus を返す # 正常終了なら0