class Split::Metric
Attributes
experiments[RW]
name[RW]
Public Class Methods
all()
click to toggle source
# File lib/split/metric.rb, line 55 def self.all redis_metrics = Split.redis.hgetall(:metrics).collect do |key, value| find(key) end configuration_metrics = Split.configuration.metrics.collect do |key, value| new(name: key, experiments: value) end redis_metrics | configuration_metrics end
find(name)
click to toggle source
# File lib/split/metric.rb, line 39 def self.find(name) name = name.intern if name.is_a?(String) metric = load_from_configuration(name) metric = load_from_redis(name) if metric.nil? metric end
find_or_create(attrs)
click to toggle source
# File lib/split/metric.rb, line 46 def self.find_or_create(attrs) metric = find(attrs[:name]) unless metric metric = new(attrs) metric.save end metric end
load_from_configuration(name)
click to toggle source
# File lib/split/metric.rb, line 30 def self.load_from_configuration(name) metrics = Split.configuration.metrics if metrics && metrics[name] Split::Metric.new(:experiments => metrics[name], :name => name) else nil end end
load_from_redis(name)
click to toggle source
# File lib/split/metric.rb, line 15 def self.load_from_redis(name) metric = Split.redis.hget(:metrics, name) if metric experiment_names = metric.split(',') experiments = experiment_names.collect do |experiment_name| Split::ExperimentCatalog.find(experiment_name) end Split::Metric.new(:name => name, :experiments => experiments) else nil end end
new(attrs = {})
click to toggle source
# File lib/split/metric.rb, line 7 def initialize(attrs = {}) attrs.each do |key,value| if self.respond_to?("#{key}=") self.send("#{key}=", value) end end end
possible_experiments(metric_name)
click to toggle source
# File lib/split/metric.rb, line 65 def self.possible_experiments(metric_name) experiments = [] metric = Split::Metric.find(metric_name) if metric experiments << metric.experiments end experiment = Split::ExperimentCatalog.find(metric_name) if experiment experiments << experiment end experiments.flatten end
Private Class Methods
normalize_metric(label)
click to toggle source
# File lib/split/metric.rb, line 88 def self.normalize_metric(label) if Hash === label metric_name = label.keys.first goals = label.values.first else metric_name = label goals = [] end return metric_name, goals end
Public Instance Methods
complete!()
click to toggle source
# File lib/split/metric.rb, line 82 def complete! experiments.each do |experiment| experiment.complete! end end
save()
click to toggle source
# File lib/split/metric.rb, line 78 def save Split.redis.hset(:metrics, name, experiments.map(&:name).join(',')) end