Module: Trebuchet::Strategy::Experimentable
- Included in:
- Experiment, VisitorExperiment
- Defined in:
- lib/trebuchet/strategy.rb
Instance Attribute Summary collapse
-
#bucket ⇒ Object
readonly
Returns the value of attribute bucket.
-
#experiment_name ⇒ Object
readonly
Returns the value of attribute experiment_name.
-
#total_buckets ⇒ Object
readonly
Returns the value of attribute total_buckets.
Instance Method Summary collapse
- #as_json(options = {}) ⇒ Object
- #export ⇒ Object
- #initialize_experiment(options) ⇒ Object
- #inspect ⇒ Object
- #to_s ⇒ Object
- #type ⇒ Object
- #valid? ⇒ Boolean
- #value_in_bucket?(value) ⇒ Boolean
Instance Attribute Details
#bucket ⇒ Object (readonly)
Returns the value of attribute bucket.
236 237 238 |
# File 'lib/trebuchet/strategy.rb', line 236 def bucket @bucket end |
#experiment_name ⇒ Object (readonly)
Returns the value of attribute experiment_name.
236 237 238 |
# File 'lib/trebuchet/strategy.rb', line 236 def experiment_name @experiment_name end |
#total_buckets ⇒ Object (readonly)
Returns the value of attribute total_buckets.
236 237 238 |
# File 'lib/trebuchet/strategy.rb', line 236 def total_buckets @total_buckets end |
Instance Method Details
#as_json(options = {}) ⇒ Object
263 264 265 266 267 268 269 270 |
# File 'lib/trebuchet/strategy.rb', line 263 def as_json( = {}) { :name => experiment_name, :bucket => bucket, :total_buckets => total_buckets, :type => self.type } end |
#export ⇒ Object
277 278 279 |
# File 'lib/trebuchet/strategy.rb', line 277 def export super :name => experiment_name, :bucket => bucket, :total_buckets => total_buckets end |
#initialize_experiment(options) ⇒ Object
238 239 240 241 242 243 |
# File 'lib/trebuchet/strategy.rb', line 238 def initialize_experiment() .keys.each {|k| [k.to_sym] = .delete(k)} # cheap symbolize_keys @experiment_name = [:name] @bucket = [ [:bucket] ].flatten # always treat as an array @total_buckets = [:total_buckets] || 5 end |
#inspect ⇒ Object
281 282 283 |
# File 'lib/trebuchet/strategy.rb', line 281 def inspect "#<#{self.class.name} #{self}>" end |
#to_s ⇒ Object
272 273 274 275 |
# File 'lib/trebuchet/strategy.rb', line 272 def to_s str = "buckets (#{bucket.join(', ')}) of total: #{total_buckets}" str << " for #{self.type} experiment: #{experiment_name}" end |
#type ⇒ Object
259 260 261 |
# File 'lib/trebuchet/strategy.rb', line 259 def type "#{name == :experiment ? "user" : "visitor"} experiment" end |
#valid? ⇒ Boolean
253 254 255 256 257 |
# File 'lib/trebuchet/strategy.rb', line 253 def valid? experiment_name && total_buckets > 0 && bucket.max <= total_buckets && (1..total_buckets).include?(bucket.min) rescue false end |
#value_in_bucket?(value) ⇒ Boolean
245 246 247 248 249 250 251 |
# File 'lib/trebuchet/strategy.rb', line 245 def value_in_bucket?(value) return false if value == nil || !value.is_a?(Numeric) return false unless self.valid? # must hash feature name and value together to ensure uniform distribution b = Trebuchet::SHA1.hexdigest("experiment: #{@experiment_name.downcase} user: #{value}").to_i(16) % total_buckets !!@bucket.include?(b + 1) # is user in this bucket? end |