From 82feff7fb4f7e0e8631d962044d95481458eae20 Mon Sep 17 00:00:00 2001 From: Uiri Date: Mon, 26 Sep 2011 16:40:53 -0400 Subject: [PATCH 1/3] Links in the message translate into a proper link on Facebook when sending to facebook. --- app/models/services/facebook.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/models/services/facebook.rb b/app/models/services/facebook.rb index 0c90bac97..a0d39ec85 100644 --- a/app/models/services/facebook.rb +++ b/app/models/services/facebook.rb @@ -9,7 +9,15 @@ class Services::Facebook < Service Rails.logger.debug("event=post_to_service type=facebook sender_id=#{self.user_id}") message = public_message(post, url) begin - Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :access_token => self.access_token}.to_param) + if /https?:\/\/(.+) / =~ message + link = /https?:\/\/(.+) /.match(message)[0] + Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :link => link, :access_token => self.access_token}.to_param) + elsif /https?:\/\/(.+)$/ =~ message + link = /https?:\/\/(.+)$/.match(message)[0] + Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :link => link, :access_token => self.access_token}.to_param) + else + Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :access_token => self.access_token}.to_param) + end rescue Exception => e Rails.logger.info("#{e.message} failed to post to facebook") end From 3aa3b9aea8c7a536229c965b1fa2f93ea94f8626 Mon Sep 17 00:00:00 2001 From: Uiri Date: Mon, 26 Sep 2011 23:02:03 -0400 Subject: [PATCH 2/3] Better regex solution --- app/models/services/facebook.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/models/services/facebook.rb b/app/models/services/facebook.rb index a0d39ec85..3e134f409 100644 --- a/app/models/services/facebook.rb +++ b/app/models/services/facebook.rb @@ -9,11 +9,8 @@ class Services::Facebook < Service Rails.logger.debug("event=post_to_service type=facebook sender_id=#{self.user_id}") message = public_message(post, url) begin - if /https?:\/\/(.+) / =~ message - link = /https?:\/\/(.+) /.match(message)[0] - Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :link => link, :access_token => self.access_token}.to_param) - elsif /https?:\/\/(.+)$/ =~ message - link = /https?:\/\/(.+)$/.match(message)[0] + if /https?:\/\/(\S+)/ =~ message + link = /https?:\/\/(\S+)/.match(message)[0] Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :link => link, :access_token => self.access_token}.to_param) else Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :access_token => self.access_token}.to_param) From 0fbda5d0773d7b2482d5620e8594f8cb6ab73c28 Mon Sep 17 00:00:00 2001 From: Uiri Date: Thu, 29 Sep 2011 21:04:18 -0400 Subject: [PATCH 3/3] =?UTF-8?q?Modularized=20and=20Tested=E2=84=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/services/facebook.rb | 16 ++++++++++------ spec/models/services/facebook_spec.rb | 10 ++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/models/services/facebook.rb b/app/models/services/facebook.rb index 3e134f409..c4384a189 100644 --- a/app/models/services/facebook.rb +++ b/app/models/services/facebook.rb @@ -9,17 +9,21 @@ class Services::Facebook < Service Rails.logger.debug("event=post_to_service type=facebook sender_id=#{self.user_id}") message = public_message(post, url) begin - if /https?:\/\/(\S+)/ =~ message - link = /https?:\/\/(\S+)/.match(message)[0] - Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :link => link, :access_token => self.access_token}.to_param) - else - Faraday.post("https://graph.facebook.com/me/feed", {:message => message, :access_token => self.access_token}.to_param) - end + post_params = self.create_post_params(message) + Faraday.post("https://graph.facebook.com/me/feed", post_params.to_param) rescue Exception => e Rails.logger.info("#{e.message} failed to post to facebook") end end + def create_post_params(message) + hash = {:message => message, :access_token => self.access_token} + if /https?:\/\/(\S+)/ =~ message + hash.merge!({:link => /https?:\/\/(\S+)/.match(message)[0]}) + end + return hash + end + def public_message(post, url) super(post, MAX_CHARACTERS, url) end diff --git a/spec/models/services/facebook_spec.rb b/spec/models/services/facebook_spec.rb index 872b7577e..faed3af3a 100644 --- a/spec/models/services/facebook_spec.rb +++ b/spec/models/services/facebook_spec.rb @@ -14,6 +14,7 @@ describe Services::Facebook do @service.post(@post) WebMock.should have_requested(:post, "https://graph.facebook.com/me/feed").with(:body => {:message => @post.text, :access_token => @service.access_token}.to_param) end + it 'swallows exception raised by facebook always being down' do stub_request(:post,"https://graph.facebook.com/me/feed"). to_raise(StandardError) @@ -26,6 +27,15 @@ describe Services::Facebook do @service.post(@post, url) end end + + describe '#create_post_params' do + it 'should have a link when the message has a link' do + @service.create_post_params("http://example.com/ test message")[:link].should == "http://example.com/" + end + it 'should not have a link when the message has no link' do + @service.create_post_params("test message")[:link].should == nil + end + end context 'finder' do before do