Class: Fino::AbTesting::Analysis

Inherits:
Object
  • Object
show all
Defined in:
lib/fino/ab_testing/analysis.rb

Defined Under Namespace

Classes: VariantData

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(variants_data) ⇒ Analysis

Returns a new instance of Analysis.



38
39
40
# File 'lib/fino/ab_testing/analysis.rb', line 38

def initialize(variants_data)
  @variants_data = variants_data
end

Instance Attribute Details

#variants_dataObject (readonly)

Returns the value of attribute variants_data.



36
37
38
# File 'lib/fino/ab_testing/analysis.rb', line 36

def variants_data
  @variants_data
end

Class Method Details

.from_raw_conversions(setting_instance, raw_conversions) ⇒ Object

rubocop:disable Metrics/MethodLength



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fino/ab_testing/analysis.rb', line 15

def from_raw_conversions(setting_instance, raw_conversions) # rubocop:disable Metrics/MethodLength
  experiment = setting_instance.experiment

  variants_data = experiment.variants.map do |variant|
    entries = raw_conversions.fetch(variant, [])

    daily_conversions = entries
                        .group_by { |_scope, score| Time.at(score / 1000.0).to_date.to_s }
                        .transform_values(&:size)

    Fino::AbTesting::Analysis::VariantData.new(
      variant: variant,
      conversions_count: entries.size,
      daily_conversions: daily_conversions
    )
  end

  Fino::AbTesting::Analysis.new(variants_data)
end

Instance Method Details

#any_conversions?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/fino/ab_testing/analysis.rb', line 42

def any_conversions?
  variants_data.any? { |vd| vd.conversions_count > 0 }
end

#total_conversionsObject



46
47
48
# File 'lib/fino/ab_testing/analysis.rb', line 46

def total_conversions
  variants_data.sum(&:conversions_count)
end