forked from splitrb/split
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsplit.rb
More file actions
executable file
·77 lines (71 loc) · 2.25 KB
/
split.rb
File metadata and controls
executable file
·77 lines (71 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# frozen_string_literal: true
require 'redis'
require 'split/algorithms/systematic_sampling'
require 'split/algorithms/block_randomization'
require 'split/algorithms/weighted_sample'
require 'split/algorithms/whiplash'
require 'split/alternative'
require 'split/configuration'
require 'split/encapsulated_helper'
require 'split/exceptions'
require 'split/experiment'
require 'split/experiment_catalog'
require 'split/extensions/string'
require 'split/goals_collection'
require 'split/helper'
require 'split/combined_experiments_helper'
require 'split/metric'
require 'split/persistence'
require 'split/redis_interface'
require 'split/trial'
require 'split/user'
require 'split/version'
require 'split/zscore'
require 'split/engine' if defined?(Rails)
module Split
extend self
attr_accessor :configuration
# Accepts:
# 1. A redis URL (valid for `Redis.new(url: url)`)
# 2. an options hash compatible with `Redis.new`
# 3. or a valid Redis instance (one that responds to `#smembers`). Likely,
# this will be an instance of either `Redis`, `Redis::Client`,
# `Redis::DistRedis`, or `Redis::Namespace`.
def redis=(server)
@redis = if server.is_a?(String)
Redis.new(:url => server, :thread_safe => true)
elsif server.is_a?(Hash)
Redis.new(server.merge(:thread_safe => true))
elsif server.respond_to?(:smembers)
server
else
raise ArgumentError,
"You must supply a url, options hash or valid Redis connection instance"
end
end
# Returns the current Redis connection. If none has been created, will
# create a new one.
def redis
return @redis if @redis
self.redis = self.configuration.redis
self.redis
end
# Call this method to modify defaults in your initializers.
#
# @example
# Split.configure do |config|
# config.ignore_ip_addresses = '192.168.2.1'
# end
def configure
self.configuration ||= Configuration.new
yield(configuration)
end
end
# Check to see if being run in a Rails application. If so, wait until before_initialize to run configuration so Gems that create ENV variables have the chance to initialize first.
if defined?(::Rails)
class Railtie < Rails::Railtie
config.before_initialize { Split.configure {} }
end
else
Split.configure {}
end