Class: ActsAsTaggableOn::Tag
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- ActsAsTaggableOn::Tag
show all
- Extended by:
- Utils
- Defined in:
- lib/acts_as_taggable_on/tag.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Utils
connection, sha_prefix, using_case_insensitive_collation?, using_mysql?, using_postgresql?, using_sqlite?
Class Method Details
.find_or_create_all_with_like_by_name(*list) ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/acts_as_taggable_on/tag.rb', line 69
def self.find_or_create_all_with_like_by_name(*list)
list = Array(list).flatten
return [] if list.empty?
existing_tags = Tag.named_any(list)
list.map do |tag_name|
comparable_tag_name = comparable_name(tag_name)
existing_tag = existing_tags.detect { |tag| comparable_name(tag.name) == comparable_tag_name }
existing_tag || Tag.create(:name => tag_name)
end
end
|
.find_or_create_with_like_by_name(name) ⇒ Object
61
62
63
64
65
66
67
|
# File 'lib/acts_as_taggable_on/tag.rb', line 61
def self.find_or_create_with_like_by_name(name)
if (ActsAsTaggableOn.strict_case_match)
self.find_or_create_all_with_like_by_name([name]).first
else
named_like(name).first || create(:name => name)
end
end
|
.named(name) ⇒ Object
25
26
27
28
29
30
31
|
# File 'lib/acts_as_taggable_on/tag.rb', line 25
def self.named(name)
if ActsAsTaggableOn.strict_case_match
where(["name = #{binary}?", as_8bit_ascii(name)])
else
where(["LOWER(name) = LOWER(?)", as_8bit_ascii(unicode_downcase(name))])
end
end
|
.named_any(list) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/acts_as_taggable_on/tag.rb', line 33
def self.named_any(list)
if ActsAsTaggableOn.strict_case_match
clause = list.map { |tag|
sanitize_sql(["name = #{binary}?", as_8bit_ascii(tag)])
}.join(" OR ")
where(clause)
else
clause = list.map { |tag|
sanitize_sql(["LOWER(name) = LOWER(?)", as_8bit_ascii(unicode_downcase(tag))])
}.join(" OR ")
where(clause)
end
end
|
.named_like(name) ⇒ Object
47
48
49
50
|
# File 'lib/acts_as_taggable_on/tag.rb', line 47
def self.named_like(name)
clause = ["name #{like_operator} ? ESCAPE '!'", "%#{escape_like(name)}%"]
where(clause)
end
|
.named_like_any(list) ⇒ Object
52
53
54
55
56
57
|
# File 'lib/acts_as_taggable_on/tag.rb', line 52
def self.named_like_any(list)
clause = list.map { |tag|
sanitize_sql(["name #{like_operator} ? ESCAPE '!'", "%#{escape_like(tag.to_s)}%"])
}.join(" OR ")
where(clause)
end
|
Instance Method Details
#==(object) ⇒ Object
86
87
88
|
# File 'lib/acts_as_taggable_on/tag.rb', line 86
def ==(object)
super || (object.is_a?(Tag) && name == object.name)
end
|
#count ⇒ Object
94
95
96
|
# File 'lib/acts_as_taggable_on/tag.rb', line 94
def count
read_attribute(:count).to_i
end
|
#to_s ⇒ Object
90
91
92
|
# File 'lib/acts_as_taggable_on/tag.rb', line 90
def to_s
name
end
|
#validates_name_uniqueness? ⇒ Boolean
monkey patch this method if don’t need name uniqueness validation
19
20
21
|
# File 'lib/acts_as_taggable_on/tag.rb', line 19
def validates_name_uniqueness?
true
end
|