Allow metatag case switch to use regexes

- Fix errant tabspaces
This commit is contained in:
BrokenEagle
2017-11-05 23:06:29 -08:00
parent bdf5912dc9
commit 9f4daf7d2f

View File

@@ -317,19 +317,19 @@ class Tag < ApplicationRecord
when :filesize when :filesize
object =~ /\A(\d+(?:\.\d*)?|\d*\.\d+)([kKmM]?)[bB]?\Z/ object =~ /\A(\d+(?:\.\d*)?|\d*\.\d+)([kKmM]?)[bB]?\Z/
size = $1.to_f size = $1.to_f
unit = $2 unit = $2
conversion_factor = case unit conversion_factor = case unit
when /m/i when /m/i
1024 * 1024 1024 * 1024
when /k/i when /k/i
1024 1024
else else
1 1
end end
(size * conversion_factor).to_i (size * conversion_factor).to_i
end end
end end
@@ -429,296 +429,298 @@ class Tag < ApplicationRecord
q[:tag_count] += 1 unless token == "status:deleted" || token =~ /\Alimit:.+\Z/ q[:tag_count] += 1 unless token == "status:deleted" || token =~ /\Alimit:.+\Z/
if token =~ /\A(#{METATAGS}):(.+)\Z/i if token =~ /\A(#{METATAGS}):(.+)\Z/i
case $1.downcase g1 = $1.downcase
g2 = $2
case g1
when "-user" when "-user"
q[:uploader_id_neg] ||= [] q[:uploader_id_neg] ||= []
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:uploader_id_neg] << user_id unless user_id.blank? q[:uploader_id_neg] << user_id unless user_id.blank?
when "user" when "user"
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:uploader_id] = user_id unless user_id.blank? q[:uploader_id] = user_id unless user_id.blank?
when "-approver" when "-approver"
if $2 == "none" if g2 == "none"
q[:approver_id] = "any" q[:approver_id] = "any"
elsif $2 == "any" elsif g2 == "any"
q[:approver_id] = "none" q[:approver_id] = "none"
else else
q[:approver_id_neg] ||= [] q[:approver_id_neg] ||= []
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:approver_id_neg] << user_id unless user_id.blank? q[:approver_id_neg] << user_id unless user_id.blank?
end end
when "approver" when "approver"
if $2 == "none" if g2 == "none"
q[:approver_id] = "none" q[:approver_id] = "none"
elsif $2 == "any" elsif g2 == "any"
q[:approver_id] = "any" q[:approver_id] = "any"
else else
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:approver_id] = user_id unless user_id.blank? q[:approver_id] = user_id unless user_id.blank?
end end
when "flagger" when "flagger"
q[:flagger_ids] ||= [] q[:flagger_ids] ||= []
if $2 == "none" if g2 == "none"
q[:flagger_ids] << "none" q[:flagger_ids] << "none"
elsif $2 == "any" elsif g2 == "any"
q[:flagger_ids] << "any" q[:flagger_ids] << "any"
else else
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:flagger_ids] << user_id unless user_id.blank? q[:flagger_ids] << user_id unless user_id.blank?
end end
when "-flagger" when "-flagger"
if $2 == "none" if g2 == "none"
q[:flagger_ids] ||= [] q[:flagger_ids] ||= []
q[:flagger_ids] << "any" q[:flagger_ids] << "any"
elsif $2 == "any" elsif g2 == "any"
q[:flagger_ids] ||= [] q[:flagger_ids] ||= []
q[:flagger_ids] << "none" q[:flagger_ids] << "none"
else else
q[:flagger_ids_neg] ||= [] q[:flagger_ids_neg] ||= []
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:flagger_ids_neg] << user_id unless user_id.blank? q[:flagger_ids_neg] << user_id unless user_id.blank?
end end
when "appealer" when "appealer"
q[:appealer_ids] ||= [] q[:appealer_ids] ||= []
if $2 == "none" if g2 == "none"
q[:appealer_ids] << "none" q[:appealer_ids] << "none"
elsif $2 == "any" elsif g2 == "any"
q[:appealer_ids] << "any" q[:appealer_ids] << "any"
else else
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:appealer_ids] << user_id unless user_id.blank? q[:appealer_ids] << user_id unless user_id.blank?
end end
when "-appealer" when "-appealer"
if $2 == "none" if g2 == "none"
q[:appealer_ids] ||= [] q[:appealer_ids] ||= []
q[:appealer_ids] << "any" q[:appealer_ids] << "any"
elsif $2 == "any" elsif g2 == "any"
q[:appealer_ids] ||= [] q[:appealer_ids] ||= []
q[:appealer_ids] << "none" q[:appealer_ids] << "none"
else else
q[:appealer_ids_neg] ||= [] q[:appealer_ids_neg] ||= []
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:appealer_ids_neg] << user_id unless user_id.blank? q[:appealer_ids_neg] << user_id unless user_id.blank?
end end
when "commenter", "comm" when "commenter", "comm"
q[:commenter_ids] ||= [] q[:commenter_ids] ||= []
if $2 == "none" if g2 == "none"
q[:commenter_ids] << "none" q[:commenter_ids] << "none"
elsif $2 == "any" elsif g2 == "any"
q[:commenter_ids] << "any" q[:commenter_ids] << "any"
else else
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:commenter_ids] << user_id unless user_id.blank? q[:commenter_ids] << user_id unless user_id.blank?
end end
when "noter" when "noter"
q[:noter_ids] ||= [] q[:noter_ids] ||= []
if $2 == "none" if g2 == "none"
q[:noter_ids] << "none" q[:noter_ids] << "none"
elsif $2 == "any" elsif g2 == "any"
q[:noter_ids] << "any" q[:noter_ids] << "any"
else else
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:noter_ids] << user_id unless user_id.blank? q[:noter_ids] << user_id unless user_id.blank?
end end
when "noteupdater" when "noteupdater"
q[:note_updater_ids] ||= [] q[:note_updater_ids] ||= []
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:note_updater_ids] << user_id unless user_id.blank? q[:note_updater_ids] << user_id unless user_id.blank?
when "artcomm" when "artcomm"
q[:artcomm_ids] ||= [] q[:artcomm_ids] ||= []
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:artcomm_ids] << user_id unless user_id.blank? q[:artcomm_ids] << user_id unless user_id.blank?
when "-pool" when "-pool"
if $2.downcase == "none" if g2.downcase == "none"
q[:pool] = "any" q[:pool] = "any"
elsif $2.downcase == "any" elsif g2.downcase == "any"
q[:pool] = "none" q[:pool] = "none"
elsif $2.downcase == "series" elsif g2.downcase == "series"
q[:tags][:exclude] << "pool:series" q[:tags][:exclude] << "pool:series"
elsif $2.downcase == "collection" elsif g2.downcase == "collection"
q[:tags][:exclude] << "pool:collection" q[:tags][:exclude] << "pool:collection"
else else
q[:tags][:exclude] << "pool:#{Pool.name_to_id($2)}" q[:tags][:exclude] << "pool:#{Pool.name_to_id(g2)}"
end end
when "pool" when "pool"
if $2.downcase == "none" if g2.downcase == "none"
q[:pool] = "none" q[:pool] = "none"
elsif $2.downcase == "any" elsif g2.downcase == "any"
q[:pool] = "any" q[:pool] = "any"
elsif $2.downcase == "series" elsif g2.downcase == "series"
q[:tags][:related] << "pool:series" q[:tags][:related] << "pool:series"
elsif $2.downcase == "collection" elsif g2.downcase == "collection"
q[:tags][:related] << "pool:collection" q[:tags][:related] << "pool:collection"
elsif $2.include?("*") elsif g2.include?("*")
pools = Pool.name_matches($2).select("id").limit(Danbooru.config.tag_query_limit).order("post_count DESC") pools = Pool.name_matches(g2).select("id").limit(Danbooru.config.tag_query_limit).order("post_count DESC")
q[:tags][:include] += pools.map {|pool| "pool:#{pool.id}"} q[:tags][:include] += pools.map {|pool| "pool:#{pool.id}"}
else else
q[:tags][:related] << "pool:#{Pool.name_to_id($2)}" q[:tags][:related] << "pool:#{Pool.name_to_id(g2)}"
end end
when "ordpool" when "ordpool"
pool_id = Pool.name_to_id($2) pool_id = Pool.name_to_id(g2)
q[:tags][:related] << "pool:#{pool_id}" q[:tags][:related] << "pool:#{pool_id}"
q[:ordpool] = pool_id q[:ordpool] = pool_id
when "-favgroup" when "-favgroup"
favgroup_id = FavoriteGroup.name_to_id($2) favgroup_id = FavoriteGroup.name_to_id(g2)
q[:favgroups_neg] ||= [] q[:favgroups_neg] ||= []
q[:favgroups_neg] << favgroup_id q[:favgroups_neg] << favgroup_id
when "favgroup" when "favgroup"
favgroup_id = FavoriteGroup.name_to_id($2) favgroup_id = FavoriteGroup.name_to_id(g2)
q[:favgroups] ||= [] q[:favgroups] ||= []
q[:favgroups] << favgroup_id q[:favgroups] << favgroup_id
when "-fav" when "-fav"
q[:tags][:exclude] << "fav:#{User.name_to_id($2)}" q[:tags][:exclude] << "fav:#{User.name_to_id(g2)}"
when "fav" when "fav"
q[:tags][:related] << "fav:#{User.name_to_id($2)}" q[:tags][:related] << "fav:#{User.name_to_id(g2)}"
when "ordfav" when "ordfav"
user_id = User.name_to_id($2) user_id = User.name_to_id(g2)
q[:tags][:related] << "fav:#{user_id}" q[:tags][:related] << "fav:#{user_id}"
q[:ordfav] = user_id q[:ordfav] = user_id
when "search" when "search"
q[:saved_searches] ||= [] q[:saved_searches] ||= []
q[:saved_searches] << $2 q[:saved_searches] << g2
when "md5" when "md5"
q[:md5] = $2.downcase.split(/,/) q[:md5] = g2.downcase.split(/,/)
when "-rating" when "-rating"
q[:rating_negated] = $2.downcase q[:rating_negated] = g2.downcase
when "rating" when "rating"
q[:rating] = $2.downcase q[:rating] = g2.downcase
when "-locked" when "-locked"
q[:locked_negated] = $2.downcase q[:locked_negated] = g2.downcase
when "locked" when "locked"
q[:locked] = $2.downcase q[:locked] = g2.downcase
when "id" when "id"
q[:post_id] = parse_helper($2) q[:post_id] = parse_helper(g2)
when "-id" when "-id"
q[:post_id_negated] = $2.to_i q[:post_id_negated] = g2.to_i
when "width" when "width"
q[:width] = parse_helper($2) q[:width] = parse_helper(g2)
when "height" when "height"
q[:height] = parse_helper($2) q[:height] = parse_helper(g2)
when "mpixels" when "mpixels"
q[:mpixels] = parse_helper_fudged($2, :float) q[:mpixels] = parse_helper_fudged(g2, :float)
when "ratio" when "ratio"
q[:ratio] = parse_helper($2, :ratio) q[:ratio] = parse_helper(g2, :ratio)
when "score" when "score"
q[:score] = parse_helper($2) q[:score] = parse_helper(g2)
when "favcount" when "favcount"
q[:fav_count] = parse_helper($2) q[:fav_count] = parse_helper(g2)
when "filesize" when "filesize"
q[:filesize] = parse_helper_fudged($2, :filesize) q[:filesize] = parse_helper_fudged(g2, :filesize)
when "source" when "source"
src = $2.gsub(/\A"(.*)"\Z/, '\1') src = g2.gsub(/\A"(.*)"\Z/, '\1')
q[:source] = (src.to_escaped_for_sql_like + "%").gsub(/%+/, '%') q[:source] = (src.to_escaped_for_sql_like + "%").gsub(/%+/, '%')
when "-source" when "-source"
src = $2.gsub(/\A"(.*)"\Z/, '\1') src = g2.gsub(/\A"(.*)"\Z/, '\1')
q[:source_neg] = (src.to_escaped_for_sql_like + "%").gsub(/%+/, '%') q[:source_neg] = (src.to_escaped_for_sql_like + "%").gsub(/%+/, '%')
when "date" when "date"
q[:date] = parse_helper($2, :date) q[:date] = parse_helper(g2, :date)
when "age" when "age"
q[:age] = reverse_parse_helper(parse_helper($2, :age)) q[:age] = reverse_parse_helper(parse_helper(g2, :age))
when "tagcount" when "tagcount"
q[:post_tag_count] = parse_helper($2) q[:post_tag_count] = parse_helper(g2)
when "gentags" when "gentags"
q[:general_tag_count] = parse_helper($2) q[:general_tag_count] = parse_helper(g2)
when "arttags" when "arttags"
q[:artist_tag_count] = parse_helper($2) q[:artist_tag_count] = parse_helper(g2)
when "chartags" when "chartags"
q[:character_tag_count] = parse_helper($2) q[:character_tag_count] = parse_helper(g2)
when "copytags" when "copytags"
q[:copyright_tag_count] = parse_helper($2) q[:copyright_tag_count] = parse_helper(g2)
when "parent" when "parent"
q[:parent] = $2.downcase q[:parent] = g2.downcase
when "-parent" when "-parent"
if $2.downcase == "none" if g2.downcase == "none"
q[:parent] = "any" q[:parent] = "any"
elsif $2.downcase == "any" elsif g2.downcase == "any"
q[:parent] = "none" q[:parent] = "none"
else else
q[:parent_neg_ids] ||= [] q[:parent_neg_ids] ||= []
q[:parent_neg_ids] << $2.downcase q[:parent_neg_ids] << g2.downcase
end end
when "child" when "child"
q[:child] = $2.downcase q[:child] = g2.downcase
when "order" when "order"
q[:order] = $2.downcase q[:order] = g2.downcase
when "limit" when "limit"
# Do nothing. The controller takes care of it. # Do nothing. The controller takes care of it.
when "-status" when "-status"
q[:status_neg] = $2.downcase q[:status_neg] = g2.downcase
when "status" when "status"
q[:status] = $2.downcase q[:status] = g2.downcase
when "filetype" when "filetype"
q[:filetype] = $2.downcase q[:filetype] = g2.downcase
when "-filetype" when "-filetype"
q[:filetype_neg] = $2.downcase q[:filetype_neg] = g2.downcase
when "pixiv_id", "pixiv" when "pixiv_id", "pixiv"
q[:pixiv_id] = parse_helper($2) q[:pixiv_id] = parse_helper(g2)
when "upvote" when "upvote"
if CurrentUser.user.is_moderator? if CurrentUser.user.is_moderator?
q[:upvote] = User.name_to_id($2) q[:upvote] = User.name_to_id(g2)
end end
when "downvote" when "downvote"
if CurrentUser.user.is_moderator? if CurrentUser.user.is_moderator?
q[:downvote] = User.name_to_id($2) q[:downvote] = User.name_to_id(g2)
end end
end end