module ActsAsTaggableOn::Taggable::Related

Public Class Methods

included(base) click to toggle source
# File lib/acts-as-taggable-on/taggable/related.rb, line 6
def self.included(base)
  base.extend ActsAsTaggableOn::Taggable::Related::ClassMethods
  base.initialize_acts_as_taggable_on_related
end

Public Instance Methods

find_matching_contexts(search_context, result_context, options = {}) click to toggle source
# File lib/acts-as-taggable-on/taggable/related.rb, line 33
def find_matching_contexts(search_context, result_context, options = {})
  matching_contexts_for(search_context.to_s, result_context.to_s, self.class, options)
end
find_matching_contexts_for(klass, search_context, result_context, options = {}) click to toggle source
# File lib/acts-as-taggable-on/taggable/related.rb, line 37
def find_matching_contexts_for(klass, search_context, result_context, options = {})
  matching_contexts_for(search_context.to_s, result_context.to_s, klass, options)
end
matching_contexts_for(search_context, result_context, klass, _options = {}) click to toggle source
# File lib/acts-as-taggable-on/taggable/related.rb, line 41
def matching_contexts_for(search_context, result_context, klass, _options = {})
  tags_to_find = tags_on(search_context).map(&:name)
  related_where(klass,
                [
                  "#{exclude_self(klass,
                                  id)} #{klass.table_name}.#{klass.primary_key} = #{ActsAsTaggableOn::Tagging.table_name}.taggable_id AND #{ActsAsTaggableOn::Tagging.table_name}.taggable_type = '#{klass.base_class}' AND #{ActsAsTaggableOn::Tagging.table_name}.tag_id = #{ActsAsTaggableOn::Tag.table_name}.#{ActsAsTaggableOn::Tag.primary_key} AND #{ActsAsTaggableOn::Tag.table_name}.name IN (?) AND #{ActsAsTaggableOn::Tagging.table_name}.context = ?", tags_to_find, result_context
                ])
end

Private Instance Methods

exclude_self(klass, id) click to toggle source
# File lib/acts-as-taggable-on/taggable/related.rb, line 62
def exclude_self(klass, id)
  "#{klass.arel_table[klass.primary_key].not_eq(id).to_sql} AND" if [self.class.base_class,
                                                                     self.class].include? klass
end
group_columns(klass) click to toggle source
# File lib/acts-as-taggable-on/taggable/related.rb, line 67
def group_columns(klass)
  if ActsAsTaggableOn::Utils.using_postgresql?
    grouped_column_names_for(klass)
  else
    "#{klass.table_name}.#{klass.primary_key}"
  end
end