Module: RailsPulse::Taggable

Extended by:
ActiveSupport::Concern
Included in:
Job, JobRun, Query, Request, Route
Defined in:
app/models/concerns/rails_pulse/taggable.rb

Constant Summary collapse

TAG_NAME_REGEX =

Tag validation constants

/\A[a-z0-9_-]+\z/i
MAX_TAG_LENGTH =
50

Instance Method Summary collapse

Instance Method Details

#add_tag(tag) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/models/concerns/rails_pulse/taggable.rb', line 39

def add_tag(tag)
  # Validate tag format and length
  return false unless valid_tag_name?(tag)

  current_tags = tag_list
  unless current_tags.include?(tag.to_s)
    current_tags << tag.to_s
    self.tag_list = current_tags
    save
  else
    true  # Tag already exists, return success
  end
end

#has_tag?(tag) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'app/models/concerns/rails_pulse/taggable.rb', line 35

def has_tag?(tag)
  tag_list.include?(tag.to_s)
end

#remove_tag(tag) ⇒ Object



53
54
55
56
57
58
59
60
# File 'app/models/concerns/rails_pulse/taggable.rb', line 53

def remove_tag(tag)
  current_tags = tag_list
  if current_tags.include?(tag.to_s)
    current_tags.delete(tag.to_s)
    self.tag_list = current_tags
    save
  end
end

#tag_listObject

Tag management methods



27
28
29
# File 'app/models/concerns/rails_pulse/taggable.rb', line 27

def tag_list
  parsed_tags || []
end

#tag_list=(value) ⇒ Object



31
32
33
# File 'app/models/concerns/rails_pulse/taggable.rb', line 31

def tag_list=(value)
  self.tags = value.to_json
end