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
# File lib/patient_zero/analytics/facebook.rb, line 58 def promoted_impressions find_impressions 'Paid' end
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