class Social::Engagement

Public Class Methods

for(model_instance) click to toggle source
# File lib/social/engagement.rb, line 4
def self.for(model_instance)
  url = Url.for(model_instance)
  for_url(url)
end
for_url(url) click to toggle source
# File lib/social/engagement.rb, line 9
def self.for_url(url)
  begin
    try_to_get_from_cache(url)
  rescue ActiveRecord::RecordNotFound
    social_engagement_from_web = from_web(url)
    social_engagement_from_web.save
    social_engagement_from_web
  end
end
from_web(url) click to toggle source
# File lib/social/engagement.rb, line 19
def self.from_web(url)
  facebook = Facebook.total_count(url)
  twitter = Twitter.total_count(url)
  SocialEngagement.new(url: url, facebook: facebook, twitter: twitter)
end

Private Class Methods

try_to_get_from_cache(url) click to toggle source
# File lib/social/engagement.rb, line 27
def self.try_to_get_from_cache(url)
  cached_social_engagement = SocialEngagement.for_url(url)
  if InvalidationPolicy.valid?(cached_social_engagement)
    cached_social_engagement
  else
    social_engagement_from_web = from_web(url)
    cached_social_engagement.update_counts(social_engagement_from_web)
    cached_social_engagement
  end
end