Module: ActsAsTaggableOn::Taggable::Core::InstanceMethods
- Defined in:
- lib/acts_as_taggable_on/acts_as_taggable_on/core.rb
Instance Method Summary collapse
- #add_custom_context(value) ⇒ Object
- #all_tags_list_on(context) ⇒ Object
-
#all_tags_on(context) ⇒ Object
Returns all tags of a given context.
- #cached_tag_list_on(context) ⇒ Object
- #custom_contexts ⇒ Object
-
#grouped_column_names_for(object) ⇒ Object
all column names are necessary for PostgreSQL group clause.
- #is_taggable? ⇒ Boolean
- #reload(*args) ⇒ Object
- #save_tags ⇒ Object
- #set_tag_list_on(context, new_list) ⇒ Object
- #tag_list_cache_on(context) ⇒ Object
- #tag_list_cache_set_on(context) ⇒ Object
- #tag_list_on(context) ⇒ Object
- #tagging_contexts ⇒ Object
-
#tags_on(context) ⇒ Object
Returns all tags that are not owned of a given context.
Instance Method Details
#add_custom_context(value) ⇒ Object
143 144 145 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 143 def add_custom_context(value) custom_contexts << value.to_s unless custom_contexts.include?(value.to_s) or self.class.tag_types.map(&:to_s).include?(value.to_s) end |
#all_tags_list_on(context) ⇒ Object
166 167 168 169 170 171 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 166 def (context) variable_name = "@all_#{context.to_s.singularize}_list" return instance_variable_get(variable_name) if instance_variable_get(variable_name) instance_variable_set(variable_name, ActsAsTaggableOn::TagList.new((context).map(&:name)).freeze) end |
#all_tags_on(context) ⇒ Object
Returns all tags of a given context
175 176 177 178 179 180 181 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 175 def (context) tag_table_name = ActsAsTaggableOn::Tag.table_name tagging_table_name = ActsAsTaggableOn::Tagging.table_name opts = ["#{tagging_table_name}.context = ?", context.to_s] .where(opts).order("max(#{tagging_table_name}.created_at)").group("#{tag_table_name}.id, #{tag_table_name}.name").all end |
#cached_tag_list_on(context) ⇒ Object
147 148 149 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 147 def cached_tag_list_on(context) self["cached_#{context.to_s.singularize}_list"] end |
#custom_contexts ⇒ Object
135 136 137 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 135 def custom_contexts @custom_contexts ||= [] end |
#grouped_column_names_for(object) ⇒ Object
all column names are necessary for PostgreSQL group clause
131 132 133 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 131 def grouped_column_names_for(object) self.class.grouped_column_names_for(object) end |
#is_taggable? ⇒ Boolean
139 140 141 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 139 def is_taggable? self.class.is_taggable? end |
#reload(*args) ⇒ Object
200 201 202 203 204 205 206 207 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 200 def reload(*args) self.class.tag_types.each do |context| instance_variable_set("@#{context.to_s.singularize}_list", nil) instance_variable_set("@all_#{context.to_s.singularize}_list", nil) end super(*args) end |
#save_tags ⇒ Object
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 209 def tagging_contexts.each do |context| next unless tag_list_cache_set_on(context) tag_list = tag_list_cache_on(context).uniq # Find existing tags or create non-existing tags: tag_list = ActsAsTaggableOn::Tag.find_or_create_all_with_like_by_name(tag_list) = (context) = - tag_list = tag_list - # Find taggings to remove: old_taggings = taggings.where(:tagger_type => nil, :tagger_id => nil, :context => context.to_s, :tag_id => ).all if old_taggings.present? # Destroy old taggings: ActsAsTaggableOn::Tagging.destroy_all :id => old_taggings.map(&:id) end # Create new taggings: .each do |tag| taggings.create!(:tag_id => tag.id, :context => context.to_s, :taggable => self) end end true end |
#set_tag_list_on(context, new_list) ⇒ Object
189 190 191 192 193 194 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 189 def set_tag_list_on(context, new_list) add_custom_context(context) variable_name = "@#{context.to_s.singularize}_list" instance_variable_set(variable_name, ActsAsTaggableOn::TagList.from(new_list)) end |
#tag_list_cache_on(context) ⇒ Object
156 157 158 159 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 156 def tag_list_cache_on(context) variable_name = "@#{context.to_s.singularize}_list" instance_variable_get(variable_name) || instance_variable_set(variable_name, ActsAsTaggableOn::TagList.new((context).map(&:name))) end |
#tag_list_cache_set_on(context) ⇒ Object
151 152 153 154 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 151 def tag_list_cache_set_on(context) variable_name = "@#{context.to_s.singularize}_list" !instance_variable_get(variable_name).nil? end |
#tag_list_on(context) ⇒ Object
161 162 163 164 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 161 def tag_list_on(context) add_custom_context(context) tag_list_cache_on(context) end |
#tagging_contexts ⇒ Object
196 197 198 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 196 def tagging_contexts custom_contexts + self.class.tag_types.map(&:to_s) end |
#tags_on(context) ⇒ Object
Returns all tags that are not owned of a given context
185 186 187 |
# File 'lib/acts_as_taggable_on/acts_as_taggable_on/core.rb', line 185 def (context) .where(["#{ActsAsTaggableOn::Tagging.table_name}.context = ? AND #{ActsAsTaggableOn::Tagging.table_name}.tagger_id IS NULL", context.to_s]).all end |