diff --git a/app/models/status_message.rb b/app/models/status_message.rb index 1887122bd..3a8b6935e 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -22,6 +22,24 @@ class StatusMessage < Post get_youtube_title message end + def formatted_message + people = self.mentioned_people + regex = /@\{([^;]+); ([^\}]+)\}/ + message.gsub(regex) do |matched_string| + people.detect{ |p| + p.diaspora_handle == matched_string.match(regex).captures.last + }.name + end + end + + def mentioned_people + regex = /@\{([^;]+); ([^\}]+)\}/ + identifiers = self.message.scan(regex).map do |match| + match.last + end + Person.where(:diaspora_handle => identifiers) + end + def to_activity <<-XML diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb index 2d51d6cda..3e49000e5 100644 --- a/spec/models/status_message_spec.rb +++ b/spec/models/status_message_spec.rb @@ -51,9 +51,30 @@ describe StatusMessage do status = Factory.build(:status_message, :message => message) status.should_not be_valid - end + describe 'mentions' do + before do + @people = [alice, bob, eve].map{|u| u.person} + @test_string = <<-STR +@{Raphael; #{@people[0].diaspora_handle}} can mention people like Raphael @{Ilya; #{@people[1].diaspora_handle}} +can mention people like Raphaellike Raphael @{Daniel; #{@people[2].diaspora_handle}} can mention people like Raph +STR + @sm = Factory.create(:status_message, :message => @test_string ) + end + + it 'adds the links in the formated message text' do + @sm.formatted_message.should == <<-STR +#{@people[0].name} can mention people like Raphael #{@people[1].name} +can mention people like Raphaellike Raphael #{@people[2].name} can mention people like Raph +STR + + end + + it 'extracts the mentioned people from the message' do + @sm.mentioned_people.to_set.should == @people.to_set + end + end describe "XML" do before do @message = Factory.create(:status_message, :message => "I hate WALRUSES!", :person => @user.person)