Module: HasMachineTags::TagMethods

Defined in:
lib/has_machine_tags/tag_methods.rb

Overview

Since this closely resembles object modeling, we can start to use tagging to form relationships between tagged items and other objects.

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Constant Summary collapse

NAMESPACE_REGEX =
"[a-z](?:[a-z0-9_]+)"
PREDICATE_REGEX =
"[a-z](?:[a-z0-9_-]+)"
VALUE_REGEX =
'.+'
PREDICATE_DELIMITER =

TODO: use delimiters in this file

':'
VALUE_DELIMITER =
'='

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object

:nodoc:



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/has_machine_tags/tag_methods.rb', line 74

def self.included(base) #:nodoc:
  name_format = /\A(([^\*\=\:\.,]+)|(#{NAMESPACE_REGEX}\:#{PREDICATE_REGEX}\=#{VALUE_REGEX}))\Z/
  base.class_eval %[
    has_many :taggings
  
    validates_presence_of :name
    validates_uniqueness_of :name
    before_save :update_name_related_columns
  
    #disallow machine tags special characters and tag list delimiter OR allow machine tag format
    validates_format_of :name, :with=>name_format
  ]
  base.extend(ClassMethods)
  base.send :include, InstanceMethods
end