Module: Polytag

Defined in:
lib/polytag.rb,
lib/polytag/version.rb,
lib/generators/polytag/install/install_generator.rb

Defined Under Namespace

Modules: ClassMethods, Generators Classes: Tag, TagGroup, TagRelation

Constant Summary collapse

VERSION =
"0.0.3"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/polytag.rb', line 8

def self.included(base)
  base.extend(ClassMethods)
  base.has_many :polytag_tag_relations, as: :tagged, class_name: '::Polytag::TagRelation'
  base.has_many :polytag_tags, through: :polytag_tag_relations, class_name: '::Polytag::Tag'
  base.__send__(:alias_method, :tag_relations, :polytag_tag_relations) unless base.method_defined?(:tag_relations)
  base.__send__(:alias_method, :tags, :polytag_tags) unless base.method_defined?(:tags)
end

Instance Method Details

#add_tag(tag, _tag_group = {}) ⇒ Object



28
29
30
# File 'lib/polytag.rb', line 28

def add_tag(tag, _tag_group = {})
  polytag_tags << polytag_tags.where(name: tag, polytag_tag_group_id: tag_group(_tag_group).try(&:id)).first_or_initialize
end

#add_tag!(tag, _tag_group = {}) ⇒ Object



32
33
34
# File 'lib/polytag.rb', line 32

def add_tag!(tag, _tag_group = {})
  polytag_tags << polytag_tags.where(name: tag, polytag_tag_group_id: tag_group(_tag_group).try(&:id)).first_or_create
end

#add_tags(*_tags) ⇒ Object



36
37
38
39
# File 'lib/polytag.rb', line 36

def add_tags(*_tags)
  _tag_group = _tags.pop if _tags.last.is_a?(Hash)
  _tags.map { |x| add_tag(x, _tag_group || {}) }
end

#add_tags!(*_tags) ⇒ Object



41
42
43
44
# File 'lib/polytag.rb', line 41

def add_tags!(*_tags)
  _tag_group = _tags.pop if _tags.last.is_a?(Hash)
  _tags.map { |x| add_tag!(x, _tag_group || {}) }
end

#remove_tag!(tag, _tag_group = {}) ⇒ Object



46
47
48
49
# File 'lib/polytag.rb', line 46

def remove_tag!(tag, _tag_group = {})
  tag_id = polytag_tags.where(name: tag, polytag_tag_group_id: tag_group(_tag_group).try(&:id)).first.try(:id)
  tag_relations.where("polytag_tag_relations.polytag_tag_id = ?", tag_id).delete_all
end

#tag_group(_tag_group = nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/polytag.rb', line 16

def tag_group(_tag_group = nil)
  @__polytag_tag_group_hash__ ||= {}

  if _tag_group
    @__polytag_tag_group_hash__.merge!(_tag_group)
    @__polytag_tag_group__ = Polytag::TagGroup.search_by_hash(@__polytag_tag_group_hash__).first_or_create
  else
    @__polytag_tag_group_hash__ = {} if _tag_group.is_a?(Hash) && _tag_group.empty?
    @__polytag_tag_group__
  end
end