Sha256: 756203ba14c1d0655205652bbfe6ffbc9786531b6acafd5e4c798467b5925e4c
Contents?: true
Size: 1.64 KB
Versions: 2
Compression:
Stored size: 1.64 KB
Contents
class Models::Tags < Array inherit Mongo::Model def initialize array = nil super() replace array if array end # # Working with context # class ContextTags < Array def as_string; join(", ") end end def topic get_tags{|tag| tag !~ /:/} end def topic= value set_tags(value){|tag| tag !~ /:/} end def as_string; join(", ") end # # Updating Tag and counts cache # attr_accessor :_changes before_save do |tags| original_tags = (tags._parent && tags._parent.original.try(:tags)) || Models::Tags.new tags._changes = [original_tags, tags] if tags != original_tags end after_save {|tags| Models::Tag.update_tags! *tags._changes if tags._changes} after_destroy{|tags| Models::Tag.delete_tags! tags unless tags.empty?} protected def validate_tag_names errors.add :base, t(:invalid_tags) unless all?{|tag| Models::Tag.valid_name?(tag)} end validate :validate_tag_names def method_missing m, *args, &b if m !~ /=$/ context = m.to_s args.size.must == 0 get_tags{|tag| tag =~ /#{context}:/} else context = m.to_s[0..-2] args.size.must == 1 value = args.first set_tags(value){|tag| tag =~ /#{context}:/} end end def set_tags value, &selector new_tags = if value.is_a? String value.split(Models::Tag::TAG_LIST_DELIMITER).collect{|name| name.strip}.sort else value.must_be.a Array end new_tags.select!(&selector) reject!(&selector) new_tags.each{|tag| push tag} sort! end def get_tags &selector ContextTags.new select(&selector) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rad_kit-0.0.10 | lib/kit/models/tags.rb |
rad_kit-0.0.9 | lib/kit/models/tags.rb |