class ActsAsMentionable::MentionerParser

Attributes

mentioner[R]

Public Class Methods

new(mentioner) click to toggle source
# File lib/acts_as_mentionable/mentioner_parser.rb, line 5
def initialize mentioner
  @mentioner = mentioner
end

Public Instance Methods

parse!() click to toggle source
# File lib/acts_as_mentionable/mentioner_parser.rb, line 9
def parse!
  mentionables = []
  new_mention_field = mentioner.send(mentioner.class.mention_parsed_field).gsub(template_for_parsing) do |template|
    _delimiter, mentionable_id, mentionable_klass = template.gsub(/[\{,\}]/, '').split('|')
    mentionable = retrieve_mentionable mentionable_klass, mentionable_id
    mentionables << mentionable if mentionable.respond_to?(:mentionable?) && mentionable.mentionable?
    metionable_template mentionable, template
  end
  mentioner.update_column(mentioner.class.mention_field, new_mention_field)
  mentionables
end
retrieve_mentionable(mentionable_klass, mentionable_id) click to toggle source
# File lib/acts_as_mentionable/mentioner_parser.rb, line 21
def retrieve_mentionable mentionable_klass, mentionable_id
  mentionable_klass.classify.constantize.find mentionable_id
rescue NameError
  nil
end

Private Instance Methods

metionable_template(mentionable, template) click to toggle source
# File lib/acts_as_mentionable/mentioner_parser.rb, line 33
def metionable_template mentionable, template
  if mentionable.respond_to?(:mentionable?) && mentionable.mentionable?
    "*U+2063*@#{mentionable.send(mentionable.class.mentionable_field)}*U+2063*"
  else
    template
  end
end
template_for_parsing() click to toggle source
# File lib/acts_as_mentionable/mentioner_parser.rb, line 29
def template_for_parsing
  /\{@\|\d+\|\w+\}/
end