Class: FirebaseStats::Wrapper

Inherits:
Object
  • Object
show all
Defined in:
lib/wrapper.rb

Overview

Transforms the parsed Firebase file into something more user friendly

Instance Method Summary collapse

Constructor Details

#initialize(stats) ⇒ Wrapper

Returns a new instance of Wrapper.

Parameters:



11
12
13
14
# File 'lib/wrapper.rb', line 11

def initialize(stats)
  super()
  @stats = stats
end

Instance Method Details

#devices(friendly: false, limit: 10, platform: :all) ⇒ Object

Gets all devices

Parameters:

  • friendly (Boolean) (defaults to: false)

    Transform the Android model numbers into their human numaes

  • limit (Integer) (defaults to: 10)

    Number of devices to turn

  • platform (Symbol) (defaults to: :all)

    One of :all, :ios, :android



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/wrapper.rb', line 37

def devices(friendly: false, limit: 10, platform: :all)
  filtered = DeviceUtils.filter_device(@stats.get(:devices), platform)
  filtered = filtered.take(limit || 10)
  cleaned = []
  filtered.each do |row|
    device = {
      'model' => row['Device model']
    }
    if friendly && ((platform == :all) || (platform == :android))
      mapped = Android::Devices.search_by_model(row['Device model'])
      device['friendly'] = if mapped.nil?
                             row['Device model']
                           else
                             mapped.name
                           end
    end
    device['count'] = row['Users'].to_i

    cleaned << device
  end
  cleaned
end

#genderObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/wrapper.rb', line 60

def gender
  raw = @stats.get(:gender)
  data = []
  raw.each do |row|
    data << {
      'gender' => row['Gender'],
      'count' => row['Users'].to_i
    }
  end
  data
end

#gender_ageObject



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/wrapper.rb', line 72

def gender_age
  raw = @stats.get(:gender_age)
  data = []
  raw.each do |row|
    data << {
      'age' => row['Category'],
      'male' => (row['Male'].to_f * 100).round(2),
      'female' => (row['Female'].to_f * 100).round(2),
      'other' => (row['Other'].to_f * 100).round(2)
    }
  end
  data
end

#os(platform: :all, grouped: true, major_order: true) ⇒ Object

Get all OS versions, grouped by Major version

Parameters:

  • platform (Symbol) (defaults to: :all)

    One of :all, :ios, :android

  • grouped (Boolean) (defaults to: true)

    Group by Major OS version

  • major_order (Boolean) (defaults to: true)

    Order by Major OS version (instead of percentage)



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/wrapper.rb', line 20

def os(platform: :all, grouped: true, major_order: true)
  os_data = all_os
  filtered = filter_os(os_data, platform)

  data = if grouped
           make_group_stats(filtered, platform)
         else
           filtered
         end

  major_order ? major_version_sort(data) : data
end