Sha256: d4179a63df4e75880d5f9e132588660fe5c5157859ac65947d2aef842caf404b

Contents?: true

Size: 708 Bytes

Versions: 4

Compression:

Stored size: 708 Bytes

Contents

module Metry
  class Experiment
    METHODS = {
      "rand" => proc{|list, visitor| list.sort_by{rand}.first},
      "mod_visitor" => proc{|list, visitor| list[(visitor.to_i-1)%list.size]},
    }

    def initialize(name, event)
      @key = "experiment.#{name}"
      @event = event
      @visitor = event["visitor"]
      @storage = Metry.current
    end
    
    def choose(options, method=nil)
      visitor_hash = @storage.visitor(@visitor)
      unless choice = visitor_hash[@key]
        choice = METHODS[method || "rand"][options.keys, @visitor]
        @storage.save_visitor(@visitor, visitor_hash.merge(@key => choice))
      end
      @event[@key] = choice
      options[choice]
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
metry-1.0.0 lib/metry/experiment.rb
metry-1.0.1 lib/metry/experiment.rb
metry-1.1.0 lib/metry/experiment.rb
metry-1.2.0 lib/metry/experiment.rb