added tag alias unit test

This commit is contained in:
albert
2010-02-12 13:43:00 -05:00
parent d388b1b3bd
commit f0ed612042
8 changed files with 72 additions and 31 deletions

View File

@@ -1,7 +1,7 @@
class Tag < ActiveRecord::Base
attr_accessible :category
after_save :update_category_cache
named_scope :by_pattern, lambda {|name| where(["name LIKE ? ESCAPE E'\\\\'", name.to_escaped_for_sql_like])}
scope :by_pattern, lambda {|name| where(["name LIKE ? ESCAPE E'\\\\'", name.to_escaped_for_sql_like])}
class CategoryMapping
Danbooru.config.reverse_tag_category_mapping.each do |value, category|

View File

@@ -1,8 +1,14 @@
class TagAlias < ActiveRecord::Base
attr_accessor :updater_id, :updater_ip_addr
after_save :update_posts
after_save :update_cache
validates_presence_of :updater_id, :updater_ip_addr
validates_uniqueness_of :antecedent_name
belongs_to :updater, :class_name => "User"
belongs_to :creator, :class_name => "User"
def self.to_aliased(names)
alias_hash = Cache.get_multi(names, "ta") do |name|
alias_hash = Cache.get_multi(names.flatten, "ta") do |name|
ta = TagAlias.find_by_antecedent_name(name)
if ta
ta.consequent_name
@@ -11,9 +17,22 @@ class TagAlias < ActiveRecord::Base
end
end
alias_hash.values
alias_hash.values.uniq
end
def update_cache
Cache.put("ta:#{Cache.sanitize(antecedent_name)}", consequent_name, 24.hours)
end
def update_posts
Post.find_by_tags(antecedent_name).find_each do |post|
escaped_antecedent_name = Regexp.escape(antecedent_name)
fixed_tags = post.tag_string.sub(/\A#{escaped_antecedent_name} | #{escaped_antecedent_name} | #{escaped_antecedent_name}\Z/, " #{consequent_name} ").strip
post.update_attributes(
:tag_string => fixed_tags,
:updater_id => updater_id,
:updater_ip_addr => updater_ip_addr
)
end
end
end