class PatientZero::Analytics::Facebook

Public Instance Methods

engagements() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 4
def engagements
  @engagements ||= messages.reduce(0) { |sum, message| sum + message.engagements }
end
followers() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 70
def followers
  nil
end
impressions() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 8
def impressions
  @impressions ||= total_page_impressions + message_impressions
end
impressions_by_age() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 24
def impressions_by_age
  analytical_data.fetch('impressions_by_ages',[]).first.to_h.fetch('values',{})
end
impressions_by_city() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 18
def impressions_by_city
  analytical_data.fetch("impressions_by_cities").each_with_object({}) do |city, cities|
    cities[city['title']] = city['count']
  end
end
impressions_by_gender() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 28
def impressions_by_gender
  gender_stats = analytical_data['impressions_by_genders']
  { female:  gender_stats.fetch('F', 0),
    male:    gender_stats.fetch('M', 0),
    unknown: gender_stats.fetch('U', 0) }
end
likes() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 62
def likes
  analytical_data['total_likes'].to_i
end
organic_impressions() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 54
def organic_impressions
  find_impressions 'Organic'
end
page_likes_by_age_and_gender() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 35
def page_likes_by_age_and_gender
  data = analytical_data.fetch('likes_by_age_group',[])
  female = data.find { |datum| datum.values.include? 'Females Users' }
  male   = data.find { |datum| datum.values.include? 'Males Users' }
  { female: female.to_h.fetch('values',{}),
    male: male.to_h.fetch('values',{}) }
end
page_likes_by_gender() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 43
def page_likes_by_gender
  gender_stats = analytical_data['likes_by_gender']
  { female:  gender_stats.fetch('F', 0),
    male:    gender_stats.fetch('M', 0),
    unknown: gender_stats.fetch('U', 0) }
end
promoted_impressions() click to toggle source
reach() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 12
def reach
  @reach ||= analytical_data['total_reach'].find do |reach_hash|
    reach_hash['key'] == 'Total Reach'
  end['values'].each_value.reduce(:+)
end
total_comments() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 66
def total_comments
  messages.sum { |message| message.data['comments'] }
end
total_page_likes() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 50
def total_page_likes
  page_likes_by_gender.values.reduce(:+)
end

Private Instance Methods

find_impressions(type) click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 88
def find_impressions type
  page_impressions.find do |impressions_hash|
    impressions_hash['key'] == type
  end['values'].each_value.reduce(:+)
end
message_impressions() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 76
def message_impressions
  messages.reduce(0) { |sum, message| sum + message.impressions }
end
page_impressions() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 80
def page_impressions
  analytical_data['page_impressions']
end
total_page_impressions() click to toggle source
# File lib/patient_zero/analytics/facebook.rb, line 84
def total_page_impressions
  find_impressions 'Total'
end