Allow metatag case switch to use regexes
- Fix errant tabspaces
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user