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.4"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/polytag.rb', line 8

def self.included(base)
  base.extend(ClassMethods)
  base.has_many :polytag_tag_relations, class_name: '::Polytag::TagRelation',
                                        as: :tagged

  base.has_many :tag_relations, class_name: '::Polytag::TagRelation',
                                as: :tagged

  base.has_many :polytag_tags, class_name: '::Polytag::Tag',
                               through: :polytag_tag_relations

  base.has_many :tags, class_name: '::Polytag::Tag',
                       through: :polytag_tag_relations,
                       source: :polytag_tag
end

Instance Method Details

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



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

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



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

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



44
45
46
47
# File 'lib/polytag.rb', line 44

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



49
50
51
52
# File 'lib/polytag.rb', line 49

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



54
55
56
57
# File 'lib/polytag.rb', line 54

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



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/polytag.rb', line 24

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